[Bf-blender-cvs] [8f8982d57c7] master: Asset Browser: Context menu for catalogs
Julian Eisel
noreply at git.blender.org
Fri Oct 8 20:12:28 CEST 2021
Commit: 8f8982d57c7a022a4040169e19d1943da62c42f9
Author: Julian Eisel
Date: Fri Oct 8 20:09:42 2021 +0200
Branches: master
https://developer.blender.org/rB8f8982d57c7a022a4040169e19d1943da62c42f9
Asset Browser: Context menu for catalogs
The context menu is a standard way to expose operations of the clicked
item to the user. They expect it to be there, and we can make use of it
as a place to put more advanced operations in.
The menu contains:
* New Catalog
* Delete Catalog
* Rename
Also removes the 'x' icon to delete a catalog from the right side of a
row. This was just placed there temporarily until the context menu is
there. It's too easy to accidentally delete catalogs with this.
===================================================================
M source/blender/editors/space_file/asset_catalog_tree_view.cc
===================================================================
diff --git a/source/blender/editors/space_file/asset_catalog_tree_view.cc b/source/blender/editors/space_file/asset_catalog_tree_view.cc
index 28d64cfca60..3407be9d8cd 100644
--- a/source/blender/editors/space_file/asset_catalog_tree_view.cc
+++ b/source/blender/editors/space_file/asset_catalog_tree_view.cc
@@ -94,6 +94,7 @@ class AssetCatalogTreeViewItem : public ui::BasicTreeViewItem {
void on_activate() override;
void build_row(uiLayout &row) override;
+ void build_context_menu(bContext &C, uiLayout &column) const override;
bool can_drop(const wmDrag &drag) const override;
std::string drop_tooltip(const bContext &C,
@@ -225,23 +226,47 @@ void AssetCatalogTreeViewItem::build_row(uiLayout &row)
uiButTreeRow *tree_row_but = tree_row_button();
PointerRNA *props;
- const CatalogID catalog_id = catalog_item_.get_catalog_id();
props = UI_but_extra_operator_icon_add(
(uiBut *)tree_row_but, "ASSET_OT_catalog_new", WM_OP_INVOKE_DEFAULT, ICON_ADD);
RNA_string_set(props, "parent_path", catalog_item_.catalog_path().c_str());
+}
- /* Tree items without a catalog ID represent components of catalog paths that are not
- * associated with an actual catalog. They exist merely by the presence of a child catalog, and
- * thus cannot be deleted themselves. */
- if (!BLI_uuid_is_nil(catalog_id)) {
- char catalog_id_str_buffer[UUID_STRING_LEN] = "";
- BLI_uuid_format(catalog_id_str_buffer, catalog_id);
-
- props = UI_but_extra_operator_icon_add(
- (uiBut *)tree_row_but, "ASSET_OT_catalog_delete", WM_OP_INVOKE_DEFAULT, ICON_X);
- RNA_string_set(props, "catalog_id", catalog_id_str_buffer);
+void AssetCatalogTreeViewItem::build_context_menu(bContext &C, uiLayout &column) const
+{
+ PointerRNA props;
+
+ uiItemFullO(&column,
+ "ASSET_OT_catalog_new",
+ "New Catalog",
+ ICON_NONE,
+ nullptr,
+ WM_OP_INVOKE_DEFAULT,
+ 0,
+ &props);
+ RNA_string_set(&props, "parent_path", catalog_item_.catalog_path().c_str());
+
+ char catalog_id_str_buffer[UUID_STRING_LEN] = "";
+ BLI_uuid_format(catalog_id_str_buffer, catalog_item_.get_catalog_id());
+ uiItemFullO(&column,
+ "ASSET_OT_catalog_delete",
+ "Delete Catalog",
+ ICON_NONE,
+ nullptr,
+ WM_OP_INVOKE_DEFAULT,
+ 0,
+ &props);
+ RNA_string_set(&props, "catalog_id", catalog_id_str_buffer);
+ uiItemO(&column, "Rename", ICON_NONE, "UI_OT_tree_view_item_rename");
+
+ /* Doesn't actually exist right now, but could be defined in Python. Reason that this isn't done
+ * in Python yet is that catalogs are not exposed in BPY, and we'd somehow pass the clicked on
+ * catalog to the menu draw callback (via context probably).*/
+ MenuType *mt = WM_menutype_find("ASSETBROWSER_MT_catalog_context_menu", true);
+ if (!mt) {
+ return;
}
+ UI_menutype_draw(&C, mt, &column);
}
bool AssetCatalogTreeViewItem::has_droppable_item(const wmDrag &drag)
More information about the Bf-blender-cvs
mailing list