diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2021-10-01 16:21:44 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2021-10-01 16:22:05 +0300 |
commit | 56ce51d1f75a5966977847aeafd25a60a9f44260 (patch) | |
tree | 343deb17cf7226d7cd220def37e24fee0edad513 /source/blender/blenkernel/BKE_asset_catalog.hh | |
parent | 1c7ce7e0b45b6613b22cee1515187f5a251932e7 (diff) |
Asset Catalogs: add catalog filter for the asset browser
Given an "active catalog" (i.e. the one selected in the UI), construct
an `AssetCatalogFilter` instance. This filter can determine whether an
asset should be shown or not. It returns `true` when The asset's catalog
ID is:
- the active catalog,
- an alias of the active catalog (so different UUID that maps to the
same path),
- a sub-catalog of the active catalog.
Not yet hooked up to the UI.
Diffstat (limited to 'source/blender/blenkernel/BKE_asset_catalog.hh')
-rw-r--r-- | source/blender/blenkernel/BKE_asset_catalog.hh | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_asset_catalog.hh b/source/blender/blenkernel/BKE_asset_catalog.hh index 052cf8e9d1e..65082f06f3a 100644 --- a/source/blender/blenkernel/BKE_asset_catalog.hh +++ b/source/blender/blenkernel/BKE_asset_catalog.hh @@ -26,6 +26,7 @@ #include "BLI_function_ref.hh" #include "BLI_map.hh" +#include "BLI_set.hh" #include "BLI_string_ref.hh" #include "BLI_uuid.h" #include "BLI_vector.hh" @@ -48,6 +49,7 @@ using CatalogFilePath = std::string; class AssetCatalog; class AssetCatalogDefinitionFile; class AssetCatalogTree; +class AssetCatalogFilter; /* Manages the asset catalogs of a single asset library (i.e. of catalogs defined in a single * directory hierarchy). */ @@ -100,6 +102,14 @@ class AssetCatalogService { * efficient call as it's just a linear search over the catalogs. */ AssetCatalog *find_catalog_by_path(const AssetCatalogPath &path) const; + /** + * Create a filter object that can be used to determine whether an asset belongs to the given + * catalog, or any of the catalogs in the sub-tree rooted at the given catalog. + * + * \see #AssetCatalogFilter + */ + AssetCatalogFilter create_catalog_filter(CatalogID active_catalog_id) const; + /** Create a catalog with some sensible auto-generated catalog ID. * The catalog will be saved to the default catalog file.*/ AssetCatalog *create_catalog(const AssetCatalogPath &catalog_path); @@ -331,4 +341,20 @@ struct AssetCatalogPathCmp { * Being a set, duplicates are removed. The catalog's simple name is ignored in this. */ using AssetCatalogOrderedSet = std::set<const AssetCatalog *, AssetCatalogPathCmp>; +/** + * Filter that can determine whether an asset should be visible or not, based on its catalog ID. + * + * \see AssetCatalogService::create_filter() + */ +class AssetCatalogFilter { + public: + bool contains(CatalogID asset_catalog_id) const; + + protected: + friend AssetCatalogService; + const Set<CatalogID> matching_catalog_ids; + + explicit AssetCatalogFilter(Set<CatalogID> &&matching_catalog_ids); +}; + } // namespace blender::bke |