[Bf-blender-cvs] [aaa02984d39] master: Cleanup: Outliner scenes display mode

Nathan Craddock noreply at git.blender.org
Sat Dec 5 02:00:39 CET 2020


Commit: aaa02984d3978bcf94d9a98d1ac9139d5fbfca2d
Author: Nathan Craddock
Date:   Thu Dec 3 10:34:09 2020 -0700
Branches: master
https://developer.blender.org/rBaaa02984d3978bcf94d9a98d1ac9139d5fbfca2d

Cleanup: Outliner scenes display mode

No functional changes. The scene display building code has been moved
to C++.

Differential Revision: https://developer.blender.org/D9741

===================================================================

M	source/blender/editors/space_outliner/CMakeLists.txt
M	source/blender/editors/space_outliner/outliner_tree.c
M	source/blender/editors/space_outliner/tree/tree_display.cc
M	source/blender/editors/space_outliner/tree/tree_display.hh
A	source/blender/editors/space_outliner/tree/tree_display_scenes.cc

===================================================================

diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt
index 363e8ed8bb7..6b941eb3e62 100644
--- a/source/blender/editors/space_outliner/CMakeLists.txt
+++ b/source/blender/editors/space_outliner/CMakeLists.txt
@@ -50,6 +50,7 @@ set(SRC
   tree/tree_display_view_layer.cc
   tree/tree_display_sequencer.cc
   tree/tree_display_orphaned.cc
+  tree/tree_display_scenes.cc
 
   outliner_intern.h
   tree/tree_display.h
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index f3c982d5995..85203d1f4dd 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -2061,7 +2061,7 @@ void outliner_build_tree(Main *mainvar,
                          SpaceOutliner *space_outliner,
                          ARegion *region)
 {
-  TreeElement *te = NULL, *ten;
+  TreeElement *ten;
   TreeStoreElem *tselem;
   /* on first view, we open scenes */
   int show_opened = !space_outliner->treestore || !BLI_mempool_len(space_outliner->treestore);
@@ -2111,18 +2111,8 @@ void outliner_build_tree(Main *mainvar,
     BLI_assert(false);
   }
   else if (space_outliner->outlinevis == SO_SCENES) {
-    Scene *sce;
-    for (sce = mainvar->scenes.first; sce; sce = sce->id.next) {
-      te = outliner_add_element(space_outliner, &space_outliner->tree, sce, NULL, 0, 0);
-      tselem = TREESTORE(te);
-
-      /* New scene elements open by default */
-      if ((sce == scene && show_opened) || !tselem->used) {
-        tselem->flag &= ~TSE_CLOSED;
-      }
-
-      outliner_make_object_parent_hierarchy(&te->subtree);
-    }
+    /* Ported to new tree-display, should be built there already. */
+    BLI_assert(false);
   }
   else if (space_outliner->outlinevis == SO_SEQUENCE) {
     /* Ported to new tree-display, should be built there already. */
diff --git a/source/blender/editors/space_outliner/tree/tree_display.cc b/source/blender/editors/space_outliner/tree/tree_display.cc
index bf976d79103..f94c643d2bb 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display.cc
@@ -32,6 +32,7 @@ TreeDisplay *outliner_tree_display_create(eSpaceOutliner_Mode mode, SpaceOutline
 
   switch (mode) {
     case SO_SCENES:
+      tree_display = new TreeDisplayScenes(*space_outliner);
       break;
     case SO_LIBRARIES:
       tree_display = new TreeDisplayLibraries(*space_outliner);
diff --git a/source/blender/editors/space_outliner/tree/tree_display.hh b/source/blender/editors/space_outliner/tree/tree_display.hh
index a933a8d7609..4a2559d94ab 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.hh
+++ b/source/blender/editors/space_outliner/tree/tree_display.hh
@@ -150,4 +150,17 @@ class TreeDisplayIDOrphans final : public AbstractTreeDisplay {
   bool datablock_has_orphans(ListBase &) const;
 };
 
+/* -------------------------------------------------------------------- */
+/* Scenes Tree-Display */
+
+/**
+ * \brief Tree-Display for the Scenes display mode
+ */
+class TreeDisplayScenes final : public AbstractTreeDisplay {
+ public:
+  TreeDisplayScenes(SpaceOutliner &space_outliner);
+
+  ListBase buildTree(const TreeSourceData &source_data) override;
+};
+
 }  // namespace blender::ed::outliner
diff --git a/source/blender/editors/space_outliner/tree/tree_display_scenes.cc b/source/blender/editors/space_outliner/tree/tree_display_scenes.cc
new file mode 100644
index 00000000000..c4a5688504d
--- /dev/null
+++ b/source/blender/editors/space_outliner/tree/tree_display_scenes.cc
@@ -0,0 +1,63 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** \file
+ * \ingroup spoutliner
+ */
+
+#include "BLI_listbase.h"
+#include "BLI_listbase_wrapper.hh"
+#include "BLI_mempool.h"
+
+#include "BKE_main.h"
+
+#include "../outliner_intern.h"
+#include "tree_display.hh"
+
+namespace blender::ed::outliner {
+
+/* Convenience/readability. */
+template<typename T> using List = ListBaseWrapper<T>;
+
+TreeDisplayScenes::TreeDisplayScenes(SpaceOutliner &space_outliner)
+    : AbstractTreeDisplay(space_outliner)
+{
+}
+
+ListBase TreeDisplayScenes::buildTree(const TreeSourceData &source_data)
+{
+  /* On first view we open scenes. */
+  const int show_opened = !space_outliner_.treestore ||
+                          !BLI_mempool_len(space_outliner_.treestore);
+  ListBase tree = {nullptr};
+
+  for (ID *id : List<ID>(source_data.bmain->scenes)) {
+    Scene *scene = reinterpret_cast<Scene *>(id);
+    TreeElement *te = outliner_add_element(&space_outliner_, &tree, scene, NULL, 0, 0);
+    TreeStoreElem *tselem = TREESTORE(te);
+
+    /* New scene elements open by default */
+    if ((scene == source_data.scene && show_opened) || !tselem->used) {
+      tselem->flag &= ~TSE_CLOSED;
+    }
+
+    outliner_make_object_parent_hierarchy(&te->subtree);
+  }
+
+  return tree;
+}
+
+}  // namespace blender::ed::outliner
\ No newline at end of file



More information about the Bf-blender-cvs mailing list