[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