[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55628] trunk/blender/source/blender/ editors/space_node: Fix for Node Editor tool "Find next/prev of same type".

Ton Roosendaal ton at blender.org
Wed Mar 27 18:22:13 CET 2013


Revision: 55628
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55628
Author:   ton
Date:     2013-03-27 17:22:12 +0000 (Wed, 27 Mar 2013)
Log Message:
-----------
Fix for Node Editor tool "Find next/prev of same type".

This is the first half of the commit, it's going to be reviewed further.
It also depends on other work in node drawing (to not reshuffle order on
every select/activate).

At least it works quite nice for the shortcuts shift [ and shift ]

Modified Paths:
--------------
    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
    trunk/blender/source/blender/editors/space_node/node_view.c

Modified: trunk/blender/source/blender/editors/space_node/node_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_intern.h	2013-03-27 16:33:49 UTC (rev 55627)
+++ trunk/blender/source/blender/editors/space_node/node_intern.h	2013-03-27 17:22:12 UTC (rev 55628)
@@ -123,8 +123,11 @@
 void NODE_OT_select_same_type(struct wmOperatorType *ot);
 void NODE_OT_select_same_type_next(struct wmOperatorType *ot);
 void NODE_OT_select_same_type_prev(struct wmOperatorType *ot);
+void NODE_OT_activate_connected(struct wmOperatorType *ot);
 
 /* node_view.c */
+int space_node_view_flag(struct bContext *C, SpaceNode *snode, ARegion *ar, const int node_flag);
+
 void NODE_OT_view_all(struct wmOperatorType *ot);
 void NODE_OT_view_selected(struct wmOperatorType *ot);
 

Modified: trunk/blender/source/blender/editors/space_node/node_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_ops.c	2013-03-27 16:33:49 UTC (rev 55627)
+++ trunk/blender/source/blender/editors/space_node/node_ops.c	2013-03-27 17:22:12 UTC (rev 55628)
@@ -60,7 +60,8 @@
 	WM_operatortype_append(NODE_OT_select_same_type);
 	WM_operatortype_append(NODE_OT_select_same_type_next);
 	WM_operatortype_append(NODE_OT_select_same_type_prev);
-
+	WM_operatortype_append(NODE_OT_activate_connected);
+	
 	WM_operatortype_append(NODE_OT_view_all);
 	WM_operatortype_append(NODE_OT_view_selected);
 
@@ -318,9 +319,14 @@
 	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);
 	WM_keymap_add_item(keymap, "NODE_OT_select_same_type", GKEY, KM_PRESS, KM_SHIFT, 0);
-	WM_keymap_add_item(keymap, "NODE_OT_select_same_type_next", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
-	WM_keymap_add_item(keymap, "NODE_OT_select_same_type_prev", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+//	WM_keymap_add_item(keymap, "NODE_OT_select_same_type_next", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+//	WM_keymap_add_item(keymap, "NODE_OT_select_same_type_prev", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
 
+	kmi = WM_keymap_add_item(keymap, "NODE_OT_activate_connected", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+	RNA_boolean_set(kmi->ptr, "prev", FALSE);
+	kmi = WM_keymap_add_item(keymap, "NODE_OT_activate_connected", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+	RNA_boolean_set(kmi->ptr, "prev", TRUE);
+	
 	node_group_operators(keymap, "ShaderNodeGroup");
 	node_group_operators(keymap, "CompositorNodeGroup");
 	node_group_operators(keymap, "TextureNodeGroup");

Modified: trunk/blender/source/blender/editors/space_node/node_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_select.c	2013-03-27 16:33:49 UTC (rev 55627)
+++ trunk/blender/source/blender/editors/space_node/node_select.c	2013-03-27 17:22:12 UTC (rev 55628)
@@ -816,3 +816,94 @@
 	/* flags */
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
+
+/* ************************** */
+
+
+static int node_activate_connected_exec(bContext *C, wmOperator *op)
+{
+	SpaceNode *snode = CTX_wm_space_node(C);
+	ARegion *ar = CTX_wm_region(C);
+	bNode **node_array;
+	bNode *active = nodeGetActive(snode->edittree);
+	int totnodes;
+	int revert = RNA_boolean_get(op->ptr, "prev");
+	int same_type = 1;
+	
+	ntreeGetDependencyList(snode->edittree, &node_array, &totnodes);
+	
+	if (totnodes > 1) {
+		int a;
+		
+		for (a = 0; a < totnodes; a++) {
+			if (node_array[a] == active)
+				break;
+		}
+		
+		if (same_type) {
+			bNode *node = NULL;
+			
+			while (node == NULL) {
+				if (revert) a--;
+				else a++;
+				
+				if (a < 0 || a >= totnodes)
+					break;
+				
+				node = node_array[a];
+				
+				if (node->type == active->type)
+					break;
+				else node = NULL;
+			}
+			if (node)
+				active = node;
+		}
+		else {
+			if (revert) {
+				if (a == 0)
+					active = node_array[totnodes - 1];
+				else
+					active = node_array[a - 1];
+			}
+			else {
+				if (a == totnodes - 1)
+					active = node_array[0];
+				else
+					active = node_array[a + 1];
+			}
+		}
+		
+		node_select_single(C, active);
+
+		/* is note outside view? */
+		if (active->totr.xmax < ar->v2d.cur.xmin || active->totr.xmin > ar->v2d.cur.xmax ||
+			active->totr.ymax < ar->v2d.cur.ymin || active->totr.ymin > ar->v2d.cur.ymax)
+				space_node_view_flag(C, snode, CTX_wm_region(C), NODE_SELECT);
+
+	}
+	
+	if (node_array)
+		MEM_freeN(node_array);
+	
+	return OPERATOR_FINISHED;
+}
+
+void NODE_OT_activate_connected(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Activate/View Connected";
+	ot->description = "Activate and view connected nodes, step by step";
+	ot->idname = "NODE_OT_activate_connected";
+	
+	/* api callbacks */
+	ot->exec = node_activate_connected_exec;
+	ot->poll = ED_operator_node_active;
+	
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+	
+	RNA_def_boolean(ot->srna, "prev", 0, "Previous", "");
+
+}
+

Modified: trunk/blender/source/blender/editors/space_node/node_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_view.c	2013-03-27 16:33:49 UTC (rev 55627)
+++ trunk/blender/source/blender/editors/space_node/node_view.c	2013-03-27 17:22:12 UTC (rev 55628)
@@ -66,7 +66,7 @@
 
 /* **************** View All Operator ************** */
 
-static int space_node_view_flag(bContext *C, SpaceNode *snode, ARegion *ar, const int node_flag)
+int space_node_view_flag(bContext *C, SpaceNode *snode, ARegion *ar, const int node_flag)
 {
 	bNode *node;
 	rctf cur_new;




More information about the Bf-blender-cvs mailing list