diff options
Diffstat (limited to 'source/blender/makesrna/intern/rna_asset.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_asset.c | 67 |
1 files changed, 63 insertions, 4 deletions
diff --git a/source/blender/makesrna/intern/rna_asset.c b/source/blender/makesrna/intern/rna_asset.c index 80824df1bc8..e79cbc838d4 100644 --- a/source/blender/makesrna/intern/rna_asset.c +++ b/source/blender/makesrna/intern/rna_asset.c @@ -139,6 +139,40 @@ static IDProperty **rna_AssetMetaData_idprops(PointerRNA *ptr) return &asset_data->properties; } +static void rna_AssetMetaData_author_get(PointerRNA *ptr, char *value) +{ + AssetMetaData *asset_data = ptr->data; + + if (asset_data->author) { + strcpy(value, asset_data->author); + } + else { + value[0] = '\0'; + } +} + +static int rna_AssetMetaData_author_length(PointerRNA *ptr) +{ + AssetMetaData *asset_data = ptr->data; + return asset_data->author ? strlen(asset_data->author) : 0; +} + +static void rna_AssetMetaData_author_set(PointerRNA *ptr, const char *value) +{ + AssetMetaData *asset_data = ptr->data; + + if (asset_data->author) { + MEM_freeN(asset_data->author); + } + + if (value[0]) { + asset_data->author = BLI_strdup(value); + } + else { + asset_data->author = NULL; + } +} + static void rna_AssetMetaData_description_get(PointerRNA *ptr, char *value) { AssetMetaData *asset_data = ptr->data; @@ -215,6 +249,25 @@ static void rna_AssetMetaData_catalog_id_set(PointerRNA *ptr, const char *value) BKE_asset_metadata_catalog_id_set(asset_data, new_uuid, ""); } +void rna_AssetMetaData_catalog_id_update(struct bContext *C, struct PointerRNA *ptr) +{ + SpaceFile *sfile = CTX_wm_space_file(C); + if (sfile == NULL) { + /* Until there is a proper Asset Service available, it's only possible to get the asset library + * from within the asset browser context. */ + return; + } + + AssetLibrary *asset_library = ED_fileselect_active_asset_library_get(sfile); + if (asset_library == NULL) { + /* The SpaceFile may not be an asset browser but a regular file browser. */ + return; + } + + AssetMetaData *asset_data = ptr->data; + BKE_asset_library_refresh_catalog_simplename(asset_library, asset_data); +} + static PointerRNA rna_AssetHandle_file_data_get(PointerRNA *ptr) { AssetHandle *asset_handle = ptr->data; @@ -254,7 +307,7 @@ const EnumPropertyItem *rna_asset_library_reference_itemf(bContext *UNUSED(C), PropertyRNA *UNUSED(prop), bool *r_free) { - const EnumPropertyItem *items = ED_asset_library_reference_to_rna_enum_itemf(); + const EnumPropertyItem *items = ED_asset_library_reference_to_rna_enum_itemf(true); if (!items) { *r_free = false; } @@ -328,6 +381,14 @@ static void rna_def_asset_data(BlenderRNA *brna) RNA_def_struct_idprops_func(srna, "rna_AssetMetaData_idprops"); RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES); /* Mandatory! */ + prop = RNA_def_property(srna, "author", PROP_STRING, PROP_NONE); + RNA_def_property_editable_func(prop, "rna_AssetMetaData_editable"); + RNA_def_property_string_funcs(prop, + "rna_AssetMetaData_author_get", + "rna_AssetMetaData_author_length", + "rna_AssetMetaData_author_set"); + RNA_def_property_ui_text(prop, "Author", "Name of the creator of the asset"); + prop = RNA_def_property(srna, "description", PROP_STRING, PROP_NONE); RNA_def_property_editable_func(prop, "rna_AssetMetaData_editable"); RNA_def_property_string_funcs(prop, @@ -356,6 +417,7 @@ static void rna_def_asset_data(BlenderRNA *brna) "rna_AssetMetaData_catalog_id_length", "rna_AssetMetaData_catalog_id_set"); RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, 0, "rna_AssetMetaData_catalog_id_update"); RNA_def_property_ui_text(prop, "Catalog UUID", "Identifier for the asset's catalog, used by Blender to look up the " @@ -431,9 +493,6 @@ static void rna_def_asset_library_reference(BlenderRNA *brna) srna, "Asset Library Reference", "Identifier to refer to the asset library"); } -/** - * \note the UI text and updating has to be set by the caller. - */ PropertyRNA *rna_def_asset_library_reference_common(struct StructRNA *srna, const char *get, const char *set) |