Revision: 32714
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32714
Author:   lukastoenne
Date:     2010-10-26 17:44:53 +0200 (Tue, 26 Oct 2010)

Log Message:
-----------
Added an enum property for the socket type to node RNA. This is not editable by 
default, even though in some cases the socket type may change.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    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/nodes/SIM_get_data.c
    
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h        
2010-10-26 12:48:07 UTC (rev 32713)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h        
2010-10-26 15:44:53 UTC (rev 32714)
@@ -595,17 +595,19 @@
 /* XXX having these here is ugly, should be in nodes directory */
 void sim_getdata_add_property_socket(struct bNode *node, const char *prop);
 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));
+const char *sim_getdata_path_get(struct bNode *node);
 void sim_getdata_path_set(struct bNodeTree *ntree, struct bNode *node, const 
char *path);
-const char *sim_getdata_path_get(struct bNode *node);
 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_property_types(struct bNodeSocket *sock, int **types, int 
*num_types);
 
 void sim_setdata_add_property_socket(struct bNode *node, const char *prop);
 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));
+const char *sim_setdata_path_get(struct bNode *node);
 void sim_setdata_path_set(struct bNodeTree *ntree, struct bNode *node, const 
char *path);
-const char *sim_setdata_path_get(struct bNode *node);
 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_property_types(struct bNodeSocket *sock, int **types, int 
*num_types);
 
 /**/
 

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h    
2010-10-26 12:48:07 UTC (rev 32713)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h    
2010-10-26 15:44:53 UTC (rev 32714)
@@ -389,9 +389,15 @@
 
 /* stores associated properties for GetData/SetData node sockets */
 typedef struct SimDataNodeSocket {
-       char identifier[64];
+       int type;                                               /* type of 
property */
+       int pad;
+       char identifier[64];                    /* identifier string */
 } SimDataNodeSocket;
 
+#define SIM_DATA_RNA           1
+#define SIM_DATA_IDPROP                2
+#define SIM_DATA_PARPROP       3
+
 typedef struct SimDataNode {
        struct StructRNA *type;                 /* context type of the 
properties */
        /* only used during read/write file! */

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c       
2010-10-26 12:48:07 UTC (rev 32713)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c       
2010-10-26 15:44:53 UTC (rev 32714)
@@ -2344,9 +2344,25 @@
 
 /* -------------------------------------------------------------------------- 
*/
 
+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,              
"",                             ""}
+};
+
 static void rna_def_node_socket(BlenderRNA *brna)
 {
        StructRNA *srna;
+       PropertyRNA *prop;
 
        srna = RNA_def_struct(brna, "NodeSocket", NULL);
        RNA_def_struct_ui_text(srna, "Node Socket", "Input or output socket of 
a node");
@@ -2355,6 +2371,11 @@
        RNA_def_struct_ui_icon(srna, ICON_PLUG);
        RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
 
+       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_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Type", "Socket data type");
 }
 
 static void rna_def_node_socket_value(BlenderRNA *brna)

Modified: 
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
===================================================================
--- 
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
 2010-10-26 12:48:07 UTC (rev 32713)
+++ 
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
 2010-10-26 15:44:53 UTC (rev 32714)
@@ -121,6 +121,8 @@
 
 void sim_getdata_add_property_socket(bNode *node, const char *identifier)
 {
+       SimDataNode *data= (SimDataNode*)node->storage;
+       SimDataNodeSocket *sockdata;
        bNodeSocket *sock;
        float defaults[4]= { 0.0f, 0.0f, 0.0f, 0.0f };
        float min= 0.0f, max= 0.0f;
@@ -131,15 +133,28 @@
                /* disable context adaptation (context is set explicitly) */
                sock->flag &= ~SOCK_ADAPT_CONTEXT;
                /* associate with the property */
-               strcpy(((SimDataNodeSocket*)sock->storage)->identifier, 
identifier);
+               sockdata = (SimDataNodeSocket*)sock->storage;
+               sockdata->type = SIM_DATA_RNA;
+               strcpy(sockdata->identifier, identifier);
        }
-       else {
+       else if (data->type && RNA_struct_is_ID(data->type)) {
                sock = nodeAddOutputSocket(node, identifier, SOCK_ANY, 
defaults, min, max);
                /* disable context adaptation (context is set explicitly) */
                sock->flag &= ~SOCK_ADAPT_CONTEXT;
                /* associate with the property */
-               strcpy(((SimDataNodeSocket*)sock->storage)->identifier, 
identifier);
+               sockdata = (SimDataNodeSocket*)sock->storage;
+               sockdata->type = SIM_DATA_IDPROP;
+               strcpy(sockdata->identifier, identifier);
        }
+       else if (data->type && RNA_struct_is_a(data->type, &RNA_NParticle)) {
+               sock = nodeAddOutputSocket(node, identifier, SOCK_ANY, 
defaults, min, max);
+               /* disable context adaptation (context is set explicitly) */
+               sock->flag &= ~SOCK_ADAPT_CONTEXT;
+               /* associate with the property */
+               sockdata = (SimDataNodeSocket*)sock->storage;
+               sockdata->type = SIM_DATA_PARPROP;
+               strcpy(sockdata->identifier, identifier);
+       }
 }
 
 void sim_getdata_path_set(bNodeTree *ntree, bNode *node, const char *path)
@@ -197,6 +212,27 @@
        data->type = type;
 }
 
