Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/asset/intern/asset_catalog.cc
| /* SPDX-License-Identifier: GPL-2.0-or-later */ | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||||
| /** \file | /** \file | ||||
| * \ingroup edasset | * \ingroup edasset | ||||
| */ | */ | ||||
| #include "BKE_asset_catalog.hh" | #include "AS_asset_library.hh" | ||||
| #include "BKE_asset_library.hh" | |||||
| #include "AS_asset_catalog.hh" | |||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BLI_string_utils.h" | #include "BLI_string_utils.h" | ||||
| #include "ED_asset_catalog.h" | #include "ED_asset_catalog.h" | ||||
| #include "ED_asset_catalog.hh" | #include "ED_asset_catalog.hh" | ||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| using namespace blender; | using namespace blender; | ||||
| using namespace blender::bke; | using namespace blender::asset_system; | ||||
| struct CatalogUniqueNameFnData { | struct CatalogUniqueNameFnData { | ||||
| const AssetCatalogService &catalog_service; | const AssetCatalogService &catalog_service; | ||||
| StringRef parent_path; | StringRef parent_path; | ||||
| }; | }; | ||||
| static bool catalog_name_exists_fn(void *arg, const char *name) | static bool catalog_name_exists_fn(void *arg, const char *name) | ||||
| { | { | ||||
| Show All 10 Lines | static std::string catalog_name_ensure_unique(AssetCatalogService &catalog_service, | ||||
| char unique_name[MAX_NAME] = ""; | char unique_name[MAX_NAME] = ""; | ||||
| BLI_uniquename_cb( | BLI_uniquename_cb( | ||||
| catalog_name_exists_fn, &fn_data, name.c_str(), '.', unique_name, sizeof(unique_name)); | catalog_name_exists_fn, &fn_data, name.c_str(), '.', unique_name, sizeof(unique_name)); | ||||
| return unique_name; | return unique_name; | ||||
| } | } | ||||
| AssetCatalog *ED_asset_catalog_add(::AssetLibrary *library, | asset_system::AssetCatalog *ED_asset_catalog_add(::AssetLibrary *library, | ||||
| StringRefNull name, | StringRefNull name, | ||||
| StringRef parent_path) | StringRef parent_path) | ||||
| { | { | ||||
| bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service(library); | asset_system::AssetCatalogService *catalog_service = AS_asset_library_get_catalog_service( | ||||
| library); | |||||
| if (!catalog_service) { | if (!catalog_service) { | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| std::string unique_name = catalog_name_ensure_unique(*catalog_service, name, parent_path); | std::string unique_name = catalog_name_ensure_unique(*catalog_service, name, parent_path); | ||||
| AssetCatalogPath fullpath = AssetCatalogPath(parent_path) / unique_name; | AssetCatalogPath fullpath = AssetCatalogPath(parent_path) / unique_name; | ||||
| catalog_service->undo_push(); | catalog_service->undo_push(); | ||||
| bke::AssetCatalog *new_catalog = catalog_service->create_catalog(fullpath); | asset_system::AssetCatalog *new_catalog = catalog_service->create_catalog(fullpath); | ||||
| if (!new_catalog) { | if (!new_catalog) { | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| catalog_service->tag_has_unsaved_changes(new_catalog); | catalog_service->tag_has_unsaved_changes(new_catalog); | ||||
| WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | ||||
| return new_catalog; | return new_catalog; | ||||
| } | } | ||||
| void ED_asset_catalog_remove(::AssetLibrary *library, const CatalogID &catalog_id) | void ED_asset_catalog_remove(::AssetLibrary *library, const CatalogID &catalog_id) | ||||
| { | { | ||||
| bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service(library); | asset_system::AssetCatalogService *catalog_service = AS_asset_library_get_catalog_service( | ||||
| library); | |||||
| if (!catalog_service) { | if (!catalog_service) { | ||||
| BLI_assert_unreachable(); | BLI_assert_unreachable(); | ||||
| return; | return; | ||||
| } | } | ||||
| catalog_service->undo_push(); | catalog_service->undo_push(); | ||||
| catalog_service->tag_has_unsaved_changes(nullptr); | catalog_service->tag_has_unsaved_changes(nullptr); | ||||
| catalog_service->prune_catalogs_by_id(catalog_id); | catalog_service->prune_catalogs_by_id(catalog_id); | ||||
| WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | ||||
| } | } | ||||
| void ED_asset_catalog_rename(::AssetLibrary *library, | void ED_asset_catalog_rename(::AssetLibrary *library, | ||||
| const CatalogID catalog_id, | const CatalogID catalog_id, | ||||
| const StringRefNull new_name) | const StringRefNull new_name) | ||||
| { | { | ||||
| bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service(library); | asset_system::AssetCatalogService *catalog_service = AS_asset_library_get_catalog_service( | ||||
| library); | |||||
| if (!catalog_service) { | if (!catalog_service) { | ||||
| BLI_assert_unreachable(); | BLI_assert_unreachable(); | ||||
| return; | return; | ||||
| } | } | ||||
| AssetCatalog *catalog = catalog_service->find_catalog(catalog_id); | AssetCatalog *catalog = catalog_service->find_catalog(catalog_id); | ||||
| const AssetCatalogPath new_path = catalog->path.parent() / StringRef(new_name); | const AssetCatalogPath new_path = catalog->path.parent() / StringRef(new_name); | ||||
| Show All 9 Lines | void ED_asset_catalog_rename(::AssetLibrary *library, | ||||
| catalog_service->update_catalog_path(catalog_id, clean_new_path); | catalog_service->update_catalog_path(catalog_id, clean_new_path); | ||||
| WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | ||||
| } | } | ||||
| void ED_asset_catalog_move(::AssetLibrary *library, | void ED_asset_catalog_move(::AssetLibrary *library, | ||||
| const CatalogID src_catalog_id, | const CatalogID src_catalog_id, | ||||
| const std::optional<CatalogID> dst_parent_catalog_id) | const std::optional<CatalogID> dst_parent_catalog_id) | ||||
| { | { | ||||
| bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service(library); | asset_system::AssetCatalogService *catalog_service = AS_asset_library_get_catalog_service( | ||||
| library); | |||||
| if (!catalog_service) { | if (!catalog_service) { | ||||
| BLI_assert_unreachable(); | BLI_assert_unreachable(); | ||||
| return; | return; | ||||
| } | } | ||||
| AssetCatalog *src_catalog = catalog_service->find_catalog(src_catalog_id); | AssetCatalog *src_catalog = catalog_service->find_catalog(src_catalog_id); | ||||
| if (!src_catalog) { | if (!src_catalog) { | ||||
| BLI_assert_unreachable(); | BLI_assert_unreachable(); | ||||
| Show All 23 Lines | void ED_asset_catalog_move(::AssetLibrary *library, | ||||
| catalog_service->undo_push(); | catalog_service->undo_push(); | ||||
| catalog_service->tag_has_unsaved_changes(src_catalog); | catalog_service->tag_has_unsaved_changes(src_catalog); | ||||
| catalog_service->update_catalog_path(src_catalog_id, clean_new_path); | catalog_service->update_catalog_path(src_catalog_id, clean_new_path); | ||||
| WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); | ||||
| } | } | ||||
| void ED_asset_catalogs_save_from_main_path(::AssetLibrary *library, const Main *bmain) | void ED_asset_catalogs_save_from_main_path(::AssetLibrary *library, const Main *bmain) | ||||
| { | { | ||||
| bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service(library); | asset_system::AssetCatalogService *catalog_service = AS_asset_library_get_catalog_service( | ||||
| library); | |||||
| if (!catalog_service) { | if (!catalog_service) { | ||||
| BLI_assert_unreachable(); | BLI_assert_unreachable(); | ||||
| return; | return; | ||||
| } | } | ||||
| /* Since writing to disk also means loading any on-disk changes, it may be a good idea to store | /* Since writing to disk also means loading any on-disk changes, it may be a good idea to store | ||||
| * an undo step. */ | * an undo step. */ | ||||
| catalog_service->undo_push(); | catalog_service->undo_push(); | ||||
| catalog_service->write_to_disk(bmain->filepath); | catalog_service->write_to_disk(bmain->filepath); | ||||
| } | } | ||||
| void ED_asset_catalogs_set_save_catalogs_when_file_is_saved(const bool should_save) | void ED_asset_catalogs_set_save_catalogs_when_file_is_saved(const bool should_save) | ||||
| { | { | ||||
| bke::AssetLibrary::save_catalogs_when_file_is_saved = should_save; | asset_system::AssetLibrary::save_catalogs_when_file_is_saved = should_save; | ||||
| } | } | ||||
| bool ED_asset_catalogs_get_save_catalogs_when_file_is_saved() | bool ED_asset_catalogs_get_save_catalogs_when_file_is_saved() | ||||
| { | { | ||||
| return bke::AssetLibrary::save_catalogs_when_file_is_saved; | return asset_system::AssetLibrary::save_catalogs_when_file_is_saved; | ||||
| } | } | ||||