[Bf-blender-cvs] [b0332b84907] temp-dynamic-overrides: Finish the operator to add overrides
Dalai Felinto
noreply at git.blender.org
Thu May 10 13:07:34 CEST 2018
Commit: b0332b84907a5b64513ec356a2a7bdbc9e2cc1bd
Author: Dalai Felinto
Date: Thu May 10 13:07:28 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rBb0332b84907a5b64513ec356a2a7bdbc9e2cc1bd
Finish the operator to add overrides
You now can create a new override set, or pick an existent one.
===================================================================
M source/blender/editors/scene/scene_edit.c
===================================================================
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index 3b60d147797..2735f3026b6 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -590,38 +590,122 @@ static void SCENE_OT_override_set_collection_unlink(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-static int view_layer_override_add_exec(bContext *C, wmOperator *UNUSED(op))
-{
+static struct {
PointerRNA ptr;
PropertyRNA *prop;
int index;
+ bool set;
+} override_property_data = { .set = false };
- /* try to reset the nominated setting to its default value */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+static int view_layer_override_add_exec(bContext *C, wmOperator *op)
+{
+ if (override_property_data.set == false) {
+ UI_context_active_but_prop_get(C,
+ &override_property_data.ptr,
+ &override_property_data.prop,
+ &override_property_data.index);
+ }
+ override_property_data.set = false;
- ID *id = ptr.id.data;
+ ID *id = override_property_data.ptr.id.data;
BLI_assert(id != NULL);
ViewLayer *view_layer = CTX_data_view_layer(C);
- OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
+ OverrideSet *override_set;
+
+ if (RNA_boolean_get(op->ptr, "is_new")) {
+ char new_override_set_name[MAX_NAME];
+ RNA_string_get(op->ptr, "new_override_set_name", new_override_set_name);
+ override_set = BKE_view_layer_override_set_add(view_layer, new_override_set_name);
+ }
+ else if (BLI_listbase_is_empty(&view_layer->override_sets)) {
+ override_set = BKE_view_layer_override_set_add(view_layer, "Override Set");
+ }
+ else {
+ const int override_set_index = RNA_int_get(op->ptr, "override_set_index");
+ override_set = BLI_findlink(&view_layer->override_sets, override_set_index);
+ }
if (override_set == NULL) {
- /* TODO - handle override sets */
- BLI_assert(!"Implement this");
+ BKE_report(op->reports, RPT_ERROR, "No valid override set selected");
+ return OPERATOR_CANCELLED;
}
- BKE_view_layer_override_property_add(override_set, &ptr, prop, index);
+ BKE_view_layer_override_property_add(override_set,
+ &override_property_data.ptr,
+ override_property_data.prop,
+ override_property_data.index);
+
+ WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, CTX_data_scene(C));
return OPERATOR_FINISHED;
}
static int view_layer_override_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
- /* TODO: Option to add a new override set or add to existent one. */
- return view_layer_override_add_exec(C, op);
+ PropertyRNA *prop;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ if (RNA_boolean_get(op->ptr, "is_new")) {
+ prop = RNA_struct_find_property(op->ptr, "new_override_set_name");
+ if (!RNA_property_is_set(op->ptr, prop)) {
+ /* The dialog popup messes with the context prop/ptr, so we need to pre-store it
+ * to re-access it from the exec function. */
+ UI_context_active_but_prop_get(C,
+ &override_property_data.ptr,
+ &override_property_data.prop,
+ &override_property_data.index);
+ override_property_data.set = true;
+ return WM_operator_props_dialog_popup(C, op, 10 * UI_UNIT_X, 5 * UI_UNIT_Y);
+ }
+ }
+ override_property_data.set = false;
+
+ if (BLI_listbase_is_empty(&view_layer->override_sets)) {
+ return view_layer_override_add_exec(C, op);
+ }
+
+ prop = RNA_struct_find_property(op->ptr, "override_set_index");
+ if (RNA_property_is_set(op->ptr, prop)) {
+ return view_layer_override_add_exec(C, op);
+ }
+
+ uiPopupMenu *pup;
+ uiLayout *layout;
+
+ /* Build the menus. */
+ pup = UI_popup_menu_begin(C, IFACE_("Override Property in Set"), ICON_NONE);
+ layout = UI_popup_menu_layout(pup);
+
+ uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT);
+
+ int i = 0;
+ for (OverrideSet *override_set = view_layer->override_sets.first; override_set; override_set = override_set->next) {
+ uiItemIntO(layout,
+ override_set->name,
+ ICON_NONE,
+ "SCENE_OT_view_layer_override_add",
+ "override_set_index",
+ i++);
+ }
+
+ uiItemS(layout);
+
+ uiItemBooleanO(layout,
+ "New Override Set",
+ ICON_ZOOMIN,
+ "SCENE_OT_view_layer_override_add",
+ "is_new",
+ true);
+
+ UI_popup_menu_end(C, pup);
+
+ return OPERATOR_INTERFACE;
}
static void SCENE_OT_view_layer_override_add(wmOperatorType *ot)
{
+ PropertyRNA *prop;
+
/* identifiers */
ot->name = "Add View Layer Override";
ot->description = "Override property in a view layer override set";
@@ -633,6 +717,15 @@ static void SCENE_OT_view_layer_override_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ prop = RNA_def_int(ot->srna, "override_set_index", 0, 0, INT_MAX,
+ "Override Set Index", "Index of the override set to add the property", 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
+ prop = RNA_def_boolean(ot->srna, "is_new", false, "New", "Add a new override set");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
+ prop = RNA_def_string(ot->srna, "new_override_set_name", "Override Set", MAX_NAME, "Name",
+ "Name of the newly added override set");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
static int view_layer_override_remove_exec(bContext *C, wmOperator *op)
More information about the Bf-blender-cvs
mailing list