[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