From 1bcf199d2e8caf028e5935f57dd321019d192b91 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Thu, 9 Feb 2017 17:19:07 +0100 Subject: Support displaying collections in outliner Adds a new outliner display mode "Collections" which draws the active collection. We might want to rename it to "Active Collection" if we don't plan to support showing other collections there. Also added the buttons for restricting visibility and selectability. @dfelinto, code in restrictbutton_collection_hide_cb and restrictbutton_collection_hide_select_cb is duplicated from rna_LayerCollection_hide_update and rna_LayerCollection_hide_select_update, maybe utility functions would be handy for this? --- .../blender/editors/space_outliner/outliner_tree.c | 28 ++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_outliner/outliner_tree.c') 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); } -- cgit v1.2.3