Revision: 32699
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32699
Author:   lukastoenne
Date:     2010-10-25 12:53:33 +0200 (Mon, 25 Oct 2010)

Log Message:
-----------
Added operators for adding and removing property sockets to/from data nodes.

Modified Paths:
--------------
    branches/particles-2010/source/blender/editors/space_node/node_edit.c
    branches/particles-2010/source/blender/editors/space_node/node_intern.h
    branches/particles-2010/source/blender/editors/space_node/node_ops.c

Modified: branches/particles-2010/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_edit.c       
2010-10-25 08:03:05 UTC (rev 32698)
+++ branches/particles-2010/source/blender/editors/space_node/node_edit.c       
2010-10-25 10:53:33 UTC (rev 32699)
@@ -2385,161 +2385,102 @@
        RNA_def_string(ot->srna, "name", "Image", 24, "Name", "Datablock name 
to assign.");
 }
 
-/* ****************** Add RNA Property Node Operator  ******************* */
+/* ****************** Add Property Socket Operator  ******************* */
 
-#if 0
-static void simnode_getdata_add_property_socket_exec_cb(bContext *C, void 
*arg1, void *arg2)
+static int node_add_property_socket_exec(bContext *C, wmOperator *op)
 {
        SpaceNode *snode= CTX_wm_space_node(C);
-       bNode *node= (bNode*)arg1;
-       const char *prop= (const char*)arg2;
+       bNode *node= editnode_get_active(snode->edittree);
+       char name[64];
        
-       if (prop) {
-               simnode_getdata_add_property_socket(node, prop);
-               snode_notify(C, snode);
-       }
-}
-
-static void simnode_getdata_add_property_socket_search_cb(const bContext *C, 
void *arg, char *str, uiSearchItems *items)
-{
-       bNode *node= (bNode*)arg;
-       LinkData *link;
-       ListBase props;
+       ED_preview_kill_jobs(C);
        
-       props = simnode_getdata_get_properties(node);
-       for (link=props.first; link; link = link->next) {
-               if (!BLI_strcasestr((const char*)link->data, str))
-                       continue;
-               
-               if(0==uiSearchItemAdd(items, (const char*)link->data, 
link->data, RNA_property_ui_icon(prop)))
-                       break;
-       }
-}
+       /* check input variables */
+       if (RNA_property_is_set(op->ptr, "name"))
+               RNA_string_get(op->ptr, "name", name);
+       else
+               name[0] = '\0';
 
