diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-11-08 02:14:48 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-11-08 02:14:48 +0400 |
commit | be23090aae643f3c5a01ec47c601aa50a7174eb4 (patch) | |
tree | 5257d86933a5fdc0fc4f58c30e0785fc4394ceea /source | |
parent | 6981e68c92266ada536f33eb50af493de2ef8ce7 (diff) |
Nodes: add foreach_nodeclass iterator over node classes, use for node add menu.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_header.c | 48 | ||||
-rw-r--r-- | source/blender/nodes/composite/node_composite_tree.c | 15 | ||||
-rw-r--r-- | source/blender/nodes/shader/node_shader_tree.c | 20 | ||||
-rw-r--r-- | source/blender/nodes/texture/node_texture_tree.c | 14 |
5 files changed, 61 insertions, 38 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 6080981dc32..b94fffab714 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -245,6 +245,7 @@ typedef struct bNodeType { struct bNodeTreeExec; typedef void (*bNodeTreeCallback)(void *calldata, struct ID *owner_id, struct bNodeTree *ntree); +typedef void (*bNodeClassCallback)(void *calldata, int nclass, const char *name); typedef struct bNodeTreeType { int type; /* type identifier */ @@ -256,6 +257,7 @@ typedef struct bNodeTreeType void (*free_cache)(struct bNodeTree *ntree); void (*free_node_cache)(struct bNodeTree *ntree, struct bNode *node); void (*foreach_nodetree)(struct Main *main, void *calldata, bNodeTreeCallback func); /* iteration over all node trees */ + void (*foreach_nodeclass)(struct Scene *scene, void *calldata, bNodeClassCallback func); /* iteration over all node classes */ /* calls allowing threaded composite */ void (*localize)(struct bNodeTree *localtree, struct bNodeTree *ntree); diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c index 42b5dafa3e1..d752dd79a19 100644 --- a/source/blender/editors/space_node/node_header.c +++ b/source/blender/editors/space_node/node_header.c @@ -226,52 +226,24 @@ static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass) } } +static void node_menu_add_foreach_cb(void *calldata, int nclass, const char *name) +{ + uiLayout *layout= calldata; + uiItemMenuF(layout, IFACE_(name), 0, node_add_menu, SET_INT_IN_POINTER(nclass)); +} + static void node_menu_add(const bContext *C, Menu *menu) { Scene *scene= CTX_data_scene(C); SpaceNode *snode= CTX_wm_space_node(C); uiLayout *layout= menu->layout; + bNodeTreeType *ntreetype= ntreeGetType(snode->treetype); if(!snode->nodetree) uiLayoutSetActive(layout, 0); - - if(snode->treetype==NTREE_SHADER) { - uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT)); - uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT)); - if(scene_use_new_shading_nodes(scene)) { - uiItemMenuF(layout, IFACE_("Shader"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_SHADER)); - uiItemMenuF(layout, IFACE_("Texture"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE)); - } - uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR)); - uiItemMenuF(layout, IFACE_("Vector"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR)); - uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR)); - uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP)); - //uiItemMenuF(layout, IFACE_("Dynamic"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_DYNAMIC)); - uiItemMenuF(layout, IFACE_("Layout"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT)); - } - else if(snode->treetype==NTREE_COMPOSIT) { - uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT)); - uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT)); - uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR)); - uiItemMenuF(layout, IFACE_("Vector"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR)); - uiItemMenuF(layout, IFACE_("Filter"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_FILTER)); - uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR)); - uiItemMenuF(layout, IFACE_("Matte"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_MATTE)); - uiItemMenuF(layout, IFACE_("Distort"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT)); - uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP)); - uiItemMenuF(layout, IFACE_("Layout"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT)); - } - else if(snode->treetype==NTREE_TEXTURE) { - uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT)); - uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT)); - uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR)); - uiItemMenuF(layout, IFACE_("Patterns"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_PATTERN)); - uiItemMenuF(layout, IFACE_("Textures"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE)); - uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR)); - uiItemMenuF(layout, IFACE_("Distort"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT)); - uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP)); - uiItemMenuF(layout, IFACE_("Layout"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT)); - } + + if(ntreetype && ntreetype->foreach_nodeclass) + ntreetype->foreach_nodeclass(scene, layout, node_menu_add_foreach_cb); } void node_menus_register(void) diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index d3f4a5b2999..06f88002a70 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -68,6 +68,20 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func) } } +static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func) +{ + func(calldata, NODE_CLASS_INPUT, "Input"); + func(calldata, NODE_CLASS_OUTPUT, "Output"); + func(calldata, NODE_CLASS_OP_COLOR, "Color"); + func(calldata, NODE_CLASS_OP_VECTOR, "Vector"); + func(calldata, NODE_CLASS_OP_FILTER, "Filter"); + func(calldata, NODE_CLASS_CONVERTOR, "Convertor"); + func(calldata, NODE_CLASS_MATTE, "Matte"); + func(calldata, NODE_CLASS_DISTORT, "Distort"); + func(calldata, NODE_CLASS_GROUP, "Group"); + func(calldata, NODE_CLASS_LAYOUT, "Layout"); +} + static void free_node_cache(bNodeTree *UNUSED(ntree), bNode *node) { bNodeSocket *sock; @@ -207,6 +221,7 @@ bNodeTreeType ntreeType_Composite = { /* free_cache */ free_cache, /* free_node_cache */ free_node_cache, /* foreach_nodetree */ foreach_nodetree, + /* foreach_nodeclass */ foreach_nodeclass, /* localize */ localize, /* local_sync */ local_sync, /* local_merge */ local_merge, diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c index d0ae17914ca..aa8ba12f799 100644 --- a/source/blender/nodes/shader/node_shader_tree.c +++ b/source/blender/nodes/shader/node_shader_tree.c @@ -35,6 +35,7 @@ #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_node_types.h" +#include "DNA_scene_types.h" #include "DNA_world_types.h" #include "BLI_listbase.h" @@ -45,6 +46,7 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_node.h" +#include "BKE_scene.h" #include "BKE_utildefines.h" #include "GPU_material.h" @@ -74,6 +76,23 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func) func(calldata, &wo->id, wo->nodetree); } +static void foreach_nodeclass(Scene *scene, void *calldata, bNodeClassCallback func) +{ + func(calldata, NODE_CLASS_INPUT, "Input"); + func(calldata, NODE_CLASS_OUTPUT, "Output"); + + if(scene_use_new_shading_nodes(scene)) { + func(calldata, NODE_CLASS_SHADER, "Shader"); + func(calldata, NODE_CLASS_TEXTURE, "Texture"); + } + + func(calldata, NODE_CLASS_OP_COLOR, "Color"); + func(calldata, NODE_CLASS_OP_VECTOR, "Vector"); + func(calldata, NODE_CLASS_CONVERTOR, "Convertor"); + func(calldata, NODE_CLASS_GROUP, "Group"); + func(calldata, NODE_CLASS_LAYOUT, "Layout"); +} + static void local_sync(bNodeTree *localtree, bNodeTree *ntree) { bNode *lnode; @@ -108,6 +127,7 @@ bNodeTreeType ntreeType_Shader = { /* free_cache */ NULL, /* free_node_cache */ NULL, /* foreach_nodetree */ foreach_nodetree, + /* foreach_nodeclass */ foreach_nodeclass, /* localize */ NULL, /* local_sync */ local_sync, /* local_merge */ NULL, diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index 5e5d44540dc..84bb53e2215 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -62,6 +62,19 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func) } } +static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func) +{ + func(calldata, NODE_CLASS_INPUT, "Input"); + func(calldata, NODE_CLASS_OUTPUT, "Output"); + func(calldata, NODE_CLASS_OP_COLOR, "Color"); + func(calldata, NODE_CLASS_PATTERN, "Patterns"); + func(calldata, NODE_CLASS_TEXTURE, "Textures"); + func(calldata, NODE_CLASS_CONVERTOR, "Convertor"); + func(calldata, NODE_CLASS_DISTORT, "Distort"); + func(calldata, NODE_CLASS_GROUP, "Group"); + func(calldata, NODE_CLASS_LAYOUT, "Layout"); +} + static void local_sync(bNodeTree *localtree, bNodeTree *ntree) { bNode *lnode; @@ -91,6 +104,7 @@ bNodeTreeType ntreeType_Texture = { /* free_cache */ NULL, /* free_node_cache */ NULL, /* foreach_nodetree */ foreach_nodetree, + /* foreach_nodeclass */ foreach_nodeclass, /* localize */ NULL, /* local_sync */ local_sync, /* local_merge */ NULL, |