104 const TreeElement *te,
int *scenelevel,
int *objectlevel,
int *idlevel,
int *datalevel)
106 *scenelevel = *objectlevel = *idlevel = *datalevel = 0;
115 *datalevel = tselem->
type;
119 bool is_standard_id =
false;
164 is_standard_id =
true;
176 is_standard_id =
true;
179 if (is_standard_id) {
185 BLI_assert(((*scenelevel != 0) && (*objectlevel == 0) && (*idlevel == 0) && (*datalevel == 0)) ||
186 ((*scenelevel == 0) && (*objectlevel != 0) && (*idlevel == 0) && (*datalevel == 0)) ||
187 ((*scenelevel == 0) && (*objectlevel == 0) && (*idlevel != 0) && (*datalevel == 0)) ||
188 ((*scenelevel == 0) && (*objectlevel == 0) && (*idlevel == 0) && (*datalevel != 0)) ||
190 ((*scenelevel == 0) && (*objectlevel == 0) && (*idlevel == 0) && (*datalevel == 0)));
226 "Cannot unlink action '%s'. It's not clear which object or object-data it "
227 "should be unlinked from, there's no object or object-data as parent in the "
247 if (!te_is_material) {
258 "Cannot unlink material '%s'. It's not clear which object or object-data it "
259 "should be unlinked from, there's no object or object-data as parent in the "
268 "Cannot unlink the material '%s' from linked object data",
285 totcol = mesh->totcol;
303 totcol = curves->totcol;
309 totcol = pointcloud->
totcol;
310 matar = pointcloud->
mat;
315 totcol = volume->totcol;
323 if (
LIKELY(matar !=
nullptr)) {
324 for (a = 0; a < totcol; a++) {
325 if (a == te->
index && matar[a]) {
345 "Cannot unlink texture '%s'. It's not clear which freestyle line style it should "
346 "be unlinked from, there's no freestyle line style as parent in the Outliner tree",
351 MTex **mtex =
nullptr;
363 if (a == te->
index && mtex[a]) {
366 mtex[a]->
tex =
nullptr;
387 "Cannot unlink collection '%s'. It's not clear which scene, collection or "
388 "instance empties it should be unlinked from, there's no scene, collection or "
389 "instance empties as parent in the Outliner tree",
397 "Cannot unlink collection '%s' parented to another linked collection '%s'",
398 collection->id.name + 2,
419 Collection *parent = scene->master_collection;
435 if (tsep && tsep->
id) {
448 "Cannot unlink object '%s' parented to another linked object '%s'",
453 te_parent = te_parent->
parent;
454 tsep = te_parent ?
TREESTORE(te_parent) :
nullptr;
458 if (tsep && tsep->
id) {
462 "Cannot unlink object '%s' from linked collection or scene '%s'",
489 Collection *parent = scene->master_collection;
521 "Cannot unlink world '%s'. It's not clear which scene it should be unlinked from, "
522 "there's no scene as parent in the Outliner tree",
532 parscene->
world =
nullptr;
548 operation_fn(C, reports, scene, te, tsep, tselem);
568 "Apply the operation over selected data-blocks only"},
573 "Apply the operation over content of the selected items only (the data-blocks in their "
576 "SELECTED_AND_CONTENT",
578 "Selected & Content",
579 "Apply the operation over selected data-blocks and all their dependencies"},
580 {0,
nullptr, 0,
nullptr,
nullptr},
589 const bool has_parent_selected,
593 const bool do_selected =
ELEM(selection_set,
596 const bool do_content =
ELEM(selection_set,
601 if ((is_selected && do_selected) || (has_parent_selected && do_content)) {
606 operation_fn(C, reports, scene, element, tsep, tselem);
617 const bool has_parent_selected,
624 const ListBase subtree = element->subtree;
627 C, reports, scene, element, tselem, has_parent_selected, operation_fn, selection_set);
636 is_selected || has_parent_selected,
648 const bool do_active_element_first)
650 if (do_active_element_first) {
653 if (active_element !=
nullptr) {
658 C, reports, scene, active_element, tselem,
false, operation_fn, selection_set);
663 C, reports, scene, space_outliner, subtree, is_selected, operation_fn, selection_set);
668 C, reports, scene, space_outliner, space_outliner->
tree,
false, operation_fn, selection_set);
683 {0,
nullptr, 0,
nullptr,
nullptr},
692 bool success =
false;
698 if (operation_fn(C, event, te, tselem)) {
751 ot->
name =
"Outliner Scene Operation";
752 ot->
idname =
"OUTLINER_OT_scene_operation";
842 static char search[64] =
"";
855 block, search, 0, ICON_VIEWZOOM,
sizeof(search), 10, 10, menu_width,
UI_UNIT_Y,
"");
881 const int offset[2] = {-(menu_width / 2), 0};
891 MergedSearchData *select_data = MEM_cnew<MergedSearchData>(
"merge_search_data");
950 base->
flag &= ~BASE_SELECTED;
960 reports,
RPT_WARNING,
"Cannot delete indirectly linked object '%s'", ob->
id.
name + 2);
968 "Cannot delete object '%s' from scene '%s', indirectly used objects need at "
1047 ID *id_root_reference,
1048 ID *id_instance_hint,
1049 const bool is_override_instancing_object)
1058 id_hierarchy_root_reference);
1059 value.
append(id_root_data);
1070 id_hierarchy_root_reference);
1071 if (value.is_empty()) {
1072 value.
append(id_root_data);
1088 const bool do_hierarchy = data->do_hierarchy;
1089 ID *id_root_reference = tselem->
id;
1100 if (data->selected_id_uid.contains(id_root_reference->
session_uid)) {
1103 data->selected_id_uid.add(id_root_reference->
session_uid);
1115 "Could not create library override from data-block '%s', as it is not overridable",
1116 id_root_reference->
name);
1132 data->selected_id_uid.add(object_iter->id.session_uid);
1138 ID *id_instance_hint =
nullptr;
1139 bool is_override_instancing_object =
false;
1148 id_instance_hint = tsep->
id;
1149 is_override_instancing_object =
true;
1163 ID *id_hierarchy_root_reference = id_root_reference;
1164 while ((te = te->
parent) !=
nullptr) {
1174 if (id_current_hierarchy_root->
lib != id_root_reference->
lib) {
1187 id_hierarchy_root_reference =
1199 "Invalid anchor ('%s') found, needed to create library override from "
1201 id_current_hierarchy_root->
name,
1202 id_root_reference->
name);
1218 "Could not create library override from data-block '%s', one of its parents "
1219 "is not overridable ('%s')",
1220 id_root_reference->
name,
1221 id_current_hierarchy_root->
name);
1225 id_hierarchy_root_reference = id_current_hierarchy_root;
1231 if (!((id_hierarchy_root_reference->
lib == id_root_reference->
lib) ||
1235 id_root_reference->
lib)))
1240 "Invalid hierarchy root ('%s') found, needed to create library override from "
1242 id_hierarchy_root_reference->
name,
1243 id_root_reference->
name);
1254 if (!is_selected && data->id_hierarchy_roots.contains(id_hierarchy_root_reference)) {
1258 data->id_root_add(id_hierarchy_root_reference,
1261 is_override_instancing_object);
1265 id_root_reference, id_root_reference, id_instance_hint, is_override_instancing_object);
1274 ID *id_hierarchy_root_reference,
1276 bool &r_aggregated_success)
1281 const bool do_hierarchy = data.do_hierarchy;
1292 id_iter->
tag &= ~ID_TAG_DOIT;
1300 bool success =
false;
1302 ID *id_root_override =
nullptr;
1307 data_idroot.id_root_reference,
1308 id_hierarchy_root_reference,
1309 data_idroot.id_instance_hint,
1311 data.do_fully_editable);
1322 id_hierarchy_root_reference);
1326 id_hierarchy_root_reference = id_hierarchy_root_override;
1329 BLI_assert(id_hierarchy_root_override == id_hierarchy_root_reference);
1331 data_idroot.id_hierarchy_root_override = id_hierarchy_root_override;
1332 data.id_hierarchy_roots_uid.add(id_hierarchy_root_override->
session_uid);
1337 &bmain, data_idroot.id_root_reference,
true);
1339 success = id_root_override !=
nullptr;
1354 if (success && data_idroot.is_override_instancing_object) {
1357 &bmain, scene,
reinterpret_cast<Object *
>(data_idroot.id_instance_hint));
1360 r_aggregated_success = r_aggregated_success && success;
1373 const bool do_hierarchy = data.do_hierarchy;
1375 bool success =
true;
1376 for (
auto &&[id_hierarchy_root_reference, data_idroots] : data.id_hierarchy_roots.items()) {
1378 *bmain, scene, view_layer, data, id_hierarchy_root_reference, data_idroots, success);
1384 "Could not create library override from one or more of the selected data-blocks");
1387 if (!do_hierarchy) {
1397 !data.id_hierarchy_roots_uid.contains(
1403 data.selected_id_uid.contains(id_iter->
session_uid))
1416 ID *id_root = tselem->
id;
1417 const bool do_hierarchy = data->do_hierarchy;
1420 CLOG_WARN(&
LOG,
"Could not reset library override of data block '%s'", id_root->
name);
1447 bool do_process_leaves =
true;
1448 while (!data.id_hierarchy_roots.is_empty()) {
1449 bool has_found_leaves =
false;
1451 for (
auto &&
id : data.id_hierarchy_roots.keys()) {
1452 if (do_process_leaves) {
1457 bool do_remap_active =
false;
1461 do_remap_active =
true;
1465 if (do_remap_active) {
1467 Object *ref_object =
reinterpret_cast<Object *
>(
id->override_library->reference);
1469 if (basact !=
nullptr) {
1470 view_layer->
basact = basact;
1476 data.id_hierarchy_roots.remove(
id);
1477 has_found_leaves =
true;
1483 data.id_hierarchy_roots.remove(
id);
1487 do_process_leaves = has_found_leaves;
1497 ID *
id = tselem->
id;
1505 "Cannot clear embedded library override '%s', only overrides of real data-blocks "
1506 "can be directly cleared",
1514 "Cannot clear linked library override '%s', only local overrides can be directly cleared",
1519 data->id_root_set(
id);
1525 ID *id_root = tselem->
id;
1528 CLOG_WARN(&
LOG,
"Could not resync library override of data block '%s'", id_root->
name);
1536 data->id_root_set(id_root);
1546 const bool do_hierarchy_enforce = data.do_resync_hierarchy_enforce;
1551 for (
auto &&id_hierarchy_root : data.id_hierarchy_roots.keys()) {
1557 do_hierarchy_enforce,
1568 ID *id_root = tselem->
id;
1571 CLOG_WARN(&
LOG,
"Could not delete library override of data block '%s'", id_root->
name);
1579 data->id_root_set(id_root);
1589 for (
auto &&id_hierarchy_root : data.id_hierarchy_roots.keys()) {
1601 ID *
id = tselem->
id;
1613 ID *
id = tselem->
id;
1625 ID *
id = tselem->
id;
1643 ID *
id = tselem->
id;
1663 ID *
id = tselem->
id;
1683 bool recurse_selected)
1687 bool select_handled =
false;
1692 if (scene_owner && scene_act != scene_owner) {
1698 operation_fn(C, reports, scene_owner ? scene_owner : scene_act, te,
nullptr, tselem);
1699 select_handled =
true;
1703 if ((select_handled ==
false) || recurse_selected) {
1705 C, reports, scene_act, space_outliner, &te->subtree, operation_fn, recurse_selected);
1768 fcu->flag &= ~FCURVE_DISABLED;
1771 fcu->driver->flag &= ~DRIVER_FLAG_INVALID;
1796 "OVERRIDE_LIBRARY_CREATE_HIERARCHY",
1799 "Create a local override of the selected linked data-blocks, and their hierarchy of "
1802 "OVERRIDE_LIBRARY_RESET",
1805 "Reset the selected local overrides to their linked references values"},
1807 "OVERRIDE_LIBRARY_CLEAR_SINGLE",
1810 "Delete the selected local overrides and relink their usages to the linked data-blocks if "
1811 "possible, else reset them and mark them as non editable"},
1812 {0,
nullptr, 0,
nullptr,
nullptr},
1817 "OVERRIDE_LIBRARY_RESYNC_HIERARCHY",
1820 "Rebuild the selected local overrides from their linked references, as well as their "
1821 "hierarchies of dependencies"},
1823 "OVERRIDE_LIBRARY_RESYNC_HIERARCHY_ENFORCE",
1826 "Rebuild the selected local overrides from their linked references, as well as their "
1827 "hierarchies of dependencies, enforcing these hierarchies to match the linked data (i.e. "
1828 "ignoring existing overrides on data-blocks pointer properties)"},
1831 "OVERRIDE_LIBRARY_DELETE_HIERARCHY",
1834 "Delete the selected local overrides (including their hierarchies of override dependencies) "
1835 "and relink their usages to the linked data-blocks"},
1836 {0,
nullptr, 0,
nullptr,
nullptr},
1853 if (space_outliner ==
nullptr) {
1865 override_data.do_fully_editable =
false;
1878 id_override_library_create_hierarchy_pre_process(
1879 C, &override_data, reports, te, tsep, tselem);
1901 TreeStoreElem *tselem) { id_override_library_reset(C, &override_data, tselem); },
1910 override_data.do_fully_editable =
false;
1923 id_override_library_clear_single(&override_data, reports, tselem);
1947 TreeStoreElem *tselem) { id_override_library_resync(&override_data, tselem); },
1959 override_data.do_resync_hierarchy_enforce =
true;
1970 TreeStoreElem *tselem) { id_override_library_resync(&override_data, tselem); },
1976 ED_undo_push(C,
"Resync Overridden Data Hierarchy Enforce");
1993 id_override_library_delete_hierarchy(&override_data, tselem);
2018 ot->
name =
"Outliner Library Override Operation";
2019 ot->
idname =
"OUTLINER_OT_liboverride_operation";
2020 ot->
description =
"Create, reset or clear library override hierarchies";
2035 "Over which part of the tree items to apply the operation");
2041 ot->
name =
"Outliner Library Override Troubleshoot Operation";
2042 ot->
idname =
"OUTLINER_OT_liboverride_troubleshoot_operation";
2043 ot->
description =
"Advanced operations over library override to help fix broken hierarchies";
2056 "Library Override Troubleshoot Operation",
2063 "Over which part of the tree items to apply the operation");
2101 pchan->
bone->
flag &= ~BONE_SELECTED;
2105 pchan->
bone->
flag &= ~BONE_SELECTED;
2108 pchan->
bone->
flag &= ~BONE_HIDDEN_P;
2120 bone->
flag &= ~BONE_SELECTED;
2124 bone->
flag &= ~BONE_SELECTED;
2127 bone->
flag &= ~BONE_HIDDEN_P;
2139 ebone->
flag &= ~BONE_SELECTED;
2146 ebone->
flag &= ~BONE_HIDDEN_A;
2161 seq->
flag &= ~SELECT;
2171 seq->
flag &= ~SEQ_MUTE;
2189 gpl->
flag &= ~GP_LAYER_SELECT;
2195 gpl->
flag &= ~GP_LAYER_HIDE;
2207 node.set_selected(
true);
2210 node.set_selected(
false);
2213 node.set_visible(
false);
2216 node.set_visible(
true);
2226 if (!te_rna_struct) {
2249 constraint->
flag &= ~CONSTRAINT_OFF;
2331 if (tselem->
type == type) {
2332 operation_fn(event, te, tselem, arg);
2345 reports,
RPT_WARNING,
"Cannot delete indirectly linked object '%s'", object->id.name + 2);
2355 "Cannot delete object '%s' from scene '%s', indirectly used objects need at least "
2357 object->id.name + 2,
2358 scene->id.name + 2);
2376 base_iter !=
nullptr;
2377 base_iter = base_iter->
next)
2380 for (parent_ob_iter = base_iter->object->
parent;
2381 (parent_ob_iter !=
nullptr && parent_ob_iter !=
object &&
2383 parent_ob_iter = parent_ob_iter->
parent)
2387 if (parent_ob_iter !=
nullptr) {
2394 for (parent_ob_iter = base_iter->object;
2395 (parent_ob_iter !=
nullptr && parent_ob_iter !=
object &&
2397 parent_ob_iter = parent_ob_iter->
parent)
2426 if (base ==
nullptr) {
2431 for (; obedit && (obedit != base->
object); obedit = obedit->
parent) {
2434 if (obedit == base->
object) {
2454 if (ob_iter->id.us != 0) {
2455 ob_iter->id.tag &= ~ID_TAG_DOIT;
2478 {
OL_OP_SELECT,
"SELECT", ICON_RESTRICT_SELECT_OFF,
"Select",
""},
2485 "Make all users of selected data-blocks to use instead a new chosen one"},
2487 {0,
nullptr, 0,
nullptr,
nullptr},
2497 const char *
str =
nullptr;
2498 bool selection_changed =
false;
2501 if (space_outliner ==
nullptr) {
2518 str =
"Select Objects";
2519 selection_changed =
true;
2528 &space_outliner->
tree,
2536 str =
"Select Object Hierarchy";
2537 selection_changed =
true;
2543 str =
"Deselect Objects";
2544 selection_changed =
true;
2554 str =
"Rename Object";
2561 if (selection_changed) {
2567 if (
str !=
nullptr) {
2577 ot->
name =
"Outliner Object Operation";
2578 ot->
idname =
"OUTLINER_OT_object_operation";
2607 GSet *objects_to_delete,
2611 GSET_ITER (objects_to_delete_iter, objects_to_delete) {
2614 delete_fn(C, reports, scene, ob);
2637 ID *id_parent = tselem_parent->
id;
2647 ID *
id = tselem->
id;
2651 if (!(data->is_liboverride_hierarchy_root_allowed || data->is_liboverride_allowed)) {
2656 if (!data->is_liboverride_allowed) {
2686 &space_outliner->
tree,
2690 &object_delete_data);
2692 if (delete_hierarchy) {
2747 ot->
description =
"Delete selected objects and collections";
2758 ot->
srna,
"hierarchy",
false,
"Hierarchy",
"Delete child objects and collections");
2797 "Make all users of selected data-blocks to use instead current (clicked) one"},
2806 "Ensure data-block gets saved even if it isn't in use (e.g. for motion and material "
2811 {0,
nullptr, 0,
nullptr,
nullptr},
2817 const int enum_value)
2830 switch (enum_value) {
2872 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
2875 if (space_outliner ==
nullptr) {
2974 if (idlevel > 0 || objectlevel) {
3045 ot->
name =
"Outliner ID Data Operation";
3046 ot->
idname =
"OUTLINER_OT_id_operation";
3047 ot->
description =
"General data-block management operations";
3075 {
OL_LIB_DELETE,
"DELETE", ICON_X,
"Delete",
"Delete this library and all its items"},
3080 "Select a new path for this library, and reload all its data"},
3081 {
OL_LIB_RELOAD,
"RELOAD", ICON_FILE_REFRESH,
"Reload",
"Reload all data from this library"},
3082 {0,
nullptr, 0,
nullptr,
nullptr},
3092 if (space_outliner ==
nullptr) {
3136 ot->
name =
"Outliner Library Operation";
3137 ot->
idname =
"OUTLINER_OT_lib_operation";
3163 if (tselem->
type == type) {
3165 operation_fn(te, tselem, tsep, newid);
3196 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3205 if (act ==
nullptr) {
3214 "Action '%s' does not specify what data-blocks it can be used on "
3215 "(try setting the 'ID Root Type' setting from the data-blocks editor "
3216 "for this action to avoid future problems)",
3224 else if (idlevel ==
ID_AC) {
3245 ot->
name =
"Outliner Set Action";
3246 ot->
idname =
"OUTLINER_OT_action_set";
3287 "Clear Animation Data",
3288 "Remove this animation data container"},
3293 {0,
nullptr, 0,
nullptr,
nullptr},
3300 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3365 ot->
name =
"Outliner Animation Data Operation";
3366 ot->
idname =
"OUTLINER_OT_animdata_operation";
3388 {0,
nullptr, 0,
nullptr,
nullptr},
3410 ot->
name =
"Outliner Constraint Operation";
3411 ot->
idname =
"OUTLINER_OT_constraint_operation";
3436 {0,
nullptr, 0,
nullptr,
nullptr},
3462 ot->
name =
"Outliner Modifier Operation";
3463 ot->
idname =
"OUTLINER_OT_modifier_operation";
3489 if (te ==
nullptr) {
3493 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3495 return ELEM(datalevel,
3507 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3512 switch (datalevel) {
3582 if (space_outliner ==
nullptr) {
3587 if (te ==
nullptr) {
3598 {0,
nullptr, 0,
nullptr,
nullptr}};
3602 {0,
nullptr, 0,
nullptr,
nullptr}};
3605 return optype_sel_linked;
3608 return optype_sel_and_hide;
3614 ot->
name =
"Outliner Data Operation";
3615 ot->
idname =
"OUTLINER_OT_data_operation";
3661 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3699 else if (datalevel) {
3743 ®ion->v2d, event->
mval[0], event->
mval[1], &view_mval[0], &view_mval[1]);
3746 space_outliner, &space_outliner->
tree, view_mval[1]);
3757 ot->
name =
"Context Menu";
3758 ot->
idname =
"OUTLINER_OT_operation";
bool BKE_animdata_set_action(ReportList *reports, ID *id, bAction *act)
void BKE_animdata_free(ID *id, bool do_id_user)
bool BKE_collection_object_remove(Main *bmain, Collection *collection, Object *ob, bool free_us)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
#define FOREACH_SCENE_COLLECTION_END
bool BKE_scene_collections_object_remove(Main *bmain, Scene *scene, Object *ob, bool free_us)
bool BKE_collection_child_remove(Main *bmain, Collection *parent, Collection *child)
bool BKE_collection_has_object(Collection *collection, const Object *ob)
#define FOREACH_SCENE_COLLECTION_BEGIN(scene, _instance)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
bool BKE_constraint_remove_ex(ListBase *list, struct Object *ob, struct bConstraint *con)
void BKE_constraints_active_set(ListBase *list, struct bConstraint *con)
ReportList * CTX_wm_reports(const bContext *C)
SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
Main * CTX_data_main(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
wmMsgBus * CTX_wm_message_bus(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_fcurves_free(ListBase *list)
Low-level operations for grease pencil.
bool BKE_idtype_idcode_is_linkable(short idcode)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void BKE_id_newptr_and_tag_clear(ID *id)
void BKE_id_delete(Main *bmain, void *idv) ATTR_NONNULL()
bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
void size_t BKE_id_multi_tagged_delete(Main *bmain) ATTR_NONNULL()
void id_fake_user_set(ID *id)
void BKE_main_id_newptr_and_tag_clear(Main *bmain)
bool BKE_lib_id_make_local(Main *bmain, ID *id, int flags)
void id_fake_user_clear(ID *id)
@ LIB_ID_MAKELOCAL_ASSET_DATA_CLEAR
void BKE_main_id_tag_all(Main *mainvar, int tag, bool value)
ID * BKE_lib_override_library_create_from_id(Main *bmain, ID *reference_id, bool do_tagged_remap)
void BKE_lib_override_library_id_reset(Main *bmain, ID *id_root, bool do_reset_system_override)
bool BKE_lib_override_library_resync(Main *bmain, Scene *scene, ViewLayer *view_layer, ID *id_root, Collection *override_resync_residual_storage, bool do_hierarchy_enforce, BlendFileReadReport *reports)
bool BKE_lib_override_library_create(Main *bmain, Scene *scene, ViewLayer *view_layer, Library *owner_library, ID *id_root_reference, ID *id_hierarchy_root_reference, ID *id_instance_hint, ID **r_id_root_override, const bool do_fully_editable)
void BKE_lib_override_library_id_hierarchy_reset(Main *bmain, ID *id_root, bool do_reset_system_override)
void BKE_lib_override_library_make_local(Main *bmain, ID *id)
void BKE_lib_override_library_delete(Main *bmain, ID *id_root)
bool BKE_lib_override_library_is_hierarchy_leaf(Main *bmain, ID *id)
bool BKE_library_ID_is_indirectly_used(Main *bmain, void *idv)
@ ID_REMAP_SKIP_INDIRECT_USAGE
void void BKE_libblock_remap(Main *bmain, void *old_idv, void *new_idv, int remap_flags) ATTR_NONNULL(1
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
General operations, lookup, etc. for blender objects.
bool BKE_object_is_in_editmode(const 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)
#define BLI_assert_unreachable()
GSet * BLI_gset_ptr_new(const char *info)
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
#define GSET_ITER(gs_iter_, gset_)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_gset_add(GSet *gs, void *key)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define STRNCPY(dst, src)
int char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define UNUSED_VARS_NDEBUG(...)
external readfile function prototypes.
#define CLOG_WARN(clg_ref,...)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_id_tag_update_ex(Main *bmain, ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
#define ID_IS_OVERRIDE_LIBRARY_VIRTUAL(_id)
#define ID_EXTRA_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_OVERRIDABLE_LIBRARY(_id)
#define ID_IS_OVERRIDABLE_LIBRARY_HIERARCHY(_id)
#define ID_IS_LINKED(_id)
#define ID_IS_EDITABLE(_id)
@ ID_FLAG_EMBEDDED_DATA_LIB_OVERRIDE
#define ID_REAL_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define ID_IS_OVERRIDE_LIBRARY_HIERARCHY_ROOT(_id)
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_SCENE_COLLECTION_BASE
void ED_node_tree_propagate_change(const bContext *C, Main *bmain, bNodeTree *ntree)
void ED_outliner_select_sync_from_object_tag(bContext *C)
void ED_outliner_select_sync_from_outliner(bContext *C, SpaceOutliner *space_outliner)
void ED_outliner_select_sync_from_all_tag(bContext *C)
bool ED_scene_delete(bContext *C, Main *bmain, Scene *scene) ATTR_NONNULL()
bool ED_operator_region_outliner_active(bContext *C)
void ED_region_tag_redraw_no_rebuild(ARegion *region)
bool ED_operator_outliner_active(bContext *C)
void ED_sequencer_select_sequence_single(Scene *scene, Sequence *seq, bool deselect_all)
void ED_undo_push(bContext *C, const char *str)
Read Guarded memory(de)allocation.
const EnumPropertyItem * RNA_action_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
#define RNA_ENUM_ITEM_SEPR
void UI_block_theme_style_set(uiBlock *block, char theme_style)
@ UI_BLOCK_MOVEMOUSE_QUIT
void UI_block_bounds_set_popup(uiBlock *block, int addval, const int bounds_offset[2])
uiBut * uiDefBut(uiBlock *block, int type, int retval, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
void UI_popup_block_invoke(bContext *C, uiBlockCreateFunc func, void *arg, uiFreeArgFunc arg_free)
void UI_but_func_search_set(uiBut *but, uiButSearchCreateFn search_create_fn, uiButSearchUpdateFn search_update_fn, void *arg, bool free_arg, uiFreeArgFunc search_arg_free_fn, uiButHandleFunc search_exec_fn, void *active)
bool UI_search_item_add(uiSearchItems *items, const char *name, void *poin, int iconid, int but_flag, uint8_t name_prefix_offset)
void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
uiBlock * UI_block_begin(const bContext *C, ARegion *region, std::string name, eUIEmbossType emboss)
void UI_but_tooltip_timer_remove(bContext *C, uiBut *but)
void uiItemS(uiLayout *layout)
uiBut * UI_context_active_but_get(const bContext *C)
uiPopupMenu * UI_popup_menu_begin(bContext *C, const char *title, int icon) ATTR_NONNULL()
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
void uiItemMContents(uiLayout *layout, const char *menuname)
int UI_search_items_find_index(const uiSearchItems *items, const char *name)
void uiItemsEnumO(uiLayout *layout, const char *opname, const char *propname)
int UI_searchbox_size_y()
uiBut * uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxncpy, int x, int y, short width, short height, const char *tip)
@ UI_BLOCK_THEME_STYLE_POPUP
void UI_block_flag_enable(uiBlock *block, int flag)
void uiLayoutSetOperatorContext(uiLayout *layout, wmOperatorCallContext opcontext)
void UI_but_flag_enable(uiBut *but, int flag)
@ UI_BUT_ACTIVATE_ON_INIT
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define ND_LIB_OVERRIDE_CHANGED
@ WM_OP_INVOKE_REGION_WIN
#define ND_SPACE_OUTLINER
void append(const T &value)
const PointerRNA & get_pointer_rna() const
Sequence & get_sequence() const
const Depsgraph * depsgraph
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void MEM_freeN(void *vmemh)
bool modifier_apply(Main *bmain, ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, ModifierData *md, int mode, bool keep_modifier, bool do_all_keyframes)
void constraint_update(Main *bmain, Object *ob)
void base_select(Base *base, eObjectSelect_Mode mode)
bool editmode_exit(bContext *C, int flag)
void select_linked_by_id(bContext *C, ID *id)
void base_free_and_unlink(Main *bmain, Scene *scene, Object *ob)
bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag)
bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
void all_open(const SpaceOutliner &space_outliner, const VisitorFn visitor)
@ OUTLINER_IDOP_FAKE_CLEAR
@ OUTLINER_IDOP_SELECT_LINKED
static bool outliner_liboverride_operation_poll(bContext *C)
void OUTLINER_OT_delete(wmOperatorType *ot)
static void unlink_texture_fn(bContext *, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
static void ebone_fn(int event, TreeElement *te, TreeStoreElem *, void *)
static const EnumPropertyItem outliner_lib_op_type_items[]
static void object_deselect_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static bool outliner_do_libdata_operation_selection_set_element(bContext *C, ReportList *reports, Scene *scene, TreeElement *element, TreeStoreElem *tselem, const bool has_parent_selected, outliner_operation_fn operation_fn, eOutlinerLibOpSelectionSet selection_set)
static int outliner_data_operation_exec(bContext *C, wmOperator *op)
static void id_override_library_create_hierarchy_process(bContext *C, ReportList *reports, OutlinerLibOverrideData &data)
void OUTLINER_OT_scene_operation(wmOperatorType *ot)
static const EnumPropertyItem * outliner_data_op_sets_enum_item_fn(bContext *C, PointerRNA *, PropertyRNA *, bool *)
static void object_select_hierarchy_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *)
static void unlink_action_fn(bContext *C, ReportList *reports, Scene *, TreeElement *, TreeStoreElem *tsep, TreeStoreElem *tselem)
static void unlink_object_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
static TreeTraversalAction outliner_collect_objects_to_delete(TreeElement *te, void *customdata)
static bool scene_fn(bContext *C, eOutliner_PropSceneOps event, TreeElement *, TreeStoreElem *tselem)
static int outliner_operation_invoke(bContext *C, wmOperator *, const wmEvent *event)
bool outliner_is_collection_tree_element(const TreeElement *te)
static void get_element_operation_type(const TreeElement *te, int *scenelevel, int *objectlevel, int *idlevel, int *datalevel)
static void clear_animdata_fn(int, TreeElement *, TreeStoreElem *tselem, void *)
void OUTLINER_OT_data_operation(wmOperatorType *ot)
void OUTLINER_OT_lib_operation(wmOperatorType *ot)
void OUTLINER_OT_constraint_operation(wmOperatorType *ot)
static const EnumPropertyItem prop_constraint_op_types[]
static const EnumPropertyItem prop_lib_op_selection_set[]
static void id_fake_user_set_fn(bContext *, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static int outliner_action_set_exec(bContext *C, wmOperator *op)
static void modifier_fn(int event, TreeElement *te, TreeStoreElem *, void *arg)
static void object_select_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static int outliner_modifier_operation_exec(bContext *C, wmOperator *op)
static void id_override_library_clear_single_process(bContext *C, ReportList *, OutlinerLibOverrideData &data)
static void outliner_batch_delete_object_hierarchy(Main *bmain, Scene *scene)
static void refreshdrivers_animdata_fn(int, TreeElement *, TreeStoreElem *tselem, void *)
static int outliner_liboverride_operation_exec(bContext *C, wmOperator *op)
void id_delete_tag_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
static void id_override_library_reset(bContext *C, OutlinerLibOverrideData *data, TreeStoreElem *tselem)
static void merged_element_search_fn_recursive(const ListBase *tree, short tselem_type, short type, const char *str, uiSearchItems *items)
static int outliner_object_operation_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_scene_op_types[]
static void pchan_fn(int event, TreeElement *te, TreeStoreElem *, void *)
static void outliner_batch_delete_object_hierarchy_tag(ReportList *reports, Main *bmain, ViewLayer *view_layer, Scene *scene, Base *base)
void OUTLINER_OT_modifier_operation(wmOperatorType *ot)
static void unlinkact_animdata_fn(int, TreeElement *, TreeStoreElem *tselem, void *)
static int outliner_operator_menu(bContext *C, const char *opname)
void outliner_collection_delete(bContext *C, Main *bmain, Scene *scene, ReportList *reports, bool do_hierarchy)
TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
static void object_batch_delete_hierarchy_tag_fn(bContext *C, ReportList *reports, Scene *scene, Object *ob)
TreeElement * outliner_find_item_at_y(const SpaceOutliner *space_outliner, const ListBase *tree, float view_co_y)
static int outliner_delete_exec(bContext *C, wmOperator *op)
static void outliner_object_delete_fn(bContext *C, ReportList *reports, Scene *scene, Object *ob)
@ OUTLINER_ANIMOP_CLEAR_DRV
@ OUTLINER_ANIMOP_INVALID
@ OUTLINER_ANIMOP_SET_ACT
@ OUTLINER_ANIMOP_CLEAR_ACT
@ OUTLINER_ANIMOP_REFRESH_DRV
@ OUTLINER_ANIMOP_CLEAR_ADT
static const EnumPropertyItem prop_animdata_op_types[]
static void merged_element_search_update_fn(const bContext *, void *data, const char *str, uiSearchItems *items, const bool)
static void data_select_linked_fn(int event, TreeElement *te, TreeStoreElem *, void *C_v)
static void merged_element_search_exec_fn(bContext *C, void *, void *element)
eOutliner_PropModifierOps
static bool outliner_data_operation_poll(bContext *C)
static void id_override_library_resync(OutlinerLibOverrideData *data, TreeStoreElem *tselem)
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)
static void singleuser_action_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
void OUTLINER_OT_object_operation(wmOperatorType *ot)
static void id_fake_user_clear_fn(bContext *, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static void id_select_linked_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static void id_local_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *, TreeStoreElem *tselem)
static void bone_fn(int event, TreeElement *te, TreeStoreElem *, void *)
void OUTLINER_OT_animdata_operation(wmOperatorType *ot)
static void unlink_world_fn(bContext *, ReportList *reports, Scene *, TreeElement *, TreeStoreElem *tsep, TreeStoreElem *tselem)
void lib_relocate_fn(bContext *C, ReportList *, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
int tree_element_id_type_to_index(TreeElement *te)
static int outliner_lib_operation_exec(bContext *C, wmOperator *op)
static void id_override_library_clear_single(OutlinerLibOverrideData *data, ReportList *reports, TreeStoreElem *tselem)
static void id_override_library_create_hierarchy(Main &bmain, Scene *scene, ViewLayer *view_layer, OutlinerLibOverrideData &data, ID *id_hierarchy_root_reference, Vector< OutlinerLiboverrideDataIDRoot > &data_idroots, bool &r_aggregated_success)
static void unlink_collection_fn(bContext *C, ReportList *reports, Scene *, TreeElement *, TreeStoreElem *tsep, TreeStoreElem *tselem)
static void outliner_do_data_operation(SpaceOutliner *space_outliner, int type, int event, void(*operation_fn)(int, TreeElement *, TreeStoreElem *, void *), void *arg)
static const EnumPropertyItem prop_liboverride_op_types[]
static void id_override_library_delete_hierarchy(OutlinerLibOverrideData *data, TreeStoreElem *tselem)
void OUTLINER_OT_action_set(wmOperatorType *ot)
static bool outliner_id_operation_item_poll(bContext *C, PointerRNA *, PropertyRNA *, const int enum_value)
bool outliner_tree_traverse(const SpaceOutliner *space_outliner, ListBase *tree, int filter_te_flag, int filter_tselem_flag, TreeTraversalFunc func, void *customdata)
static const EnumPropertyItem prop_id_op_types[]
static void id_override_library_resync_hierarchy_process(bContext *C, ReportList *reports, OutlinerLibOverrideData &data)
TreeElementT * tree_element_cast(const TreeElement *te)
ID * outliner_search_back(TreeElement *te, short idcode)
static void cleardrivers_animdata_fn(int, TreeElement *, TreeStoreElem *tselem, void *)
void merged_element_search_menu_invoke(bContext *C, TreeElement *parent_te, TreeElement *activate_te)
static uiBlock * merged_element_search_menu(bContext *C, ARegion *region, void *data)
static TreeElement * get_target_element(const SpaceOutliner *space_outliner)
static void unlink_material_fn(bContext *, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
static void constraint_fn(int event, TreeElement *te, TreeStoreElem *, void *C_v)
static void actionset_id_fn(TreeElement *, TreeStoreElem *tselem, TreeStoreElem *tsep, ID *actId)
eOutlinerLibOpSelectionSet
@ OUTLINER_LIB_LIB_SELECTIONSET_SELECTED_AND_CONTENT
@ OUTLINER_LIB_LIB_SELECTIONSET_CONTENT
@ OUTLINER_LIB_SELECTIONSET_SELECTED
static void outliner_batch_delete_object_tag(ReportList *reports, Main *bmain, Scene *scene, Object *object)
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)
static void outliner_do_object_delete(bContext *C, ReportList *reports, Scene *scene, GSet *objects_to_delete, OutlinerDeleteFn delete_fn)
static void singleuser_world_fn(bContext *C, ReportList *, Scene *, TreeElement *, TreeStoreElem *tsep, TreeStoreElem *tselem)
void outliner_do_object_operation(bContext *C, ReportList *reports, Scene *scene, SpaceOutliner *space_outliner, ListBase *lb, outliner_operation_fn operation_fn)
TreeElement * outliner_find_element_with_flag(const ListBase *lb, short flag)
static void outliner_do_libdata_operation(bContext *C, ReportList *reports, Scene *scene, SpaceOutliner *space_outliner, outliner_operation_fn operation_fn)
void OUTLINER_OT_liboverride_troubleshoot_operation(wmOperatorType *ot)
static int outliner_animdata_operation_exec(bContext *C, wmOperator *op)
static int outliner_constraint_operation_exec(bContext *C, wmOperator *op)
eOutlinerLibOverrideOpTypes
@ OUTLINER_LIBOVERRIDE_OP_RESYNC_HIERARCHY_ENFORCE
@ OUTLINER_LIBOVERRIDE_OP_INVALID
@ OUTLINER_LIBOVERRIDE_OP_CLEAR_SINGLE
@ OUTLINER_LIBOVERRIDE_OP_DELETE_HIERARCHY
@ OUTLINER_LIBOVERRIDE_OP_CREATE_HIERARCHY
@ OUTLINER_LIBOVERRIDE_OP_RESYNC_HIERARCHY
@ OUTLINER_LIBOVERRIDE_OP_RESET
void OUTLINER_OT_operation(wmOperatorType *ot)
static const EnumPropertyItem * outliner_id_operation_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
static const EnumPropertyItem prop_modifier_op_types[]
void item_rename_fn(bContext *C, ReportList *reports, Scene *, TreeElement *te, TreeStoreElem *, TreeStoreElem *tselem)
static bool outliner_do_scene_operation(bContext *C, SpaceOutliner *space_outliner, eOutliner_PropSceneOps event, bool(*operation_fn)(bContext *, eOutliner_PropSceneOps, TreeElement *, TreeStoreElem *))
static void sequence_fn(int event, TreeElement *te, TreeStoreElem *, void *scene_ptr)
static void outliner_do_id_set_operation(SpaceOutliner *space_outliner, int type, ID *newid, void(*operation_fn)(TreeElement *, TreeStoreElem *, TreeStoreElem *, ID *))
static void gpencil_layer_fn(int event, TreeElement *te, TreeStoreElem *, void *)
void(*)(bContext *C, ReportList *reports, Scene *scene, Object *ob) OutlinerDeleteFn
static const EnumPropertyItem prop_liboverride_troubleshoot_op_types[]
eOutliner_PropConstraintOps
@ OL_CONSTRAINTOP_DISABLE
void OUTLINER_OT_id_operation(wmOperatorType *ot)
static int do_outliner_operation_event(bContext *C, ARegion *region, SpaceOutliner *space_outliner, TreeElement *te)
void OUTLINER_OT_liboverride_operation(wmOperatorType *ot)
static void id_override_library_delete_hierarchy_process(bContext *C, ReportList *, OutlinerLibOverrideData &data)
void outliner_item_select(bContext *C, SpaceOutliner *space_outliner, TreeElement *te, short select_flag)
static void id_override_library_create_hierarchy_pre_process(bContext *C, OutlinerLibOverrideData *data, ReportList *reports, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
static int outliner_id_operation_exec(bContext *C, wmOperator *op)
static void outliner_do_libdata_operation_selection_set(bContext *C, ReportList *reports, Scene *scene, SpaceOutliner *space_outliner, const ListBase &subtree, const bool has_parent_selected, outliner_operation_fn operation_fn, eOutlinerLibOpSelectionSet selection_set)
static int outliner_scene_operation_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_object_op_types[]
static void grease_pencil_node_fn(int event, TreeElement *te, TreeStoreElem *, void *)
static bool outliner_operation_tree_element_poll(bContext *C)
#define TSELEM_OPEN(telm, sv)
bool RNA_struct_is_ID(const StructRNA *type)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const char * RNA_property_identifier(const PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
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_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
Editing * SEQ_editing_get(const Scene *scene)
void SEQ_relations_invalidate_dependent(Scene *scene, Sequence *seq)
struct ID * hierarchy_root
IDOverrideLibrary * override_library
struct Collection * instance_collection
TreeElement * parent_element
TreeElement * select_element
bool is_liboverride_hierarchy_root_allowed
bool is_liboverride_allowed
Set< uint > selected_id_uid
Map< ID *, Vector< OutlinerLiboverrideDataIDRoot > > id_hierarchy_roots
bool do_resync_hierarchy_enforce
Set< uint > id_hierarchy_roots_uid
void id_root_add(ID *id_hierarchy_root_reference, ID *id_root_reference, ID *id_instance_hint, const bool is_override_instancing_object)
void id_root_set(ID *id_hierarchy_root_reference)
bool is_override_instancing_object
ID * id_hierarchy_root_override
TreeStoreElem * store_elem
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_menu_name_call(bContext *C, const char *menu_name, short context)
bool WM_operator_poll(bContext *C, wmOperatorType *ot)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_operator_name_call(bContext *C, const char *opstring, wmOperatorCallContext context, PointerRNA *properties, const wmEvent *event)
#define WM_msg_publish_rna_prop(mbus, id_, data_, type_, prop_)
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
int WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *)
void WM_window_set_active_scene(Main *bmain, bContext *C, wmWindow *win, Scene *scene)