diff options
Diffstat (limited to 'source/blender/editors/space_outliner/tree/tree_element_overrides.cc')
-rw-r--r-- | source/blender/editors/space_outliner/tree/tree_element_overrides.cc | 41 |
1 files changed, 33 insertions, 8 deletions
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 6b222e877b1..3c561702a43 100644 --- a/source/blender/editors/space_outliner/tree/tree_element_overrides.cc +++ b/source/blender/editors/space_outliner/tree/tree_element_overrides.cc @@ -40,13 +40,24 @@ TreeElementOverridesBase::TreeElementOverridesBase(TreeElement &legacy_te, ID &i : AbstractTreeElement(legacy_te), id_(id) { BLI_assert(legacy_te.store_elem->type == TSE_LIBRARY_OVERRIDE_BASE); - legacy_te.name = IFACE_("Library Overrides"); + if (legacy_te.parent != nullptr && + ELEM(legacy_te.parent->store_elem->type, TSE_SOME_ID, TSE_LAYER_COLLECTION)) + + { + legacy_te.name = IFACE_("Library Overrides"); + } + else { + legacy_te.name = id.name + 2; + } } void TreeElementOverridesBase::expand(SpaceOutliner &space_outliner) const { BLI_assert(id_.override_library != nullptr); + const bool show_system_overrides = (SUPPORT_FILTER_OUTLINER(&space_outliner) && + (space_outliner.filter & SO_FILTER_SHOW_SYSTEM_OVERRIDES) != + 0); PointerRNA idpoin; RNA_id_pointer_create(&id_, &idpoin); @@ -56,15 +67,26 @@ void TreeElementOverridesBase::expand(SpaceOutliner &space_outliner) const for (auto *override_prop : ListBaseWrapper<IDOverrideLibraryProperty>(id_.override_library->properties)) { - if (!BKE_lib_override_rna_property_find( - &idpoin, override_prop, &override_rna_ptr, &override_rna_prop)) { - /* This is fine, override properties list is not always fully up-to-date with current - * RNA/IDProps etc., this gets cleaned up when re-generating the overrides rules, - * no error here. */ - continue; + const bool is_rna_path_valid = BKE_lib_override_rna_property_find( + &idpoin, override_prop, &override_rna_ptr, &override_rna_prop); + if (is_rna_path_valid && !show_system_overrides && + ELEM(override_prop->rna_prop_type, PROP_POINTER, PROP_COLLECTION) && + RNA_struct_is_ID(RNA_property_pointer_type(&override_rna_ptr, override_rna_prop))) { + bool do_continue = true; + for (auto *override_prop_op : + ListBaseWrapper<IDOverrideLibraryPropertyOperation>(override_prop->operations)) { + if ((override_prop_op->flag & IDOVERRIDE_LIBRARY_FLAG_IDPOINTER_MATCH_REFERENCE) == 0) { + do_continue = false; + break; + } + } + + if (do_continue) { + continue; + } } - TreeElementOverridesData data = {id_, *override_prop}; + TreeElementOverridesData data = {id_, *override_prop, is_rna_path_valid}; outliner_add_element( &space_outliner, &legacy_te_.subtree, &data, &legacy_te_, TSE_LIBRARY_OVERRIDE, index++); } @@ -79,6 +101,9 @@ TreeElementOverridesProperty::TreeElementOverridesProperty(TreeElement &legacy_t BLI_assert(legacy_te.store_elem->type == TSE_LIBRARY_OVERRIDE); legacy_te.name = override_prop_.rna_path; + /* Abusing this for now, better way to do it is also pending current refacor of the whole tree + * code to use CPP... */ + legacy_te.directdata = POINTER_FROM_UINT(override_data.is_rna_path_valid); } } // namespace blender::ed::outliner |