[Bf-blender-cvs] [13fe40b5d0c] temp-outliner-library-override-hierarchy: Add toggle for Library Overrides view mode

Julian Eisel noreply at git.blender.org
Wed Mar 9 18:27:20 CET 2022


Commit: 13fe40b5d0c54d2e3e021c9007bfc0b707f8209b
Author: Julian Eisel
Date:   Wed Mar 9 18:08:45 2022 +0100
Branches: temp-outliner-library-override-hierarchy
https://developer.blender.org/rB13fe40b5d0c54d2e3e021c9007bfc0b707f8209b

Add toggle for Library Overrides view mode

Adds a menu to choose between Properties and Hierarchy display mode.
Each is implemented as separate tree-display for now.

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

M	release/scripts/startup/bl_ui/space_outliner.py
M	source/blender/editors/space_outliner/CMakeLists.txt
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_override_library_hierarchy.cc
R091	source/blender/editors/space_outliner/tree/tree_display_override_library.cc	source/blender/editors/space_outliner/tree/tree_display_override_library_properties.cc
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_space.c

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

diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py
index 9d3f20ce4a4..f80e07213f9 100644
--- a/release/scripts/startup/bl_ui/space_outliner.py
+++ b/release/scripts/startup/bl_ui/space_outliner.py
@@ -22,6 +22,8 @@ class OUTLINER_HT_header(Header):
 
         if display_mode == 'DATA_API':
             OUTLINER_MT_editor_menus.draw_collapsible(context, layout)
+        if display_mode == 'LIBRARY_OVERRIDES':
+            layout.prop(space, "lib_override_view_mode", text="")
 
         layout.separator_spacer()
 
diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt
index a91de37fa76..b415ebd9d86 100644
--- a/source/blender/editors/space_outliner/CMakeLists.txt
+++ b/source/blender/editors/space_outliner/CMakeLists.txt
@@ -36,7 +36,8 @@ set(SRC
   tree/tree_display_data.cc
   tree/tree_display_libraries.cc
   tree/tree_display_orphaned.cc
-  tree/tree_display_override_library.cc
+  tree/tree_display_override_library_properties.cc
+  tree/tree_display_override_library_hierarchy.cc
   tree/tree_display_scenes.cc
   tree/tree_display_sequencer.cc
   tree/tree_display_view_layer.cc
diff --git a/source/blender/editors/space_outliner/tree/tree_display.cc b/source/blender/editors/space_outliner/tree/tree_display.cc
index f9141dffd6a..d1fb1a20b0a 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display.cc
@@ -30,7 +30,13 @@ std::unique_ptr<AbstractTreeDisplay> AbstractTreeDisplay::createFromDisplayMode(
     case SO_ID_ORPHANS:
       return std::make_unique<TreeDisplayIDOrphans>(space_outliner);
     case SO_OVERRIDES_LIBRARY:
-      return std::make_unique<TreeDisplayOverrideLibrary>(space_outliner);
+      switch ((eSpaceOutliner_LibOverrideViewMode)space_outliner.lib_override_view_mode) {
+        case SO_LIB_OVERRIDE_VIEW_PROPERTIES:
+          return std::make_unique<TreeDisplayOverrideLibraryProperties>(space_outliner);
+        case SO_LIB_OVERRIDE_VIEW_HIERARCHY:
+          return std::make_unique<TreeDisplayOverrideLibraryHierarchy>(space_outliner);
+      }
+      break;
     case SO_VIEW_LAYER:
       return std::make_unique<TreeDisplayViewLayer>(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 bdca1954a9c..2fde6d3b73f 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.hh
+++ b/source/blender/editors/space_outliner/tree/tree_display.hh
@@ -127,11 +127,11 @@ class TreeDisplayLibraries final : public AbstractTreeDisplay {
 /* Library Overrides Tree-Display. */
 
 /**
- * \brief Tree-Display for the Library Overrides display mode.
+ * \brief Tree-Display for the Library Overrides display mode, Properties view mode.
  */
-class TreeDisplayOverrideLibrary final : public AbstractTreeDisplay {
+class TreeDisplayOverrideLibraryProperties final : public AbstractTreeDisplay {
  public:
-  TreeDisplayOverrideLibrary(SpaceOutliner &space_outliner);
+  TreeDisplayOverrideLibraryProperties(SpaceOutliner &space_outliner);
 
   ListBase buildTree(const TreeSourceData &source_data) override;
 
@@ -141,6 +141,16 @@ class TreeDisplayOverrideLibrary final : public AbstractTreeDisplay {
   short id_filter_get() const;
 };
 
+/**
+ * \brief Tree-Display for the Library Overrides display mode, Hierarchy view mode.
+ */
+class TreeDisplayOverrideLibraryHierarchy final : public AbstractTreeDisplay {
+ public:
+  TreeDisplayOverrideLibraryHierarchy(SpaceOutliner &space_outliner);
+
+  ListBase buildTree(const TreeSourceData &source_data) override;
+};
+
 /* -------------------------------------------------------------------- */
 /* Video Sequencer Tree-Display */
 
diff --git a/source/blender/editors/space_outliner/tree/tree_display_override_library_hierarchy.cc b/source/blender/editors/space_outliner/tree/tree_display_override_library_hierarchy.cc
new file mode 100644
index 00000000000..c4870fe3b6b
--- /dev/null
+++ b/source/blender/editors/space_outliner/tree/tree_display_override_library_hierarchy.cc
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/** \file
+ * \ingroup spoutliner
+ */
+
+#include "BLI_listbase.h"
+
+#include "tree_display.hh"
+
+namespace blender::ed::outliner {
+
+TreeDisplayOverrideLibraryHierarchy::TreeDisplayOverrideLibraryHierarchy(
+    SpaceOutliner &space_outliner)
+    : AbstractTreeDisplay(space_outliner)
+{
+}
+
+ListBase TreeDisplayOverrideLibraryHierarchy::buildTree(const TreeSourceData & /*source_data*/)
+{
+  ListBase tree = {nullptr};
+  return tree;
+}
+
+}  // namespace blender::ed::outliner
diff --git a/source/blender/editors/space_outliner/tree/tree_display_override_library.cc b/source/blender/editors/space_outliner/tree/tree_display_override_library_properties.cc
similarity index 91%
rename from source/blender/editors/space_outliner/tree/tree_display_override_library.cc
rename to source/blender/editors/space_outliner/tree/tree_display_override_library_properties.cc
index f94727ba356..10b00c2e9cb 100644
--- a/source/blender/editors/space_outliner/tree/tree_display_override_library.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display_override_library_properties.cc
@@ -25,12 +25,12 @@ namespace blender::ed::outliner {
 /* Convenience/readability. */
 template<typename T> using List = ListBaseWrapper<T>;
 
-TreeDisplayOverrideLibrary::TreeDisplayOverrideLibrary(SpaceOutliner &space_outliner)
+TreeDisplayOverrideLibraryProperties::TreeDisplayOverrideLibraryProperties(SpaceOutliner &space_outliner)
     : AbstractTreeDisplay(space_outliner)
 {
 }
 
-ListBase TreeDisplayOverrideLibrary::buildTree(const TreeSourceData &source_data)
+ListBase TreeDisplayOverrideLibraryProperties::buildTree(const TreeSourceData &source_data)
 {
   ListBase tree = {nullptr};
 
@@ -94,7 +94,7 @@ ListBase TreeDisplayOverrideLibrary::buildTree(const TreeSourceData &source_data
   return tree;
 }
 
-TreeElement *TreeDisplayOverrideLibrary::add_library_contents(Main &mainvar,
+TreeElement *TreeDisplayOverrideLibraryProperties::add_library_contents(Main &mainvar,
                                                               ListBase &lb,
                                                               Library *lib)
 {
@@ -170,7 +170,7 @@ TreeElement *TreeDisplayOverrideLibrary::add_library_contents(Main &mainvar,
   return tenlib;
 }
 
-short TreeDisplayOverrideLibrary::id_filter_get() const
+short TreeDisplayOverrideLibraryProperties::id_filter_get() const
 {
   if (space_outliner_.filter & SO_FILTER_ID_TYPE) {
     return space_outliner_.filter_id_type;
@@ -178,7 +178,7 @@ short TreeDisplayOverrideLibrary::id_filter_get() const
   return 0;
 }
 
-bool TreeDisplayOverrideLibrary::override_library_id_filter_poll(const Library *lib, ID *id) const
+bool TreeDisplayOverrideLibraryProperties::override_library_id_filter_poll(const Library *lib, ID *id) const
 {
   if (id->lib != lib) {
     return false;
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index e6c163d94ba..6bdcf74e1cf 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -280,8 +280,12 @@ typedef struct SpaceOutliner {
   char search_string[64];
   struct TreeStoreElem search_tse;
 
-  short flag, outlinevis, storeflag;
+  short flag;
+  short outlinevis;
+  short lib_override_view_mode;
+  short storeflag;
   char search_flags;
+  char _pad[6];
 
   /** Selection syncing flag (#WM_OUTLINER_SYNC_SELECT_FROM_OBJECT and similar flags). */
   char sync_select_dirty;
@@ -389,6 +393,12 @@ typedef enum eSpaceOutliner_Mode {
   SO_OVERRIDES_LIBRARY = 16,
 } eSpaceOutliner_Mode;
 
+/** #SpaceOutliner.outlinevis */
+typedef enum eSpaceOutliner_LibOverrideViewMode {
+  SO_LIB_OVERRIDE_VIEW_PROPERTIES = 0,
+  SO_LIB_OVERRIDE_VIEW_HIERARCHY = 1,
+} eSpaceOutliner_LibOverrideViewMode;
+
 /** #SpaceOutliner.storeflag */
 typedef enum eSpaceOutliner_StoreFlag {
   /* cleanup tree */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 2344aa42838..ffca8716a75 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -3593,6 +3593,20 @@ static void rna_def_space_outliner(BlenderRNA *brna)
       {0, NULL, 0, NULL, NULL},
   };
 
+  static const EnumPropertyItem lib_override_view_mode[] = {
+      {SO_LIB_OVERRIDE_VIEW_PROPERTIES,
+       "PROPERTIES",
+       ICON_NONE,
+       "Properties",
+       "Display all data-blocks with their overridden properties and buttons do edit them"},
+      {SO_LIB_OVERRIDE_VIEW_HIERARCHY,
+       "HIERARCHY",
+       ICON_NONE,
+       "Hierarchy",
+       "Display library override relationships"},
+      {0, NULL, 0, NULL, NULL},
+  };
+
   static const EnumPropertyItem filter_state_items[] = {
       {SO_FILTER_OB_ALL, "ALL", 0, "All", "Show all objects in the view layer"},
       {SO_FILTER_OB_VISIBLE, "VISIBLE", 0, "Visible", "Show visible objects"},
@@ -3612,6 +3626,13 @@ static void rna_def_space_outliner(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Display Mode", "Type of information to display");
   RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
 
+  prop = RNA_def_property(srna, "lib_override_view_mode", PROP_ENUM, PROP_NONE);
+  RNA_def_property_enum_items(prop, lib_override_view_mode);
+  RNA_def_property_ui_text(prop,
+                           "Library Override View Mode",
+                           "Choose different visualizations of library override data");
+  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
+
   prop = RNA_def_property(srna, "filter_text", PROP_STRING, PROP_NONE);
   RNA_def_property_string_sdna(prop, NULL, "search_string");
   RNA_def_property_ui_text(prop, "Display Filter", "Live search filtering string");



More information about the Bf-blender-cvs mailing list