[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32637] branches/particles-2010/source/ blender: Modified the storage data for data sockets, these store identifier strings instead of PropertyRNA pointers now.

Lukas Toenne lukas.toenne at googlemail.com
Thu Oct 21 17:02:39 CEST 2010


Revision: 32637
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32637
Author:   lukastoenne
Date:     2010-10-21 17:02:39 +0200 (Thu, 21 Oct 2010)

Log Message:
-----------
Modified the storage data for data sockets, these store identifier strings instead of PropertyRNA pointers now. This will make it possible to access other (dynamic) properties in future, not only static RNA properties.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/blenloader/intern/writefile.c
    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/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c

Added Paths:
-----------
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_intern.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_intern.h

Removed Paths:
-------------
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.h

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-21 13:33:51 UTC (rev 32636)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-21 15:02:39 UTC (rev 32637)
@@ -587,15 +587,17 @@
 void ntreeSimulationReleaseProgram(struct bNodeTree *ntree);
 void ntreeSimulationExecTree(struct bNodeTree *ntree, struct Scene *scene, struct PointerRNA *self, float frame, float dframe, float time, float dtime);
 
-struct StructRNA *simnode_getdata_get_type(struct bNode *node);
-void simnode_getdata_set_type(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
-int simnode_getdata_property_valid(struct bNode *node, struct PropertyRNA *prop);
-void simnode_getdata_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
+/* node-specific functions for UI */
+/* XXX having these here is ugly, should be in nodes directory */
+void sim_getdata_add_property_socket(struct bNode *node, const char *prop);
+struct StructRNA *sim_getdata_type_get(struct bNode *node);
+void sim_getdata_type_set(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
+void sim_getdata_foreach_property(struct bNode *node, void *items, const char *str, int (*cb)(void *items, const char *str, const char *name, const char *identifier, int icon));
 
-struct StructRNA *simnode_setdata_get_type(struct bNode *node);
-void simnode_setdata_set_type(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
-int simnode_setdata_property_valid(struct bNode *node, struct PropertyRNA *prop);
-void simnode_setdata_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
+void sim_setdata_add_property_socket(struct bNode *node, const char *prop);
+struct StructRNA *sim_setdata_type_get(struct bNode *node);
+void sim_setdata_type_set(struct bNodeTree *ntree, struct bNode *node, struct StructRNA *type);
+void sim_setdata_foreach_property(struct bNode *node, void *items, const char *str, int (*cb)(void *items, const char *str, const char *name, const char *identifier, int icon));
 
 /**/
 

Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c	2010-10-21 13:33:51 UTC (rev 32636)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c	2010-10-21 15:02:39 UTC (rev 32637)
@@ -2066,7 +2066,7 @@
 
 static void direct_link_node_rna_data(FileData *fd, bNodeTree *ntree, bNode *node)
 {
-	NodeRNAData *rna_data= (NodeRNAData*)node->storage;
+	SimDataNode *rna_data= (SimDataNode*)node->storage;
 	
 	/* restore the identifier string */
 	rna_data->save_type = newdataadr(fd, (void*)rna_data->save_type);
@@ -2077,49 +2077,6 @@
 	}
 }
 
-static void direct_link_node_socket_properties(FileData *fd, bNode *node)
-{
-	NodeRNAData *rna_data= (NodeRNAData*)node->storage;
-	bNodeSocket *sock;
-	
-	if (node->type==SIM_NODE_GETDATA)
-		sock= ((bNodeSocket*)node->outputs.first)->next;
-	else if (node->type==SIM_NODE_GETDATA)
-		sock= ((bNodeSocket*)node->inputs.first)->next;
-	else
-		sock= NULL;
-	
-	for (; sock; sock = sock->next) {
-		NodeSocketProperty *sockprop= (NodeSocketProperty*)sock->storage;
-		
-		/* restore the identifier string */
-		sockprop->save_prop = newdataadr(fd, (void*)sockprop->save_prop);
-		
-		if (sockprop->save_prop != NULL) {
-			if (rna_data->type != NULL) {
-				const ListBase *lb;
-				Link *link;
-				PropertyRNA *prop;
-				
-				lb = RNA_struct_defined_properties(rna_data->type);
-				for (link=lb->first; link; link = link->next) {
-					prop = (PropertyRNA *)link;
-					if (strcmp(RNA_property_identifier(prop), sockprop->save_prop)==0) {
-						sockprop->prop = prop;
-						break;
-					}
-				}
-				
-				/* save_prop is only needed for restoring the property pointer */
-				MEM_freeN((void*)sockprop->save_prop);
-				sockprop->save_prop = NULL;
-			}
-		}
-		else
-			sockprop->prop = NULL;
-	}
-}
-
 extern StructRNA RNA_SimulationNodeGetData;
 extern StructRNA RNA_SimulationNodeSetData;
 /* ntree itself has been read! */
@@ -2188,9 +2145,6 @@
 			sock->storage= newdataadr(fd, sock->storage);
 			sock->panel= newdataadr(fd, sock->panel);
 		}
-
-		if (node->type==SIM_NODE_GETDATA || node->type==SIM_NODE_SETDATA)
-			direct_link_node_socket_properties(fd, node);
 	}
 	for(link= ntree->links.first; link; link= link->next) {
 		link->fromnode= newdataadr(fd, link->fromnode);

Modified: branches/particles-2010/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/writefile.c	2010-10-21 13:33:51 UTC (rev 32636)
+++ branches/particles-2010/source/blender/blenloader/intern/writefile.c	2010-10-21 15:02:39 UTC (rev 32637)
@@ -446,9 +446,9 @@
 		writestruct(wd, DATA, "CurveMapPoint", cumap->cm[a].totpoint, cumap->cm[a].curve);
 }
 
