[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31639] branches/particles-2010/source/ blender: * Implemented basic path resolution for default path sockets on GetData/ SetData nodes.
Lukas Toenne
lukas.toenne at googlemail.com
Sun Aug 29 12:06:23 CEST 2010
Revision: 31639
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31639
Author: lukastoenne
Date: 2010-08-29 12:06:23 +0200 (Sun, 29 Aug 2010)
Log Message:
-----------
* Implemented basic path resolution for default path sockets on GetData/SetData nodes. This only works for absolute paths, since the self context is only evaluated at runtime. When the node struct type is not set, it is resolved when a valid path is entered. If it is set, only paths to structs of that type are valid.
* Added search function to the property selection button.
* Made distinct implementations for each data node (more code, but less error-prone).
Modified Paths:
--------------
branches/particles-2010/source/blender/blenkernel/BKE_node.h
branches/particles-2010/source/blender/editors/space_node/drawnode.c
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/makesrna/intern/rna_nodetree.c
branches/particles-2010/source/blender/makesrna/intern/rna_object.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c
branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c
Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-08-29 06:07:04 UTC (rev 31638)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-08-29 10:06:23 UTC (rev 31639)
@@ -557,11 +557,16 @@
/* API */
void ntreeSimulationExecTree(struct SimulationContext *sim);
-void sim_datanode_set_type(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
-struct StructRNA *sim_node_get_datatype(struct bNode *node);
-void sim_node_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
-int sim_node_convert_rna_property(struct PropertyRNA *prop);
+struct StructRNA *simnode_getdata_get_type(struct bNode *node);
+void simnode_getdata_set_type(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
+void simnode_getdata_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
+struct StructRNA *simnode_setdata_get_type(struct bNode *node);
+void simnode_setdata_set_type(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
+void simnode_setdata_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
+
+int simnode_convert_rna_property(struct PropertyRNA *prop);
+
/**/
void init_nodesystem(void);
Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c 2010-08-29 06:07:04 UTC (rev 31638)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c 2010-08-29 10:06:23 UTC (rev 31639)
@@ -1288,7 +1288,8 @@
uiItemR(col, ptr, "typename", 0, NULL, 0);
- uiItemMenuF(col, "Add", 0, node_simulation_add_rna_socket_menu_invoke, node);
+ simnode_getdata_add_rna_socket_search(layout, node);
+// uiItemMenuF(col, "Add", 0, simnode_getdata_add_rna_socket_invoke, node);
}
static void node_simulation_buts_setdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -1301,7 +1302,7 @@
uiItemR(col, ptr, "typename", 0, NULL, 0);
- uiItemMenuF(col, "Add", 0, node_simulation_add_rna_socket_menu_invoke, node);
+ uiItemMenuF(col, "Add", 0, simnode_setdata_add_rna_socket_invoke, node);
}
/* only once called */
Modified: branches/particles-2010/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_edit.c 2010-08-29 06:07:04 UTC (rev 31638)
+++ branches/particles-2010/source/blender/editors/space_node/node_edit.c 2010-08-29 10:06:23 UTC (rev 31639)
@@ -74,6 +74,7 @@
#include "WM_types.h"
#include "UI_interface.h"
+#include "UI_resources.h"
#include "UI_view2d.h"
#include "node_intern.h"
@@ -2408,29 +2409,110 @@
/* ****************** Add RNA Property Node Operator ******************* */
-void node_simulation_add_rna_socket_menu_exec(bContext *C, void *arg, int event)
+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);
+ }
+}
+
+static void simnode_getdata_add_rna_socket_search_cb(const bContext *C, void *arg, char *str, uiSearchItems *items)
+{
bNode *node= (bNode*)arg;
StructRNA *srna;
PropertyRNA *prop;
const ListBase *lb;
+ Link *link;
+ const char *name;
- srna = sim_node_get_datatype(node);
+ srna = simnode_getdata_get_type(node);
if (!srna)
return;
+
+ lb = RNA_struct_defined_properties(srna);
+ for (link=lb->first; link; link = link->next) {
+ prop = (PropertyRNA *)link;
+
+ if (simnode_convert_rna_property(prop) < 0)
+ 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;
+ }
+ #if 0
+ wmOperatorType *ot = WM_operatortype_first();
+
+ for(; ot; ot= ot->next) {
+
+ if(BLI_strcasestr(ot->name, str)) {
+ if(WM_operator_poll((bContext*)C, ot)) {
+ char name[256];
+ int len= strlen(ot->name);
+
+ /* display name for menu, can hold hotkey */
+ BLI_strncpy(name, ot->name, 256);
+
+ /* check for hotkey */
+ if(len < 256-6) {
+ if(WM_key_event_operator_string(C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, &name[len+1], 256-len-1))
+ name[len]= '|';
+ }
+
+ if(0==uiSearchItemAdd(items, name, ot, 0))
+ break;
+ }
+ }
+ }
+ #endif
+}
+
+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);
+}
+
+#if 0
+void simnode_getdata_add_rna_socket_menu_exec(bContext *C, void *arg, int event)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ bNode *node= (bNode*)arg;
+ StructRNA *srna;
+ PropertyRNA *prop;
+ const ListBase *lb;
+
+ srna = simnode_getdata_get_type(node);
+ if (!srna)
+ return;
+
lb = RNA_struct_defined_properties(srna);
prop = BLI_findlink((ListBase*)lb, event);
if (!prop)
return;
- sim_node_add_rna_socket(node, prop);
+ simnode_getdata_add_rna_socket(node, prop);
snode_notify(C, snode);
}
-void node_simulation_add_rna_socket_menu_invoke(bContext *C, uiLayout *layout, void *arg)
+void simnode_getdata_add_rna_socket_menu_invoke(bContext *C, uiLayout *layout, void *arg)
{
bNode *node= (bNode*)arg;
StructRNA *srna;
@@ -2439,20 +2521,70 @@
Link *link;
int totitem= 0, i;
- srna = sim_node_get_datatype(node);
+ srna = simnode_getdata_get_type(node);
if (!srna)
return;
- uiLayoutSetFunc(layout, node_simulation_add_rna_socket_menu_exec, node);
+ uiLayoutSetFunc(layout, simnode_getdata_add_rna_socket_menu_exec, node);
lb = RNA_struct_defined_properties(srna);
for (link=lb->first, i=0; link; link = link->next, ++i) {
prop = (PropertyRNA *)link;
- if (sim_node_convert_rna_property(prop) < 0)
+ if (simnode_convert_rna_property(prop) < 0)
continue;
uiItemV(layout, (char*)RNA_property_ui_name(prop), RNA_property_ui_icon(prop), i);
++totitem;
}
}
+#endif
+
+void simnode_setdata_add_rna_socket_exec(bContext *C, void *arg, int event)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ bNode *node= (bNode*)arg;
+ StructRNA *srna;
+ PropertyRNA *prop;
+ const ListBase *lb;
+
+ srna = simnode_setdata_get_type(node);
+ if (!srna)
+ return;
+
+ lb = RNA_struct_defined_properties(srna);
+ prop = BLI_findlink((ListBase*)lb, event);
+ if (!prop)
+ return;
+
+ simnode_setdata_add_rna_socket(node, prop);
+
+ snode_notify(C, snode);
+}
+
+void simnode_setdata_add_rna_socket_invoke(bContext *C, uiLayout *layout, void *arg)
+{
+ bNode *node= (bNode*)arg;
+ StructRNA *srna;
+ PropertyRNA *prop;
+ const ListBase *lb;
+ Link *link;
+ int totitem= 0, i;
+
+ srna = simnode_setdata_get_type(node);
+ if (!srna)
+ return;
+
+ uiLayoutSetFunc(layout, simnode_setdata_add_rna_socket_exec, node);
+
+ lb = RNA_struct_defined_properties(srna);
+ for (link=lb->first, i=0; link; link = link->next, ++i) {
+ prop = (PropertyRNA *)link;
+
+ if (simnode_convert_rna_property(prop) < 0)
+ continue;
+
+ uiItemV(layout, (char*)RNA_property_ui_name(prop), RNA_property_ui_icon(prop), i);
+ ++totitem;
+ }
+}
Modified: branches/particles-2010/source/blender/editors/space_node/node_intern.h
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_intern.h 2010-08-29 06:07:04 UTC (rev 31638)
+++ branches/particles-2010/source/blender/editors/space_node/node_intern.h 2010-08-29 10:06:23 UTC (rev 31639)
@@ -91,8 +91,11 @@
void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace);
int node_has_hidden_sockets(bNode *node);
void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set);
-void node_simulation_add_rna_socket_menu_exec(struct bContext *C, void *arg, int event);
-void node_simulation_add_rna_socket_menu_invoke(struct bContext *C, struct uiLayout *layout, void *arg);
+//void simnode_getdata_add_rna_socket_exec(struct bContext *C, void *arg, int event);
+//void simnode_getdata_add_rna_socket_invoke(struct bContext *C, struct uiLayout *layout, void *arg);
+void simnode_getdata_add_rna_socket_search(struct uiLayout *layout, struct bNode *node);
+void simnode_setdata_add_rna_socket_exec(struct bContext *C, void *arg, int event);
+void simnode_setdata_add_rna_socket_invoke(struct bContext *C, struct uiLayout *layout, void *arg);
void NODE_OT_duplicate(struct wmOperatorType *ot);
void NODE_OT_delete(struct wmOperatorType *ot);
Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c 2010-08-29 06:07:04 UTC (rev 31638)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c 2010-08-29 10:06:23 UTC (rev 31639)
@@ -427,7 +427,7 @@
return item;
}
-static void rna_Node_simdata_typename_get(PointerRNA *ptr, char *value)
+static void rna_Node_getdata_typename_get(PointerRNA *ptr, char *value)
{
bNode *node= (bNode*)ptr->data;
SimNodeData *stor= (SimNodeData*)node->storage;
@@ -438,7 +438,7 @@
strcpy(value, "");
}
-static int rna_Node_simdata_typename_length(PointerRNA *ptr)
+static int rna_Node_getdata_typename_length(PointerRNA *ptr)
{
bNode *node= (bNode*)ptr->data;
SimNodeData *stor= (SimNodeData*)node->storage;
@@ -449,19 +449,52 @@
return 0;
}
-static void rna_Node_simdata_typename_set(PointerRNA *ptr, const char *value)
+static void rna_Node_getdata_typename_set(PointerRNA *ptr, const char *value)
{
BlenderRNA *brna= &BLENDER_RNA;
StructRNA *type;
- for (type = brna->structs.first; type; type = type->cont.next) {
- if (strcmp(type->identifier, value)==0) {
- sim_datanode_set_type((bNodeTree*)ptr->id.data, (bNode*)ptr->data, type);
+ for (type = brna->structs.first; type; type = type->cont.next)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list