[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