Revision: 41633
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41633
Author:   blendix
Date:     2011-11-07 22:14:48 +0000 (Mon, 07 Nov 2011)
Log Message:
-----------
Nodes: add foreach_nodeclass iterator over node classes, use for node add menu.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/editors/space_node/node_header.c
    trunk/blender/source/blender/nodes/composite/node_composite_tree.c
    trunk/blender/source/blender/nodes/shader/node_shader_tree.c
    trunk/blender/source/blender/nodes/texture/node_texture_tree.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h  2011-11-07 19:25:13 UTC 
(rev 41632)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h  2011-11-07 22:14:48 UTC 
(rev 41633)
@@ -245,6 +245,7 @@
 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 @@
        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);

Modified: trunk/blender/source/blender/editors/space_node/node_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_header.c       
2011-11-07 19:25:13 UTC (rev 41632)
+++ trunk/blender/source/blender/editors/space_node/node_header.c       
2011-11-07 22:14:48 UTC (rev 41633)
@@ -226,52 +226,24 @@
        }
 }
 
+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)

Modified: trunk/blender/source/blender/nodes/composite/node_composite_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/node_composite_tree.c  
2011-11-07 19:25:13 UTC (rev 41632)
+++ trunk/blender/source/blender/nodes/composite/node_composite_tree.c  
2011-11-07 22:14:48 UTC (rev 41633)
@@ -68,6 +68,20 @@
        }
 }
 
+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 @@
        /* 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,

Modified: trunk/blender/source/blender/nodes/shader/node_shader_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/shader/node_shader_tree.c        
2011-11-07 19:25:13 UTC (rev 41632)
+++ trunk/blender/source/blender/nodes/shader/node_shader_tree.c        
2011-11-07 22:14:48 UTC (rev 41633)
@@ -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 @@
                        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 @@
        /* free_cache */                NULL,
        /* free_node_cache */   NULL,
        /* foreach_nodetree */  foreach_nodetree,
+       /* foreach_nodeclass */ foreach_nodeclass,
        /* localize */                  NULL,
        /* local_sync */                local_sync,
        /* local_merge */               NULL,

Modified: trunk/blender/source/blender/nodes/texture/node_texture_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/texture/node_texture_tree.c      
2011-11-07 19:25:13 UTC (rev 41632)
+++ trunk/blender/source/blender/nodes/texture/node_texture_tree.c      
2011-11-07 22:14:48 UTC (rev 41633)
@@ -62,6 +62,19 @@
        }
 }
 
+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 @@
        /* free_cache */                        NULL,
        /* free_node_cache */           NULL,
        /* foreach_nodetree */  foreach_nodetree,
+       /* foreach_nodeclass */ foreach_nodeclass,
        /* localize */                  NULL,
        /* local_sync */                local_sync,
        /* local_merge */               NULL,

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to