[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23207] trunk/blender: Three node selection operators added, patch by Micha?\197?\130 Ziu?\197? \130ek, thanks!

Brecht Van Lommel brecht at blender.org
Mon Sep 14 10:47:14 CEST 2009


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;
+}
+





More information about the Bf-blender-cvs mailing list