37#include <fmt/format.h>
70 void add_unassigned_item();
71 bool is_active_catalog(
CatalogID catalog_id)
const;
115 bool can_drop(
const wmDrag &drag,
const char **r_disabled_hint)
const override;
125 const char **r_disabled_hint);
137 const std::optional<CatalogID> drop_catalog_id = std::nullopt);
140 std::string drop_tooltip_asset_list(
const wmDrag &drag)
const;
141 std::string drop_tooltip_asset_catalog(
const wmDrag &drag)
const;
149 using BasicTreeViewItem::BasicTreeViewItem;
151 void build_row(
uiLayout &row)
override;
156 bool can_drop(
const wmDrag &drag,
const char **r_disabled_hint)
const override;
157 std::string drop_tooltip(
const ui::DragInfo &drag_info)
const override;
161 std::unique_ptr<ui::TreeViewItemDropTarget> create_drop_target()
override;
165 using BasicTreeViewItem::BasicTreeViewItem;
170 bool can_drop(
const wmDrag &drag,
const char **r_disabled_hint)
const override;
171 std::string drop_tooltip(
const ui::DragInfo &drag_info)
const override;
175 std::unique_ptr<ui::TreeViewItemDropTarget> create_drop_target()
override;
183 : asset_library_(library), params_(
params), space_file_(space_file)
189 catalog_tree_ =
nullptr;
201 build_catalog_items_recursive(all_item, item);
205 add_unassigned_item();
214 [
this, &catalog]() {
return is_active_catalog(catalog.
get_catalog_id()); });
217 build_catalog_items_recursive(view_item, child);
222AssetCatalogTreeViewAllItem &AssetCatalogTreeView::add_all_item()
231 item.set_is_active_fn(
236void AssetCatalogTreeView::add_unassigned_item()
241 IFACE_(
"Unassigned"), ICON_FILE_HIDDEN);
247 item.set_is_active_fn(
258bool AssetCatalogTreeView::is_active_catalog(
CatalogID catalog_id)
const
267 : BasicTreeViewItem(catalog_item.get_name()), catalog_item_(catalog_item)
299 "ASSET_OT_catalog_new",
309 "ASSET_OT_catalog_delete",
317 uiItemO(&column,
IFACE_(
"Rename"), ICON_NONE,
"UI_OT_view_item_rename");
339 BasicTreeViewItem::rename(C, new_name);
349 return std::make_unique<AssetCatalogDropTarget>(*
this, catalog_item_);
355 return std::make_unique<AssetCatalogDragController>(
363 : ui::TreeViewItemDropTarget(item), catalog_item_(catalog_item)
380 *r_disabled_hint =
RPT_(
"Catalog cannot be dropped into itself");
384 *r_disabled_hint =
RPT_(
"Catalog is already placed inside this catalog");
399 return this->drop_tooltip_asset_catalog(drag_info.
drag_data);
401 return this->drop_tooltip_asset_list(drag_info.
drag_data);
404std::string AssetCatalogDropTarget::drop_tooltip_asset_catalog(
const wmDrag &drag)
const
413std::string AssetCatalogDropTarget::drop_tooltip_asset_list(
const wmDrag &drag)
const
422 std::string basic_tip = is_multiple_assets ?
TIP_(
"Move assets to catalog") :
423 TIP_(
"Move asset to catalog");
425 basic_tip +=
": " + catalog_item_.
get_name();
453 const std::optional<CatalogID> drop_catalog_id)
476 bool did_update =
false;
478 if (asset_item->is_external) {
485 asset_item->asset_data.local_id->asset_data, catalog_id, simple_name.
c_str());
516 *r_disabled_hint =
nullptr;
519 if (!asset_item->is_external) {
524 *r_disabled_hint =
RPT_(
"Only assets from this current file can be moved between catalogs");
529 const char **r_disabled_hint)
532 *r_disabled_hint =
RPT_(
"Catalogs cannot be edited in this asset library");
547 : ui::AbstractViewItemDragController(tree_view), catalog_item_(catalog_item)
572void AssetCatalogTreeViewAllItem::build_row(
uiLayout &row)
579 "ASSET_OT_catalogs_save",
584 "ASSET_OT_catalog_new",
591std::unique_ptr<ui::TreeViewItemDropTarget> AssetCatalogTreeViewAllItem::create_drop_target()
593 return std::make_unique<AssetCatalogTreeViewAllItem::DropTarget>(*
this);
596AssetCatalogTreeViewAllItem::DropTarget::DropTarget(AssetCatalogTreeViewAllItem &item)
597 : ui::TreeViewItemDropTarget(item)
601bool AssetCatalogTreeViewAllItem::DropTarget::can_drop(
const wmDrag &drag,
602 const char **r_disabled_hint)
const
614 *r_disabled_hint =
RPT_(
"Catalog is already placed at the highest level");
621std::string AssetCatalogTreeViewAllItem::DropTarget::drop_tooltip(
626 drag_info.
drag_data, *this->get_view<AssetCatalogTreeView>().asset_library_);
628 return fmt::format(
TIP_(
"Move catalog {} to the top level of the tree"),
632bool AssetCatalogTreeViewAllItem::DropTarget::on_drop(
bContext * ,
638 this->get_view<AssetCatalogTreeView>(),
645std::unique_ptr<ui::TreeViewItemDropTarget> AssetCatalogTreeViewUnassignedItem::
648 return std::make_unique<AssetCatalogTreeViewUnassignedItem::DropTarget>(*
this);
651AssetCatalogTreeViewUnassignedItem::DropTarget::DropTarget(
652 AssetCatalogTreeViewUnassignedItem &item)
653 : ui::TreeViewItemDropTarget(item)
657bool AssetCatalogTreeViewUnassignedItem::DropTarget::can_drop(
const wmDrag &drag,
658 const char **r_disabled_hint)
const
666std::string AssetCatalogTreeViewUnassignedItem::DropTarget::drop_tooltip(
672 return is_multiple_assets ?
TIP_(
"Move assets out of any catalog") :
673 TIP_(
"Move asset out of any catalog");
676bool AssetCatalogTreeViewUnassignedItem::DropTarget::on_drop(
bContext *C,
696 return MEM_new<AssetCatalogFilterSettings>(__func__);
701 MEM_delete(*filter_settings);
702 *filter_settings =
nullptr;
708 const ::bUUID &catalog_id)
710 bool needs_update =
false;
733 filter_settings->
catalog_filter = std::make_unique<AssetCatalogFilter>(
768 "asset catalog tree view",
769 std::make_unique<ed::asset_browser::AssetCatalogTreeView>(
770 asset_library,
params, *space_file));
void BKE_asset_metadata_catalog_id_set(AssetMetaData *asset_data, bUUID catalog_id, const char *catalog_simple_name)
#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)
eFileSel_Params_AssetCatalogVisibility
@ FILE_SHOW_ASSETS_ALL_CATALOGS
@ FILE_SHOW_ASSETS_WITHOUT_CATALOG
@ FILE_SHOW_ASSETS_FROM_CATALOG
void ED_undo_push(bContext *C, const char *str)
blender::ui::AbstractGridView * UI_block_add_view(uiBlock &block, blender::StringRef idname, std::unique_ptr< blender::ui::AbstractGridView > grid_view)
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, IDProperty *properties, wmOperatorCallContext context, eUI_Item_Flag flag, PointerRNA *r_opptr)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
PointerRNA * UI_but_extra_operator_icon_add(uiBut *but, const char *opname, wmOperatorCallContext opcontext, int icon)
void UI_menutype_draw(bContext *C, MenuType *mt, uiLayout *layout)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
void UI_block_layout_set_current(uiBlock *block, uiLayout *layout)
#define ND_SPACE_ASSET_PARAMS
#define ND_ASSET_CATALOGS
#define ND_SPACE_FILE_LIST
constexpr const char * c_str() const
AssetCatalogPath parent() const
const std::string & str() const
const char * c_str() const
bool is_contained_in(const AssetCatalogPath &other_path) const
StringRefNull name() const
AssetCatalogFilter create_catalog_filter(CatalogID active_catalog_id) const
AssetCatalog * find_catalog(CatalogID catalog_id) const
const AssetCatalogTree & catalog_tree()
void foreach_child(ItemIterFn callback) const
AssetCatalogPath catalog_path() const
CatalogID get_catalog_id() const
StringRefNull get_simple_name() const
StringRefNull get_name() const
bool has_unsaved_changes() const
void foreach_root_item(ItemIterFn callback) const
AssetCatalogService & catalog_service() const
void * create_drag_data() const override
eWM_DragDataType get_drag_type() const override
AssetCatalogDragController(AssetCatalogTreeView &tree_view, const AssetCatalogTreeItem &catalog_item)
void on_drag_start() override
bool can_drop(const wmDrag &drag, const char **r_disabled_hint) const override
static bool drop_asset_catalog_into_catalog(const wmDrag &drag, AssetCatalogTreeView &tree_view, const std::optional< CatalogID > drop_catalog_id=std::nullopt)
static AssetCatalog * get_drag_catalog(const wmDrag &drag, const asset_system::AssetLibrary &asset_library)
static bool has_droppable_asset(const wmDrag &drag, const char **r_disabled_hint)
static bool drop_assets_into_catalog(bContext *C, const AssetCatalogTreeView &tree_view, const wmDrag &drag, CatalogID catalog_id, StringRefNull simple_name="")
std::string drop_tooltip(const ui::DragInfo &drag_info) const override
static bool can_modify_catalogs(const asset_system::AssetLibrary &asset_library, const char **r_disabled_hint)
bool on_drop(bContext *C, const ui::DragInfo &drag_info) const override
AssetCatalogDropTarget(AssetCatalogTreeViewItem &item, const AssetCatalogTreeItem &catalog_item)
asset_system::AssetLibrary & get_asset_library() const
eFileSel_Params_AssetCatalogVisibility asset_catalog_visibility
std::unique_ptr< AssetCatalogFilter > catalog_filter
void on_activate(bContext &C) override
void build_context_menu(bContext &C, uiLayout &column) const override
AssetCatalogTreeViewItem(const AssetCatalogTreeItem &catalog_item)
void build_row(uiLayout &row) override
bool supports_renaming() const override
bool rename(const bContext &C, StringRefNull new_name) override
std::unique_ptr< ui::AbstractViewItemDragController > create_drag_controller() const override
std::unique_ptr< ui::TreeViewItemDropTarget > create_drop_target() override
friend class AssetCatalogTreeViewAllItem
void build_tree() override
void activate_catalog_by_id(CatalogID catalog_id)
AssetCatalogTreeView(asset_system::AssetLibrary *library, FileAssetSelectParams *params, SpaceFile &space_file)
AbstractTreeView & get_tree_view() const
void uncollapse_by_default()
ViewType & get_view() const
AbstractView & get_view() const
uiButViewItem * view_item_button() const
void set_context_menu_title(const std::string &title)
void build_row(uiLayout &row) override
void add_label(uiLayout &layout, StringRefNull label_override="")
void set_is_active_fn(IsActiveFn is_active_fn)
static void build_tree_view(AbstractTreeView &tree_view, uiLayout &layout, std::optional< StringRef > search_string={}, bool add_box=true)
ItemT & add_tree_item(Args &&...args)
ViewType & get_view() const
void file_select_deselect_all(SpaceFile *sfile, eDirEntry_SelectFlag flag)
void filelist_tag_needs_filtering(FileList *filelist)
void *(* MEM_callocN)(size_t len, const char *str)
void file_ensure_updated_catalog_filter_data(AssetCatalogFilterSettings *filter_settings, const asset_system::AssetLibrary *asset_library)
AssetCatalogFilterSettings * file_create_asset_catalog_filter_settings()
bool file_is_asset_visible_in_catalog_filter_settings(const AssetCatalogFilterSettings *filter_settings, const AssetMetaData *asset_data)
void file_delete_asset_catalog_filter_settings(AssetCatalogFilterSettings **filter_settings)
void file_create_asset_catalog_tree_view_in_layout(asset_system::AssetLibrary *asset_library, uiLayout *layout, SpaceFile *space_file, FileAssetSelectParams *params)
bool file_set_asset_catalog_filter_settings(AssetCatalogFilterSettings *filter_settings, eFileSel_Params_AssetCatalogVisibility catalog_visibility, const ::bUUID &catalog_id)
bool catalogs_read_only(const asset_system::AssetLibrary &library)
void catalog_move(asset_system::AssetLibrary *library, asset_system::CatalogID src_catalog_id, std::optional< asset_system::CatalogID > dst_parent_catalog_id=std::nullopt)
void catalog_rename(asset_system::AssetLibrary *library, asset_system::CatalogID catalog_id, StringRefNull new_name)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
short asset_catalog_visibility
Universally Unique Identifier according to RFC4122.
wmDragAssetCatalog * WM_drag_get_asset_catalog_data(const wmDrag *drag)
const ListBase * WM_drag_asset_list_get(const wmDrag *drag)
void WM_main_add_notifier(uint type, void *reference)