diff --git a/source/blender/editors/space_outliner/outliner_intern.hh b/source/blender/editors/space_outliner/outliner_intern.hh index 6657e356ba4..4bbcf20d440 100644 --- a/source/blender/editors/space_outliner/outliner_intern.hh +++ b/source/blender/editors/space_outliner/outliner_intern.hh @@ -315,6 +315,11 @@ struct ParticleSystemElementCreateData { ParticleSystem *psys; }; +struct ViewLayerElementCreateData { + Scene *scene; + ViewLayer *view_layer; +}; + TreeTraversalAction outliner_collect_selected_collections(TreeElement *te, void *customdata); TreeTraversalAction outliner_collect_selected_objects(TreeElement *te, void *customdata); diff --git a/source/blender/editors/space_outliner/outliner_tree.cc b/source/blender/editors/space_outliner/outliner_tree.cc index 9acb814e1c9..09f92045eb7 100644 --- a/source/blender/editors/space_outliner/outliner_tree.cc +++ b/source/blender/editors/space_outliner/outliner_tree.cc @@ -258,6 +258,9 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, else if (type == TSE_LINKED_PSYS) { id = &static_cast(idv)->object->id; } + else if (type == TSE_R_LAYER) { + id = &static_cast(idv)->scene->id; + } /* exceptions */ if (ELEM(type, TSE_ID_BASE, TSE_GENERIC_LABEL)) { @@ -325,7 +328,7 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, else if (type == TSE_LINKED_PSYS) { /* pass */ } - else if (ELEM(type, TSE_R_LAYER_BASE)) { + else if (ELEM(type, TSE_R_LAYER, TSE_R_LAYER_BASE)) { /* pass */ } else if (type == TSE_SOME_ID) { @@ -383,6 +386,7 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, TSE_DEFGROUP_BASE, TSE_GPENCIL_EFFECT, TSE_GPENCIL_EFFECT_BASE, + TSE_R_LAYER, TSE_R_LAYER_BASE)) { BLI_assert_msg(false, "Element type should already use new AbstractTreeElement design"); diff --git a/source/blender/editors/space_outliner/tree/tree_element.cc b/source/blender/editors/space_outliner/tree/tree_element.cc index dec12ecb76a..6726b2c4c29 100644 --- a/source/blender/editors/space_outliner/tree/tree_element.cc +++ b/source/blender/editors/space_outliner/tree/tree_element.cc @@ -80,6 +80,11 @@ std::unique_ptr AbstractTreeElement::createFromType(const i return std::make_unique(legacy_te, *static_cast(idv)); case TSE_R_LAYER_BASE: return std::make_unique(legacy_te, *static_cast(idv)); + case TSE_R_LAYER: { + ViewLayerElementCreateData *view_layer_data = static_cast(idv); + return std::make_unique( + legacy_te, *view_layer_data->scene, *view_layer_data->view_layer); + } case TSE_SCENE_COLLECTION_BASE: return std::make_unique(legacy_te, *static_cast(idv)); case TSE_SCENE_OBJECTS_BASE: diff --git a/source/blender/editors/space_outliner/tree/tree_element_view_layer.cc b/source/blender/editors/space_outliner/tree/tree_element_view_layer.cc index 2a0a7ff8421..d2963304d8b 100644 --- a/source/blender/editors/space_outliner/tree/tree_element_view_layer.cc +++ b/source/blender/editors/space_outliner/tree/tree_element_view_layer.cc @@ -30,11 +30,21 @@ TreeElementViewLayerBase::TreeElementViewLayerBase(TreeElement &legacy_te, Scene void TreeElementViewLayerBase::expand(SpaceOutliner &space_outliner) const { for (auto *view_layer : ListBaseWrapper(scene_.view_layers)) { - TreeElement *tenlay = outliner_add_element( - &space_outliner, &legacy_te_.subtree, &scene_, &legacy_te_, TSE_R_LAYER, 0); - tenlay->name = view_layer->name; - tenlay->directdata = view_layer; + ViewLayerElementCreateData view_layer_data = {&scene_, view_layer}; + + outliner_add_element( + &space_outliner, &legacy_te_.subtree, &view_layer_data, &legacy_te_, TSE_R_LAYER, 0); } } +TreeElementViewLayer::TreeElementViewLayer(TreeElement &legacy_te, + Scene & /* scene */, + ViewLayer &view_layer) + : AbstractTreeElement(legacy_te), /* scene_(scene), */ view_layer_(view_layer) +{ + BLI_assert(legacy_te.store_elem->type == TSE_R_LAYER); + legacy_te.name = view_layer_.name; + legacy_te.directdata = &view_layer_; +} + } // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_view_layer.hh b/source/blender/editors/space_outliner/tree/tree_element_view_layer.hh index 7f973bda217..3b6969e05c2 100644 --- a/source/blender/editors/space_outliner/tree/tree_element_view_layer.hh +++ b/source/blender/editors/space_outliner/tree/tree_element_view_layer.hh @@ -21,4 +21,13 @@ class TreeElementViewLayerBase final : public AbstractTreeElement { void expand(SpaceOutliner &) const override; }; +class TreeElementViewLayer final : public AbstractTreeElement { + /* Not needed right now, avoid unused member variable warning. */ + // Scene &scene_; + ViewLayer &view_layer_; + + public: + TreeElementViewLayer(TreeElement &legacy_te, Scene &scene, ViewLayer &view_layer); +}; + } // namespace blender::ed::outliner