[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32730] branches/particles-2010/source/ blender: Added type selection menu to property sockets in the n-panel.

Lukas Toenne lukas.toenne at googlemail.com
Wed Oct 27 10:48:11 CEST 2010


Revision: 32730
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32730
Author:   lukastoenne
Date:     2010-10-27 10:48:10 +0200 (Wed, 27 Oct 2010)

Log Message:
-----------
Added type selection menu to property sockets in the n-panel.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.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/makesrna/intern/rna_nodetree.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-27 06:41:48 UTC (rev 32729)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-27 08:48:10 UTC (rev 32730)
@@ -196,6 +196,8 @@
 
 bNodeTreeTypeInfo	*ntreeGetTypeInfo(int type);
 
+void			ntreeSocketTypeInfo(int type, const char **identifier, int *icon, const char **name);
+
 struct bNodeTree *ntreeAddTree(int type);
 void			ntreeInitTypes(struct bNodeTree *ntree);
 void			ntreeVerifyTypes(struct bNodeTree *ntree);

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-10-27 06:41:48 UTC (rev 32729)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-10-27 08:48:10 UTC (rev 32730)
@@ -85,6 +85,23 @@
 	}
 }
 
+void ntreeSocketTypeInfo(int type, const char **identifier, int *icon, const char **name)
+{
+	switch (type) {
+	case SOCK_VALUE:	if (identifier) *identifier = "SOCK_VALUE";		if (icon) *icon = 0;	if (name) *name = "Value";		break;
+	case SOCK_VECTOR:	if (identifier) *identifier = "SOCK_VECTOR";	if (icon) *icon = 0;	if (name) *name = "Vector";		break;
+	case SOCK_RGBA:		if (identifier) *identifier = "SOCK_RGBA";		if (icon) *icon = 0;	if (name) *name = "Color";		break;
+	case SOCK_ANY:		if (identifier) *identifier = "SOCK_ANY";		if (icon) *icon = 0;	if (name) *name = "Any";		break;
+	case SOCK_OP:		if (identifier) *identifier = "SOCK_OP";		if (icon) *icon = 0;	if (name) *name = "Execute";	break;
+	case SOCK_FLOAT:	if (identifier) *identifier = "SOCK_FLOAT";		if (icon) *icon = 0;	if (name) *name = "Float";		break;
+	case SOCK_INT:		if (identifier) *identifier = "SOCK_INT";		if (icon) *icon = 0;	if (name) *name = "Integer";	break;
+	case SOCK_BOOL:		if (identifier) *identifier = "SOCK_BOOL";		if (icon) *icon = 0;	if (name) *name = "Boolean";	break;
+	case SOCK_QUAT:		if (identifier) *identifier = "SOCK_QUAT";		if (icon) *icon = 0;	if (name) *name = "Quaternion";	break;
+	case SOCK_MATRIX:	if (identifier) *identifier = "SOCK_MATRIX";	if (icon) *icon = 0;	if (name) *name = "Matrix";		break;
+	case SOCK_STRING:	if (identifier) *identifier = "SOCK_STRING";	if (icon) *icon = 0;	if (name) *name = "String";		break;
+	default:			if (identifier) *identifier = "";				if (icon) *icon = 0;	if (name) *name = "";
+	}
+}
 
 static bNodeType *node_get_type(bNodeTree *ntree, int type, bNodeTree *ngroup, ID *id)
 {

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-10-27 06:41:48 UTC (rev 32729)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-10-27 08:48:10 UTC (rev 32730)
@@ -1279,6 +1279,18 @@
 	uiItemR(col, ptr, "path", 0, NULL, 0);
 }
 
