Blender  V3.3
tree_display.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
21 #pragma once
22 
23 #include <memory>
24 
25 struct ID;
26 struct LayerCollection;
27 struct Library;
28 struct ListBase;
29 struct Main;
30 struct Scene;
31 struct Sequence;
32 struct SpaceOutliner;
33 struct TreeElement;
34 struct ViewLayer;
35 
36 namespace blender::ed::outliner {
37 
38 class TreeElementID;
39 
47 
50  {
51  }
52 };
53 
54 /* -------------------------------------------------------------------- */
55 /* Tree-Display Interface */
56 
63  public:
64  AbstractTreeDisplay(SpaceOutliner &space_outliner) : space_outliner_(space_outliner)
65  {
66  }
67  virtual ~AbstractTreeDisplay() = default;
68 
69  static std::unique_ptr<AbstractTreeDisplay> createFromDisplayMode(
70  int /*eSpaceOutliner_Mode*/ mode, SpaceOutliner &space_outliner);
71 
76  virtual ListBase buildTree(const TreeSourceData &source_data) = 0;
77 
85  virtual bool supportsModeColumn() const;
86 
94  virtual bool is_lazy_built() const;
95 
96  protected:
99 };
100 
101 /* -------------------------------------------------------------------- */
102 /* View Layer Tree-Display */
103 
108  ViewLayer *view_layer_ = nullptr;
109  bool show_objects_ = true;
110 
111  public:
112  TreeDisplayViewLayer(SpaceOutliner &space_outliner);
113 
114  ListBase buildTree(const TreeSourceData &source_data) override;
115 
116  bool supportsModeColumn() const override;
117 
118  private:
119  void add_view_layer(Scene &, ListBase &, TreeElement *);
120  void add_layer_collections_recursive(ListBase &, ListBase &, TreeElement &);
121  void add_layer_collection_objects(ListBase &, LayerCollection &, TreeElement &);
122  void add_layer_collection_objects_children(TreeElement &);
123 };
124 
125 /* -------------------------------------------------------------------- */
126 /* Library Tree-Display */
127 
132  public:
133  TreeDisplayLibraries(SpaceOutliner &space_outliner);
134 
135  ListBase buildTree(const TreeSourceData &source_data) override;
136 
137  private:
138  TreeElement *add_library_contents(Main &, ListBase &, Library *);
139  bool library_id_filter_poll(const Library *lib, ID *id) const;
140  short id_filter_get() const;
141 };
142 
143 /* -------------------------------------------------------------------- */
144 /* Library Overrides Tree-Display. */
145 
150  public:
152 
153  ListBase buildTree(const TreeSourceData &source_data) override;
154 
155  private:
156  ListBase add_library_contents(Main &);
157  short id_filter_get() const;
158 };
159 
164  public:
166 
167  ListBase buildTree(const TreeSourceData &source_data) override;
168 
169  bool is_lazy_built() const override;
170 
171  private:
172  ListBase build_hierarchy_for_lib_or_main(Main *bmain,
173  TreeElement &parent_te,
174  Library *lib = nullptr);
175 };
176 
177 /* -------------------------------------------------------------------- */
178 /* Video Sequencer Tree-Display */
179 
184 };
185 
190  public:
191  TreeDisplaySequencer(SpaceOutliner &space_outliner);
192 
193  ListBase buildTree(const TreeSourceData &source_data) override;
194 
195  private:
196  TreeElement *add_sequencer_contents() const;
200  SequenceAddOp need_add_seq_dup(Sequence *seq) const;
201  void add_seq_dup(Sequence *seq, TreeElement *te, short index) const;
202 };
203 
204 /* -------------------------------------------------------------------- */
205 /* Orphaned Data Tree-Display */
206 
211  public:
212  TreeDisplayIDOrphans(SpaceOutliner &space_outliner);
213 
214  ListBase buildTree(const TreeSourceData &source_data) override;
215 
216  private:
217  bool datablock_has_orphans(ListBase &) const;
218 };
219 
220 /* -------------------------------------------------------------------- */
221 /* Scenes Tree-Display */
222 
227  public:
228  TreeDisplayScenes(SpaceOutliner &space_outliner);
229 
230  ListBase buildTree(const TreeSourceData &source_data) override;
231 
232  bool supportsModeColumn() const override;
233 };
234 
235 /* -------------------------------------------------------------------- */
236 /* Data API Tree-Display */
237 
242  public:
243  TreeDisplayDataAPI(SpaceOutliner &space_outliner);
244 
245  ListBase buildTree(const TreeSourceData &source_data) override;
246 
247  bool is_lazy_built() const override;
248 };
249 
250 } // namespace blender::ed::outliner
#define final(a, b, c)
Definition: BLI_hash.h:21
Base Class For Tree-Displays.
Definition: tree_display.hh:62
virtual ListBase buildTree(const TreeSourceData &source_data)=0
AbstractTreeDisplay(SpaceOutliner &space_outliner)
Definition: tree_display.hh:64
static std::unique_ptr< AbstractTreeDisplay > createFromDisplayMode(int mode, SpaceOutliner &space_outliner)
Definition: tree_display.cc:18
Tree-Display for the Scenes display mode.
TreeDisplayDataAPI(SpaceOutliner &space_outliner)
ListBase buildTree(const TreeSourceData &source_data) override
Tree-Display for the Orphaned Data display mode.
ListBase buildTree(const TreeSourceData &source_data) override
TreeDisplayIDOrphans(SpaceOutliner &space_outliner)
Tree-Display for the Libraries display mode.
ListBase buildTree(const TreeSourceData &source_data) override
TreeDisplayLibraries(SpaceOutliner &space_outliner)
Tree-Display for the Library Overrides display mode, Hierarchies view mode.
Tree-Display for the Library Overrides display mode, Properties view mode.
Tree-Display for the Scenes display mode.
ListBase buildTree(const TreeSourceData &source_data) override
TreeDisplayScenes(SpaceOutliner &space_outliner)
Tree-Display for the Video Sequencer display mode.
TreeDisplaySequencer(SpaceOutliner &space_outliner)
ListBase buildTree(const TreeSourceData &source_data) override
Tree-Display for the View Layer display mode.
ListBase buildTree(const TreeSourceData &source_data) override
TreeDisplayViewLayer(SpaceOutliner &space_outliner)
DRWShaderLibrary * lib
Definition: DNA_ID.h:368
Definition: BKE_main.h:121
The data to build the tree from.
Definition: tree_display.hh:43
TreeSourceData(Main &bmain, Scene &scene, ViewLayer &view_layer)
Definition: tree_display.hh:48