Revision: 23207 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23207 Author: blendix Date: 2009-09-14 10:47:13 +0200 (Mon, 14 Sep 2009)
Log Message: ----------- Three node selection operators added, patch by Micha?\197?\130 Ziu?\197?\130ek, thanks! * Select all * Select linked to * Select linked from Modified Paths: -------------- trunk/blender/release/ui/space_node.py trunk/blender/source/blender/editors/space_node/node_edit.c trunk/blender/source/blender/editors/space_node/node_intern.h trunk/blender/source/blender/editors/space_node/node_ops.c trunk/blender/source/blender/editors/space_node/node_select.c Modified: trunk/blender/release/ui/space_node.py =================================================================== --- trunk/blender/release/ui/space_node.py 2009-09-14 08:38:04 UTC (rev 23206) +++ trunk/blender/release/ui/space_node.py 2009-09-14 08:47:13 UTC (rev 23207) @@ -74,11 +74,10 @@ layout.itemO("node.select_border") - # XXX - # layout.itemS() - # layout.itemO("node.select_all") - # layout.itemO("node.select_linked_from") - # layout.itemO("node.select_linked_to") + layout.itemS() + layout.itemO("node.select_all") + layout.itemO("node.select_linked_from") + layout.itemO("node.select_linked_to") class NODE_MT_node(bpy.types.Menu): __space_type__ = 'NODE_EDITOR' Modified: trunk/blender/source/blender/editors/space_node/node_edit.c =================================================================== --- trunk/blender/source/blender/editors/space_node/node_edit.c 2009-09-14 08:38:04 UTC (rev 23206) +++ trunk/blender/source/blender/editors/space_node/node_edit.c 2009-09-14 08:47:13 UTC (rev 23207) @@ -1229,27 +1229,14 @@ /* no undo here! */ -void node_deselectall(SpaceNode *snode, int swap) +void node_deselectall(SpaceNode *snode) { bNode *node; - if(swap) { - for(node= snode->edittree->nodes.first; node; node= node->next) - if(node->flag & SELECT) - break; - if(node==NULL) { - for(node= snode->edittree->nodes.first; node; node= node->next) - node->flag |= SELECT; - return; - } - /* else pass on to deselect */ - } - for(node= snode->edittree->nodes.first; node; node= node->next) node->flag &= ~SELECT; } - int node_has_hidden_sockets(bNode *node) { bNodeSocket *sock; @@ -1606,7 +1593,7 @@ { bNode *node= NULL, *gnode; - node_deselectall(snode, 0); + node_deselectall(snode); if(type>=NODE_DYNAMIC_MENU) { node= nodeAddNodeType(snode->edittree, type, NULL, NULL); @@ -2091,32 +2078,6 @@ } } -void node_select_linked(SpaceNode *snode, int out) -{ - bNodeLink *link; - bNode *node; - - /* NODE_TEST is the free flag */ - for(node= snode->edittree->nodes.first; node; node= node->next) - node->flag &= ~NODE_TEST; - - for(link= snode->edittree->links.first; link; link= link->next) { - if(out) { - if(link->fromnode->flag & NODE_SELECT) - link->tonode->flag |= NODE_TEST; - } - else { - if(link->tonode->flag & NODE_SELECT) - link->fromnode->flag |= NODE_TEST; - } - } - - for(node= snode->edittree->nodes.first; node; node= node->next) - if(node->flag & NODE_TEST) - node->flag |= NODE_SELECT; - -} - /* makes a link between selected output and input sockets */ void node_make_link(SpaceNode *snode) { @@ -2451,9 +2412,6 @@ if(fromlib) fromlib= -1; else toolbox_n_add(); } - else if(G.qual==0) { - node_deselectall(snode, 1); - } break; case BKEY: if(G.qual==0) Modified: trunk/blender/source/blender/editors/space_node/node_intern.h =================================================================== --- trunk/blender/source/blender/editors/space_node/node_intern.h 2009-09-14 08:38:04 UTC (rev 23206) +++ trunk/blender/source/blender/editors/space_node/node_intern.h 2009-09-14 08:47:13 UTC (rev 23207) @@ -58,6 +58,9 @@ /* node_select.c */ void NODE_OT_select(struct wmOperatorType *ot); void NODE_OT_select_extend(struct wmOperatorType *ot); +void NODE_OT_select_all(wmOperatorType *ot); +void NODE_OT_select_linked_to(wmOperatorType *ot); +void NODE_OT_select_linked_from(wmOperatorType *ot); void NODE_OT_visibility_toggle(struct wmOperatorType *ot); void NODE_OT_view_all(struct wmOperatorType *ot); void NODE_OT_select_border(struct wmOperatorType *ot); @@ -76,7 +79,7 @@ void snode_make_group_editable(SpaceNode *snode, bNode *gnode); void snode_home(ScrArea *sa, ARegion *ar, SpaceNode *snode); void node_set_active(SpaceNode *snode, bNode *node); -void node_deselectall(SpaceNode *snode, int swap); +void node_deselectall(SpaceNode *snode); void snode_composite_job(const struct bContext *C, ScrArea *sa); bNode *snode_get_editgroup(SpaceNode *snode); void snode_autoconnect(SpaceNode *snode, bNode *node_to, int flag); Modified: trunk/blender/source/blender/editors/space_node/node_ops.c =================================================================== --- trunk/blender/source/blender/editors/space_node/node_ops.c 2009-09-14 08:38:04 UTC (rev 23206) +++ trunk/blender/source/blender/editors/space_node/node_ops.c 2009-09-14 08:47:13 UTC (rev 23207) @@ -51,6 +51,9 @@ { WM_operatortype_append(NODE_OT_select); WM_operatortype_append(NODE_OT_select_extend); + WM_operatortype_append(NODE_OT_select_all); + WM_operatortype_append(NODE_OT_select_linked_to); + WM_operatortype_append(NODE_OT_select_linked_from); WM_operatortype_append(NODE_OT_visibility_toggle); WM_operatortype_append(NODE_OT_view_all); WM_operatortype_append(NODE_OT_select_border); @@ -59,7 +62,6 @@ WM_operatortype_append(NODE_OT_resize); WM_operatortype_append(NODE_OT_links_cut); WM_operatortype_append(NODE_OT_duplicate); - } void node_keymap(struct wmWindowManager *wm) @@ -82,6 +84,10 @@ WM_keymap_add_item(keymap, "NODE_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NODE_OT_select_border", BKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NODE_OT_delete", XKEY, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "NODE_OT_select_all", AKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NODE_OT_select_linked_to", LKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "NODE_OT_select_linked_from", LKEY, KM_PRESS, 0, 0); transform_keymap_for_space(wm, keymap, SPACE_NODE); } Modified: trunk/blender/source/blender/editors/space_node/node_select.c =================================================================== --- trunk/blender/source/blender/editors/space_node/node_select.c 2009-09-14 08:38:04 UTC (rev 23206) +++ trunk/blender/source/blender/editors/space_node/node_select.c 2009-09-14 08:47:13 UTC (rev 23207) @@ -83,7 +83,7 @@ } if(node) { if((extend & KM_SHIFT)==0) - node_deselectall(snode, 0); + node_deselectall(snode); if(extend & KM_SHIFT) { if(node->flag & SELECT) @@ -291,3 +291,121 @@ RNA_def_enum(ot->srna, "type", prop_select_types, 0, "Type", ""); } + +/* ****** Select/Deselect All ****** */ + +static int node_select_all_exec(bContext *C, wmOperator *op) +{ + SpaceNode *snode = CTX_wm_space_node(C); + bNode *first = snode->edittree->nodes.first; + bNode *node; + int count= 0; + + for(node=first; node; node=node->next) + if(node->flag & NODE_SELECT) + count++; + + if(count) { + for(node=first; node; node=node->next) + node->flag &= ~NODE_SELECT; + } + else { + for(node=first; node; node=node->next) + node->flag |= NODE_SELECT; + } + + WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); + return OPERATOR_FINISHED; +} + +void NODE_OT_select_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select/Deselect All"; + ot->description = "(De)select all nodes."; + ot->idname = "NODE_OT_select_all"; + + /* api callbacks */ + ot->exec = node_select_all_exec; + ot->poll = ED_operator_node_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ****** Select Linked To ****** */ + +static int node_select_linked_to_exec(bContext *C, wmOperator *op) +{ + SpaceNode *snode = CTX_wm_space_node(C); + bNodeLink *link; + bNode *node; + + for (node=snode->edittree->nodes.first; node; node=node->next) + node->flag &= ~NODE_TEST; + + for (link=snode->edittree->links.first; link; link=link->next) + if (link->fromnode->flag & NODE_SELECT) + link->tonode->flag |= NODE_TEST; + + for (node=snode->edittree->nodes.first; node; node=node->next) + if (node->flag & NODE_TEST) + node->flag |= NODE_SELECT; + + WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); + return OPERATOR_FINISHED; +} + +void NODE_OT_select_linked_to(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select Linked To"; + ot->description = "Select nodes linked to the selected ones."; + ot->idname = "NODE_OT_select_linked_to"; + + /* api callbacks */ + ot->exec = node_select_linked_to_exec; + ot->poll = ED_operator_node_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/* ****** Select Linked From ****** */ + +static int node_select_linked_from_exec(bContext *C, wmOperator *op) +{ + SpaceNode *snode = CTX_wm_space_node(C); + bNodeLink *link; + bNode *node; + + for(node=snode->edittree->nodes.first; node; node=node->next) + node->flag &= ~NODE_TEST; + + for(link=snode->edittree->links.first; link; link=link->next) + if(link->tonode->flag & NODE_SELECT) + link->fromnode->flag |= NODE_TEST; + + for(node=snode->edittree->nodes.first; node; node=node->next) + if(node->flag & NODE_TEST) + node->flag |= NODE_SELECT; + + WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); + return OPERATOR_FINISHED; +} + +void NODE_OT_select_linked_from(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select Linked From"; + ot->description = "Select nodes linked from the selected ones."; + ot->idname = "NODE_OT_select_linked_from"; + + /* api callbacks */ + ot->exec = node_select_linked_from_exec; + ot->poll = ED_operator_node_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; +} + _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs