[Bf-blender-cvs] [77ae386] object_nodes: Added an optional update callback for the configurable object node ID property.

Lukas Tönne noreply at git.blender.org
Tue Dec 29 09:14:37 CET 2015


Commit: 77ae38677c9b0a1e23367892e3086fab771c1f40
Author: Lukas Tönne
Date:   Mon Dec 28 11:27:34 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB77ae38677c9b0a1e23367892e3086fab771c1f40

Added an optional update callback for the configurable object node ID property.

===================================================================

M	release/scripts/modules/bpy_types.py
M	release/scripts/nodes/group_nodes.py
M	release/scripts/nodes/instancing_nodes.py
M	source/blender/makesrna/intern/rna_nodetree.c

===================================================================

diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index 296d017..4a2665d 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -848,3 +848,9 @@ class ObjectNode(NodeInternal):
     @classmethod
     def poll(cls, ntree):
         return ntree.bl_idname == 'ObjectNodeTree'
+
+    def bl_id_property_poll(self, id_data):
+        return True
+
+    def bl_id_property_update(self, context):
+        pass
diff --git a/release/scripts/nodes/group_nodes.py b/release/scripts/nodes/group_nodes.py
index 4c3ae3c..97ee82b 100644
--- a/release/scripts/nodes/group_nodes.py
+++ b/release/scripts/nodes/group_nodes.py
@@ -336,6 +336,9 @@ def make_node_group_types(prefix, treetype, node_base):
                     return False
             return True
 
+        def bl_id_property_update(self, context):
+            self.update()
+
         def poll_instance(self, ntree):
             if hasattr(super(), "poll_instance") and not super().poll_instance(ntree):
                 return False
@@ -364,9 +367,8 @@ def make_node_group_types(prefix, treetype, node_base):
                 return
             with self.update_lock():
                 gtree = self.id
-                if gtree:
-                    node_sockets_sync(self.inputs, gtree.inputs)
-                    node_sockets_sync(self.outputs, gtree.outputs)
+                node_sockets_sync(self.inputs, gtree.inputs if gtree else [])
+                node_sockets_sync(self.outputs, gtree.outputs if gtree else [])
 
         def compile(self, compiler):
             if self.id is not None:
diff --git a/release/scripts/nodes/instancing_nodes.py b/release/scripts/nodes/instancing_nodes.py
index 8ee25b9..3f423af 100644
--- a/release/scripts/nodes/instancing_nodes.py
+++ b/release/scripts/nodes/instancing_nodes.py
@@ -119,8 +119,6 @@ class MakeDupliNode(InstancingNodeBase, ObjectNode):
     bl_label = 'Make Dupli'
 
     bl_id_property_type = 'OBJECT'
-    def bl_id_property_poll(self, ob):
-        return True
 
     def draw_buttons(self, context, layout):
         layout.template_ID(self, "id")
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 21882b7..a370498 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -1604,11 +1604,33 @@ static void rna_Node_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
 	ED_node_tag_update_nodetree(bmain, ntree);
 }
 
-static void rna_ObjectNode_id_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_ObjectNode_id_update_cb(bContext *C, PointerRNA *ptr)
 {
+	bNode *node = (bNode *)ptr->data;
+	ParameterList list;
+	FunctionRNA *func;
+	
+	func = RNA_struct_find_function(ptr->type, "bl_id_property_update");
+	if (!func)
+		return;
+	
+	RNA_parameter_list_create(&list, ptr, func);
+	RNA_parameter_set_lookup(&list, "context", &C);
+	node->typeinfo->ext.call(NULL, ptr, func, &list);
+	
+	RNA_parameter_list_free(&list);
+}
+
+static void rna_ObjectNode_id_update(bContext *C, PointerRNA *ptr)
+{
+	Main *bmain = CTX_data_main(C);
+	Scene *scene = CTX_data_scene(C);
+	
 	rna_Node_update(bmain, scene, ptr);
 	
 	DEG_relations_tag_update(bmain);
+	
+	rna_ObjectNode_id_update_cb(C, ptr);
 }
 
 static void rna_Node_socket_value_update(ID *id, bNode *UNUSED(node), bContext *C)
@@ -6820,10 +6842,17 @@ static void rna_def_object_node(BlenderRNA *brna)
 	parm = RNA_def_pointer(func, "id", "ID", "ID", "");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 
+	/* update */
+	func = RNA_def_function(srna, "bl_id_property_update", NULL);
+	RNA_def_function_ui_description(func, "Update called when the id property is changed");
+	RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_REGISTER_OPTIONAL);
+	parm = RNA_def_pointer(func, "context", "Context", "", "");
+	RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+
 	/* ID */
 	prop = RNA_def_property(srna, "id", PROP_POINTER, PROP_NONE);
 	RNA_def_property_struct_type(prop, "ID");
-	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
 	RNA_def_property_editable_func(prop, "rna_ObjectNode_id_editable");
 	RNA_def_property_pointer_funcs(prop, NULL, NULL, "rna_ObjectNode_id_typef", "rna_ObjectNode_id_poll");
 	RNA_def_property_ui_text(prop, "ID", "");




More information about the Bf-blender-cvs mailing list