Blender V4.3
outliner_intern.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include <memory>
12
13#include "BLI_function_ref.hh"
14
15#include "RNA_types.hh"
16
17/* Needed for `tree_element_cast()`. */
18#include "tree/tree_element.hh"
19
20/* internal exports only */
21
22struct ARegion;
23struct Collection;
24struct EditBone;
25struct ID;
26struct LayerCollection;
27struct ListBase;
28struct Main;
29struct Object;
30struct Scene;
31struct TreeStoreElem;
32struct ViewLayer;
33struct bContext;
35struct bPoseChannel;
36struct View2D;
37struct wmKeyConfig;
38struct wmOperatorType;
39
41class TreeHash;
42}
43
44namespace blender::ed::outliner {
45
46class AbstractTreeDisplay;
47class AbstractTreeElement;
48
50
51struct TreeElement;
52
56 std::unique_ptr<AbstractTreeDisplay> tree_display;
57
58 /* Hash table for tree-store elements, using `(id, type, index)` as key. */
59 std::unique_ptr<treehash::TreeHash> tree_hash;
60
65};
66
72
81
82using TreeTraversalFunc = TreeTraversalAction (*)(TreeElement *te, void *customdata);
83
86
93 std::unique_ptr<AbstractTreeElement> abstract_element;
94
96 int xs, ys; /* Do selection. */
97 TreeStoreElem *store_elem; /* Element in tree store. */
98 short flag; /* Flag for non-saved stuff. */
99 short index; /* Index for data arrays. */
100 short idcode; /* From TreeStore id. */
101 short xend; /* Width of item display, for select. */
102 const char *name;
103 void *directdata; /* Armature Bones, Base, ... */
104};
105
110
111#define TREESTORE_ID_TYPE(_id) \
112 (ELEM(GS((_id)->name), \
113 ID_SCE, \
114 ID_LI, \
115 ID_OB, \
116 ID_ME, \
117 ID_CU_LEGACY, \
118 ID_MB, \
119 ID_NT, \
120 ID_MA, \
121 ID_TE, \
122 ID_IM, \
123 ID_LT, \
124 ID_LA, \
125 ID_CA) || \
126 ELEM(GS((_id)->name), \
127 ID_KE, \
128 ID_WO, \
129 ID_SPK, \
130 ID_GR, \
131 ID_AR, \
132 ID_AC, \
133 ID_BR, \
134 ID_PA, \
135 ID_GD_LEGACY, \
136 ID_LS, \
137 ID_LP, \
138 ID_CV, \
139 ID_PT, \
140 ID_VO, \
141 ID_GP) || /* Only in 'blendfile' mode ... :/ */ \
142 ELEM(GS((_id)->name), \
143 ID_SCR, \
144 ID_WM, \
145 ID_TXT, \
146 ID_VF, \
147 ID_SO, \
148 ID_CF, \
149 ID_PAL, \
150 ID_MC, \
151 ID_WS, \
152 ID_MSK, \
153 ID_PC))
154
155/* TreeElement->flag */
156enum {
157 TE_ACTIVE = (1 << 0),
158 /* Closed items display their children as icon within the row. TE_ICONROW is for
159 * these child-items that are visible but only within the row of the closed parent. */
160 TE_ICONROW = (1 << 1),
165 TE_FREE_NAME = (1 << 3),
166 TE_DRAGGING = (1 << 4),
168 /* Child elements of the same type in the icon-row are drawn merged as one icon.
169 * This flag is set for an element that is part of these merged child icons. */
171};
172
173/* button events */
174#define OL_NAMEBUTTON 1
175
177 OL_DRAWSEL_NONE = 0, /* inactive (regular black text) */
178 OL_DRAWSEL_NORMAL = 1, /* active object (draws white text) */
179 OL_DRAWSEL_ACTIVE = 2, /* active obdata (draws a circle around the icon) */
180};
181
183 OL_SETSEL_NONE = 0, /* don't change the selection state */
184 OL_SETSEL_NORMAL = 1, /* select the item */
185 OL_SETSEL_EXTEND = 2, /* select the item and extend (also toggles selection) */
186};
187
188/* get TreeStoreElem associated with a TreeElement
189 * < a: (TreeElement) tree element to find stored element for
190 */
191#define TREESTORE(a) ((a)->store_elem)
192
193/* size constants */
194#define OL_Y_OFFSET 2
195
196#define OL_TOG_USER_BUTS_USERS (UI_UNIT_X * 1.2f + V2D_SCROLL_WIDTH)
197
198#define OL_RNA_COLX (UI_UNIT_X * 15)
199#define OL_RNA_COL_SIZEX (UI_UNIT_X * 7.5f)
200#define OL_RNA_COL_SPACEX (UI_UNIT_X * 2.5f)
201
202/* The outliner display modes that support the filter system.
203 * NOTE: keep it synced with `space_outliner.py`. */
204#define SUPPORT_FILTER_OUTLINER(space_outliner_) \
205 (ELEM((space_outliner_)->outlinevis, SO_VIEW_LAYER, SO_OVERRIDES_LIBRARY))
206
207/* Outliner Searching --
208 *
209 * Are we looking for something in the outliner?
210 * If so finding matches in child items makes it more useful
211 *
212 * - We want to flag parents to act as being open to filter child matches
213 * - and also flag matches so we can highlight them
214 * - Flags are stored in TreeStoreElem->flag
215 * - Flag options defined in DNA_outliner_types.h
216 * - SO_SEARCH_RECURSIVE defined in DNA_space_types.h
217 *
218 * - NOT in data-blocks view - searching all data-blocks takes way too long
219 * to be useful
220 * - not searching into RNA items helps but isn't the complete solution
221 */
222
223#define SEARCHING_OUTLINER(sov) ((sov)->search_flags & SO_SEARCH_RECURSIVE)
224
225/* is the current element open? if so we also show children */
226#define TSELEM_OPEN(telm, sv) \
227 (CHECK_TYPE_INLINE(telm, TreeStoreElem *), \
228 (((telm)->flag & TSE_CLOSED) == 0 || \
229 (SEARCHING_OUTLINER(sv) && ((telm)->flag & TSE_CHILDSEARCH))))
230
236 /* Scene level. */
239
240 /* Object level. */
248};
249
251 OL_ITEM_DESELECT = 0, /* Deselect the item */
252 OL_ITEM_SELECT = (1 << 0), /* Select the item */
253 OL_ITEM_SELECT_DATA = (1 << 1), /* Select object data */
254 OL_ITEM_ACTIVATE = (1 << 2), /* Activate the item */
255 OL_ITEM_EXTEND = (1 << 3), /* Extend the current selection */
256 OL_ITEM_RECURSIVE = (1 << 4), /* Select recursively */
257};
258
259/* `outliner_tree.cc` */
260
262void outliner_cleanup_tree(SpaceOutliner *space_outliner);
269void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree);
270
274void outliner_build_tree(Main *mainvar,
275 Scene *scene,
276 ViewLayer *view_layer,
277 SpaceOutliner *space_outliner,
278 ARegion *region);
279
280TreeElement *outliner_add_collection_recursive(SpaceOutliner *space_outliner,
281 Collection *collection,
282 TreeElement *ten);
283
285
289
292
293/* `outliner_draw.cc` */
294
298void draw_outliner(const bContext *C, bool do_rebuild);
299
300void outliner_tree_dimensions(SpaceOutliner *space_outliner, int *r_width, int *r_height);
301
303
305 ViewLayer *view_layer,
306 LayerCollection *layer_collection,
307 Collection *collection,
308 PropertyRNA *layer_or_collection_prop,
309 const char *propname,
310 bool value);
311
319
320/* `outliner_select.cc` */
325 const TreeViewContext *tvc,
326 TreeElement *te,
327 TreeStoreElem *tselem,
328 eOLSetState set,
329 bool recursive);
334 const TreeViewContext *tvc,
335 const TreeElement *te,
336 const TreeStoreElem *tselem);
341 const TreeViewContext *tvc,
342 TreeElement *te,
343 eOLSetState set,
344 bool handle_all_types);
346 const TreeElement *te,
347 const TreeStoreElem *tselem);
348
350
355 SpaceOutliner *space_outliner,
356 TreeElement *te,
357 short select_flag);
358
362bool outliner_item_is_co_over_name_icons(const TreeElement *te, float view_co_x);
363bool outliner_item_is_co_over_icon(const TreeElement *te, float view_co_x);
367bool outliner_item_is_co_over_name(const TreeElement *te, float view_co_x);
371bool outliner_item_is_co_within_close_toggle(const TreeElement *te, float view_co_x);
372bool outliner_is_co_within_mode_column(SpaceOutliner *space_outliner, const float view_mval[2]);
373
377void outliner_item_mode_toggle(bContext *C, TreeViewContext *tvc, TreeElement *te, bool do_extend);
378
379/* `outliner_edit.cc` */
381 ReportList *reports,
382 Scene *scene,
383 TreeElement *te,
384 TreeStoreElem *tsep,
385 TreeStoreElem *tselem)>;
386
392 ReportList *reports,
393 Scene *scene,
394 SpaceOutliner *space_outliner,
395 ListBase *lb,
396 outliner_operation_fn operation_fn,
397 bool recurse_selected);
399 ReportList *reports,
400 Scene *scene,
401 SpaceOutliner *space_outliner,
402 ListBase *lb,
403 outliner_operation_fn operation_fn);
404
405int outliner_flag_is_any_test(ListBase *lb, short flag, int curlevel);
410bool outliner_flag_set(const SpaceOutliner &space_outliner, short flag, short set);
411bool outliner_flag_set(const ListBase &lb, short flag, short set);
412bool outliner_flag_flip(const SpaceOutliner &space_outliner, short flag);
413bool outliner_flag_flip(const ListBase &lb, short flag);
414
416 ReportList *reports,
417 Scene *scene,
418 TreeElement *te,
419 TreeStoreElem *tsep,
420 TreeStoreElem *tselem);
422 ReportList *reports,
423 Scene *scene,
424 TreeElement *te,
425 TreeStoreElem *tsep,
426 TreeStoreElem *tselem);
427void lib_reload_fn(bContext *C,
428 ReportList *reports,
429 Scene *scene,
430 TreeElement *te,
431 TreeStoreElem *tsep,
432 TreeStoreElem *tselem);
433
435 ReportList *reports,
436 Scene *scene,
437 TreeElement *te,
438 TreeStoreElem *tsep,
439 TreeStoreElem *tselem);
440void id_remap_fn(bContext *C,
441 ReportList *reports,
442 Scene *scene,
443 TreeElement *te,
444 TreeStoreElem *tsep,
445 TreeStoreElem *tselem);
446
450void outliner_set_coordinates(const ARegion *region, const SpaceOutliner *space_outliner);
451
455void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all);
456
457/* `outliner_dragdrop.cc` */
458
462void outliner_dropboxes();
463
471
472/* ...................................................... */
473
475
481
483
487
490
495
497
500
503
506
507/* `outliner_query.cc` */
508
513bool outliner_shows_mode_column(const SpaceOutliner &space_outliner);
514bool outliner_has_element_warnings(const SpaceOutliner &space_outliner);
515
516/* `outliner_tools.cc` */
517
519 TreeElement *parent_te,
520 TreeElement *activate_te);
521
522/* Menu only! Calls other operators */
523
540
541/* `outliner_ops.cc` */
542
544void outliner_keymap(wmKeyConfig *keyconf);
545
546/* `outliner_collections.cc` */
547
551 bContext *C, Main *bmain, Scene *scene, ReportList *reports, bool do_hierarchy);
552
567
579
581
582/* `outliner_utils.cc` */
583
585
591 const ListBase *tree,
592 float view_co_y);
600 TreeElement *parent_te,
601 float view_co_x,
602 bool *r_is_merged_icon,
603 bool *r_is_over_icon);
612 TreeElement *parent_te,
613 const TreeElement *child_te);
617TreeElement *outliner_find_id(SpaceOutliner *space_outliner, ListBase *lb, const ID *id);
621ID *outliner_search_back(TreeElement *te, short idcode);
630bool outliner_tree_traverse(const SpaceOutliner *space_outliner,
631 ListBase *tree,
632 int filter_te_flag,
633 int filter_tselem_flag,
635 void *customdata);
636float outliner_right_columns_width(const SpaceOutliner *space_outliner);
650bool outliner_is_element_in_view(const TreeElement *te, const View2D *v2d);
654void outliner_scroll_view(SpaceOutliner *space_outliner, ARegion *region, int delta_y);
661 ARegion *region);
662
663/* `outliner_sync.cc` */
664
668void outliner_sync_selection(const bContext *C, SpaceOutliner *space_outliner);
669
670/* `outliner_context.cc` */
671
673 const char *member,
674 bContextDataResult *result);
675
681template<typename TreeElementT> TreeElementT *tree_element_cast(const TreeElement *te)
682{
683 static_assert(std::is_base_of_v<AbstractTreeElement, TreeElementT>,
684 "Requested tree-element type must be an AbstractTreeElement");
685 return dynamic_cast<TreeElementT *>(te->abstract_element.get());
686}
687
688} // namespace blender::ed::outliner
KDTree_3d * tree
void OUTLINER_OT_expanded_toggle(wmOperatorType *ot)
bool outliner_item_is_co_within_close_toggle(const TreeElement *te, float view_co_x)
TreeTraversalAction(*)(TreeElement *te, void *customdata) TreeTraversalFunc
void OUTLINER_OT_delete(wmOperatorType *ot)
void OUTLINER_OT_collection_duplicate_linked(wmOperatorType *ot)
int outliner_flag_is_any_test(ListBase *lb, short flag, const int curlevel)
void OUTLINER_OT_collection_objects_deselect(wmOperatorType *ot)
bool outliner_item_is_co_over_icon(const TreeElement *te, float view_co_x)
void OUTLINER_OT_collection_disable_render(wmOperatorType *ot)
void outliner_tag_redraw_avoid_rebuild_on_open_change(const SpaceOutliner *space_outliner, ARegion *region)
void OUTLINER_OT_item_rename(wmOperatorType *ot)
void OUTLINER_OT_scene_operation(wmOperatorType *ot)
void OUTLINER_OT_collection_link(wmOperatorType *ot)
void OUTLINER_OT_collection_color_tag_set(wmOperatorType *ot)
void OUTLINER_OT_collection_hierarchy_delete(wmOperatorType *ot)
void OUTLINER_OT_collection_exclude_set(wmOperatorType *ot)
void OUTLINER_OT_collection_show(wmOperatorType *ot)
void OUTLINER_OT_show_hierarchy(wmOperatorType *ot)
TreeElement * outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
void OUTLINER_OT_highlight_update(wmOperatorType *ot)
bool outliner_is_collection_tree_element(const TreeElement *te)
void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree)
void OUTLINER_OT_data_operation(wmOperatorType *ot)
void OUTLINER_OT_lib_operation(wmOperatorType *ot)
void OUTLINER_OT_drivers_add_selected(wmOperatorType *ot)
void OUTLINER_OT_select_all(wmOperatorType *ot)
TreeElement * outliner_find_item_at_x_in_row(const SpaceOutliner *space_outliner, TreeElement *parent_te, float view_co_x, bool *r_is_merged_icon, bool *r_is_over_icon)
void OUTLINER_OT_constraint_operation(wmOperatorType *ot)
void OUTLINER_OT_lib_relocate(wmOperatorType *ot)
TreeElement * outliner_find_id(SpaceOutliner *space_outliner, ListBase *lb, const ID *id)
void OUTLINER_OT_collection_indirect_only_clear(wmOperatorType *ot)
void OUTLINER_OT_hide(wmOperatorType *ot)
TreeElement * outliner_add_collection_recursive(SpaceOutliner *space_outliner, Collection *collection, TreeElement *ten)
float outliner_right_columns_width(const SpaceOutliner *space_outliner)
void OUTLINER_OT_collection_holdout_set(wmOperatorType *ot)
void OUTLINER_OT_collection_hide(wmOperatorType *ot)
void outliner_collection_isolate_flag(Scene *scene, ViewLayer *view_layer, LayerCollection *layer_collection, Collection *collection, PropertyRNA *layer_or_collection_prop, const char *propname, const bool value)
void id_delete_tag_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
void OUTLINER_OT_collection_exclude_clear(wmOperatorType *ot)
TreeElement * outliner_search_back_te(TreeElement *te, short idcode)
void OUTLINER_OT_collection_objects_select(wmOperatorType *ot)
bool outliner_flag_set(const SpaceOutliner &space_outliner, const short flag, const short set)
bool outliner_requires_rebuild_on_select_or_active_change(const SpaceOutliner *space_outliner)
void OUTLINER_OT_item_activate(wmOperatorType *ot)
void OUTLINER_OT_modifier_operation(wmOperatorType *ot)
void outliner_collection_delete(bContext *C, Main *bmain, Scene *scene, ReportList *reports, bool do_hierarchy)
void OUTLINER_OT_collection_drop(wmOperatorType *ot)
TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
TreeElement * outliner_find_item_at_y(const SpaceOutliner *space_outliner, const ListBase *tree, float view_co_y)
void OUTLINER_OT_id_paste(wmOperatorType *ot)
void outliner_free_tree(ListBase *tree)
void OUTLINER_OT_clear_filter(wmOperatorType *ot)
void outliner_item_mode_toggle(bContext *C, TreeViewContext *tvc, TreeElement *te, bool do_extend)
void outliner_build_tree(Main *mainvar, Scene *scene, ViewLayer *view_layer, SpaceOutliner *space_outliner, ARegion *region)
void outliner_set_coordinates(const ARegion *region, const SpaceOutliner *space_outliner)
bPoseChannel * outliner_find_parent_bone(TreeElement *te, TreeElement **r_bone_te)
void OUTLINER_OT_datastack_drop(wmOperatorType *ot)
void OUTLINER_OT_start_filter(wmOperatorType *ot)
void OUTLINER_OT_unhide_all(wmOperatorType *ot)
void OUTLINER_OT_drivers_delete_selected(wmOperatorType *ot)
eOLDrawState tree_element_type_active_state_get(const bContext *C, const TreeViewContext *tvc, const TreeElement *te, const TreeStoreElem *tselem)
void OUTLINER_OT_collection_hide_inside(wmOperatorType *ot)
void OUTLINER_OT_show_one_level(wmOperatorType *ot)
void OUTLINER_OT_collection_enable(wmOperatorType *ot)
void OUTLINER_OT_show_active(wmOperatorType *ot)
void outliner_do_object_operation_ex(bContext *C, ReportList *reports, Scene *scene, SpaceOutliner *space_outliner, ListBase *lb, outliner_operation_fn operation_fn, bool recurse_selected)
void OUTLINER_OT_id_copy(wmOperatorType *ot)
void OUTLINER_OT_object_operation(wmOperatorType *ot)
void outliner_viewcontext_init(const bContext *C, TreeViewContext *tvc)
void OUTLINER_OT_select_walk(wmOperatorType *ot)
bool outliner_is_element_in_view(const TreeElement *te, const View2D *v2d)
void OUTLINER_OT_orphans_manage(wmOperatorType *ot)
TreeTraversalAction outliner_collect_selected_objects(TreeElement *te, void *customdata)
TreeElement * outliner_find_editbone(ListBase *lb, const EditBone *ebone)
Collection * outliner_collection_from_tree_element(const TreeElement *te)
void outliner_scroll_view(SpaceOutliner *space_outliner, ARegion *region, int delta_y)
bool outliner_flag_flip(const SpaceOutliner &space_outliner, const short flag)
void OUTLINER_OT_animdata_operation(wmOperatorType *ot)
void lib_relocate_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
int outliner_main_region_context(const bContext *C, const char *member, bContextDataResult *result)
bool outliner_is_element_visible(const TreeElement *te)
int tree_element_id_type_to_index(TreeElement *te)
void tree_element_type_active_set(bContext *C, const TreeViewContext *tvc, TreeElement *te, TreeStoreElem *tselem, eOLSetState set, bool recursive)
eOLDrawState tree_element_active_state_get(const TreeViewContext *tvc, const TreeElement *te, const TreeStoreElem *tselem)
bool outliner_is_co_within_mode_column(SpaceOutliner *space_outliner, const float view_mval[2])
void OUTLINER_OT_lib_reload(wmOperatorType *ot)
void OUTLINER_OT_material_drop(wmOperatorType *ot)
void OUTLINER_OT_scene_drop(wmOperatorType *ot)
void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all)
void OUTLINER_OT_action_set(wmOperatorType *ot)
void OUTLINER_OT_parent_drop(wmOperatorType *ot)
bool outliner_tree_traverse(const SpaceOutliner *space_outliner, ListBase *tree, int filter_te_flag, int filter_tselem_flag, TreeTraversalFunc func, void *customdata)
void OUTLINER_OT_scroll_page(wmOperatorType *ot)
void OUTLINER_OT_keyingset_remove_selected(wmOperatorType *ot)
void OUTLINER_OT_id_remap(wmOperatorType *ot)
void outliner_sync_selection(const bContext *C, SpaceOutliner *space_outliner)
void OUTLINER_OT_id_delete(wmOperatorType *ot)
TreeElementT * tree_element_cast(const TreeElement *te)
ID * outliner_search_back(TreeElement *te, short idcode)
void merged_element_search_menu_invoke(bContext *C, TreeElement *parent_te, TreeElement *activate_te)
void OUTLINER_OT_keyingset_add_selected(wmOperatorType *ot)
TreeElement * outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem)
TreeElement * outliner_find_parent_element(ListBase *lb, TreeElement *parent_te, const TreeElement *child_te)
void id_remap_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
void lib_reload_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
void outliner_cleanup_tree(SpaceOutliner *space_outliner)
void OUTLINER_OT_item_openclose(wmOperatorType *ot)
void outliner_do_object_operation(bContext *C, ReportList *reports, Scene *scene, SpaceOutliner *space_outliner, ListBase *lb, outliner_operation_fn operation_fn)
void OUTLINER_OT_collection_holdout_clear(wmOperatorType *ot)
void OUTLINER_OT_collection_duplicate(wmOperatorType *ot)
void OUTLINER_OT_collection_isolate(wmOperatorType *ot)
void OUTLINER_OT_collection_disable(wmOperatorType *ot)
bool outliner_item_is_co_over_name(const TreeElement *te, float view_co_x)
bool outliner_item_is_co_over_name_icons(const TreeElement *te, float view_co_x)
TreeElement * outliner_find_element_with_flag(const ListBase *lb, short flag)
void OUTLINER_OT_collection_show_inside(wmOperatorType *ot)
void OUTLINER_OT_liboverride_troubleshoot_operation(wmOperatorType *ot)
void outliner_keymap(wmKeyConfig *keyconf)
void outliner_tree_dimensions(SpaceOutliner *space_outliner, int *r_width, int *r_height)
bool outliner_has_element_warnings(const SpaceOutliner &space_outliner)
void OUTLINER_OT_operation(wmOperatorType *ot)
void OUTLINER_OT_parent_clear(wmOperatorType *ot)
bool outliner_shows_mode_column(const SpaceOutliner &space_outliner)
void item_rename_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
void OUTLINER_OT_select_box(wmOperatorType *ot)
void OUTLINER_OT_collection_new(wmOperatorType *ot)
void OUTLINER_OT_collection_instance(wmOperatorType *ot)
void draw_outliner(const bContext *C, bool do_rebuild)
void OUTLINER_OT_collection_indirect_only_set(wmOperatorType *ot)
TreeTraversalAction outliner_collect_selected_collections(TreeElement *te, void *customdata)
void OUTLINER_OT_id_operation(wmOperatorType *ot)
void tree_element_activate(bContext *C, const TreeViewContext *tvc, TreeElement *te, eOLSetState set, bool handle_all_types)
void OUTLINER_OT_liboverride_operation(wmOperatorType *ot)
void outliner_item_select(bContext *C, SpaceOutliner *space_outliner, TreeElement *te, short select_flag)
void OUTLINER_OT_item_drag_drop(wmOperatorType *ot)
void OUTLINER_OT_orphans_purge(wmOperatorType *ot)
void OUTLINER_OT_collection_enable_render(wmOperatorType *ot)
Definition DNA_ID.h:413
std::unique_ptr< treehash::TreeHash > tree_hash
std::unique_ptr< AbstractTreeDisplay > tree_display
std::unique_ptr< AbstractTreeElement > abstract_element
wmOperatorType * ot
Definition wm_files.cc:4125
uint8_t flag
Definition wm_window.cc:138