diff options
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_tree.c')
-rw-r--r-- | source/blender/editors/space_outliner/outliner_tree.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index a4f59f60f31..c96d7f970ed 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -904,8 +904,8 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i id = TREESTORE(parent)->id; } - /* One exception */ - if (type == TSE_ID_BASE) { + /* exceptions */ + if (ELEM(type, TSE_ID_BASE, TSE_COLLECTION)) { /* pass */ } else if (id == NULL) { @@ -942,6 +942,9 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i else if (type == TSE_GP_LAYER) { /* pass */ } + else if (type == TSE_COLLECTION) { + /* pass */ + } else if (type == TSE_ID_BASE) { /* pass */ } @@ -1371,6 +1374,24 @@ static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops) } } +static void outliner_add_collections_recursive(SpaceOops *soops, ListBase *tree, ListBase *layer_collections, + TreeElement *parent_ten) +{ + for (LayerCollection *collection = layer_collections->first; collection; collection = collection->next) { + TreeElement *ten = outliner_add_element(soops, tree, NULL, parent_ten, TSE_COLLECTION, 0); + + ten->name = collection->scene_collection->name; + ten->directdata = collection; + + outliner_add_collections_recursive(soops, &ten->subtree, &collection->layer_collections, ten); + } +} + +static void outliner_add_collections(SpaceOops *soops, SceneLayer *layer) +{ + outliner_add_collections_recursive(soops, &soops->tree, &layer->layer_collections, NULL); +} + /* ======================================================= */ /* Generic Tree Building helpers - order these are called is top to bottom */ @@ -1832,6 +1853,9 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SceneLayer *sl, SpaceOops else if (soops->outlinevis == SO_ID_ORPHANS) { outliner_add_orphaned_datablocks(mainvar, soops); } + else if (soops->outlinevis == SO_COLLECTIONS) { + outliner_add_collections(soops, BLI_findlink(&scene->render_layers, scene->active_layer)); + } else { ten = outliner_add_element(soops, &soops->tree, OBACT_NEW, NULL, 0, 0); } |