Blender
V4.3
source
blender
editors
space_outliner
tree
tree_iterator.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2023 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
9
#include "
DNA_space_types.h
"
10
11
#include "
BLI_listbase.h
"
12
13
#include "
../outliner_intern.hh
"
14
15
#include "
tree_iterator.hh
"
16
17
namespace
blender::ed::outliner::tree_iterator
{
18
19
void
all
(
const
SpaceOutliner
&space_outliner,
const
VisitorFn
visitor)
20
{
21
all_open
(space_outliner, space_outliner.
tree
, visitor);
22
}
23
24
void
all
(
const
ListBase
&subtree,
const
VisitorFn
visitor)
25
{
26
LISTBASE_FOREACH_MUTABLE
(
TreeElement
*, element, &subtree) {
27
/* Get needed data out in case element gets freed. */
28
const
ListBase
subtree = element->subtree;
29
30
visitor(element);
31
/* Don't access element from now on, it may be freed. */
32
33
all
(subtree, visitor);
34
}
35
}
36
37
void
all_open
(
const
SpaceOutliner
&space_outliner,
const
VisitorFn
visitor)
38
{
39
all_open
(space_outliner, space_outliner.
tree
, visitor);
40
}
41
42
void
all_open
(
const
SpaceOutliner
&space_outliner,
43
const
ListBase
&subtree,
44
const
VisitorFn
visitor)
45
{
46
LISTBASE_FOREACH_MUTABLE
(
TreeElement
*, element, &subtree) {
47
/* Get needed data out in case element gets freed. */
48
const
TreeStoreElem
*tselem =
TREESTORE
(element);
49
const
ListBase
subtree = element->subtree;
50
51
visitor(element);
52
/* Don't access element from now on, it may be freed. Note that the open/collapsed state may
53
* also have been changed in the visitor callback. */
54
55
if
(
TSELEM_OPEN
(tselem, &space_outliner)) {
56
all_open
(space_outliner, subtree, visitor);
57
}
58
}
59
}
60
61
}
// namespace blender::ed::outliner::tree_iterator
BLI_listbase.h
LISTBASE_FOREACH_MUTABLE
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
Definition
BLI_listbase.h:390
DNA_space_types.h
blender::FunctionRef
Definition
BLI_function_ref.hh:74
blender::ed::outliner::tree_iterator
Definition
tree_iterator.cc:17
blender::ed::outliner::tree_iterator::all_open
void all_open(const SpaceOutliner &space_outliner, const VisitorFn visitor)
Definition
tree_iterator.cc:37
blender::ed::outliner::tree_iterator::all
void all(const SpaceOutliner &space_outliner, const VisitorFn visitor)
Definition
tree_iterator.cc:19
outliner_intern.hh
TREESTORE
#define TREESTORE(a)
Definition
outliner_intern.hh:191
TSELEM_OPEN
#define TSELEM_OPEN(telm, sv)
Definition
outliner_intern.hh:226
ListBase
Definition
DNA_listBase.h:32
SpaceOutliner
Definition
DNA_space_types.h:289
SpaceOutliner::tree
ListBase tree
Definition
DNA_space_types.h:301
TreeStoreElem
Definition
DNA_outliner_types.h:15
blender::ed::outliner::TreeElement
Definition
outliner_intern.hh:84
tree_iterator.hh
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0