diff options
author | Julian Eisel <julian@blender.org> | 2021-04-12 19:43:23 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2021-04-12 19:48:22 +0300 |
commit | 2bd9f9d976560c55a15ed297032f7d73c2f101cc (patch) | |
tree | d109e1131272c799f16825ce1818aac1e79fe1fc /source/blender/editors/space_node/node_templates.c | |
parent | cbd193261969c9b4e1f14297d5888bad2946600e (diff) |
UI/Nodes: Improve feedback when adding node fails (e.g. on drag & drop)
This is especially useful when trying to add a node group instance, e.g. via
drag & drop from the Outliner or Asset Browser.
Previously this would just silently fail, with no information why. This is a
source of confusion, e.g. earlier, it took me a moment to realize I was
dragging a node group into itself, which failed of course.
Blender should always try to help the user with useful error messages.
Adds error messages like: "Nesting a node group inside of itself is not
allowed", "Not a compositor node tree", etc.
Adds a disabled hint return argument to node and node tree polling functions.
On error the hint is reported, or could even be shown in advance (e.g. if
checked via an operator poll option).
Differential Revision: https://developer.blender.org/D10422
Reviewed by: Jacques Lucke
Diffstat (limited to 'source/blender/editors/space_node/node_templates.c')
-rw-r--r-- | source/blender/editors/space_node/node_templates.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c index 3873985d93a..54145f62895 100644 --- a/source/blender/editors/space_node/node_templates.c +++ b/source/blender/editors/space_node/node_templates.c @@ -330,7 +330,9 @@ static void ui_node_link_items(NodeLinkArg *arg, int i; for (ngroup = arg->bmain->nodetrees.first; ngroup; ngroup = ngroup->id.next) { - if ((ngroup->type != arg->ntree->type) || !nodeGroupPoll(arg->ntree, ngroup)) { + const char *disabled_hint; + if ((ngroup->type != arg->ntree->type) || + !nodeGroupPoll(arg->ntree, ngroup, &disabled_hint)) { continue; } @@ -343,7 +345,9 @@ static void ui_node_link_items(NodeLinkArg *arg, i = 0; for (ngroup = arg->bmain->nodetrees.first; ngroup; ngroup = ngroup->id.next) { - if ((ngroup->type != arg->ntree->type) || !nodeGroupPoll(arg->ntree, ngroup)) { + const char *disabled_hint; + if ((ngroup->type != arg->ntree->type) || + !nodeGroupPoll(arg->ntree, ngroup, &disabled_hint)) { continue; } @@ -481,7 +485,8 @@ static void ui_node_menu_column(NodeLinkArg *arg, int nclass, const char *cname) BLI_array_declare(sorted_ntypes); NODE_TYPES_BEGIN (ntype) { - if (!(ntype->poll && ntype->poll(ntype, ntree))) { + const char *disabled_hint; + if (!(ntype->poll && ntype->poll(ntype, ntree, &disabled_hint))) { continue; } |