[Bf-blender-cvs] [42f6406d4f5] temp-dynamic-overrides: Dynamic overrides: Add support to retrieve type of property from rna path.
Bastien Montagne
noreply at git.blender.org
Sun May 13 19:14:50 CEST 2018
Commit: 42f6406d4f5a14b1acc5919364ad51c798bff8df
Author: Bastien Montagne
Date: Sun May 13 19:12:40 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rB42f6406d4f5a14b1acc5919364ad51c798bff8df
Dynamic overrides: Add support to retrieve type of property from rna path.
Also added proper value accessor for booleans, so now
Object.display.show_shadows shall work nicely.
===================================================================
M release/scripts/startup/bl_ui/properties_view_layer.py
M source/blender/makesrna/intern/rna_layer.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_view_layer.py b/release/scripts/startup/bl_ui/properties_view_layer.py
index be4b9fd2603..de1754a7615 100644
--- a/release/scripts/startup/bl_ui/properties_view_layer.py
+++ b/release/scripts/startup/bl_ui/properties_view_layer.py
@@ -169,8 +169,19 @@ class VIEWLAYER_OT_overrides(ViewLayerButtonsPanel, Panel):
if (dyn_prop.override_mode == 'MULTIPLY'):
subrow.prop(dyn_prop, "multiply_factor", text="")
else:
- # TODO: Show different RNA prop depending on the property.
- subrow.prop(dyn_prop, "value_int", text="")
+ # TODO: Finish this.
+ proptype_map = {
+ 'BOOLEAN': "value_boolean",
+ 'INT': "value_int",
+ 'FLOAT': "value_float",
+ 'STRING': None,
+ 'ENUM': None,
+ 'POINTER': None,
+ 'COLLECTION': None,
+ }
+ value_propname = proptype_map[dyn_prop.data_type]
+ if value_propname is not None:
+ subrow.prop(dyn_prop, value_propname, text="")
ops = row.operator("scene.view_layer_override_remove", text="", icon='ZOOMOUT', emboss=False)
ops.index = index
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index 8d81a5e53c1..42edaef8110 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -866,6 +866,46 @@ static int rna_DynamicOverrideProperty_length(PointerRNA *ptr)
return strlen(dyn_prop->rna_path);
}
+static int rna_DynamicOverrideProperty_data_type_get(PointerRNA *ptr)
+{
+ DynamicOverrideProperty *dyn_prop = ptr->data;
+
+ /* Lazy building of RNA path elements if needed. */
+ if (dyn_prop->data_path.first == NULL) {
+ PointerRNA ptr_data;
+ if (dyn_prop->root == NULL) {
+ PointerRNA ptr_dummy;
+ ID id_dummy;
+ *((short *)id_dummy.name) = dyn_prop->id_type;
+ RNA_id_pointer_create(&id_dummy, &ptr_dummy);
+ RNA_pointer_create(NULL, rna_ID_refine(&ptr_dummy), NULL, &ptr_data);
+ }
+ else {
+ RNA_id_pointer_create(dyn_prop->root, &ptr_data);
+ }
+
+ RNA_path_resolve_elements_no_data(&ptr_data, dyn_prop->rna_path, &dyn_prop->data_path);
+ }
+
+ PropertyElemRNA *prop_elem = dyn_prop->data_path.last;
+
+ /* Note that we have no 'invalid' value for PropertyRNA type... :/ */
+ return prop_elem ? RNA_property_type(prop_elem->prop) : -1;
+
+}
+
+static int rna_DynamicOverrideProperty_value_boolean_get(PointerRNA *ptr)
+{
+ DynamicOverrideProperty *dyn_prop = ptr->data;
+ return dyn_prop->data.i;
+}
+
+static void rna_DynamicOverrideProperty_value_boolean_set(PointerRNA *ptr, int value)
+{
+ DynamicOverrideProperty *dyn_prop = ptr->data;
+ dyn_prop->data.i = value;
+}
+
static int rna_DynamicOverrideProperty_value_int_get(PointerRNA *ptr)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
@@ -2138,7 +2178,19 @@ static void rna_def_dynamic_override_property(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Factor", "Multiplication factor");
RNA_def_property_update(prop, NC_SCENE | ND_DYN_OVERRIDES, NULL);
+ prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, rna_enum_property_type_items);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_enum_funcs(prop, "rna_DynamicOverrideProperty_data_type_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Type", "Data type of the property");
+
/* Accessors for the different value types. */
+ prop = RNA_def_property(srna, "value_boolean", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop,
+ "rna_DynamicOverrideProperty_value_boolean_get",
+ "rna_DynamicOverrideProperty_value_boolean_set");
+ RNA_def_property_update(prop, NC_SCENE | ND_DYN_OVERRIDES, NULL);
+
prop = RNA_def_property(srna, "value_int", PROP_INT, PROP_NONE);
RNA_def_property_int_funcs(prop,
"rna_DynamicOverrideProperty_value_int_get",
More information about the Bf-blender-cvs
mailing list