+static void do_property_socket_type(bContext *C, void *arg, int event)
+{
+	SpaceNode *snode= CTX_wm_space_node(C);
+	bNodeSocket *sock= (bNodeSocket*)arg;
+	
+	sock->type = event;
+	
+	node_tree_verify_groups(snode->nodetree);
+	
+	snode_notify(C, snode);
+}
+
 static void getdata_add_property_exec_cb(bContext *C, void *arg1, void *arg2)
 {
 	SpaceNode *snode= CTX_wm_space_node(C);
@@ -1321,12 +1333,32 @@
 	but= uiDefSearchBut(block, data->propsearch, 0, ICON_VIEWZOOM, sizeof(data->propsearch), 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_getdata_property_socket_type_menu(bContext *C, uiLayout *layout, void *arg)
+{
+//	SpaceNode *snode= CTX_wm_space_node(C);
+//	bNode *node= editnode_get_active(snode->edittree);
+	bNodeSocket *sock= (bNodeSocket*)arg;
+	int *types= NULL;
+	int num_types= 0, i;
+	const char *name;
+	int icon;
+	
+	sim_getdata_property_types(sock, &types, &num_types);
+	uiLayoutSetFunc(layout, do_property_socket_type, sock);
+	
+	for (i=0; i < num_types; ++i) {
+		ntreeSocketTypeInfo(types[i], NULL, &icon, &name);
+		uiItemV(layout, (char*)name, icon, types[i]);
+	}
+}
 static void node_simulation_detailbuts_getdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
 	bNode *node= ptr->data;
 	bNodeSocket *sock;
 	PointerRNA sockptr;
 	uiLayout *col, *row;
+	const char *tname;
+	int ticon;
 	
 	col= uiLayoutColumn(layout, 0);
 	uiLayoutSetContextPointer(col, "node", ptr);
@@ -1343,6 +1375,8 @@
 		RNA_pointer_create((ID*)ptr->id.data, &RNA_NodeSocket, sock, &sockptr);
 		uiLayoutSetContextPointer(row, "socket", &sockptr);
 		
+		ntreeSocketTypeInfo(sock->type, NULL, &ticon, &tname);
+		uiItemMenuF(row, (char*)tname, ticon, node_getdata_property_socket_type_menu, sock);
 		uiItemR(row, &sockptr, "name", 0, "", 0);
 		uiItemO(row, "", ICON_X, "NODE_OT_property_socket_remove");
 	}
@@ -1400,12 +1434,32 @@
 	but= uiDefSearchBut(block, data->propsearch, 0, ICON_VIEWZOOM, sizeof(data->propsearch), 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_setdata_property_socket_type_menu(bContext *C, uiLayout *layout, void *arg)
+{
+//	SpaceNode *snode= CTX_wm_space_node(C);
+//	bNode *node= editnode_get_active(snode->edittree);
+	bNodeSocket *sock= (bNodeSocket*)arg;
+	int *types= NULL;
+	int num_types= 0, i;
+	const char *name;
+	int icon;
+	
+	sim_setdata_property_types(sock, &types, &num_types);
+	uiLayoutSetFunc(layout, do_property_socket_type, sock);
+	
+	for (i=0; i < num_types; ++i) {
+		ntreeSocketTypeInfo(types[i], NULL, &icon, &name);
+		uiItemV(layout, (char*)name, icon, types[i]);
+	}
+}
 static void node_simulation_detailbuts_setdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
 	bNode *node= ptr->data;
 	bNodeSocket *sock;
 	PointerRNA sockptr;
 	uiLayout *col, *row;
+	const char *tname;
+	int ticon;
 	
 	col= uiLayoutColumn(layout, 0);
 	uiLayoutSetContextPointer(col, "node", ptr);
@@ -1422,6 +1476,8 @@
 		RNA_pointer_create((ID*)ptr->id.data, &RNA_NodeSocket, sock, &sockptr);
 		uiLayoutSetContextPointer(row, "socket", &sockptr);
 		
+		ntreeSocketTypeInfo(sock->type, NULL, &ticon, &tname);
+		uiItemMenuF(row, (char*)tname, ticon, node_setdata_property_socket_type_menu, sock);
 		uiItemR(row, &sockptr, "name", 0, "", 0);
 		uiItemO(row, "", ICON_X, "NODE_OT_property_socket_remove");
 	}

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-27 06:41:48 UTC (rev 32729)
+++ branches/particles-2010/source/blender/editors/space_node/node_edit.c	2010-10-27 08:48:10 UTC (rev 32730)
@@ -69,6 +69,7 @@
 
 #include "RNA_access.h"
 #include "RNA_define.h"
+#include "RNA_enum_types.h"
 
 #include "WM_api.h"
 #include "WM_types.h"

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-10-27 06:41:48 UTC (rev 32729)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-10-27 08:48:10 UTC (rev 32730)
@@ -27,6 +27,7 @@
 
 #include "RNA_access.h"
 #include "RNA_define.h"
+#include "RNA_enum_types.h"
 
 #include "rna_internal.h"
 #include "rna_internal_types.h"
@@ -118,6 +119,33 @@
 	return BLI_sprintfN("nodes[\"%s\"]", node->name);
 }
 
