[Bf-blender-cvs] [76c9d4db2e1] temp-dynamic-overrides: Dynamic Override Property: Remove Operator

Dalai Felinto noreply at git.blender.org
Thu May 10 00:21:08 CEST 2018


Commit: 76c9d4db2e146676da9734c24f19c7ad472abc7e
Author: Dalai Felinto
Date:   Thu May 10 00:20:46 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rB76c9d4db2e146676da9734c24f19c7ad472abc7e

Dynamic Override Property: Remove Operator

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

M	release/scripts/startup/bl_ui/properties_view_layer.py
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/editors/scene/scene_edit.c
M	source/blender/makesrna/RNA_enum_types.h
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 b3a49e50b73..e51bb4afa4a 100644
--- a/release/scripts/startup/bl_ui/properties_view_layer.py
+++ b/release/scripts/startup/bl_ui/properties_view_layer.py
@@ -149,7 +149,7 @@ class VIEWLAYER_OT_overrides(ViewLayerButtonsPanel, Panel):
         row.label(text="Collection Properties")
 
         if scene.show_view_layer_overrides_collections_property:
-            for dyn_prop in override_set.collection_properties:
+            for i, dyn_prop in enumerate(override_set.collection_properties):
                 box = layout.box()
                 row = box.row()
                 row.prop(dyn_prop, "use", text="")
@@ -158,7 +158,9 @@ class VIEWLAYER_OT_overrides(ViewLayerButtonsPanel, Panel):
                 subrow.label(text=dyn_prop.name, icon='NONE')
                 #subrow.prop(dyn_prop, "override_mode", text="")
                 subrow.prop(dyn_prop, "value_int", text="")
