12#include <fmt/format.h>
70#include "RNA_prototypes.hh"
116 if (
wm->runtime->drags.first) {
125 ®ion->
v2d, event->
mval[0], event->
mval[1], &view_mval[0], &view_mval[1]);
128 space_outliner, &space_outliner->
tree, view_mval[1]);
131 bool is_over_icon =
false;
134 space_outliner, hovered_te, view_mval[0],
nullptr, &is_over_icon);
137 bool changed =
false;
163 ot->name =
"Update Highlight";
164 ot->idname =
"OUTLINER_OT_highlight_update";
165 ot->description =
"Update the item highlight based on the current mouse position";
219 ®ion->
v2d, event->
mval[0], event->
mval[1], &view_mval[0], &view_mval[1]);
228 if (te->
xs ==
data->x_location) {
239 data->prev_tselem =
nullptr;
286 toggle_data->
open = open;
301 ot->name =
"Open/Close";
302 ot->idname =
"OUTLINER_OT_item_openclose";
303 ot->description =
"Toggle whether item under cursor is enabled or closed";
324 bool add_textbut =
false;
371 BKE_report(reports,
RPT_INFO,
"Library path is not editable, use the Relocate operation");
399 if (!active_element) {
404 return active_element;
440 int ytop = (te->
ys + (size_y / 2));
441 int delta_y = ytop - v2d->
cur.
ymax;
454 ot->idname =
"OUTLINER_OT_item_rename";
455 ot->description =
"Rename the active element";
469 "Rename the active item, rather than the one the mouse is over");
495 "Cannot delete library override id '%s', it is part of an override hierarchy",
502 Library *
lib = blender::id_cast<Library *>(
id);
503 if (
lib->runtime->parent !=
nullptr) {
511 "Cannot delete library '%s', as it contains the currently active Scene",
515 for (
Library *packed_lib :
lib->runtime->archived_libraries) {
516 if (active_scene->
id.
lib == packed_lib) {
519 "Cannot delete library '%s', as it contains the archive library of the "
520 "currently active packed Scene",
533 "Cannot delete id '%s', indirectly used data-blocks need at least one user",
541 reports,
RPT_WARNING,
"Cannot delete currently visible workspace id '%s'", id->
name);
568 int id_tagged_num = 0;
573 if (te->
idcode != 0 && tselem->
id) {
577 "Cannot delete indirectly linked library '%s'",
578 ((
Library *)tselem->
id)->runtime->filepath_abs);
594 return id_tagged_num;
610 int id_tagged_num = 0;
617 if (id_tagged_num == 0) {
629 ot->name =
"Delete Data-Block";
630 ot->idname =
"OUTLINER_OT_id_delete";
631 ot->description =
"Delete the ID under cursor";
652 ID *old_id =
static_cast<ID *
>(
654 ID *new_id =
static_cast<ID *
>(
658 if (space_outliner ==
nullptr) {
662 if (!(old_id && new_id && (old_id != new_id) && (
GS(old_id->
name) ==
GS(new_id->
name)))) {
665 "Invalid old/new ID pair ('%s' / '%s')",
666 old_id ? old_id->
name :
"Invalid ID",
667 new_id ? new_id->
name :
"Invalid ID");
674 "Old ID '%s' is linked from a library, indirect usages of this data-block will "
750 for (; id;
id =
static_cast<ID *
>(
id->next)) {
767 ot->name =
"Outliner ID Data Remap";
768 ot->idname =
"OUTLINER_OT_id_remap";
794 "New ID to remap all selected IDs' users to");
851 "Copying ID '%s' is not possible, '%s' type of data-blocks is not supported",
857 (PartialWriteContext::IDAddOperations::SET_FAKE_USER |
858 PartialWriteContext::IDAddOperations::SET_CLIPBOARD_MARK |
859 PartialWriteContext::IDAddOperations::ADD_DEPENDENCIES)},
882 space_outliner, &space_outliner->
tree, copybuffer, op->
reports);
900 ot->name =
"Outliner ID Data Copy";
901 ot->idname =
"OUTLINER_OT_id_copy";
902 ot->description =
"Copy the selected data-blocks to the internal clipboard";
926 if (num_pasted == 0) {
941 ot->name =
"Outliner ID Data Paste";
942 ot->idname =
"OUTLINER_OT_id_paste";
943 ot->description =
"Paste data-blocks from the internal clipboard";
964 ID *id_linked =
static_cast<ID *
>(id_linked_ptr.
data);
973 "The active data-block '%s' is not a valid linked one",
980 "The active data-block '%s' is used by other linked data",
1003 ot->name =
"Relocate Linked ID";
1004 ot->idname =
"OUTLINER_OT_id_linked_relocate";
1006 "Replace the active linked ID (and its dependencies if any) by another one, from the same "
1007 "or a different library";
1041 lib->runtime->filepath_abs, dir,
sizeof(dir), filename,
sizeof(filename));
1047 &op_props,
"relative_path",
BLI_path_cmp(
lib->runtime->filepath_abs,
lib->filepath) != 0);
1070 if (((
Library *)tselem->
id)->runtime->parent && !reload) {
1073 "Cannot relocate indirectly linked library '%s'",
1074 ((
Library *)tselem->
id)->runtime->filepath_abs);
1120 ot->name =
"Relocate Library";
1121 ot->idname =
"OUTLINER_OT_lib_relocate";
1122 ot->description =
"Relocate the library under cursor";
1178 ot->name =
"Reload Library";
1179 ot->idname =
"OUTLINER_OT_lib_reload";
1180 ot->description =
"Reload the library under cursor";
1209 int level = curlevel;
1213 level = std::max(lev, level);
1241 bool changed =
false;
1245 bool has_flag = (tselem->
flag &
flag);
1252 else if (!has_flag) {
1268 bool changed =
false;
1304 ot->name =
"Expand/Collapse All";
1305 ot->idname =
"OUTLINER_OT_expanded_toggle";
1306 ot->description =
"Expand/Collapse all items";
1356 ot->name =
"Toggle Selected";
1357 ot->idname =
"OUTLINER_OT_select_all";
1358 ot->description =
"Toggle the Outliner selection of items";
1389 ot->name =
"Filter";
1390 ot->description =
"Start entering filter text";
1391 ot->idname =
"OUTLINER_OT_start_filter";
1409 ot->name =
"Clear Filter";
1410 ot->description =
"Clear the search filter";
1411 ot->idname =
"OUTLINER_OT_clear_filter";
1440 bool retval =
false;
1520 C, space_outliner, scene, view_layer);
1522 if (active_element) {
1536 int ytop = (active_element->
ys + (size_y / 2));
1537 int delta_y = ytop - v2d->
cur.
ymax;
1553 ot->name =
"Show Active";
1554 ot->idname =
"OUTLINER_OT_show_active";
1556 "Open up the tree and adjust the view so that the active object is shown centered";
1593 ot->name =
"Scroll Page";
1594 ot->idname =
"OUTLINER_OT_scroll_page";
1595 ot->description =
"Scroll page up or down";
1619 if (curlevel <= level) {
1624 if (curlevel >= level) {
1665 ot->name =
"Show/Hide One Level";
1666 ot->idname =
"OUTLINER_OT_show_one_level";
1667 ot->description =
"Expand/collapse all entries by one level";
1676 prop =
RNA_def_boolean(
ot->srna,
"open",
true,
"Open",
"Expand all entries one level deep");
1718 if (tselem->
id != (
ID *)scene) {
1758 ot->name =
"Show Hierarchy";
1759 ot->idname =
"OUTLINER_OT_show_hierarchy";
1760 ot->description =
"Open all object entries and close all others";
1801 ListBase hierarchy = {
nullptr,
nullptr};
1802 char *newpath =
nullptr;
1842 PropertyRNA *prop = tem_rna_prop->get_property_rna();
1849 char buf[128], *
name;
1868 if (temsub == temnext) {
1895 *
id =
static_cast<ID *
>(
ptr.data);
1915 *array_index = te->
index;
1965 char *path =
nullptr;
1966 int array_index = 0;
1991 arraylen = array_index;
1995 if (arraylen == array_index) {
2000 for (; array_index < arraylen; array_index++) {
2032 if (space_outliner ==
nullptr) {
2048 ot->idname =
"OUTLINER_OT_drivers_add_selected";
2049 ot->name =
"Add Drivers for Selected";
2050 ot->description =
"Add drivers to selected items";
2071 if (space_outliner ==
nullptr) {
2087 ot->idname =
"OUTLINER_OT_drivers_delete_selected";
2088 ot->name =
"Delete Drivers for Selected";
2089 ot->description =
"Delete drivers assigned to selected items";
2123 if (scene ==
nullptr) {
2134 if ((
add) && (ks ==
nullptr)) {
2156 char *path =
nullptr;
2157 int array_index = 0;
2218 if (ks ==
nullptr) {
2222 if (space_outliner ==
nullptr) {
2238 ot->idname =
"OUTLINER_OT_keyingset_add_selected";
2239 ot->name =
"Keying Set Add Selected";
2240 ot->description =
"Add selected items (blue-gray rows) to active Keying Set";
2263 if (space_outliner ==
nullptr) {
2279 ot->idname =
"OUTLINER_OT_keyingset_remove_selected";
2280 ot->name =
"Keying Set Remove Selected";
2281 ot->description =
"Remove selected items (blue-gray rows) from active Keying Set";
2308 const std::array<int, INDEX_ID_MAX> &num_tagged)
2310 bool is_first =
true;
2312 message +=
IFACE_(
"None");
2322 if (num_tagged[
i] != 0) {
2323 message += fmt::format(
2325 (is_first) ?
"" :
", ",
2327 (num_tagged[
i] > 1) ?
2341 data.do_local_ids =
true;
2342 data.do_linked_ids =
true;
2343 data.do_recursive =
true;
2346 std::string unused_message;
2352 unused_message =
"";
2354 max_messages_width = std::max(
2358 return int(std::max(max_messages_width, 300.0f));
2363 const bool is_abort =
false)
2395 op->
customdata = MEM_new<LibQueryUnusedIDsData>(__func__);
2403 IFACE_(
"Purge Unused Data from This File"),
2414 op->
customdata = MEM_new<LibQueryUnusedIDsData>(__func__);
2434 "Attempt to delete scenes as part of a purge operation, should never happen");
2479 op->
customdata = MEM_new<LibQueryUnusedIDsData>(__func__);
2483 std::string unused_message;
2489 row->
label(unused_message, ICON_NONE);
2491 unused_message =
"";
2493 column = &layout->
column(
true);
2495 row = &column->
row(
true);
2497 row->
label(unused_message, ICON_NONE);
2505 ot->idname =
"OUTLINER_OT_orphans_purge";
2506 ot->name =
"Purge All";
2507 ot->description =
"Clear all orphaned data-blocks without any users from the file";
2526 "Local Data-blocks",
2527 "Include unused local data-blocks into deletion");
2531 "Linked Data-blocks",
2532 "Include unused linked data-blocks into deletion");
2538 "Recursively check for indirectly unused data-blocks, ensuring that no orphaned "
2539 "data-blocks remain after execution");
2563 ot->idname =
"OUTLINER_OT_orphans_manage";
2564 ot->name =
"Manage Unused Data";
2565 ot->description =
"Open a window to manage unused data";
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_active(Object *ob, bool check_bonecoll)
struct KS_Path * BKE_keyingset_find_path(struct KeyingSet *ks, struct ID *id, const char group_name[], const char rna_path[], int array_index, int group_mode)
struct KeyingSet * BKE_keyingset_add(struct ListBase *list, const char idname[], const char name[], short flag, short keyingflag)
struct KS_Path * BKE_keyingset_add_path(struct KeyingSet *ks, struct ID *id, const char group_name[], const char rna_path[], int array_index, short flag, short groupmode)
void BKE_keyingset_free_path(struct KeyingSet *ks, struct KS_Path *ksp)
const char * BKE_tempdir_base() ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
int BKE_copybuffer_paste(bContext *C, const char *libname, int flag, ReportList *reports, uint64_t id_types_mask)
SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type)
ScrArea * CTX_wm_area(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
EditBone * CTX_data_active_bone(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
const IDTypeInfo * BKE_idtype_get_info_from_id(const ID *id)
short BKE_idtype_index_to_idcode(int idtype_index)
@ IDTYPE_FLAGS_NO_LIBLINKING
const char * BKE_idtype_idcode_to_name(short idcode)
bool BKE_idtype_idcode_is_linkable(short idcode)
const char * BKE_idtype_idcode_to_name_plural(short idcode)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
void size_t BKE_id_multi_tagged_delete(Main *bmain) ATTR_NONNULL()
void BKE_main_id_tag_idcode(Main *mainvar, short type, int tag, bool value)
void BKE_main_lib_objects_recalc_all(Main *bmain)
const char * BKE_id_name(const ID &id)
void BKE_main_id_tag_all(Main *mainvar, int tag, bool value)
void BKE_lib_query_unused_ids_tag(Main *bmain, int tag, LibQueryUnusedIDsData ¶meters)
bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv)
void BKE_lib_query_unused_ids_amounts(Main *bmain, LibQueryUnusedIDsData ¶meters)
void void BKE_libblock_remap(Main *bmain, void *old_idv, void *new_idv, int remap_flags) ATTR_NONNULL(1
@ ID_REMAP_SKIP_NEVER_NULL_USAGE
@ ID_REMAP_SKIP_INDIRECT_USAGE
ListBase * which_libbase(Main *bmain, short type)
General operations, lookup, etc. for blender objects.
Object * BKE_object_pose_armature_get(Object *ob)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
@ RPT_ERROR_INVALID_INPUT
void BKE_report(ReportList *reports, eReportType type, const char *message)
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
void BKE_workspace_id_tag_all_visible(Main *bmain, int tag) ATTR_NONNULL()
#define BLF_DRAW_STR_DUMMY_MAX
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
#define BLI_assert_unreachable()
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_path_join(...)
void BLI_path_split_dir_file(const char *filepath, char *dir, size_t dir_maxncpy, char *file, size_t file_maxncpy) ATTR_NONNULL(1
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
#define UNUSED_VARS_NDEBUG(...)
#define BLT_I18NCONTEXT_ID_ID
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
ID and Library types, which are fundamental for SDNA.
#define ID_IS_PACKED(_id)
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_LINKED(_id)
#define ID_IS_EDITABLE(_id)
#define ID_REAL_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ LIBOVERRIDE_FLAG_NO_HIERARCHY
Object groups, one object can be in many groups at once.
Object is a sort of wrapper for general info.
#define TSE_IS_REAL_ID(_tse)
@ TSE_VIEW_COLLECTION_BASE
@ TSE_LIBRARY_OVERRIDE_BASE
@ TSE_SCENE_COLLECTION_BASE
@ TSE_GPENCIL_EFFECT_BASE
@ TSE_BONE_COLLECTION_BASE
struct SpaceOutliner SpaceOutliner
@ CREATEDRIVER_WITH_DEFAULT_DVAR
void ED_outliner_select_sync_from_outliner(bContext *C, SpaceOutliner *space_outliner)
bool ED_operator_region_outliner_active(bContext *C)
void ED_area_tag_redraw(ScrArea *area)
int ED_screen_area_active(const bContext *C)
void ED_region_tag_redraw_no_rebuild(ARegion *region)
void ED_region_tag_redraw(ARegion *region)
bool ED_operator_outliner_active(bContext *C)
void GPU_materials_free(Main *bmain)
Read Guarded memory(de)allocation.
bool UI_textbutton_activate_rna(const bContext *C, ARegion *region, const void *rna_poin_data, const char *rna_prop_id)
const uiStyle * UI_style_get_dpi()
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
BMesh const char void * data
ID * id_add(const ID *id, IDAddOptions options, blender::FunctionRef< IDAddOperations(LibraryIDLinkCallbackData *cb_data, IDAddOptions options)> dependencies_filter_cb=nullptr)
bool write(const char *write_filepath, int write_flags, int remap_mode, ReportList &reports)
const PointerRNA & get_pointer_rna() const
virtual PropertyRNA * get_property_rna() const
int ANIM_add_driver(ReportList *reports, ID *id, const char rna_path[], int array_index, short flag, int type)
Main Driver Management API calls.
bool ANIM_remove_driver(ID *id, const char rna_path[], int array_index)
Main Driver Management API calls.
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
static void add(blender::Map< std::string, std::string > &messages, Message &msg)
void all_open(const SpaceOutliner &space_outliner, const VisitorFn visitor)
void all(const SpaceOutliner &space_outliner, const VisitorFn visitor)
void OUTLINER_OT_expanded_toggle(wmOperatorType *ot)
bool outliner_item_is_co_within_close_toggle(const TreeElement *te, float view_co_x)
int outliner_flag_is_any_test(ListBase *lb, short flag, const int curlevel)
static void outliner_openclose_level(ListBase *lb, int curlevel, int level, int open)
static wmOperatorStatus outliner_keyingset_removeitems_exec(bContext *C, wmOperator *)
static void tree_element_show_hierarchy(Scene *scene, SpaceOutliner *space_outliner)
void outliner_tag_redraw_avoid_rebuild_on_open_change(const SpaceOutliner *space_outliner, ARegion *region)
void OUTLINER_OT_item_rename(wmOperatorType *ot)
static wmOperatorStatus outliner_item_openclose_modal(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus outliner_id_delete_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int outliner_id_copy_tag(SpaceOutliner *space_outliner, ListBase *tree, blender::bke::blendfile::PartialWriteContext ©buffer, ReportList *reports)
static int subtree_has_objects(ListBase *lb)
static TreeElement * outliner_item_rename_find_hovered(const SpaceOutliner *space_outliner, ARegion *region, const wmEvent *event)
static void do_outliner_keyingset_editop(SpaceOutliner *space_outliner, KeyingSet *ks, const short mode)
static wmOperatorStatus outliner_orphans_manage_invoke(bContext *C, wmOperator *, const wmEvent *)
void OUTLINER_OT_show_hierarchy(wmOperatorType *ot)
TreeElement * outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
static void outliner_orphans_purge_cancel(bContext *C, wmOperator *op)
static wmOperatorStatus outliner_id_copy_exec(bContext *C, wmOperator *op)
void OUTLINER_OT_highlight_update(wmOperatorType *ot)
static int outliner_id_delete_tag(bContext *C, ReportList *reports, TreeElement *te, const float mval[2])
bool outliner_is_collection_tree_element(const TreeElement *te)
@ TE_PRETEND_HAS_CHILDREN
static TreeElement * outliner_show_active_get_element(bContext *C, SpaceOutliner *space_outliner, const Scene *scene, ViewLayer *view_layer)
static wmOperatorStatus outliner_id_relocate_invoke(bContext *C, wmOperator *op, const wmEvent *)
void OUTLINER_OT_drivers_add_selected(wmOperatorType *ot)
static wmOperatorStatus outliner_show_active_exec(bContext *C, wmOperator *)
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_id_linked_relocate(wmOperatorType *ot)
@ KEYINGSET_EDITMODE_REMOVE
static wmOperatorStatus outliner_id_remap_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void OUTLINER_OT_lib_relocate(wmOperatorType *ot)
static void do_outliner_drivers_editop(SpaceOutliner *space_outliner, ReportList *reports, short mode)
static wmOperatorStatus lib_relocate(bContext *C, TreeElement *te, TreeStoreElem *tselem, wmOperatorType *ot, const bool reload)
TreeElement * outliner_find_id(SpaceOutliner *space_outliner, ListBase *lb, const ID *id)
static wmOperatorStatus outliner_item_openclose_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void outliner_orphans_purge_ui(bContext *, wmOperator *op)
static wmOperatorStatus outliner_one_level_exec(bContext *C, wmOperator *op)
static void outliner_orphans_purge_cleanup(bContext *C, wmOperator *op, const bool is_abort=false)
void id_delete_tag_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
static wmOperatorStatus outliner_lib_relocate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus outliner_id_remap_exec(bContext *C, wmOperator *op)
static int unused_message_popup_width_compute(bContext *C)
static wmOperatorStatus outliner_drivers_deletesel_exec(bContext *C, wmOperator *op)
bool outliner_flag_set(const SpaceOutliner &space_outliner, const short flag, const short set)
static wmOperatorStatus outliner_scroll_page_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem * outliner_id_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *, bool *r_free)
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_OT_clear_filter(wmOperatorType *ot)
void outliner_set_coordinates(const ARegion *region, const SpaceOutliner *space_outliner)
static void id_delete_tag(bContext *C, ReportList *reports, TreeElement *te, TreeStoreElem *tselem)
void OUTLINER_OT_start_filter(wmOperatorType *ot)
static wmOperatorStatus outliner_drivers_addsel_exec(bContext *C, wmOperator *op)
void OUTLINER_OT_drivers_delete_selected(wmOperatorType *ot)
@ DRIVERS_EDITMODE_REMOVE
void OUTLINER_OT_show_one_level(wmOperatorType *ot)
void OUTLINER_OT_show_active(wmOperatorType *ot)
static wmOperatorStatus outliner_toggle_expanded_exec(bContext *C, wmOperator *)
static bool outliner_id_remap_find_tree_element(bContext *C, wmOperator *op, ListBase *tree, const float y)
static wmOperatorStatus outliner_orphans_purge_exec(bContext *C, wmOperator *op)
void OUTLINER_OT_id_copy(wmOperatorType *ot)
static void outliner_show_active(SpaceOutliner *space_outliner, ARegion *region, TreeElement *te, ID *id)
void OUTLINER_OT_orphans_manage(wmOperatorType *ot)
TreeElement * outliner_find_editbone(ListBase *lb, const EditBone *ebone)
static wmOperatorStatus outliner_start_filter_exec(bContext *C, wmOperator *)
Collection * outliner_collection_from_tree_element(const TreeElement *te)
static void tree_element_to_path(TreeElement *te, TreeStoreElem *tselem, ID **id, char **path, int *array_index, short *flag, short *)
void outliner_scroll_view(SpaceOutliner *space_outliner, ARegion *region, int delta_y)
bool outliner_flag_flip(const SpaceOutliner &space_outliner, const short flag)
void lib_relocate_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
static wmOperatorStatus outliner_keyingset_additems_exec(bContext *C, wmOperator *op)
void OUTLINER_OT_lib_reload(wmOperatorType *ot)
void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all)
void OUTLINER_OT_scroll_page(wmOperatorType *ot)
void OUTLINER_OT_keyingset_remove_selected(wmOperatorType *ot)
void OUTLINER_OT_id_remap(wmOperatorType *ot)
void OUTLINER_OT_id_delete(wmOperatorType *ot)
TreeElementT * tree_element_cast(const TreeElement *te)
static wmOperatorStatus outliner_orphans_purge_invoke(bContext *C, wmOperator *op, const wmEvent *)
void OUTLINER_OT_keyingset_add_selected(wmOperatorType *ot)
static bool ed_operator_outliner_id_orphans_active(bContext *C)
static void do_item_rename(ARegion *region, TreeElement *te, TreeStoreElem *tselem, ReportList *reports)
static wmOperatorStatus outliner_lib_relocate_invoke_do(bContext *C, ReportList *reports, TreeElement *te, const float mval[2], const bool reload)
void id_remap_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static bool ed_operator_outliner_datablocks_active(bContext *C)
void lib_reload_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
void outliner_cleanup_tree(SpaceOutliner *space_outliner)
static wmOperatorStatus outliner_item_rename_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void OUTLINER_OT_item_openclose(wmOperatorType *ot)
bool outliner_item_is_co_over_name(const TreeElement *te, float view_co_x)
TreeElement * outliner_find_element_with_flag(const ListBase *lb, short flag)
static KeyingSet * verify_active_keyingset(Scene *scene, short add)
static bool outliner_open_back(TreeElement *te)
static wmOperatorStatus outliner_clear_filter_exec(bContext *C, wmOperator *)
static wmOperatorStatus outliner_id_paste_exec(bContext *C, wmOperator *op)
static int outliner_count_levels(ListBase *lb, const int curlevel)
void item_rename_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
static void outliner_copybuffer_filepath_get(char filepath[FILE_MAX], size_t filepath_maxncpy)
static void unused_message_gen(std::string &message, const std::array< int, INDEX_ID_MAX > &num_tagged)
static wmOperatorStatus outliner_highlight_update_invoke(bContext *C, wmOperator *, const wmEvent *event)
static wmOperatorStatus outliner_show_hierarchy_exec(bContext *C, wmOperator *)
static wmOperatorStatus outliner_lib_reload_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static bool outliner_orphans_purge_check(bContext *C, wmOperator *op)
void OUTLINER_OT_orphans_purge(wmOperatorType *ot)
static wmOperatorStatus outliner_select_all_exec(bContext *C, wmOperator *op)
static TreeElement * outliner_item_rename_find_active(const SpaceOutliner *space_outliner, ReportList *reports)
const EnumPropertyItem rna_enum_id_type_items[]
bool RNA_property_array_check(PropertyRNA *prop)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
bool RNA_struct_is_ID(const StructRNA *type)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
char * RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen, int *r_len)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
PropertyType RNA_property_type(PropertyRNA *prop)
const PointerRNA PointerRNA_NULL
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_enum_set_identifier(bContext *C, PointerRNA *ptr, const char *name, const char *id)
bool RNA_property_anim_editable(const PointerRNA *ptr, PropertyRNA *prop_orig)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_enum_funcs_runtime(PropertyRNA *prop, EnumPropertyGetFunc getfunc, EnumPropertySetFunc setfunc, EnumPropertyItemFunc itemfunc, EnumPropertyGetTransformFunc get_transform_fn, EnumPropertySetTransformFunc set_transform_fn)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
char * RNA_path_append(const char *path, const PointerRNA *, PropertyRNA *prop, int intkey, const char *strkey)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
IDOverrideLibrary * override_library
TreeStoreElem * prev_tselem
TreeStoreElem * store_elem
void label(blender::StringRef name, int icon)
uiLayout & column(bool align)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
uiLayout & row(bool align)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
struct ReportList * reports
static DynamicLibrary lib
void WM_event_drag_start_mval(const wmEvent *event, const ARegion *region, int r_mval[2])
wmOperatorStatus WM_operator_name_call_ptr(bContext *C, wmOperatorType *ot, blender::wm::OpCallContext context, PointerRNA *properties, const wmEvent *event)
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_select_all(wmOperatorType *ot)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
wmOperatorStatus WM_operator_props_dialog_popup(bContext *C, wmOperator *op, int width, std::optional< std::string > title, std::optional< std::string > confirm_text, const bool cancel_default, std::optional< std::string > message)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
void WM_operator_properties_free(PointerRNA *ptr)
wmWindow * WM_window_open_temp(bContext *C, const char *title, int space_type, bool dialog)