+void sim_getdata_property_types(bNodeSocket *sock, int **types, int *num_types)
+{
+       static int idprop_types[] = { SOCK_FLOAT, SOCK_INT, SOCK_BOOL, 
SOCK_VECTOR, SOCK_RGBA, SOCK_QUAT, SOCK_MATRIX, SOCK_STRING };
+       static int parprop_types[] = { SOCK_FLOAT, SOCK_INT, SOCK_BOOL, 
SOCK_VECTOR, SOCK_RGBA, SOCK_QUAT, SOCK_MATRIX, SOCK_STRING };
+       SimDataNodeSocket *data= (SimDataNodeSocket*)sock->storage;
+       switch (data->type) {
+       case SIM_DATA_IDPROP:
+               *types = idprop_types;
+               *num_types = 8;
+               break;
+       case SIM_DATA_PARPROP:
+               *types = parprop_types;
+               *num_types = 8;
+               break;
+       case SIM_DATA_RNA:
+       default:
+               *types = NULL;
+               *num_types = 0;
+       }
+}
+
 static void update(bNodeTree *ntree, bNode *node)
 {
 }

Modified: 
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c
===================================================================
--- 
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c
 2010-10-26 12:48:07 UTC (rev 32713)
+++ 
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c
 2010-10-26 15:44:53 UTC (rev 32714)
@@ -116,6 +116,8 @@
 
 void sim_setdata_add_property_socket(bNode *node, const char *identifier)
 {
+       SimDataNode *data= (SimDataNode*)node->storage;
+       SimDataNodeSocket *sockdata;
        bNodeSocket *sock;
        float defaults[4]= { 0.0f, 0.0f, 0.0f, 0.0f };
        float min= 0.0f, max= 0.0f;
@@ -127,15 +129,28 @@
                /* disable context adaptation (context is set explicitly) */
                sock->flag &= ~SOCK_ADAPT_CONTEXT;
                /* associate with the property */
-               strcpy(((SimDataNodeSocket*)sock->storage)->identifier, 
identifier);
+               sockdata = (SimDataNodeSocket*)sock->storage;
+               sockdata->type = SIM_DATA_RNA;
+               strcpy(sockdata->identifier, identifier);
        }
-       else {
+       else if (data->type && RNA_struct_is_ID(data->type)) {
                sock = nodeAddInputSocket(node, identifier, SOCK_ANY, defaults, 
min, max);
                /* disable context adaptation (context is set explicitly) */
                sock->flag &= ~SOCK_ADAPT_CONTEXT;
                /* associate with the property */
-               strcpy(((SimDataNodeSocket*)sock->storage)->identifier, 
identifier);
+               sockdata = (SimDataNodeSocket*)sock->storage;
+               sockdata->type = SIM_DATA_IDPROP;
+               strcpy(sockdata->identifier, identifier);
        }
+       else if (data->type && RNA_struct_is_a(data->type, &RNA_NParticle)) {
+               sock = nodeAddInputSocket(node, identifier, SOCK_ANY, defaults, 
min, max);
+               /* disable context adaptation (context is set explicitly) */
+               sock->flag &= ~SOCK_ADAPT_CONTEXT;
+               /* associate with the property */
+               sockdata = (SimDataNodeSocket*)sock->storage;
+               sockdata->type = SIM_DATA_PARPROP;
+               strcpy(sockdata->identifier, identifier);
+       }
 }
 
 const char *sim_setdata_path_get(bNode *node)
@@ -185,6 +200,27 @@
        data->type = type;
 }
 
+void sim_setdata_property_types(bNodeSocket *sock, int **types, int *num_types)
+{
+       static int idprop_types[] = { SOCK_FLOAT, SOCK_INT, SOCK_BOOL, 
SOCK_VECTOR, SOCK_RGBA, SOCK_QUAT, SOCK_MATRIX, SOCK_STRING };
+       static int parprop_types[] = { SOCK_FLOAT, SOCK_INT, SOCK_BOOL, 
SOCK_VECTOR, SOCK_RGBA, SOCK_QUAT, SOCK_MATRIX, SOCK_STRING };
+       SimDataNodeSocket *data= (SimDataNodeSocket*)sock->storage;
+       switch (data->type) {
+       case SIM_DATA_IDPROP:
+               *types = idprop_types;
+               *num_types = 8;
+               break;
+       case SIM_DATA_PARPROP:
+               *types = parprop_types;
+               *num_types = 8;
+               break;
+       case SIM_DATA_RNA:
+       default:
+               *types = NULL;
+               *num_types = 0;
+       }
+}
+
 static void init(bNode *node)
 {
        SimDataNode *data = MEM_callocN(sizeof(SimDataNode), "SimDataNode");


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to