-static void write_node_rna_data(WriteData *wd, NodeRNAData *rna_data)
+static void write_node_rna_data(WriteData *wd, SimDataNode *rna_data)
 {
-	writestruct(wd, DATA, "NodeRNAData", 1, rna_data);
+	writestruct(wd, DATA, "SimDataNode", 1, rna_data);
 	if (rna_data->type) {
 		/* save identifier string, to allow restoring the StructRNA pointer */
 		rna_data->save_type= RNA_struct_identifier(rna_data->type);
@@ -456,26 +456,6 @@
 	}
 }
 
-static void write_node_socket_properties(WriteData *wd, bNode *node)
-{
-	bNodeSocket *sock;
-	
-	if (node->type==SIM_NODE_GETDATA)
-		sock= ((bNodeSocket*)node->outputs.first)->next;
-	else if (node->type==SIM_NODE_GETDATA)
-		sock= ((bNodeSocket*)node->inputs.first)->next;
-	else
-		sock= NULL;
-	
-	for (; sock; sock = sock->next) {
-		NodeSocketProperty *sockprop= (NodeSocketProperty*)sock->storage;
-		
-		/* save identifier string, to allow restoring the PropertyRNA pointer */
-		sockprop->save_prop = RNA_property_identifier(sockprop->prop);
-		writedata(wd, DATA, strlen(sockprop->save_prop)+1, (void*)sockprop->save_prop);
-	}
-}
-
 /* this is only direct data, tree itself should have been written */
 static void write_nodetree(WriteData *wd, bNodeTree *ntree)
 {
@@ -520,12 +500,9 @@
 				if(node->type==SIM_NODE_GETDATA || node->type==SIM_NODE_SETDATA)
 					write_node_rna_data(wd, node->storage);
 			}
-			else 
+			else
 				writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage);
 		}
-		
-		if (node->type==SIM_NODE_GETDATA || node->type==SIM_NODE_SETDATA)
-			write_node_socket_properties(wd, node);
 	}
 	
 	for(link= ntree->links.first; link; link= link->next)

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-10-21 13:33:51 UTC (rev 32636)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-10-21 15:02:39 UTC (rev 32637)
@@ -1269,6 +1269,40 @@
 	}
 }
 
+static void getdata_add_property_exec_cb(bContext *C, void *arg1, void *arg2)
+{
+	SpaceNode *snode= CTX_wm_space_node(C);
+	bNode *node= (bNode*)arg1;
+	const char *prop= (const char*)arg2;
+	
+	if (prop) {
+		sim_getdata_add_property_socket(node, prop);
+		snode_notify(C, snode);
+	}
+}
+static int getdata_add_property_foreach_cb(void *items, const char *str, const char *name, const char *identifier, int icon)
+{
+	if (!BLI_strcasestr(name, str))
+		return 1;
+	else
+		return uiSearchItemAdd(items, name, (void*)identifier, icon);
+}
+static void getdata_add_property_search_cb(const bContext *C, void *arg, char *str, uiSearchItems *items)
+{
+	sim_getdata_foreach_property((bNode*)arg, items, str, getdata_add_property_foreach_cb);
+}
+static void getdata_add_property_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, getdata_add_property_search_cb, node, getdata_add_property_exec_cb, NULL);
+}
 static void node_simulation_buts_getdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
 	bNode *node= ptr->data;
@@ -1279,9 +1313,43 @@
 
 	uiItemR(col, ptr, "typename", 0, NULL, 0);
 	
-	simnode_getdata_add_rna_socket_search(layout, node);
+	getdata_add_property_search(layout, node);
 }
 
+static void setdata_add_property_exec_cb(bContext *C, void *arg1, void *arg2)
+{
+	SpaceNode *snode= CTX_wm_space_node(C);
+	bNode *node= (bNode*)arg1;
+	const char *prop= (const char*)arg2;
+	
+	if (prop) {
+		sim_setdata_add_property_socket(node, prop);
+		snode_notify(C, snode);
+	}
+}
+static int setdata_add_property_foreach_cb(void *items, const char *str, const char *name, const char *identifier, int icon)
+{
+	if (!BLI_strcasestr(name, str))
+		return 1;
+	else
+		return uiSearchItemAdd(items, name, (void*)identifier, icon);
+}
+static void setdata_add_property_search_cb(const bContext *C, void *arg, char *str, uiSearchItems *items)
+{
+	sim_setdata_foreach_property((bNode*)arg, items, str, setdata_add_property_foreach_cb);
+}
+static void setdata_add_property_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, setdata_add_property_search_cb, node, setdata_add_property_exec_cb, NULL);
+}
 static void node_simulation_buts_setdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
 	bNode *node= ptr->data;
@@ -1292,7 +1360,7 @@
 
 	uiItemR(col, ptr, "typename", 0, NULL, 0);
 	
-	simnode_setdata_add_rna_socket_search(layout, node);
+	setdata_add_property_search(layout, node);
 }
 
 static void node_simulation_buts_while(uiLayout *layout, bContext *C, PointerRNA *ptr)

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-21 13:33:51 UTC (rev 32636)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list