58 void build_tree()
override;
60 void activate_catalog_by_id(
CatalogID catalog_id);
67 void add_unassigned_item();
68 bool is_active_catalog(
CatalogID catalog_id)
const;
80 void on_activate()
override;
82 void build_row(
uiLayout &row)
override;
85 bool supports_renaming()
const override;
89 std::unique_ptr<ui::AbstractViewItemDragController> create_drag_controller()
const override;
91 std::unique_ptr<ui::AbstractViewItemDropController> create_drop_controller()
const override;
101 int get_drag_type()
const override;
102 void *create_drag_data()
const override;
103 void on_drag_start()
override;
112 bool can_drop(
const wmDrag &drag,
const char **r_disabled_hint)
const override;
113 std::string drop_tooltip(
const wmDrag &drag)
const override;
119 static bool has_droppable_asset(
const wmDrag &drag,
const char **r_disabled_hint);
120 static bool drop_assets_into_catalog(
struct bContext *
C,
128 static bool drop_asset_catalog_into_catalog(
131 const std::optional<CatalogID> drop_catalog_id = std::nullopt);
134 std::string drop_tooltip_asset_list(
const wmDrag &drag)
const;
135 std::string drop_tooltip_asset_catalog(
const wmDrag &drag)
const;
141 using BasicTreeViewItem::BasicTreeViewItem;
143 void build_row(
uiLayout &row)
override;
148 bool can_drop(
const wmDrag &drag,
const char **r_disabled_hint)
const override;
149 std::string drop_tooltip(
const wmDrag &drag)
const override;
153 std::unique_ptr<ui::AbstractViewItemDropController> create_drop_controller()
const override;
157 using BasicTreeViewItem::BasicTreeViewItem;
162 bool can_drop(
const wmDrag &drag,
const char **r_disabled_hint)
const override;
163 std::string drop_tooltip(
const wmDrag &drag)
const override;
167 std::unique_ptr<ui::AbstractViewItemDropController> create_drop_controller()
const override;
178 space_file_(space_file)
190 build_catalog_items_recursive(all_item, item);
194 add_unassigned_item();
203 [
this, &catalog]() {
return is_active_catalog(catalog.
get_catalog_id()); });
206 build_catalog_items_recursive(view_item, child);
225 void AssetCatalogTreeView::add_unassigned_item()
230 IFACE_(
"Unassigned"), ICON_FILE_HIDDEN);
247 bool AssetCatalogTreeView::is_active_catalog(
CatalogID catalog_id)
const
256 : BasicTreeViewItem(catalog_item->get_name()), catalog_item_(*catalog_item)
288 "ASSET_OT_catalog_new",
300 "ASSET_OT_catalog_delete",
308 uiItemO(&column,
"Rename", ICON_NONE,
"UI_OT_view_item_rename");
328 BasicTreeViewItem::rename(new_name);
339 return std::make_unique<AssetCatalogDropController>(
346 return std::make_unique<AssetCatalogDragController>(
354 : ui::AbstractViewItemDropController(tree_view), catalog_item_(catalog_item)
366 *r_disabled_hint =
"Catalog cannot be dropped into itself";
370 *r_disabled_hint =
"Catalog is already placed inside this catalog";
384 return drop_tooltip_asset_catalog(drag);
386 return drop_tooltip_asset_list(drag);
389 std::string AssetCatalogDropController::drop_tooltip_asset_catalog(
const wmDrag &drag)
const
394 return std::string(
TIP_(
"Move Catalog")) +
" '" + src_catalog->
path.
name() +
"' " +
398 std::string AssetCatalogDropController::drop_tooltip_asset_list(
const wmDrag &drag)
const
407 std::string basic_tip = is_multiple_assets ?
TIP_(
"Move assets to catalog") :
408 TIP_(
"Move asset to catalog");
410 basic_tip +=
": " + catalog_item_.
get_name();
425 drag, get_view<AssetCatalogTreeView>(), catalog_item_.
get_catalog_id());
428 get_view<AssetCatalogTreeView>(),
437 const std::optional<CatalogID> drop_catalog_id)
460 bool did_update =
false;
462 if (asset_item->is_external) {
469 asset_item->asset_data.local_id->asset_data, catalog_id, simple_name.
c_str());
497 const char **r_disabled_hint)
501 *r_disabled_hint =
nullptr;
504 if (!asset_item->is_external) {
509 *r_disabled_hint =
TIP_(
"Only assets from this current file can be moved between catalogs");
515 return *get_view<AssetCatalogTreeView>().asset_library_;
522 : ui::AbstractViewItemDragController(tree_view), catalog_item_(catalog_item)
547 void AssetCatalogTreeViewAllItem::build_row(
uiLayout &row)
562 std::unique_ptr<ui::AbstractViewItemDropController> AssetCatalogTreeViewAllItem::
563 create_drop_controller()
const
565 return std::make_unique<AssetCatalogTreeViewAllItem::DropController>(
570 : ui::AbstractViewItemDropController(tree_view)
574 bool AssetCatalogTreeViewAllItem::DropController::can_drop(
const wmDrag &drag,
575 const char **r_disabled_hint)
const
582 drag, *get_view<AssetCatalogTreeView>().asset_library_);
584 *r_disabled_hint =
"Catalog is already placed at the highest level";
591 std::string AssetCatalogTreeViewAllItem::DropController::drop_tooltip(
const wmDrag &drag)
const
595 drag, *get_view<AssetCatalogTreeView>().asset_library_);
597 return std::string(
TIP_(
"Move Catalog")) +
" '" + drag_catalog->
path.
name() +
"' " +
598 TIP_(
"to the top level of the tree");
601 bool AssetCatalogTreeViewAllItem::DropController::on_drop(
struct bContext *
UNUSED(C),
607 get_view<AssetCatalogTreeView>(),
614 std::unique_ptr<ui::AbstractViewItemDropController> AssetCatalogTreeViewUnassignedItem::
615 create_drop_controller()
const
617 return std::make_unique<AssetCatalogTreeViewUnassignedItem::DropController>(
621 AssetCatalogTreeViewUnassignedItem::DropController::DropController(
AssetCatalogTreeView &tree_view)
622 : ui::AbstractViewItemDropController(tree_view)
626 bool AssetCatalogTreeViewUnassignedItem::DropController::can_drop(
627 const wmDrag &drag,
const char **r_disabled_hint)
const
635 std::string AssetCatalogTreeViewUnassignedItem::DropController::drop_tooltip(
641 return is_multiple_assets ?
TIP_(
"Move assets out of any catalog") :
642 TIP_(
"Move asset out of any catalog");
645 bool AssetCatalogTreeViewUnassignedItem::DropController::on_drop(
struct bContext *C,
650 C, get_view<AssetCatalogTreeView>(), drag,
CatalogID{});
681 filter_settings_handle);
682 MEM_delete(*filter_settings);
683 *filter_settings =
nullptr;
692 filter_settings_handle);
693 bool needs_update =
false;
714 filter_settings_handle);
719 filter_settings->
catalog_filter = std::make_unique<AssetCatalogFilter>(
758 "asset catalog tree view",
759 std::make_unique<ed::asset_browser::AssetCatalogTreeView>(
760 asset_library,
params, *space_file));
void BKE_asset_metadata_catalog_id_set(struct AssetMetaData *asset_data, bUUID catalog_id, const char *catalog_simple_name)
struct AssetLibrary AssetLibrary
blender::bke::AssetCatalogService * BKE_asset_library_get_catalog_service(const ::AssetLibrary *library)
blender::bke::AssetCatalogTree * BKE_asset_library_get_catalog_tree(const ::AssetLibrary *library)
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
void void BLI_INLINE bool BLI_listbase_is_single(const struct ListBase *lb)
bool BLI_uuid_equal(bUUID uuid1, bUUID uuid2)
void BLI_uuid_format(char *buffer, bUUID uuid) ATTR_NONNULL()
eFileSel_Params_AssetCatalogVisibility
@ FILE_SHOW_ASSETS_ALL_CATALOGS
@ FILE_SHOW_ASSETS_WITHOUT_CATALOG
@ FILE_SHOW_ASSETS_FROM_CATALOG
void ED_asset_catalog_move(AssetLibrary *library, blender::bke::CatalogID src_catalog_id, std::optional< blender::bke::CatalogID > dst_parent_catalog_id=std::nullopt)
void ED_asset_catalog_rename(AssetLibrary *library, blender::bke::CatalogID catalog_id, blender::StringRefNull new_name)
void ED_undo_push(struct bContext *C, const char *str)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
void UI_menutype_draw(struct bContext *C, struct MenuType *mt, struct uiLayout *layout)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, struct IDProperty *properties, wmOperatorCallContext context, int flag, struct PointerRNA *r_opptr)
struct PointerRNA * UI_but_extra_operator_icon_add(uiBut *but, const char *opname, wmOperatorCallContext opcontext, int icon)
void UI_block_layout_set_current(uiBlock *block, uiLayout *layout)
blender::ui::AbstractGridView * UI_block_add_view(uiBlock &block, blender::StringRef idname, std::unique_ptr< blender::ui::AbstractGridView > grid_view)
#define ND_SPACE_ASSET_PARAMS
#define WM_DRAG_ASSET_LIST
#define WM_DRAG_ASSET_CATALOG
#define ND_ASSET_CATALOGS
#define ND_SPACE_FILE_LIST
void file_create_asset_catalog_tree_view_in_layout(::AssetLibrary *asset_library, uiLayout *layout, SpaceFile *space_file, FileAssetSelectParams *params)
void file_ensure_updated_catalog_filter_data(FileAssetCatalogFilterSettingsHandle *filter_settings_handle, const ::AssetLibrary *asset_library)
FileAssetCatalogFilterSettingsHandle * file_create_asset_catalog_filter_settings()
bool file_is_asset_visible_in_catalog_filter_settings(const FileAssetCatalogFilterSettingsHandle *filter_settings_handle, const AssetMetaData *asset_data)
void file_delete_asset_catalog_filter_settings(FileAssetCatalogFilterSettingsHandle **filter_settings_handle)
bool file_set_asset_catalog_filter_settings(FileAssetCatalogFilterSettingsHandle *filter_settings_handle, eFileSel_Params_AssetCatalogVisibility catalog_visibility, ::bUUID catalog_id)
constexpr const char * c_str() const
const std::string & str() const
StringRefNull name() const
const char * c_str() const
bool is_contained_in(const AssetCatalogPath &other_path) const
AssetCatalogPath parent() const
AssetCatalogFilter create_catalog_filter(CatalogID active_catalog_id) const
AssetCatalog * find_catalog(CatalogID catalog_id) const
StringRefNull get_name() const
AssetCatalogPath catalog_path() const
void foreach_child(const ItemIterFn callback)
bool has_unsaved_changes() const
StringRefNull get_simple_name() const
CatalogID get_catalog_id() const
void foreach_root_item(const ItemIterFn callback)
int get_drag_type() const override
void * create_drag_data() const override
AssetCatalogDragController(AssetCatalogTreeView &tree_view, AssetCatalogTreeItem &catalog_item)
void on_drag_start() override
AssetCatalogDropController(AssetCatalogTreeView &tree_view, AssetCatalogTreeItem &catalog_item)
static bool drop_asset_catalog_into_catalog(const wmDrag &drag, AssetCatalogTreeView &tree_view, const std::optional< CatalogID > drop_catalog_id=std::nullopt)
static bool has_droppable_asset(const wmDrag &drag, const char **r_disabled_hint)
bool can_drop(const wmDrag &drag, const char **r_disabled_hint) const override
bool on_drop(struct bContext *C, const wmDrag &drag) override
::AssetLibrary & get_asset_library() const
static AssetCatalog * get_drag_catalog(const wmDrag &drag, const ::AssetLibrary &asset_library)
std::string drop_tooltip(const wmDrag &drag) const override
static bool drop_assets_into_catalog(struct bContext *C, const AssetCatalogTreeView &tree_view, const wmDrag &drag, CatalogID catalog_id, StringRefNull simple_name="")
eFileSel_Params_AssetCatalogVisibility asset_catalog_visibility
std::unique_ptr< AssetCatalogFilter > catalog_filter
bool rename(StringRefNull new_name) override
void on_activate() override
void build_context_menu(bContext &C, uiLayout &column) const override
std::unique_ptr< ui::AbstractViewItemDropController > create_drop_controller() const override
void build_row(uiLayout &row) override
bool supports_renaming() const override
AssetCatalogTreeViewItem(AssetCatalogTreeItem *catalog_item)
std::unique_ptr< ui::AbstractViewItemDragController > create_drag_controller() const override
void build_tree() override
void activate_catalog_by_id(CatalogID catalog_id)
uiButViewItem * view_item_button()
AbstractTreeView & get_tree_view() const
void set_collapsed(bool collapsed)
void set_is_active_fn(IsActiveFn fn)
void build_row(uiLayout &row) override
void add_label(uiLayout &layout, StringRefNull label_override="")
void set_on_activate_fn(ActivateFn fn)
void build_tree_view(AbstractTreeView &tree_view)
ItemT & add_tree_item(Args &&...args)
struct FileAssetCatalogFilterSettingsHandle FileAssetCatalogFilterSettingsHandle
void file_select_deselect_all(SpaceFile *sfile, uint flag)
void filelist_tag_needs_filtering(FileList *filelist)
void *(* MEM_callocN)(size_t len, const char *str)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
short asset_catalog_visibility
Universally Unique Identifier according to RFC4122.
static FT_Library library
const ListBase * WM_drag_asset_list_get(const wmDrag *drag)
wmDragAssetCatalog * WM_drag_get_asset_catalog_data(const wmDrag *drag)
void WM_main_add_notifier(unsigned int type, void *reference)