[Bf-blender-cvs] [080de5d7e70] temp-library-overrides-outliner: Merge branch 'master' into temp-library-overrides-outliner
Julian Eisel
noreply at git.blender.org
Thu Mar 3 17:44:23 CET 2022
Commit: 080de5d7e7056117833ed529584abf619939e434
Author: Julian Eisel
Date: Thu Mar 3 17:34:13 2022 +0100
Branches: temp-library-overrides-outliner
https://developer.blender.org/rB080de5d7e7056117833ed529584abf619939e434
Merge branch 'master' into temp-library-overrides-outliner
===================================================================
===================================================================
diff --cc source/blender/editors/space_outliner/tree/tree_element_overrides.cc
index 97279df560e,64c390d29b3..548e6bd73dc
--- a/source/blender/editors/space_outliner/tree/tree_element_overrides.cc
+++ b/source/blender/editors/space_outliner/tree/tree_element_overrides.cc
@@@ -38,66 -38,9 +38,66 @@@ TreeElementOverridesBase::TreeElementOv
}
}
+static void expand_from_rna_path(SpaceOutliner &space_outliner,
+ TreeElement &path_root_te,
+ TreeElementOverridesData &override_data,
+ int *index)
+{
+ PointerRNA idpoin;
+ RNA_id_pointer_create(&override_data.id, &idpoin);
+
+ TreeElement *parent_to_expand = &path_root_te;
+
+ ListBase path_elems{nullptr};
+ RNA_path_resolve_elements(&idpoin, override_data.override_property.rna_path, &path_elems);
+
+ /* Iterate the properties represented by the path. */
+ LISTBASE_FOREACH (PropertyElemRNA *, prop_ptr_from_path, &path_elems) {
+ /* Create containers for all items that are not leafs (i.e. that are not simple properties, but
+ * may contain child properties). */
+ if (prop_ptr_from_path->next) {
+ PropertyPointerRNA property_and_ptr = {prop_ptr_from_path->ptr, prop_ptr_from_path->prop};
+ TreeElement *container_te = outliner_add_element(&space_outliner,
+ &parent_to_expand->subtree,
+ &property_and_ptr,
+ parent_to_expand,
+ TSE_LIBRARY_OVERRIDE_RNA_CONTAINER,
+ *index++);
+
+ parent_to_expand = container_te;
+ /* Iterate over the children the container item expanded, and continue building the path for
+ * the item that matches the current path segment. */
+ LISTBASE_FOREACH (TreeElement *, container_item_te, &container_te->subtree) {
+ if (auto *col_item_te = tree_element_cast<TreeElementOverrideRNACollectionItem>(
+ container_item_te)) {
+ /* Does the collection item RNA pointer match the RNA pointer of the next property in the
+ * path? */
+ if (col_item_te->item_ptr.data == prop_ptr_from_path->next->ptr.data) {
+ parent_to_expand = &col_item_te->getLegacyElement();
+ }
+ }
+ }
+
+ continue;
+ }
+
+ /* The actually overridden property. Must be a "leaf" property (end of the path). */
+ BLI_assert(prop_ptr_from_path->next == nullptr);
+ /* The actual override. */
+ outliner_add_element(&space_outliner,
+ &parent_to_expand->subtree,
+ &override_data,
+ parent_to_expand,
+ TSE_LIBRARY_OVERRIDE,
+ *index++);
+ }
+
+ BLI_freelistN(&path_elems);
+}
+
void TreeElementOverridesBase::expand(SpaceOutliner &space_outliner) const
{
- BLI_assert(id_.override_library != nullptr);
+ BLI_assert(id.override_library != nullptr);
const bool show_system_overrides = (SUPPORT_FILTER_OUTLINER(&space_outliner) &&
(space_outliner.filter & SO_FILTER_SHOW_SYSTEM_OVERRIDES) !=
@@@ -107,10 -50,10 +107,10 @@@
PointerRNA override_rna_ptr;
PropertyRNA *override_rna_prop;
- short index = 0;
+ int index = 0;
- for (auto *override_prop :
+ for (IDOverrideLibraryProperty *override_prop :
- ListBaseWrapper<IDOverrideLibraryProperty>(id_.override_library->properties)) {
+ ListBaseWrapper<IDOverrideLibraryProperty>(id.override_library->properties)) {
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 &&
@@@ -130,9 -73,9 +130,9 @@@
}
}
- TreeElementOverridesData data = {id, *override_prop, is_rna_path_valid};
- outliner_add_element(
- &space_outliner, &legacy_te_.subtree, &data, &legacy_te_, TSE_LIBRARY_OVERRIDE, index++);
+ TreeElementOverridesData override_data = {
- id_, *override_prop, override_rna_ptr, *override_rna_prop, is_rna_path_valid};
++ id, *override_prop, override_rna_ptr, *override_rna_prop, is_rna_path_valid};
+ expand_from_rna_path(space_outliner, legacy_te_, override_data, &index);
}
}
More information about the Bf-blender-cvs
mailing list