12#include <fmt/format.h>
69#include "RNA_prototypes.hh"
115 if (
wm->drags.first) {
124 ®ion->
v2d, event->
mval[0], event->
mval[1], &view_mval[0], &view_mval[1]);
127 space_outliner, &space_outliner->
tree, view_mval[1]);
130 bool is_over_icon =
false;
133 space_outliner, hovered_te, view_mval[0],
nullptr, &is_over_icon);
136 bool changed =
false;
162 ot->name =
"Update Highlight";
163 ot->idname =
"OUTLINER_OT_highlight_update";
164 ot->description =
"Update the item highlight based on the current mouse position";
218 ®ion->
v2d, event->
mval[0], event->
mval[1], &view_mval[0], &view_mval[1]);
227 if (te->
xs ==
data->x_location) {
238 data->prev_tselem =
nullptr;
285 toggle_data->
open = open;
300 ot->name =
"Open/Close";
301 ot->idname =
"OUTLINER_OT_item_openclose";
302 ot->description =
"Toggle whether item under cursor is enabled or closed";
323 bool add_textbut =
false;
398 if (!active_element) {
403 return active_element;
439 int ytop = (te->
ys + (size_y / 2));
440 int delta_y = ytop - v2d->
cur.
ymax;
453 ot->idname =
"OUTLINER_OT_item_rename";
454 ot->description =
"Rename the active element";
468 "Rename the active item, rather than the one the mouse is over");
494 "Cannot delete library override id '%s', it is part of an override hierarchy",
501 Library *
lib = blender::id_cast<Library *>(
id);
502 if (
lib->runtime->parent !=
nullptr) {
509 "Cannot delete library '%s', as it contains the currently active Scene",
521 "Cannot delete id '%s', indirectly used data-blocks need at least one user",
556 int id_tagged_num = 0;
561 if (te->
idcode != 0 && tselem->
id) {
565 "Cannot delete indirectly linked library '%s'",
566 ((
Library *)tselem->
id)->runtime->filepath_abs);
582 return id_tagged_num;
598 int id_tagged_num = 0;
605 if (id_tagged_num == 0) {
617 ot->name =
"Delete Data-Block";
618 ot->idname =
"OUTLINER_OT_id_delete";
619 ot->description =
"Delete the ID under cursor";
640 ID *old_id =
static_cast<ID *
>(
642 ID *new_id =
static_cast<ID *
>(
646 if (space_outliner ==
nullptr) {
650 if (!(old_id && new_id && (old_id != new_id) && (
GS(old_id->
name) ==
GS(new_id->
name)))) {
653 "Invalid old/new ID pair ('%s' / '%s')",
654 old_id ? old_id->
name :
"Invalid ID",
655 new_id ? new_id->
name :
"Invalid ID");
662 "Old ID '%s' is linked from a library, indirect usages of this data-block will "
738 for (; id;
id =
static_cast<ID *
>(
id->next)) {
755 ot->name =
"Outliner ID Data Remap";
756 ot->idname =
"OUTLINER_OT_id_remap";
782 "New ID to remap all selected IDs' users to");
825 (PartialWriteContext::IDAddOperations::SET_FAKE_USER |
826 PartialWriteContext::IDAddOperations::SET_CLIPBOARD_MARK |
827 PartialWriteContext::IDAddOperations::ADD_DEPENDENCIES)},
865 ot->name =
"Outliner ID Data Copy";
866 ot->idname =
"OUTLINER_OT_id_copy";
867 ot->description =
"Copy the selected data-blocks to the internal clipboard";
891 if (num_pasted == 0) {
906 ot->name =
"Outliner ID Data Paste";
907 ot->idname =
"OUTLINER_OT_id_paste";
908 ot->description =
"Paste data-blocks from the internal clipboard";
929 ID *id_linked =
static_cast<ID *
>(id_linked_ptr.
data);
938 "The active data-block '%s' is not a valid linked one",
945 "The active data-block '%s' is used by other linked data",
968 ot->name =
"Relocate Linked ID";
969 ot->idname =
"OUTLINER_OT_id_linked_relocate";
971 "Replace the active linked ID (and its dependencies if any) by another one, from the same "
972 "or a different library";
1006 lib->runtime->filepath_abs, dir,
sizeof(dir), filename,
sizeof(filename));
1012 &op_props,
"relative_path",
BLI_path_cmp(
lib->runtime->filepath_abs,
lib->filepath) != 0);
1035 if (((
Library *)tselem->
id)->runtime->parent && !reload) {
1038 "Cannot relocate indirectly linked library '%s'",
1039 ((
Library *)tselem->
id)->runtime->filepath_abs);
1085 ot->name =
"Relocate Library";
1086 ot->idname =
"OUTLINER_OT_lib_relocate";
1087 ot->description =
"Relocate the library under cursor";
1143 ot->name =
"Reload Library";
1144 ot->idname =
"OUTLINER_OT_lib_reload";
1145 ot->description =
"Reload the library under cursor";
1174 int level = curlevel;
1178 level = std::max(lev, level);
1206 bool changed =
false;
1210 bool has_flag = (tselem->
flag &
flag);
1217 else if (!has_flag) {
1233 bool changed =
false;
1269 ot->name =
"Expand/Collapse All";
1270 ot->idname =
"OUTLINER_OT_expanded_toggle";
1271 ot->description =
"Expand/Collapse all items";
1321 ot->name =
"Toggle Selected";
1322 ot->idname =
"OUTLINER_OT_select_all";
1323 ot->description =
"Toggle the Outliner selection of items";
1354 ot->name =
"Filter";
1355 ot->description =
"Start entering filter text";
1356 ot->idname =
"OUTLINER_OT_start_filter";
1374 ot->name =
"Clear Filter";
1375 ot->description =
"Clear the search filter";
1376 ot->idname =
"OUTLINER_OT_clear_filter";
1396 te->
ys = float(starty);
1405 bool retval =
false;
1485 C, space_outliner, scene, view_layer);
1487 if (active_element) {
1501 int ytop = (active_element->
ys + (size_y / 2));
1502 int delta_y = ytop - v2d->
cur.
ymax;
1518 ot->name =
"Show Active";
1519 ot->idname =
"OUTLINER_OT_show_active";
1521 "Open up the tree and adjust the view so that the active object is shown centered";
1558 ot->name =
"Scroll Page";
1559 ot->idname =
"OUTLINER_OT_scroll_page";
1560 ot->description =
"Scroll page up or down";
1584 if (curlevel <= level) {
1589 if (curlevel >= level) {
1630 ot->name =
"Show/Hide One Level";
1631 ot->idname =
"OUTLINER_OT_show_one_level";
1632 ot->description =
"Expand/collapse all entries by one level";
1641 prop =
RNA_def_boolean(
ot->srna,
"open",
true,
"Open",
"Expand all entries one level deep");
1683 if (tselem->
id != (
ID *)scene) {
1723 ot->name =
"Show Hierarchy";
1724 ot->idname =
"OUTLINER_OT_show_hierarchy";
1725 ot->description =
"Open all object entries and close all others";
1766 ListBase hierarchy = {
nullptr,
nullptr};
1767 char *newpath =
nullptr;
1807 PropertyRNA *prop = tem_rna_prop->get_property_rna();
1814 char buf[128], *name;
1833 if (temsub == temnext) {
1860 *
id =
static_cast<ID *
>(
ptr.data);
1880 *array_index = te->
index;
1930 char *path =
nullptr;
1931 int array_index = 0;
1956 arraylen = array_index;
1960 if (arraylen == array_index) {
1965 for (; array_index < arraylen; array_index++) {
1997 if (space_outliner ==
nullptr) {
2013 ot->idname =
"OUTLINER_OT_drivers_add_selected";
2014 ot->name =
"Add Drivers for Selected";
2015 ot->description =
"Add drivers to selected items";
2036 if (space_outliner ==
nullptr) {
2052 ot->idname =
"OUTLINER_OT_drivers_delete_selected";
2053 ot->name =
"Delete Drivers for Selected";
2054 ot->description =
"Delete drivers assigned to selected items";
2088 if (scene ==
nullptr) {
2099 if ((
add) && (ks ==
nullptr)) {
2121 char *path =
nullptr;
2122 int array_index = 0;
2183 if (ks ==
nullptr) {
2187 if (space_outliner ==
nullptr) {
2203 ot->idname =
"OUTLINER_OT_keyingset_add_selected";
2204 ot->name =
"Keying Set Add Selected";
2205 ot->description =
"Add selected items (blue-gray rows) to active Keying Set";
2228 if (space_outliner ==
nullptr) {
2244 ot->idname =
"OUTLINER_OT_keyingset_remove_selected";
2245 ot->name =
"Keying Set Remove Selected";
2246 ot->description =
"Remove selected items (blue-gray rows) from active Keying Set";
2273 const std::array<int, INDEX_ID_MAX> &num_tagged)
2275 bool is_first =
true;
2277 message +=
IFACE_(
"None");
2287 if (num_tagged[
i] != 0) {
2288 message += fmt::format(
2290 (is_first) ?
"" :
", ",
2292 (num_tagged[
i] > 1) ?
2306 data.do_local_ids =
true;
2307 data.do_linked_ids =
true;
2308 data.do_recursive =
true;
2311 std::string unused_message;
2317 unused_message =
"";
2319 max_messages_width = std::max(
2323 return int(std::max(max_messages_width, 300.0f));
2353 op->
customdata = MEM_new<LibQueryUnusedIDsData>(__func__);
2361 IFACE_(
"Purge Unused Data from This File"),
2372 op->
customdata = MEM_new<LibQueryUnusedIDsData>(__func__);
2430 op->
customdata = MEM_new<LibQueryUnusedIDsData>(__func__);
2434 std::string unused_message;
2440 row->
label(unused_message, ICON_NONE);
2442 unused_message =
"";
2444 column = &layout->
column(
true);
2446 row = &column->
row(
true);
2448 row->
label(unused_message, ICON_NONE);
2456 ot->idname =
"OUTLINER_OT_orphans_purge";
2457 ot->name =
"Purge All";
2458 ot->description =
"Clear all orphaned data-blocks without any users from the file";
2477 "Local Data-blocks",
2478 "Include unused local data-blocks into deletion");
2482 "Linked Data-blocks",
2483 "Include unused linked data-blocks into deletion");
2489 "Recursively check for indirectly unused data-blocks, ensuring that no orphaned "
2490 "data-blocks remain after execution");
2505 const rcti window_rect = {
2507 event->xy[0] + sizex,
2509 event->xy[1] + sizey,
2513 IFACE_(
"Manage Unused Data"),
2521 nullptr) !=
nullptr)
2533 ot->idname =
"OUTLINER_OT_orphans_manage";
2534 ot->name =
"Manage Unused Data";
2535 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)
short BKE_idtype_index_to_idcode(int idtype_index)
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)
bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv)
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)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
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
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.
@ 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
@ RPT_ERROR_INVALID_INPUT
@ 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()
@ WIN_ALIGN_LOCATION_CENTER
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.
#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)
void BKE_lib_query_unused_ids_amounts(Main *bmain, LibQueryUnusedIDsData ¶meters)
void BKE_lib_query_unused_ids_tag(Main *bmain, const int tag, LibQueryUnusedIDsData ¶meters)
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 wmOperatorStatus outliner_orphans_manage_invoke(bContext *C, wmOperator *, const wmEvent *event)
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)
void OUTLINER_OT_show_hierarchy(wmOperatorType *ot)
TreeElement * outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
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)
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)
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 int outliner_id_copy_tag(SpaceOutliner *space_outliner, ListBase *tree, blender::bke::blendfile::PartialWriteContext ©buffer)
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)
static void outliner_orphans_purge_cancel(bContext *, 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)
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)
@ DRIVERS_EDITMODE_REMOVE
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)
@ TE_PRETEND_HAS_CHILDREN
void OUTLINER_OT_id_delete(wmOperatorType *ot)
void id_remap_fn(bContext *C, TreeStoreElem *tselem)
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)
@ KEYINGSET_EDITMODE_REMOVE
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)
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)
static void outliner_orphans_purge_cleanup(wmOperator *op)
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)
void RNA_def_property_enum_funcs_runtime(PropertyRNA *prop, EnumPropertyGetFunc getfunc, EnumPropertySetFunc setfunc, EnumPropertyItemFunc itemfunc)
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_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])
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
wmOperatorStatus WM_operator_name_call_ptr(bContext *C, wmOperatorType *ot, wmOperatorCallContext context, PointerRNA *properties, const wmEvent *event)
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)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
void WM_operator_properties_free(PointerRNA *ptr)
wmWindow * WM_window_open(bContext *C, const char *title, const rcti *rect_unscaled, int space_type, bool toplevel, bool dialog, bool temp, eWindowAlignment alignment, void(*area_setup_fn)(bScreen *screen, ScrArea *area, void *user_data), void *area_setup_user_data)