Nodes: move select all into a utility function

This commit is contained in:
2019-03-05 18:30:06 +11:00
parent 08e1218d5d
commit e83854e759
3 changed files with 28 additions and 26 deletions

View File

@@ -91,6 +91,7 @@ void ED_node_shader_default(const struct bContext *C, struct ID *id);
void ED_node_composit_default(const struct bContext *C, struct Scene *scene);
void ED_node_texture_default(const struct bContext *C, struct Tex *tex);
bool ED_node_select_check(ListBase *lb);
void ED_node_select_all(ListBase *lb, int action);
void ED_node_post_apply_transform(struct bContext *C, struct bNodeTree *ntree);
void ED_node_set_active(struct Main *bmain, struct bNodeTree *ntree, struct bNode *node);

View File

@@ -48,6 +48,7 @@
#include "ED_node.h" /* own include */
#include "ED_select_utils.h"
#include "ED_screen.h"
#include "ED_render.h"
@@ -1216,12 +1217,8 @@ void NODE_OT_duplicate(wmOperatorType *ot)
}
bool ED_node_select_check(ListBase *lb)
{
bNode *node;
for (node = lb->first; node; node = node->next) {
for (bNode *node = lb->first; node; node = node->next) {
if (node->flag & NODE_SELECT) {
return true;
}
@@ -1230,6 +1227,30 @@ bool ED_node_select_check(ListBase *lb)
return false;
}
void ED_node_select_all(ListBase *lb, int action)
{
if (action == SEL_TOGGLE) {
if (ED_node_select_check(lb))
action = SEL_DESELECT;
else
action = SEL_SELECT;
}
for (bNode *node = lb->first; node; node = node->next) {
switch (action) {
case SEL_SELECT:
nodeSetSelected(node, true);
break;
case SEL_DESELECT:
nodeSetSelected(node, false);
break;
case SEL_INVERT:
nodeSetSelected(node, !(node->flag & SELECT));
break;
}
}
}
/* ******************************** */
// XXX some code needing updating to operators...

View File

@@ -763,29 +763,9 @@ static int node_select_all_exec(bContext *C, wmOperator *op)
{
SpaceNode *snode = CTX_wm_space_node(C);
ListBase *node_lb = &snode->edittree->nodes;
bNode *node;
int action = RNA_enum_get(op->ptr, "action");
if (action == SEL_TOGGLE) {
if (ED_node_select_check(node_lb))
action = SEL_DESELECT;
else
action = SEL_SELECT;
}
for (node = node_lb->first; node; node = node->next) {
switch (action) {
case SEL_SELECT:
nodeSetSelected(node, true);
break;
case SEL_DESELECT:
nodeSetSelected(node, false);
break;
case SEL_INVERT:
nodeSetSelected(node, !(node->flag & SELECT));
break;
}
}
ED_node_select_all(node_lb, action);
ED_node_sort(snode->edittree);