-                row.label(icon='ZOOMOUT')
+                ops = row.operator("scene.view_layer_override_remove", text="", icon='ZOOMOUT', emboss=False)
+                ops.index = i
+                ops.property_type = 'COLLECTION'
 
 
 classes = (
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 10d1543f3d0..bb651ddb5f8 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -181,6 +181,10 @@ struct DynamicOverrideProperty *BKE_view_layer_override_property_add(
         struct PropertyRNA *prop,
         const int index);
 
+bool BKE_view_layer_override_property_remove(
+        struct OverrideSet *override_set,
+        struct DynamicOverrideProperty *dyn_prop);
+
 /* evaluation */
 
 void BKE_layer_eval_view_layer(
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 9fe3f2ea552..4efe244b965 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1851,12 +1851,17 @@ static void override_set_copy_data(OverrideSet *override_set_dst, const Override
 	/* TODO copy properties. */
 }
 
+static void override_set_property_free(DynamicOverrideProperty *dyn_prop)
+{
+	MEM_SAFE_FREE(dyn_prop->rna_path);
+	MEM_SAFE_FREE(dyn_prop->data.str);
+	BLI_freelistN(&dyn_prop->data_path);
+}
+
 static void override_set_properties_free(ListBase *properties)
 {
 	for (DynamicOverrideProperty *dyn_prop = properties->first; dyn_prop; dyn_prop = dyn_prop->next) {
-		MEM_SAFE_FREE(dyn_prop->rna_path);
-		MEM_SAFE_FREE(dyn_prop->data.str);
-		BLI_freelistN(&dyn_prop->data_path);
+		override_set_property_free(dyn_prop);
 	}
 }
 
@@ -2024,6 +2029,26 @@ DynamicOverrideProperty *BKE_view_layer_override_property_add(
 	return dyn_prop;
 }
 
+bool BKE_view_layer_override_property_remove(
+        OverrideSet *override_set,
+        DynamicOverrideProperty *dyn_prop)
+{
+	bool ok = BLI_remlink_safe(&override_set->scene_properties, dyn_prop);
+
+	if (ok == false) {
+		ok = BLI_remlink_safe(&override_set->collection_properties, dyn_prop);
+	}
+
+	if (ok == false) {
+		/* Something went wrong. */
+		return false;
+	}
+
+	override_set_property_free(dyn_prop);
+	MEM_freeN(dyn_prop);
+	return true;
+}
+
 /** \} */
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index f492551f1d6..3b60d147797 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -55,6 +55,7 @@
 
 #include "RNA_access.h"
 #include "RNA_define.h"
+#include "RNA_enum_types.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
@@ -590,7 +591,8 @@ static void SCENE_OT_override_set_collection_unlink(wmOperatorType *ot)
 }
 
 static int view_layer_override_add_exec(bContext *C, wmOperator *UNUSED(op))
-{	PointerRNA ptr;
+{
+	PointerRNA ptr;
 	PropertyRNA *prop;
 	int index;
 
@@ -633,6 +635,74 @@ static void SCENE_OT_view_layer_override_add(wmOperatorType *ot)
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+static int view_layer_override_remove_exec(bContext *C, wmOperator *op)
+{
+	ViewLayer *view_layer = CTX_data_view_layer(C);
+	OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
+
+	if (override_set == NULL) {
+		return OPERATOR_CANCELLED;
+	}
+
+	PropertyRNA *prop = RNA_struct_find_property(op->ptr, "index");
+	if (!RNA_property_is_set(op->ptr, prop)) {
+		BKE_report(op->reports, RPT_ERROR, "No property index defined");
+		return OPERATOR_CANCELLED;
+	}
+
+	const int index = RNA_property_int_get(op->ptr, prop);
+
+	prop = RNA_struct_find_property(op->ptr, "property_type");
+	if (!RNA_property_is_set(op->ptr, prop)) {
+		BKE_report(op->reports, RPT_ERROR, "No property type set");
+		return OPERATOR_CANCELLED;
+	}
+
+	const int property_type = RNA_property_enum_get(op->ptr, prop);
+
+	ListBase *lb[] = {
+		&override_set->scene_properties,
+		&override_set->collection_properties,
+	};
+
+	DynamicOverrideProperty *dyn_prop = BLI_findlink(lb[property_type], index);
+
+	if (dyn_prop == NULL) {
+		BKE_report(op->reports, RPT_ERROR, "No property found");
+		return OPERATOR_CANCELLED;
+	}
+
+	BKE_view_layer_override_property_remove(override_set, dyn_prop);
+	return OPERATOR_FINISHED;
+}
+
+static void SCENE_OT_view_layer_override_remove(wmOperatorType *ot)
+{
+	PropertyRNA *prop;
+
+	/* identifiers */
+	ot->name = "Remove View Layer Override";
+	ot->description = "Remove override property in a view layer override set";
+	ot->idname = "SCENE_OT_view_layer_override_remove";
+
+	/* api callbacks */
+	ot->exec = view_layer_override_remove_exec;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+	prop = RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Property Index",
+	            "Index of the property within its list", 0, INT_MAX);
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
+	prop = RNA_def_enum(ot->srna,
+	             "property_type",
+	             rna_enum_dynamic_override_property_type_items,
+	             DYN_OVERRIDE_PROP_TYPE_SCENE,
+	             "Property Type",
+	             "Whether the property removed is a scene or a collection property");
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
+}
+
 void ED_operatortypes_scene(void)
 {
 	WM_operatortype_append(SCENE_OT_new);
@@ -642,4 +712,5 @@ void ED_operatortypes_scene(void)
 	WM_operatortype_append(SCENE_OT_override_set_collection_link);
 	WM_operatortype_append(SCENE_OT_override_set_collection_unlink);
 	WM_operatortype_append(SCENE_OT_view_layer_override_add);
+	WM_operatortype_append(SCENE_OT_view_layer_override_remove);
 }
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index 07663b39649..add7dbb3513 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -64,6 +64,7 @@ extern const EnumPropertyItem rna_enum_sequence_modifier_type_items[];
 
 extern const EnumPropertyItem rna_enum_collection_type_items[];
 extern const EnumPropertyItem rna_enum_layer_collection_mode_settings_type_items[];
+extern const EnumPropertyItem rna_enum_dynamic_override_property_type_items[];
 
 extern const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[];
 extern const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[];
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index 18f23b19251..8b3b1ddb2ad 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -53,6 +53,12 @@ const EnumPropertyItem rna_enum_collection_type_items[] = {
 	{0, NULL, 0, NULL, NULL}
 };
 
+const EnumPropertyItem rna_enum_dynamic_override_property_type_items[] = {
+	{DYN_OVERRIDE_PROP_TYPE_SCENE, "SCENE", 0, "Scene", ""},
+	{DYN_OVERRIDE_PROP_TYPE_COLLECTION, "COLLECTION", 0, "Collection", ""},
+	{0, NULL, 0, NULL, NULL}
+};
+
 #ifdef RNA_RUNTIME
 
 #include "DNA_group_types.h"
@@ -2094,6 +2100,13 @@ static void rna_def_dynamic_override_property(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the overridden property");
 	RNA_def_property_update(prop, NC_SCENE | ND_DYN_OVERRIDES, NULL);
 
+	prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "property_type");
+	RNA_def_property_enum_items(prop, rna_enum_dynamic_override_property_type_items);
+	RNA_def_property_ui_text(prop, "Type",
+	                         "Whether the property affects the entire scene or the collection objects only");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
 	/* Accessors for the different value types. */
 	prop = RNA_def_property(srna, "value_int", PROP_INT, PROP_NONE);
 	RNA_def_property_int_funcs(prop,



More information about the Bf-blender-cvs mailing list