diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-29 17:31:31 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-29 19:23:25 +0300 |
commit | 638afb9bd428fb697fb5136e8bb5f31b05458db7 (patch) | |
tree | 2c00bf3c3d394e37db9286306ba4e6506e31a31e /source/blender/makesrna/intern/rna_ID.c | |
parent | 6d003ef81272be144e97e2767ee4fe526aca582c (diff) |
ID Static Override, part II: RNA changes.
This is essentially a huge refactor/extension of our existing RNA
compare & copy code, since static override needs more advanced handling here.
Note that not all new features are implemented yet, advanced things like
collections insertion/deletion are still TODO (medium priority).
This completes the ground work for overrides, remaining commits will be
about UI and some basic/testing activation of overrides for a limited
set of data-blocks & properties.
For details see https://developer.blender.org/D2417
Diffstat (limited to 'source/blender/makesrna/intern/rna_ID.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_ID.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index c519c61e9e9..44df8916796 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -97,6 +97,7 @@ const EnumPropertyItem rna_enum_id_type_items[] = { #include "BKE_idprop.h" #include "BKE_library.h" #include "BKE_library_query.h" +#include "BKE_library_override.h" #include "BKE_library_remap.h" #include "BKE_animsys.h" #include "BKE_material.h" @@ -311,6 +312,15 @@ static ID *rna_ID_copy(ID *id, Main *bmain) return NULL; } +static ID *rna_ID_override_create(ID *id, Main *bmain) +{ + if (id->lib == NULL) { + return NULL; + } + + return BKE_override_static_create_from(bmain, id); +} + static void rna_ID_update_tag(ID *id, ReportList *reports, int flag) { /* XXX, new function for this! */ @@ -762,6 +772,14 @@ static PointerRNA rna_IDPreview_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_ImagePreview, prv_img); } +static PointerRNA rna_ID_override_reference_get(PointerRNA *ptr) +{ + ID *id = (ID *)ptr->data; + ID *reference = (id && id->override_static) ? id->override_static->reference : NULL; + + return reference ? rna_pointer_inherit_refine(ptr, ID_code_to_RNA_type(GS(reference->name)), reference) : PointerRNA_NULL; +} + #else static void rna_def_ID_properties(BlenderRNA *brna) @@ -1024,6 +1042,12 @@ static void rna_def_ID(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Library", "Library file the data-block is linked from"); + prop = RNA_def_pointer(srna, "override_static_reference", "ID", + "Override Reference", "Reference linked data-block overridden by this one"); + RNA_def_property_pointer_sdna(prop, NULL, "override_static->reference"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_pointer_funcs(prop, "rna_ID_override_reference_get", NULL, NULL, NULL); + 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)"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -1036,6 +1060,12 @@ static void rna_def_ID(BlenderRNA *brna) parm = RNA_def_pointer(func, "id", "ID", "", "New copy of the ID"); RNA_def_function_return(func, parm); + func = RNA_def_function(srna, "override_create", "rna_ID_override_create"); + RNA_def_function_ui_description(func, "Create an overridden local copy of this linked data-block (not supported for all data-blocks)"); + RNA_def_function_flag(func, FUNC_USE_MAIN); + parm = RNA_def_pointer(func, "id", "ID", "", "New overridden local copy of the ID"); + RNA_def_function_return(func, parm); + func = RNA_def_function(srna, "user_clear", "rna_ID_user_clear"); RNA_def_function_ui_description(func, "Clear the user count of a data-block so its not saved, " "on reload the data will be removed"); |