Commit: f0eba2fe6c2a7d2d0d44b27c595b14b43956d26e Author: Julian Eisel Date: Tue Jan 10 15:54:27 2023 +0100 Branches: blender-projects-basics https://developer.blender.org/rBf0eba2fe6c2a7d2d0d44b27c595b14b43956d26e
Merge branch 'master' into blender-projects-basics =================================================================== =================================================================== diff --cc source/blender/asset_system/intern/asset_library_service.cc index 41d44867d7e,af48a173bc0..acfb49770cd --- a/source/blender/asset_system/intern/asset_library_service.cc +++ b/source/blender/asset_system/intern/asset_library_service.cc @@@ -56,26 -57,31 +57,32 @@@ void AssetLibraryService::destroy( AssetLibrary *AssetLibraryService::get_asset_library( const Main *bmain, const AssetLibraryReference &library_reference) { - if (library_reference.type == ASSET_LIBRARY_LOCAL) { - /* For the "Current File" library we get the asset library root path based on main. */ - std::string root_path = bmain ? AS_asset_library_find_suitable_root_path_from_main(bmain) : ""; - - if (root_path.empty()) { - /* File wasn't saved yet. */ - return get_asset_library_current_file(); + const eAssetLibraryType type = eAssetLibraryType(library_reference.type); + + switch (type) { + case ASSET_LIBRARY_LOCAL: { + /* For the "Current File" library we get the asset library root path based on main. */ + std::string root_path = bmain ? AS_asset_library_find_suitable_root_path_from_main(bmain) : + ""; + + if (root_path.empty()) { + /* File wasn't saved yet. */ + return get_asset_library_current_file(); + } + return get_asset_library_on_disk(root_path); } - - return get_asset_library_on_disk(root_path); - } - if (library_reference.type == ASSET_LIBRARY_CUSTOM_FROM_PREFERENCES) { - CustomAssetLibraryDefinition *user_library = BKE_asset_library_custom_find_from_index( - &U.asset_libraries, library_reference.custom_library_index); - - if (user_library) { - return get_asset_library_on_disk(user_library->path); + case ASSET_LIBRARY_ALL: + return get_asset_library_all(bmain); - case ASSET_LIBRARY_CUSTOM: { ++ case ASSET_LIBRARY_CUSTOM_FROM_PREFERENCES: { + std::string root_path = root_path_from_library_ref(library_reference); + + if (!root_path.empty()) { + return get_asset_library_on_disk(root_path); + } + break; } } + /* TODO project libraries */ return nullptr; } diff --cc source/blender/editors/asset/ED_asset_library.h index c5f526e18d5,c4baadc23c8..4746e0bb3e7 --- a/source/blender/editors/asset/ED_asset_library.h +++ b/source/blender/editors/asset/ED_asset_library.h @@@ -29,13 -29,14 +29,16 @@@ AssetLibraryReference ED_asset_library_ * Since this is meant for UI display, skips non-displayable libraries, that is, libraries with an * empty name or path. * - * \param include_local_library: Whether to include the "Current File" library or not. + * \param include_generated: Whether to include libraries that are generated and thus cannot be + * written to. Setting this to false means only custom libraries will be + * included, since they are stored on disk with a single root directory, + * thus have a well defined location that can be written to. */ const struct EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf( - bool include_local_library); + bool include_generated); +struct CustomAssetLibraryDefinition *ED_asset_library_find_custom_library_from_reference( + const AssetLibraryReference *library_ref); #ifdef __cplusplus } #endif diff --cc source/blender/editors/asset/intern/asset_library_reference_enum.cc index 7d75dc83854,d20f3205a77..0bbc2b81038 --- a/source/blender/editors/asset/intern/asset_library_reference_enum.cc +++ b/source/blender/editors/asset/intern/asset_library_reference_enum.cc @@@ -44,10 -44,10 +44,10 @@@ AssetLibraryReference ED_asset_library_ AssetLibraryReference library; /* Simple case: Predefined repository, just set the value. */ - if (value < ASSET_LIBRARY_CUSTOM) { + if (value < ASSET_LIBRARY_CUSTOM_FROM_PREFERENCES) { library.type = value; library.custom_library_index = -1; - BLI_assert(ELEM(value, ASSET_LIBRARY_LOCAL)); + BLI_assert(ELEM(value, ASSET_LIBRARY_ALL, ASSET_LIBRARY_LOCAL)); return library; } @@@ -74,35 -70,7 +74,34 @@@ return library; } +static void add_custom_asset_library_enum_items( + const ListBase * /*CustomAssetLibraryDefinition*/ libraries, + const eAssetLibraryType library_type, + EnumPropertyItem **items, + int *totitem) +{ + int i; + LISTBASE_FOREACH_INDEX (CustomAssetLibraryDefinition *, custom_library, libraries, i) { + /* Note that the path itself isn't checked for validity here. If an invalid library path is + * used, the Asset Browser can give a nice hint on what's wrong. */ + const bool is_valid = (custom_library->name[0] && custom_library->path[0]); + if (!is_valid) { + continue; + } + + AssetLibraryReference library_reference; + library_reference.type = library_type; + library_reference.custom_library_index = i; + + const int enum_value = ED_asset_library_reference_to_enum_value(&library_reference); + /* Use library path as description, it's a nice hint for users. */ + EnumPropertyItem tmp = { + enum_value, custom_library->name, ICON_NONE, custom_library->name, custom_library->path}; + RNA_enum_item_add(items, totitem, &tmp); + } +} + - const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf( - const bool include_local_library) + const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool include_generated) { EnumPropertyItem *item = nullptr; int totitem = 0; @@@ -119,25 -90,34 +121,26 @@@ {0, nullptr, 0, nullptr, nullptr}, }; - /* Add predefined items. */ - RNA_enum_items_add(&item, &totitem, predefined_items); + /* Add predefined libraries that are generated and not simple directories that can be written + * to. */ + RNA_enum_items_add(&item, &totitem, generated_items); } - /* Add separator if needed. */ - if (!BLI_listbase_is_empty(&U.asset_libraries)) { + BlenderProject *project = CTX_wm_project(); + if (project && !BLI_listbase_is_empty(BKE_project_custom_asset_libraries_get(project))) { RNA_enum_item_add_separator(&item, &totitem); - } - int i; - LISTBASE_FOREACH_INDEX (bUserAssetLibrary *, user_library, &U.asset_libraries, i) { - /* Note that the path itself isn't checked for validity here. If an invalid library path is - * used, the Asset Browser can give a nice hint on what's wrong. */ - const bool is_valid = (user_library->name[0] && user_library->path[0]); - if (!is_valid) { - continue; - } + add_custom_asset_library_enum_items(BKE_project_custom_asset_libraries_get(project), + ASSET_LIBRARY_CUSTOM_FROM_PROJECT, + &item, + &totitem); + } - AssetLibraryReference library_reference; - library_reference.type = ASSET_LIBRARY_CUSTOM; - library_reference.custom_library_index = i; + if (!BLI_listbase_is_empty(&U.asset_libraries)) { + RNA_enum_item_add_separator(&item, &totitem); - const int enum_value = ED_asset_library_reference_to_enum_value(&library_reference); - /* Use library path as description, it's a nice hint for users. */ - EnumPropertyItem tmp = { - enum_value, user_library->name, ICON_NONE, user_library->name, user_library->path}; - RNA_enum_item_add(&item, &totitem, &tmp); + add_custom_asset_library_enum_items( + &U.asset_libraries, ASSET_LIBRARY_CUSTOM_FROM_PREFERENCES, &item, &totitem); } RNA_enum_item_end(&item, &totitem); diff --cc source/blender/editors/asset/intern/asset_list.cc index 8bb078ded74,64934316413..b23223ed02b --- a/source/blender/editors/asset/intern/asset_list.cc +++ b/source/blender/editors/asset/intern/asset_list.cc @@@ -12,7 -12,8 +12,9 @@@ #include <optional> #include <string> + #include "AS_asset_library.hh" + +#include "BKE_blender_project.h" #include "BKE_context.h" #include "BLI_map.hh" @@@ -152,23 -152,10 +153,20 @@@ void AssetList::setup( filelist_setindexer(files, use_asset_indexer ? &file_indexer_asset : &file_indexer_noop); char path[FILE_MAXDIR] = ""; - if (custom_library) { - /* Project asset libraries typically use relative paths (relative to project root directory). - */ - if ((library_ref_.type == ASSET_LIBRARY_CUSTOM_FROM_PROJECT) && - BLI_path_is_rel(custom_library->path)) { - BlenderProject *project = CTX_wm_project(); - const char *project_root_path = BKE_project_root_path_get(project); - BLI_path_join(path, sizeof(path), project_root_path, custom_library->path); - } - else { - BLI_strncpy(path, custom_library->path, sizeof(path)); - } - filelist_setdir(files, path); ++#if 0 ++ /* Project asset libraries typically use relative paths (relative to project root directory). ++ */ ++ if ((library_ref_.type == ASSET_LIBRARY_CUSTOM_FROM_PROJECT) && ++ BLI_path_is_rel(custom_library->path)) { ++ BlenderProject *project = CTX_wm_project(); ++ const char *project_root_path = BKE_project_root_path_get(project); ++ BLI_path_join(path, sizeof(path), project_root_path, custom_library->path); + } - else { - filelist_setdir(files, path); ++#endif + if (!asset_lib_path.empty()) { + BLI_strncpy(path, asset_lib_path.c_str(), sizeof(path)); } + filelist_setdir(files, path); } void AssetList::fetch(const bContext &C) @@@ -377,9 -369,10 +380,11 @@@ void AssetListStorage::remapID(ID *id_n std::optional<eFileSelectType> AssetListStorage::asset_library_reference_to_fileselect_type( const AssetLibraryReference &library_reference) { - switch (library_reference.type) { + switch (eAssetLibraryType(library_reference.type)) { + case ASSET_LIBRARY_ALL: + return FILE_ASSET_LIBRARY_ALL; - case ASSET_LIBRARY_CUSTOM: + case ASSET_LIBRARY_CUSTOM_FROM_PREFERENCES: + case ASSET_LIBRARY_CUSTOM_FROM_PROJECT: return FILE_ASSET_LIBRARY; case ASSET_LIBRARY_LOCAL: return FIL @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs