[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32699] branches/particles-2010/source/ blender/editors/space_node: Added operators for adding and removing property sockets to/ from data nodes.

Lukas Toenne lukas.toenne at googlemail.com
Mon Oct 25 12:53:34 CEST 2010


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);
 }





More information about the Bf-blender-cvs mailing list