diff options
Diffstat (limited to 'source/blender/makesrna/intern/rna_ID.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_ID.c | 65 |
1 files changed, 58 insertions, 7 deletions
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 73b6f92184c..2d6b689b88d 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -699,9 +699,29 @@ static ID *rna_ID_override_create(ID *id, Main *bmain, bool remap_local_usages) if (remap_local_usages) { BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false); } + + WM_main_add_notifier(NC_ID | NA_ADDED, NULL); + return local_id; } +static ID *rna_ID_override_hierarchy_create( + ID *id, Main *bmain, Scene *scene, ViewLayer *view_layer, ID *id_reference) +{ + if (!ID_IS_OVERRIDABLE_LIBRARY(id)) { + return NULL; + } + + BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false); + + ID *id_root_override = NULL; + BKE_lib_override_library_create(bmain, scene, view_layer, id, id_reference, &id_root_override); + + WM_main_add_notifier(NC_ID | NA_ADDED, NULL); + + return id_root_override; +} + static void rna_ID_override_template_create(ID *id, ReportList *reports) { if (!U.experimental.use_override_templates) { @@ -1228,7 +1248,7 @@ static void rna_ImagePreview_icon_reload(PreviewImage *prv) static PointerRNA rna_IDPreview_get(PointerRNA *ptr) { ID *id = (ID *)ptr->data; - PreviewImage *prv_img = BKE_previewimg_id_ensure(id); + PreviewImage *prv_img = BKE_previewimg_id_get(id); return rna_pointer_inherit_refine(ptr, &RNA_ImagePreview, prv_img); } @@ -1798,12 +1818,12 @@ static void rna_def_ID(BlenderRNA *brna) srna, "override_library", "IDOverrideLibrary", "Library Override", "Library override data"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - prop = RNA_def_pointer( - srna, - "preview", - "ImagePreview", - "Preview", - "Preview image and icon of this data-block (None if not supported for this type of data)"); + prop = RNA_def_pointer(srna, + "preview", + "ImagePreview", + "Preview", + "Preview image and icon of this data-block (always None if not supported " + "for this type of data)"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON); RNA_def_property_pointer_funcs(prop, "rna_IDPreview_get", NULL, NULL, NULL); @@ -1851,6 +1871,30 @@ static void rna_def_ID(BlenderRNA *brna) "Whether local usages of the linked ID should be remapped to the new " "library override of it"); + func = RNA_def_function(srna, "override_hierarchy_create", "rna_ID_override_hierarchy_create"); + RNA_def_function_ui_description( + func, + "Create an overridden local copy of this linked data-block, and most of its dependencies " + "when it is a Collection or and Object"); + RNA_def_function_flag(func, FUNC_USE_MAIN); + parm = RNA_def_pointer(func, "id", "ID", "", "New overridden local copy of the root ID"); + RNA_def_function_return(func, parm); + parm = RNA_def_pointer( + func, "scene", "Scene", "", "In which scene the new overrides should be instantiated"); + RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED); + parm = RNA_def_pointer(func, + "view_layer", + "ViewLayer", + "", + "In which view layer the new overrides should be instantiated"); + RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED); + RNA_def_pointer(func, + "reference", + "ID", + "", + "Another ID (usually an Object or Collection) used to decide where to " + "instantiate the new overrides"); + func = RNA_def_function(srna, "override_template_create", "rna_ID_override_template_create"); RNA_def_function_ui_description(func, "Create an override template for this ID"); RNA_def_function_flag(func, FUNC_USE_REPORTS); @@ -1917,6 +1961,13 @@ static void rna_def_ID(BlenderRNA *brna) "e.g. when calling :class:`bpy.types.Scene.update`"); RNA_def_enum_flag(func, "refresh", update_flag_items, 0, "", "Type of updates to perform"); + func = RNA_def_function(srna, "preview_ensure", "BKE_previewimg_id_ensure"); + RNA_def_function_ui_description(func, + "Ensure that this ID has preview data (if ID type supports it)"); + parm = RNA_def_pointer( + func, "preview_image", "ImagePreview", "", "The existing or created preview"); + RNA_def_function_return(func, parm); + # ifdef WITH_PYTHON RNA_def_struct_register_funcs(srna, NULL, NULL, "rna_ID_instance"); # endif |