+static int rna_NodeSocket_type_get(struct PointerRNA *ptr)
+{
+	bNodeSocket *sock= (bNodeSocket*)ptr->data;
+	return sock->type;
+}
+
+EnumPropertyItem *rna_NodeSocket_type_itemf(bContext *C, PointerRNA *ptr, int *free)
+{
+	static EnumPropertyItem items[NUM_SOCKET_TYPES+1];
+	int i;
+
+	for (i=0; i < NUM_SOCKET_TYPES; ++i) {
+		items[i].value = i;
+		ntreeSocketTypeInfo(i, &items[i].identifier, &items[i].icon, &items[i].name);
+		items[i].description = "";
+	}
+	items[i].value = -1;
+	items[i].identifier = "";
+	items[i].icon = 0;
+	items[i].name = "";
+	items[i].description = "";
+	
+	*free= 0;
+	
+	return items;
+}
+
 static char *rna_NodeSocket_path(PointerRNA *ptr)
 {
 	bNodeTree *ntree= (bNodeTree*)ptr->id.data;
@@ -2345,18 +2373,8 @@
 /* -------------------------------------------------------------------------- */
 
 static EnumPropertyItem node_socket_type_items[] = {
-	{SOCK_VALUE,	"SOCK_VALUE",	0,		"Value",		""},
-	{SOCK_VECTOR,	"SOCK_VECTOR",	0,		"Vector",		""},
-	{SOCK_RGBA,		"SOCK_RGBA",	0,		"Color",		""},
-	{SOCK_ANY,		"SOCK_ANY",		0,		"Any",			""},
-	{SOCK_OP,		"SOCK_OP",		0,		"Execute",		""},
-	{SOCK_FLOAT,	"SOCK_FLOAT",	0,		"Float",		""},
-	{SOCK_INT,		"SOCK_INT",		0,		"Integer",		""},
-	{SOCK_BOOL,		"SOCK_BOOL",	0,		"Boolean",		""},
-	{SOCK_QUAT,		"SOCK_QUAT",	0,		"Quaternion",	""},
-	{SOCK_MATRIX,	"SOCK_MATRIX",	0,		"Matrix",		""},
-	{SOCK_STRING,	"SOCK_STRING",	0,		"String",		""},
-	{-1,			"",				0,		"",				""}
+	{0, "__SOCK_DUMMY_TYPE__", 0, "", ""},
+	{-1, "", 0, "", ""}
 };
 
 static void rna_def_node_socket(BlenderRNA *brna)
@@ -2374,6 +2392,8 @@
 	prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "type");
 	RNA_def_property_enum_items(prop, node_socket_type_items);
+	RNA_def_property_enum_default(prop, 0);
+	RNA_def_property_enum_funcs(prop, "rna_NodeSocket_type_get", NULL, "rna_NodeSocket_type_itemf");
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Type", "Socket data type");
 }





More information about the Bf-blender-cvs mailing list