diff options
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r-- | source/blender/editors/space_node/node_intern.h | 3 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_ops.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_select.c | 91 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_view.c | 2 |
4 files changed, 104 insertions, 4 deletions
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index 48051014c58..6354c467bb1 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -123,8 +123,11 @@ void NODE_OT_select_lasso(struct wmOperatorType *ot); 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); diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index 1e4e02b6ae1..0c8cd63f1bf 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -60,7 +60,8 @@ void node_operatortypes(void) 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 @@ void node_keymap(struct wmKeyConfig *keyconf) 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"); diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index faebeabdbba..894c4898029 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -816,3 +816,94 @@ void NODE_OT_select_same_type_prev(wmOperatorType *ot) /* 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", ""); + +} + diff --git a/source/blender/editors/space_node/node_view.c b/source/blender/editors/space_node/node_view.c index 293913dff11..eed8a10a1db 100644 --- a/source/blender/editors/space_node/node_view.c +++ b/source/blender/editors/space_node/node_view.c @@ -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; |