-void simnode_getdata_add_rna_socket_search(uiLayout *layout, bNode *node)
-{
-       uiBlock *block;
-       uiBut *but;
-       static char search[256]= "";
-               
-       block= uiLayoutGetBlock(layout);
-       uiBlockSetCurLayout(block, layout);
-
-       but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 0, 
0, UI_UNIT_X*6, UI_UNIT_Y, 0, 0, "");
-       uiButSetSearchFunc(but, simnode_getdata_add_rna_socket_search_cb, node, 
simnode_getdata_add_rna_socket_exec_cb, NULL);
-}
-#endif
-
-#if 0
-static void simnode_getdata_add_rna_socket_exec_cb(bContext *C, void *arg1, 
void *arg2)
-{
-       SpaceNode *snode= CTX_wm_space_node(C);
-       bNode *node= (bNode*)arg1;
-       PropertyRNA *prop= (PropertyRNA*)arg2;
-       
-       if (prop) {
-               simnode_getdata_add_rna_socket(node, prop);
-               snode_notify(C, snode);
+       switch (node->type) {
+       case SIM_NODE_GETDATA:
+               sim_getdata_add_property_socket(node, name);
+               break;
+       case SIM_NODE_SETDATA:
+               sim_setdata_add_property_socket(node, name);
+               break;
        }
+       
+       snode_notify(C, snode);
+       
+       return OPERATOR_FINISHED;
 }
 
-static void simnode_getdata_add_rna_socket_search_cb(const bContext *C, void 
*arg, char *str, uiSearchItems *items)
+void NODE_OT_add_property_socket(wmOperatorType *ot)
 {
-       bNode *node= (bNode*)arg;
-       StructRNA *srna;
-       PropertyRNA *prop;
-       const ListBase *lb;
-       Link *link;
-       const char *name;
+       /* identifiers */
+       ot->name= "Add property socket";
+       ot->description= "Add a new property socket to a data node";
+       ot->idname= "NODE_OT_add_property_socket";
        
-       srna = simnode_getdata_get_type(node);
-       if (!srna)
-               return;
+       /* callbacks */
+       ot->exec= node_add_property_socket_exec;
+       ot->poll= ED_operator_node_active;
        
-       lb = RNA_struct_defined_properties(srna);
-       for (link=lb->first; link; link = link->next) {
-               prop = (PropertyRNA *)link;
-               
-               if (!simnode_getdata_property_valid(node, prop))
-                       continue;
-               
-               name = RNA_property_ui_name(prop);
-               if (!BLI_strcasestr(name, str))
-                       continue;
-               
-               if(0==uiSearchItemAdd(items, name, prop, 
RNA_property_ui_icon(prop)))
-                       break;
-       }
-}
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
-void simnode_getdata_add_rna_socket_search(uiLayout *layout, bNode *node)
-{
-       uiBlock *block;
-       uiBut *but;
-       static char search[256]= "";
-               
-       block= uiLayoutGetBlock(layout);
-       uiBlockSetCurLayout(block, layout);
-
-       but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 0, 
0, UI_UNIT_X*6, UI_UNIT_Y, 0, 0, "");
-       uiButSetSearchFunc(but, simnode_getdata_add_rna_socket_search_cb, node, 
simnode_getdata_add_rna_socket_exec_cb, NULL);
+       RNA_def_string(ot->srna, "name", "", 64, "Name", "Property socket 
name.");
 }
 
-static void simnode_setdata_add_rna_socket_exec_cb(bContext *C, void *arg1, 
void *arg2)
+/* ****************** Remove Property Socket Operator  ******************* */
+
+static int node_remove_property_socket_exec(bContext *C, wmOperator *op)
 {
        SpaceNode *snode= CTX_wm_space_node(C);
-       bNode *node= (bNode*)arg1;
-       PropertyRNA *prop= (PropertyRNA*)arg2;
+       bNode *node= editnode_get_active(snode->edittree);
+       bNodeSocket *sock;
        
-       if (prop) {
-               simnode_setdata_add_rna_socket(node, prop);
-               snode_notify(C, snode);
+       ED_preview_kill_jobs(C);
+       
+       /* check input variables */
+       if (RNA_property_is_set(op->ptr, "socket"))
+               sock = (bNodeSocket*)RNA_pointer_get(op->ptr, "socket").data;
+       else
+               sock = NULL;
+
+       switch (node->type) {
+       case SIM_NODE_GETDATA:
+               nodeRemoveOutputSocket(snode->edittree, node, sock);
+               break;
+       case SIM_NODE_SETDATA:
+               nodeRemoveInputSocket(snode->edittree, node, sock);
+               break;
        }
+       
+       node_tree_verify_groups(snode->nodetree);
+       
+       snode_notify(C, snode);
+       
+       return OPERATOR_FINISHED;
 }
 
-static void simnode_setdata_add_rna_socket_search_cb(const bContext *C, void 
*arg, char *str, uiSearchItems *items)
+void NODE_OT_remove_property_socket(wmOperatorType *ot)
 {
-       bNode *node= (bNode*)arg;
-       StructRNA *srna;
-       PropertyRNA *prop;
-       const ListBase *lb;
-       Link *link;
-       const char *name;
+       /* identifiers */
+       ot->name= "Remove property socket";
+       ot->description= "Remove a new property socket from a data node";
+       ot->idname= "NODE_OT_remove_property_socket";
        
-       srna = simnode_setdata_get_type(node);
-       if (!srna)
-               return;
+       /* callbacks */
+       ot->exec= node_remove_property_socket_exec;
+       ot->poll= ED_operator_node_active;
        
-       lb = RNA_struct_defined_properties(srna);
-       for (link=lb->first; link; link = link->next) {
-               prop = (PropertyRNA *)link;
-               
-               if (!simnode_setdata_property_valid(node, prop))
-                       continue;
-               
-               name = RNA_property_ui_name(prop);
-               if (!BLI_strcasestr(name, str))
-                       continue;
-               
-               if(0==uiSearchItemAdd(items, name, prop, 
RNA_property_ui_icon(prop)))
-                       break;
-       }
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       RNA_def_pointer(ot->srna, "socket", "NodeSocket", "Socket", "Property 
socket to remove.");
 }
 
-void simnode_setdata_add_rna_socket_search(uiLayout *layout, bNode *node)
-{
-       uiBlock *block;
-       uiBut *but;
-       static char search[256]= "";
-               
-       block= uiLayoutGetBlock(layout);
-       uiBlockSetCurLayout(block, layout);
-
-       but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 0, 
0, UI_UNIT_X*6, UI_UNIT_Y, 0, 0, "");
-       uiButSetSearchFunc(but, simnode_setdata_add_rna_socket_search_cb, node, 
simnode_setdata_add_rna_socket_exec_cb, NULL);
-}
-#endif
-
 /* ****************** Compile OpenCL Program Node Operator  
******************* */
 
 static int node_compile_opencl_program_exec(bContext *C, wmOperator *op)

Modified: 
branches/particles-2010/source/blender/editors/space_node/node_intern.h
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_intern.h     
2010-10-25 08:03:05 UTC (rev 32698)
+++ branches/particles-2010/source/blender/editors/space_node/node_intern.h     
2010-10-25 10:53:33 UTC (rev 32699)
@@ -122,6 +122,9 @@
 
 void NODE_OT_add_file(struct wmOperatorType *ot);
 
+void NODE_OT_add_property_socket(struct wmOperatorType *ot);
+void NODE_OT_remove_property_socket(struct wmOperatorType *ot);
+
 void NODE_OT_compile_opencl_program(struct wmOperatorType *ot);
 
 // XXXXXX

Modified: branches/particles-2010/source/blender/editors/space_node/node_ops.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_ops.c        
2010-10-25 08:03:05 UTC (rev 32698)
+++ branches/particles-2010/source/blender/editors/space_node/node_ops.c        
2010-10-25 10:53:33 UTC (rev 32699)
@@ -84,6 +84,9 @@
        
        WM_operatortype_append(NODE_OT_add_file);
        
+       WM_operatortype_append(NODE_OT_add_property_socket);
+       WM_operatortype_append(NODE_OT_remove_property_socket);
+       
        WM_operatortype_append(NODE_OT_compile_opencl_program);
 }
 
@@ -172,5 +175,7 @@
        WM_keymap_add_item(keymap, "NODE_OT_read_renderlayers", RKEY, KM_PRESS, 
0, 0);
        WM_keymap_add_item(keymap, "NODE_OT_read_fullsamplelayers", RKEY, 
KM_PRESS, KM_SHIFT, 0);       
        
+//     WM_keymap_add_item(keymap, "NODE_OT_operation", RIGHTMOUSE, KM_PRESS, 
0, 0);
+
        transform_keymap_for_space(keyconf, keymap, SPACE_NODE);
 }


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

Reply via email to