From 2eaf79a53d1e878e926ed3e4e46ff91ab7ef40d2 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 28 Dec 2008 20:49:37 +0000 Subject: [PATCH] 2.5 / Nodes * shift-select operator, inheriting from normal select operator. --- source/blender/editors/space_node/node_edit.c | 6 +-- .../blender/editors/space_node/node_intern.h | 2 + source/blender/editors/space_node/node_ops.c | 2 + .../blender/editors/space_node/node_select.c | 51 ++++++++++++++----- 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index c5eb89f8270..f817a8efdbf 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1365,6 +1365,7 @@ bNode *editnode_get_active(bNodeTree *ntree) return nodeGetActive(ntree); } +#endif /* 0 */ /* no undo here! */ void node_deselectall(SpaceNode *snode, int swap) @@ -1378,7 +1379,6 @@ void node_deselectall(SpaceNode *snode, int swap) if(node==NULL) { for(node= snode->edittree->nodes.first; node; node= node->next) node->flag |= SELECT; - // allqueue(REDRAWNODE, 0); return; } /* else pass on to deselect */ @@ -1386,10 +1386,10 @@ void node_deselectall(SpaceNode *snode, int swap) for(node= snode->edittree->nodes.first; node; node= node->next) node->flag &= ~SELECT; - - // allqueue(REDRAWNODE, 0); } +#if 0 + int node_has_hidden_sockets(bNode *node) { bNodeSocket *sock; diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index d5737f8699f..05453c6d97b 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -52,6 +52,7 @@ void node_keymap(wmWindowManager *wm); /* node_select.c */ void NODE_OT_select(struct wmOperatorType *ot); +void NODE_OT_extend_select(struct wmOperatorType *ot); /* drawnode.c */ void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link); @@ -63,6 +64,7 @@ void snode_set_context(SpaceNode *snode, Scene *scene); void scale_node(SpaceNode *snode, bNode *node); void snode_make_group_editable(SpaceNode *snode, bNode *gnode); void node_set_active(SpaceNode *snode, bNode *node); +void node_deselectall(SpaceNode *snode, int swap); #endif /* ED_NODE_INTERN_H */ diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index 72bad52d702..557c1bcc4fe 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -47,6 +47,7 @@ void node_operatortypes(void) { WM_operatortype_append(NODE_OT_select); + WM_operatortype_append(NODE_OT_extend_select); } void node_keymap(struct wmWindowManager *wm) @@ -54,4 +55,5 @@ void node_keymap(struct wmWindowManager *wm) ListBase *keymap= WM_keymap_listbase(wm, "Node", SPACE_NODE, 0); RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, 0, 0)->ptr, "select_type", NODE_SELECT_MOUSE); + RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_extend_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE); } diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 7ab0f1d0875..e4951e79562 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -183,7 +183,7 @@ static int do_header_hidden_node(SpaceNode *snode, bNode *node, float mx, float return 0; } -static void node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval) +static void node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval, short modifier) { bNode *node; float mx, my; @@ -210,28 +210,23 @@ static void node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval) break; } if(node) { - // XXX if((G.qual & LR_SHIFTKEY)==0) - // node_deselectall(snode, 0); + if((modifier & KM_SHIFT)==0) + node_deselectall(snode, 0); - // XXX - /* - if(G.qual & LR_SHIFTKEY) { + if(modifier & KM_SHIFT) { if(node->flag & SELECT) node->flag &= ~SELECT; else node->flag |= SELECT; } - else */ + else node->flag |= SELECT; node_set_active(snode, node); /* viewer linking */ - //if(G.qual & LR_CTRLKEY) - // node_link_viewer(snode, node); - - /* not so nice (no event), but function below delays redraw otherwise */ - //force_draw(0); + if(modifier & KM_CTRL) + ;// node_link_viewer(snode, node); //std_rmouse_transform(node_transform_ext); /* does undo push for select */ ED_region_tag_redraw(ar); @@ -244,6 +239,7 @@ static int node_select_exec(bContext *C, wmOperator *op) ARegion *ar= CTX_wm_region(C); int select_type; short mval[2]; + short modifier; select_type = RNA_enum_get(op->ptr, "select_type"); @@ -251,7 +247,8 @@ static int node_select_exec(bContext *C, wmOperator *op) case NODE_SELECT_MOUSE: mval[0] = RNA_int_get(op->ptr, "mx"); mval[1] = RNA_int_get(op->ptr, "my"); - node_mouse_select(snode, ar, mval); + modifier = RNA_int_get(op->ptr, "modifier"); + node_mouse_select(snode, ar, mval, modifier); break; } return OPERATOR_FINISHED; @@ -271,12 +268,39 @@ static int node_select_invoke(bContext *C, wmOperator *op, wmEvent *event) return node_select_exec(C,op); } +static int node_extend_select_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + RNA_int_set(op->ptr, "modifier", KM_SHIFT); + + return node_select_invoke(C, op, event); +} + /* operators */ static EnumPropertyItem prop_select_items[] = { {NODE_SELECT_MOUSE, "NORMAL", "Normal Select", "Select using the mouse"}, {0, NULL, NULL, NULL}}; +void NODE_OT_extend_select(wmOperatorType *ot) +{ + PropertyRNA *prop; + + /* identifiers */ + ot->name= "Activate/Select (Shift)"; + ot->idname= "NODE_OT_extend_select"; + + /* api callbacks */ + ot->invoke= node_extend_select_invoke; + ot->poll= ED_operator_node_active; + + prop = RNA_def_property(ot->srna, "select_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, prop_select_items); + + prop = RNA_def_property(ot->srna, "mx", PROP_INT, PROP_NONE); + prop = RNA_def_property(ot->srna, "my", PROP_INT, PROP_NONE); + prop = RNA_def_property(ot->srna, "modifier", PROP_INT, PROP_NONE); +} + void NODE_OT_select(wmOperatorType *ot) { PropertyRNA *prop; @@ -294,4 +318,5 @@ void NODE_OT_select(wmOperatorType *ot) prop = RNA_def_property(ot->srna, "mx", PROP_INT, PROP_NONE); prop = RNA_def_property(ot->srna, "my", PROP_INT, PROP_NONE); + prop = RNA_def_property(ot->srna, "modifier", PROP_INT, PROP_NONE); }