From 715bc6b2004d322ae81e9397a39eae748ef4334a Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Tue, 4 Jul 2023 15:02:25 +0200 Subject: [PATCH] Outliner: Fix assert on unreachable code in LibOverride view. Collections also suport replacing their values in some case (e.g. when it's a collection of ID pointers). --- .../editors/space_outliner/outliner_draw.cc | 32 ++++++++++--------- .../tree/tree_element_overrides.cc | 25 ++++++++++++--- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner_draw.cc b/source/blender/editors/space_outliner/outliner_draw.cc index 31d32184a3b..ce9651118a5 100644 --- a/source/blender/editors/space_outliner/outliner_draw.cc +++ b/source/blender/editors/space_outliner/outliner_draw.cc @@ -1853,21 +1853,23 @@ static void outliner_draw_overrides_rna_buts(uiBlock *block, tree_element_cast(te)) { StringRefNull op_label = override_op_elem->getOverrideOperationLabel(); - uiDefBut(block, - UI_BTYPE_LABEL, - 0, - op_label.c_str(), - x + pad_x, - te->ys + pad_y, - item_max_width, - item_height, - nullptr, - 0, - 0, - 0, - 0, - ""); - continue; + if (!op_label.is_empty()) { + uiDefBut(block, + UI_BTYPE_LABEL, + 0, + op_label.c_str(), + x + pad_x, + te->ys + pad_y, + item_max_width, + item_height, + nullptr, + 0, + 0, + 0, + 0, + ""); + continue; + } } PointerRNA *ptr = &override_elem->override_rna_ptr; diff --git a/source/blender/editors/space_outliner/tree/tree_element_overrides.cc b/source/blender/editors/space_outliner/tree/tree_element_overrides.cc index 33b4740f430..e88d348d161 100644 --- a/source/blender/editors/space_outliner/tree/tree_element_overrides.cc +++ b/source/blender/editors/space_outliner/tree/tree_element_overrides.cc @@ -230,12 +230,27 @@ TreeElementOverridesPropertyOperation::TreeElementOverridesPropertyOperation( StringRefNull TreeElementOverridesPropertyOperation::getOverrideOperationLabel() const { - if (ELEM(operation_->operation, LIBOVERRIDE_OP_INSERT_AFTER, LIBOVERRIDE_OP_INSERT_BEFORE)) { - return TIP_("Added through override"); + switch (operation_->operation) { + case LIBOVERRIDE_OP_INSERT_AFTER: + case LIBOVERRIDE_OP_INSERT_BEFORE: + return TIP_("Added through override"); + case LIBOVERRIDE_OP_REPLACE: + /* Returning nothing so that drawing code shows actual RNA button instead. */ + return {}; + /* Following cases are not expected in regular situation, but could be found in experimental + * files. */ + case LIBOVERRIDE_OP_NOOP: + return TIP_("Protected from override"); + case LIBOVERRIDE_OP_ADD: + return TIP_("Additive override"); + case LIBOVERRIDE_OP_SUBTRACT: + return TIP_("Substractive override"); + case LIBOVERRIDE_OP_MULTIPLY: + return TIP_("Multiplicative override"); + default: + BLI_assert_unreachable(); + return {}; } - - BLI_assert_unreachable(); - return {}; } std::optional TreeElementOverridesPropertyOperation::getIcon() const