Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-01-26 22:25:16 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-01-26 22:27:16 +0300
commitaf87b6d8cb75d9d625378dee25d726a0d55f75c6 (patch)
treeb400a9a7e8d63dc2e60c45e988e969798c066d3b /source/blender/editors/space_outliner/outliner_intern.hh
parent42d2c96d4cceab46de8eebf30497e7399a2998e0 (diff)
parent57dfec79f4ab1ceeb8c5f6049aa03e779e7871c0 (diff)
Merge branch 'master' into draw-viewport-data
# Conflicts: # source/blender/draw/DRW_engine_types.h # source/blender/draw/intern/draw_manager.c # source/blender/draw/intern/draw_manager.h # source/blender/draw/intern/draw_manager_profiling.c # source/blender/draw/intern/draw_manager_text.h # source/blender/draw/intern/draw_texture_pool.cc # source/blender/draw/intern/draw_texture_pool.h # source/blender/draw/intern/draw_view_data.cc # source/blender/draw/intern/draw_view_data.h # source/blender/editors/space_view3d/view3d_draw.c # source/blender/gpu/GPU_texture.h # source/blender/gpu/GPU_viewport.h # source/blender/gpu/intern/gpu_shader_create_info_private.hh # source/blender/gpu/intern/gpu_viewport.c
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_intern.hh')
-rw-r--r--source/blender/editors/space_outliner/outliner_intern.hh688
1 files changed, 688 insertions, 0 deletions
diff --git a/source/blender/editors/space_outliner/outliner_intern.hh b/source/blender/editors/space_outliner/outliner_intern.hh
new file mode 100644
index 00000000000..a62d35131ca
--- /dev/null
+++ b/source/blender/editors/space_outliner/outliner_intern.hh
@@ -0,0 +1,688 @@
+/*
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup spoutliner
+ */
+
+#pragma once
+
+#include <memory>
+
+#include "RNA_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* internal exports only */
+
+struct ARegion;
+struct EditBone;
+struct ID;
+struct ListBase;
+struct Main;
+struct Object;
+struct Scene;
+struct TreeElement;
+struct TreeStoreElem;
+struct ViewLayer;
+struct bContext;
+struct bContextDataResult;
+struct bPoseChannel;
+struct wmKeyConfig;
+struct wmOperatorType;
+
+namespace blender::ed::outliner {
+class AbstractTreeDisplay;
+class AbstractTreeElement;
+} // namespace blender::ed::outliner
+
+struct SpaceOutliner_Runtime {
+ /** Object to create and manage the tree for a specific display type (View Layers, Scenes,
+ * Blender File, etc.). */
+ std::unique_ptr<blender::ed::outliner::AbstractTreeDisplay> tree_display;
+
+ /** Pointers to tree-store elements, grouped by `(id, type, nr)`
+ * in hash-table for faster searching. */
+ struct GHash *treehash;
+
+ SpaceOutliner_Runtime() = default;
+ /** Used for copying runtime data to a duplicated space. */
+ SpaceOutliner_Runtime(const SpaceOutliner_Runtime &);
+ ~SpaceOutliner_Runtime();
+};
+
+typedef enum TreeElementInsertType {
+ TE_INSERT_BEFORE,
+ TE_INSERT_AFTER,
+ TE_INSERT_INTO,
+} TreeElementInsertType;
+
+typedef enum TreeTraversalAction {
+ /** Continue traversal regularly, don't skip children. */
+ TRAVERSE_CONTINUE = 0,
+ /** Stop traversal. */
+ TRAVERSE_BREAK,
+ /** Continue traversal, but skip children of traversed element. */
+ TRAVERSE_SKIP_CHILDS,
+} TreeTraversalAction;
+
+typedef TreeTraversalAction (*TreeTraversalFunc)(struct TreeElement *te, void *customdata);
+
+typedef struct TreeElement {
+ struct TreeElement *next, *prev, *parent;
+
+ /**
+ * Handle to the new C++ object (a derived type of base #AbstractTreeElement) that should replace
+ * #TreeElement. Step by step, data should be moved to it and operations based on the type should
+ * become virtual methods of the class hierarchy.
+ */
+ std::unique_ptr<blender::ed::outliner::AbstractTreeElement> type;
+
+ ListBase subtree;
+ int xs, ys; /* Do selection. */
+ TreeStoreElem *store_elem; /* Element in tree store. */
+ short flag; /* Flag for non-saved stuff. */
+ short index; /* Index for data arrays. */
+ short idcode; /* From TreeStore id. */
+ short xend; /* Width of item display, for select. */
+ const char *name;
+ void *directdata; /* Armature Bones, Base, Sequence, Strip... */
+ PointerRNA rnaptr; /* RNA Pointer. */
+} TreeElement;
+
+typedef struct TreeElementIcon {
+ struct ID *drag_id, *drag_parent;
+ int icon;
+} TreeElementIcon;
+
+#define TREESTORE_ID_TYPE(_id) \
+ (ELEM(GS((_id)->name), \
+ ID_SCE, \
+ ID_LI, \
+ ID_OB, \
+ ID_ME, \
+ ID_CU, \
+ ID_MB, \
+ ID_NT, \
+ ID_MA, \
+ ID_TE, \
+ ID_IM, \
+ ID_LT, \
+ ID_LA, \
+ ID_CA) || \
+ ELEM(GS((_id)->name), \
+ ID_KE, \
+ ID_WO, \
+ ID_SPK, \
+ ID_GR, \
+ ID_AR, \
+ ID_AC, \
+ ID_BR, \
+ ID_PA, \
+ ID_GD, \
+ ID_LS, \
+ ID_LP, \
+ ID_HA, \
+ ID_PT, \
+ ID_VO, \
+ ID_SIM) || /* Only in 'blendfile' mode ... :/ */ \
+ ELEM(GS((_id)->name), \
+ ID_SCR, \
+ ID_WM, \
+ ID_TXT, \
+ ID_VF, \
+ ID_SO, \
+ ID_CF, \
+ ID_PAL, \
+ ID_MC, \
+ ID_WS, \
+ ID_MSK, \
+ ID_PC))
+
+/* TreeElement->flag */
+enum {
+ TE_ACTIVE = (1 << 0),
+ /* Closed items display their children as icon within the row. TE_ICONROW is for
+ * these child-items that are visible but only within the row of the closed parent. */
+ TE_ICONROW = (1 << 1),
+ TE_LAZY_CLOSED = (1 << 2),
+ TE_FREE_NAME = (1 << 3),
+ TE_DRAGGING = (1 << 4),
+ TE_CHILD_NOT_IN_COLLECTION = (1 << 6),
+ /* Child elements of the same type in the icon-row are drawn merged as one icon.
+ * This flag is set for an element that is part of these merged child icons. */
+ TE_ICONROW_MERGED = (1 << 7),
+ /* This element has some warning to be displayed. */
+ TE_HAS_WARNING = (1 << 8),
+};
+
+/* button events */
+#define OL_NAMEBUTTON 1
+
+typedef enum {
+ OL_DRAWSEL_NONE = 0, /* inactive (regular black text) */
+ OL_DRAWSEL_NORMAL = 1, /* active object (draws white text) */
+ OL_DRAWSEL_ACTIVE = 2, /* active obdata (draws a circle around the icon) */
+} eOLDrawState;
+
+typedef enum {
+ OL_SETSEL_NONE = 0, /* don't change the selection state */
+ OL_SETSEL_NORMAL = 1, /* select the item */
+ OL_SETSEL_EXTEND = 2, /* select the item and extend (also toggles selection) */
+} eOLSetState;
+
+/* get TreeStoreElem associated with a TreeElement
+ * < a: (TreeElement) tree element to find stored element for
+ */
+#define TREESTORE(a) ((a)->store_elem)
+
+/* size constants */
+#define OL_Y_OFFSET 2
+
+#define OL_TOG_USER_BUTS_USERS (UI_UNIT_X * 2.0f + V2D_SCROLL_WIDTH)
+#define OL_TOG_USER_BUTS_STATUS (UI_UNIT_X + V2D_SCROLL_WIDTH)
+
+#define OL_RNA_COLX (UI_UNIT_X * 15)
+#define OL_RNA_COL_SIZEX (UI_UNIT_X * 7.5f)
+#define OL_RNA_COL_SPACEX (UI_UNIT_X * 2.5f)
+
+/* The outliner display modes that support the filter system.
+ * NOTE: keep it synced with `space_outliner.py`. */
+#define SUPPORT_FILTER_OUTLINER(space_outliner_) \
+ (ELEM((space_outliner_)->outlinevis, SO_VIEW_LAYER, SO_OVERRIDES_LIBRARY))
+
+/* Outliner Searching --
+ *
+ * Are we looking for something in the outliner?
+ * If so finding matches in child items makes it more useful
+ *
+ * - We want to flag parents to act as being open to filter child matches
+ * - and also flag matches so we can highlight them
+ * - Flags are stored in TreeStoreElem->flag
+ * - Flag options defined in DNA_outliner_types.h
+ * - SO_SEARCH_RECURSIVE defined in DNA_space_types.h
+ *
+ * - NOT in data-blocks view - searching all data-blocks takes way too long
+ * to be useful
+ * - not searching into RNA items helps but isn't the complete solution
+ */
+
+#define SEARCHING_OUTLINER(sov) ((sov)->search_flags & SO_SEARCH_RECURSIVE)
+
+/* is the current element open? if so we also show children */
+#define TSELEM_OPEN(telm, sv) \
+ (((telm)->flag & TSE_CLOSED) == 0 || \
+ (SEARCHING_OUTLINER(sv) && ((telm)->flag & TSE_CHILDSEARCH)))
+
+/**
+ * Container to avoid passing around these variables to many functions.
+ * Also so we can have one place to assign these variables.
+ */
+typedef struct TreeViewContext {
+ /* Scene level. */
+ struct Scene *scene;
+ struct ViewLayer *view_layer;
+
+ /* Object level. */
+ /** Avoid OBACT macro everywhere. */
+ Object *obact;
+ Object *ob_edit;
+ /**
+ * The pose object may not be the active object (when in weight paint mode).
+ * Checking this in draw loops isn't efficient, so set only once. */
+ Object *ob_pose;
+} TreeViewContext;
+
+typedef enum TreeItemSelectAction {
+ OL_ITEM_DESELECT = 0, /* Deselect the item */
+ OL_ITEM_SELECT = (1 << 0), /* Select the item */
+ OL_ITEM_SELECT_DATA = (1 << 1), /* Select object data */
+ OL_ITEM_ACTIVATE = (1 << 2), /* Activate the item */
+ OL_ITEM_EXTEND = (1 << 3), /* Extend the current selection */
+ OL_ITEM_RECURSIVE = (1 << 4), /* Select recursively */
+} TreeItemSelectAction;
+
+/* outliner_tree.c ----------------------------------------------- */
+
+void outliner_free_tree(ListBase *tree);
+void outliner_cleanup_tree(struct SpaceOutliner *space_outliner);
+/**
+ * Free \a element and its sub-tree and remove its link in \a parent_subtree.
+ *
+ * \note Does not remove the #TreeStoreElem of \a element!
+ * \param parent_subtree: Sub-tree of the parent element, so the list containing \a element.
+ */
+void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree);
+
+/**
+ * Main entry point for building the tree data-structure that the outliner represents.
+ */
+void outliner_build_tree(struct Main *mainvar,
+ struct Scene *scene,
+ struct ViewLayer *view_layer,
+ struct SpaceOutliner *space_outliner,
+ struct ARegion *region);
+
+struct TreeElement *outliner_add_collection_recursive(SpaceOutliner *space_outliner,
+ struct Collection *collection,
+ TreeElement *ten);
+
+bool outliner_requires_rebuild_on_select_or_active_change(
+ const struct SpaceOutliner *space_outliner);
+/**
+ * Check if a display mode needs a full rebuild if the open/collapsed state changes.
+ * Element types in these modes don't actually add children if collapsed, so the rebuild is needed.
+ */
+bool outliner_requires_rebuild_on_open_change(const struct SpaceOutliner *space_outliner);
+
+typedef struct IDsSelectedData {
+ struct ListBase selected_array;
+} IDsSelectedData;
+
+TreeTraversalAction outliner_find_selected_collections(struct TreeElement *te, void *customdata);
+TreeTraversalAction outliner_find_selected_objects(struct TreeElement *te, void *customdata);
+
+/* outliner_draw.c ---------------------------------------------- */
+
+void draw_outliner(const struct bContext *C);
+
+void outliner_tree_dimensions(struct SpaceOutliner *space_outliner, int *r_width, int *r_height);
+
+TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te);
+
+void outliner_collection_isolate_flag(struct Scene *scene,
+ struct ViewLayer *view_layer,
+ struct LayerCollection *layer_collection,
+ struct Collection *collection,
+ struct PropertyRNA *layer_or_collection_prop,
+ const char *propname,
+ bool value);
+
+/**
+ * Return the index to use based on the TreeElement ID and object type
+ *
+ * We use a continuum of indices until we get to the object data-blocks
+ * and we then make room for the object types.
+ */
+int tree_element_id_type_to_index(TreeElement *te);
+
+/* outliner_select.c -------------------------------------------- */
+/**
+ * Generic call for non-id data to make active in UI
+ */
+void tree_element_type_active_set(struct bContext *C,
+ const TreeViewContext *tvc,
+ TreeElement *te,
+ TreeStoreElem *tselem,
+ eOLSetState set,
+ bool recursive);
+/**
+ * Generic call for non-id data to check the active state in UI.
+ */
+eOLDrawState tree_element_type_active_state_get(const struct bContext *C,
+ const struct TreeViewContext *tvc,
+ const TreeElement *te,
+ const TreeStoreElem *tselem);
+/**
+ * Generic call for ID data check or make/check active in UI.
+ */
+void tree_element_activate(struct bContext *C,
+ const TreeViewContext *tvc,
+ TreeElement *te,
+ eOLSetState set,
+ bool handle_all_types);
+eOLDrawState tree_element_active_state_get(const TreeViewContext *tvc,
+ const TreeElement *te,
+ const TreeStoreElem *tselem);
+
+struct bPoseChannel *outliner_find_parent_bone(TreeElement *te, TreeElement **r_bone_te);
+
+/**
+ * Select the item using the set flags.
+ */
+void outliner_item_select(struct bContext *C,
+ struct SpaceOutliner *space_outliner,
+ struct TreeElement *te,
+ short select_flag);
+
+/**
+ * Find if x coordinate is over an icon or name.
+ */
+bool outliner_item_is_co_over_name_icons(const TreeElement *te, float view_co_x);
+bool outliner_item_is_co_over_icon(const TreeElement *te, float view_co_x);
+/**
+ * Find if x coordinate is over element name.
+ */
+bool outliner_item_is_co_over_name(const TreeElement *te, float view_co_x);
+/**
+ * Find if x coordinate is over element disclosure toggle.
+ */
+bool outliner_item_is_co_within_close_toggle(const TreeElement *te, float view_co_x);
+bool outliner_is_co_within_mode_column(SpaceOutliner *space_outliner, const float view_mval[2]);
+
+/**
+ * Toggle the item's interaction mode if supported.
+ */
+void outliner_item_mode_toggle(struct bContext *C,
+ TreeViewContext *tvc,
+ TreeElement *te,
+ bool do_extend);
+
+/* outliner_edit.c ---------------------------------------------- */
+typedef void (*outliner_operation_fn)(struct bContext *C,
+ struct ReportList *,
+ struct Scene *scene,
+ struct TreeElement *,
+ struct TreeStoreElem *,
+ TreeStoreElem *,
+ void *);
+
+/**
+ * \param recurse_selected: Set to false for operations which are already
+ * recursively operating on their children.
+ */
+void outliner_do_object_operation_ex(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ struct SpaceOutliner *space_outliner,
+ struct ListBase *lb,
+ outliner_operation_fn operation_fn,
+ void *user_data,
+ bool recurse_selected);
+void outliner_do_object_operation(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ struct SpaceOutliner *space_outliner,
+ struct ListBase *lb,
+ outliner_operation_fn operation_fn);
+
+int outliner_flag_is_any_test(ListBase *lb, short flag, int curlevel);
+/**
+ * Set or unset \a flag for all outliner elements in \a lb and sub-trees.
+ * \return if any flag was modified.
+ */
+bool outliner_flag_set(ListBase *lb, short flag, short set);
+bool outliner_flag_flip(ListBase *lb, short flag);
+
+void item_rename_fn(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ TreeElement *te,
+ struct TreeStoreElem *tsep,
+ struct TreeStoreElem *tselem,
+ void *user_data);
+void lib_relocate_fn(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ struct TreeElement *te,
+ struct TreeStoreElem *tsep,
+ struct TreeStoreElem *tselem,
+ void *user_data);
+void lib_reload_fn(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ struct TreeElement *te,
+ struct TreeStoreElem *tsep,
+ struct TreeStoreElem *tselem,
+ void *user_data);
+
+void id_delete_fn(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ struct TreeElement *te,
+ struct TreeStoreElem *tsep,
+ struct TreeStoreElem *tselem,
+ void *user_data);
+void id_remap_fn(struct bContext *C,
+ struct ReportList *reports,
+ struct Scene *scene,
+ struct TreeElement *te,
+ struct TreeStoreElem *tsep,
+ struct TreeStoreElem *tselem,
+ void *user_data);
+
+/**
+ * To retrieve coordinates with redrawing the entire tree.
+ */
+void outliner_set_coordinates(struct ARegion *region, struct SpaceOutliner *space_outliner);
+
+/**
+ * Open or close a tree element, optionally toggling all children recursively.
+ */
+void outliner_item_openclose(struct SpaceOutliner *space_outliner,
+ TreeElement *te,
+ bool open,
+ bool toggle_all);
+
+/* outliner_dragdrop.c */
+
+/**
+ * Region drop-box definition.
+ */
+void outliner_dropboxes(void);
+
+void OUTLINER_OT_item_drag_drop(struct wmOperatorType *ot);
+void OUTLINER_OT_parent_drop(struct wmOperatorType *ot);
+void OUTLINER_OT_parent_clear(struct wmOperatorType *ot);
+void OUTLINER_OT_scene_drop(struct wmOperatorType *ot);
+void OUTLINER_OT_material_drop(struct wmOperatorType *ot);
+void OUTLINER_OT_datastack_drop(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_drop(struct wmOperatorType *ot);
+
+/* ...................................................... */
+
+void OUTLINER_OT_highlight_update(struct wmOperatorType *ot);
+
+void OUTLINER_OT_item_activate(struct wmOperatorType *ot);
+void OUTLINER_OT_item_openclose(struct wmOperatorType *ot);
+void OUTLINER_OT_item_rename(struct wmOperatorType *ot);
+void OUTLINER_OT_lib_relocate(struct wmOperatorType *ot);
+void OUTLINER_OT_lib_reload(struct wmOperatorType *ot);
+
+void OUTLINER_OT_id_delete(struct wmOperatorType *ot);
+
+void OUTLINER_OT_show_one_level(struct wmOperatorType *ot);
+void OUTLINER_OT_show_active(struct wmOperatorType *ot);
+void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot);
+
+void OUTLINER_OT_select_box(struct wmOperatorType *ot);
+void OUTLINER_OT_select_walk(struct wmOperatorType *ot);
+
+void OUTLINER_OT_select_all(struct wmOperatorType *ot);
+void OUTLINER_OT_expanded_toggle(struct wmOperatorType *ot);
+
+void OUTLINER_OT_scroll_page(struct wmOperatorType *ot);
+
+void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot);
+void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot);
+
+void OUTLINER_OT_drivers_add_selected(struct wmOperatorType *ot);
+void OUTLINER_OT_drivers_delete_selected(struct wmOperatorType *ot);
+
+void OUTLINER_OT_orphans_purge(struct wmOperatorType *ot);
+
+/* outliner_tools.c ---------------------------------------------- */
+
+void merged_element_search_menu_invoke(struct bContext *C,
+ TreeElement *parent_te,
+ TreeElement *activate_te);
+
+/* Menu only! Calls other operators */
+
+void OUTLINER_OT_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_scene_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_object_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_lib_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_id_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_id_remap(struct wmOperatorType *ot);
+void OUTLINER_OT_id_copy(struct wmOperatorType *ot);
+void OUTLINER_OT_id_paste(struct wmOperatorType *ot);
+void OUTLINER_OT_data_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_animdata_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_action_set(struct wmOperatorType *ot);
+void OUTLINER_OT_constraint_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_modifier_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_delete(struct wmOperatorType *ot);
+
+/* ---------------------------------------------------------------- */
+
+/* outliner_ops.c */
+void outliner_operatortypes(void);
+void outliner_keymap(struct wmKeyConfig *keyconf);
+
+/* outliner_collections.c */
+
+bool outliner_is_collection_tree_element(const TreeElement *te);
+struct Collection *outliner_collection_from_tree_element(const TreeElement *te);
+void outliner_collection_delete(struct bContext *C,
+ struct Main *bmain,
+ struct Scene *scene,
+ struct ReportList *reports,
+ bool hierarchy);
+
+void OUTLINER_OT_collection_new(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_duplicate_linked(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_duplicate(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_hierarchy_delete(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_objects_select(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_objects_deselect(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_link(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_instance(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_exclude_set(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_exclude_clear(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_holdout_set(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_holdout_clear(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_indirect_only_set(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_indirect_only_clear(struct wmOperatorType *ot);
+
+void OUTLINER_OT_collection_isolate(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_show(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_hide(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_show_inside(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_hide_inside(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_enable(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_disable(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_enable_render(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_disable_render(struct wmOperatorType *ot);
+void OUTLINER_OT_hide(struct wmOperatorType *ot);
+void OUTLINER_OT_unhide_all(struct wmOperatorType *ot);
+
+void OUTLINER_OT_collection_color_tag_set(struct wmOperatorType *ot);
+
+/* outliner_utils.c ---------------------------------------------- */
+
+void outliner_viewcontext_init(const struct bContext *C, TreeViewContext *tvc);
+
+/**
+ * Try to find an item under y-coordinate \a view_co_y (view-space).
+ * \note Recursive
+ */
+TreeElement *outliner_find_item_at_y(const SpaceOutliner *space_outliner,
+ const ListBase *tree,
+ float view_co_y);
+/**
+ * Collapsed items can show their children as click-able icons. This function tries to find
+ * such an icon that represents the child item at x-coordinate \a view_co_x (view-space).
+ *
+ * \return a hovered child item or \a parent_te (if no hovered child found).
+ */
+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);
+/**
+ * `tse` is not in the tree-store, we use its contents to find a match.
+ */
+TreeElement *outliner_find_tse(struct SpaceOutliner *space_outliner, const TreeStoreElem *tse);
+/**
+ * Find specific item from the trees-tore.
+ */
+TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem);
+/**
+ * Find parent element of te.
+ */
+TreeElement *outliner_find_parent_element(ListBase *lb,
+ TreeElement *parent_te,
+ const TreeElement *child_te);
+/**
+ * Find tree-store that refers to given ID.
+ */
+TreeElement *outliner_find_id(struct SpaceOutliner *space_outliner,
+ ListBase *lb,
+ const struct ID *id);
+TreeElement *outliner_find_posechannel(ListBase *lb, const struct bPoseChannel *pchan);
+TreeElement *outliner_find_editbone(ListBase *lb, const struct EditBone *ebone);
+TreeElement *outliner_search_back_te(TreeElement *te, short idcode);
+struct ID *outliner_search_back(TreeElement *te, short idcode);
+/**
+ * Iterate over all tree elements (pre-order traversal), executing \a func callback for
+ * each tree element matching the optional filters.
+ *
+ * \param filter_te_flag: If not 0, only TreeElements with this flag will be visited.
+ * \param filter_tselem_flag: Same as \a filter_te_flag, but for the TreeStoreElem.
+ * \param func: Custom callback to execute for each visited item.
+ */
+bool outliner_tree_traverse(const SpaceOutliner *space_outliner,
+ ListBase *tree,
+ int filter_te_flag,
+ int filter_tselem_flag,
+ TreeTraversalFunc func,
+ void *customdata);
+float outliner_restrict_columns_width(const struct SpaceOutliner *space_outliner);
+/**
+ * Find first tree element in tree with matching tree-store flag.
+ */
+TreeElement *outliner_find_element_with_flag(const ListBase *lb, short flag);
+/**
+ * Find if element is visible in the outliner tree.
+ */
+bool outliner_is_element_visible(const TreeElement *te);
+/**
+ * Scroll view vertically while keeping within total bounds.
+ */
+void outliner_scroll_view(struct SpaceOutliner *space_outliner,
+ struct ARegion *region,
+ int delta_y);
+/**
+ * The outliner should generally use #ED_region_tag_redraw_no_rebuild() to avoid unnecessary tree
+ * rebuilds. If elements are open or closed, we may still have to rebuild.
+ * Upon changing the open/closed state, call this to avoid rebuilds if possible.
+ */
+void outliner_tag_redraw_avoid_rebuild_on_open_change(const struct SpaceOutliner *space_outliner,
+ struct ARegion *region);
+
+/* outliner_sync.c ---------------------------------------------- */
+
+/**
+ * If outliner is dirty sync selection from view layer and sequencer.
+ */
+void outliner_sync_selection(const struct bContext *C, struct SpaceOutliner *space_outliner);
+
+/* outliner_context.c ------------------------------------------- */
+
+int outliner_context(const struct bContext *C,
+ const char *member,
+ struct bContextDataResult *result);
+
+#ifdef __cplusplus
+}
+#endif