[Bf-blender-cvs] [48822086331] master: Cleanup: Separate interface & implementation for asset catalog tree-view

Julian Eisel noreply at git.blender.org
Mon Oct 4 15:29:47 CEST 2021


Commit: 48822086331c1913a4980a87ee82f14904068213
Author: Julian Eisel
Date:   Mon Oct 4 14:58:52 2021 +0200
Branches: master
https://developer.blender.org/rB48822086331c1913a4980a87ee82f14904068213

Cleanup: Separate interface & implementation for asset catalog tree-view

Should make the code a bit more organized and help getting an overview
of the interfaces more quickly.

===================================================================

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 92e4e668885..35107340cdb 100644
--- a/source/blender/editors/space_file/asset_catalog_tree_view.cc
+++ b/source/blender/editors/space_file/asset_catalog_tree_view.cc
@@ -74,6 +74,7 @@ class AssetCatalogTreeView : public ui::AbstractTreeView {
   void add_unassigned_item();
   bool is_active_catalog(CatalogID catalog_id) const;
 };
+
 /* ---------------------------------------------------------------------- */
 
 class AssetCatalogTreeViewItem : public ui::BasicTreeViewItem {
@@ -81,111 +82,19 @@ class AssetCatalogTreeViewItem : public ui::BasicTreeViewItem {
   AssetCatalogTreeItem &catalog_item_;
 
  public:
-  AssetCatalogTreeViewItem(AssetCatalogTreeItem *catalog_item)
-      : BasicTreeViewItem(catalog_item->get_name()), catalog_item_(*catalog_item)
-  {
-  }
-
-  void on_activate() override
-  {
-    const AssetCatalogTreeView &tree_view = static_cast<const AssetCatalogTreeView &>(
-        get_tree_view());
-    tree_view.params_->asset_catalog_visibility = FILE_SHOW_ASSETS_FROM_CATALOG;
-    tree_view.params_->catalog_id = catalog_item_.get_catalog_id();
-    WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr);
-  }
-
-  void build_row(uiLayout &row) override
-  {
-    ui::BasicTreeViewItem::build_row(row);
-
-    if (!is_active()) {
-      return;
-    }
-
-    PointerRNA *props;
-    const CatalogID catalog_id = catalog_item_.get_catalog_id();
-
-    props = UI_but_extra_operator_icon_add(
-        button(), "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(
-          button(), "ASSET_OT_catalog_delete", WM_OP_INVOKE_DEFAULT, ICON_X);
-      RNA_string_set(props, "catalog_id", catalog_id_str_buffer);
-    }
-  }
+  AssetCatalogTreeViewItem(AssetCatalogTreeItem *catalog_item);
 
-  bool has_droppable_item(const wmDrag &drag) const
-  {
-    const ListBase *asset_drags = WM_drag_asset_list_get(&drag);
+  void on_activate() override;
 
-    /* There needs to be at least one asset from the current file. */
-    LISTBASE_FOREACH (const wmDragAssetListItem *, asset_item, asset_drags) {
-      if (!asset_item->is_external) {
-        return true;
-      }
-    }
-    return false;
-  }
+  void build_row(uiLayout &row) override;
 
-  bool can_drop(const wmDrag &drag) const override
-  {
-    if (drag.type != WM_DRAG_ASSET_LIST) {
-      return false;
-    }
-    return has_droppable_item(drag);
-  }
+  bool has_droppable_item(const wmDrag &drag) const;
 
-  std::string drop_tooltip(const bContext & /*C*/,
+  bool can_drop(const wmDrag &drag) const override;
+  std::string drop_tooltip(const bContext &C,
                            const wmDrag &drag,
-                           const wmEvent & /*event*/) const override
-  {
-    const ListBase *asset_drags = WM_drag_asset_list_get(&drag);
-    const bool is_multiple_assets = !BLI_listbase_is_single(asset_drags);
-
-    /* Don't try to be smart by dynamically adding the 's' for the plural. Just makes translation
-     * harder, so use full literals. */
-    std::string basic_tip = is_multiple_assets ? TIP_("Move assets to catalog") :
-                                                 TIP_("Move asset to catalog");
-
-    return basic_tip + ": " + catalog_item_.get_name() + " (" +
-           catalog_item_.catalog_path().str() + ")";
-  }
-
-  bool on_drop(const wmDrag &drag) override
-  {
-    const ListBase *asset_drags = WM_drag_asset_list_get(&drag);
-    if (!asset_drags) {
-      return false;
-    }
-
-    const AssetCatalogTreeView &tree_view = static_cast<const AssetCatalogTreeView &>(
-        get_tree_view());
-
-    LISTBASE_FOREACH (wmDragAssetListItem *, asset_item, asset_drags) {
-      if (asset_item->is_external) {
-        /* Only internal assets can be modified! */
-        continue;
-      }
-      BKE_asset_metadata_catalog_id_set(asset_item->asset_data.local_id->asset_data,
-                                        catalog_item_.get_catalog_id(),
-                                        catalog_item_.get_simple_name().c_str());
-
-      /* Trigger re-run of filtering to update visible assets. */
-      filelist_tag_needs_filtering(tree_view.space_file_.files);
-      file_select_deselect_all(&tree_view.space_file_, FILE_SEL_SELECTED | FILE_SEL_HIGHLIGHTED);
-    }
-
-    return true;
-  }
+                           const wmEvent &event) const override;
+  bool on_drop(const wmDrag &drag) override;
 };
 
 /** Only reason this isn't just `BasicTreeViewItem` is to add a '+' icon for adding a root level
@@ -193,22 +102,11 @@ class AssetCatalogTreeViewItem : public ui::BasicTreeViewItem {
 class AssetCatalogTreeViewAllItem : public ui::BasicTreeViewItem {
   using BasicTreeViewItem::BasicTreeViewItem;
 
-  void build_row(uiLayout &row) override
-  {
-    ui::BasicTreeViewItem::build_row(row);
-
-    if (!is_active()) {
-      return;
-    }
-
-    PointerRNA *props;
-    props = UI_but_extra_operator_icon_add(
-        button(), "ASSET_OT_catalog_new", WM_OP_INVOKE_DEFAULT, ICON_ADD);
-    /* No parent path to use the root level. */
-    RNA_string_set(props, "parent_path", nullptr);
-  }
+  void build_row(uiLayout &row) override;
 };
 
+/* ---------------------------------------------------------------------- */
+
 AssetCatalogTreeView::AssetCatalogTreeView(::AssetLibrary *library,
                                            FileAssetSelectParams *params,
                                            SpaceFile &space_file)
@@ -283,6 +181,131 @@ bool AssetCatalogTreeView::is_active_catalog(CatalogID catalog_id) const
          (params_->catalog_id == catalog_id);
 }
 
+/* ---------------------------------------------------------------------- */
+
+AssetCatalogTreeViewItem::AssetCatalogTreeViewItem(AssetCatalogTreeItem *catalog_item)
+    : BasicTreeViewItem(catalog_item->get_name()), catalog_item_(*catalog_item)
+{
+}
+
+void AssetCatalogTreeViewItem::on_activate()
+{
+  const AssetCatalogTreeView &tree_view = static_cast<const AssetCatalogTreeView &>(
+      get_tree_view());
+  tree_view.params_->asset_catalog_visibility = FILE_SHOW_ASSETS_FROM_CATALOG;
+  tree_view.params_->catalog_id = catalog_item_.get_catalog_id();
+  WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr);
+}
+
+void AssetCatalogTreeViewItem::build_row(uiLayout &row)
+{
+  ui::BasicTreeViewItem::build_row(row);
+
+  if (!is_active()) {
+    return;
+  }
+
+  PointerRNA *props;
+  const CatalogID catalog_id = catalog_item_.get_catalog_id();
+
+  props = UI_but_extra_operator_icon_add(
+      button(), "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(
+        button(), "ASSET_OT_catalog_delete", WM_OP_INVOKE_DEFAULT, ICON_X);
+    RNA_string_set(props, "catalog_id", catalog_id_str_buffer);
+  }
+}
+
+bool AssetCatalogTreeViewItem::has_droppable_item(const wmDrag &drag) const
+{
+  const ListBase *asset_drags = WM_drag_asset_list_get(&drag);
+
+  /* There needs to be at least one asset from the current file. */
+  LISTBASE_FOREACH (const wmDragAssetListItem *, asset_item, asset_drags) {
+    if (!asset_item->is_external) {
+      return true;
+    }
+  }
+  return false;
+}
+
+bool AssetCatalogTreeViewItem::can_drop(const wmDrag &drag) const
+{
+  if (drag.type != WM_DRAG_ASSET_LIST) {
+    return false;
+  }
+  return has_droppable_item(drag);
+}
+
+std::string AssetCatalogTreeViewItem::drop_tooltip(const bContext & /*C*/,
+                                                   const wmDrag &drag,
+                                                   const wmEvent & /*event*/) const
+{
+  const ListBase *asset_drags = WM_drag_asset_list_get(&drag);
+  const bool is_multiple_assets = !BLI_listbase_is_single(asset_drags);
+
+  /* Don't try to be smart by dynamically adding the 's' for the plural. Just makes translation
+   * harder, so use full literals. */
+  std::string basic_tip = is_multiple_assets ? TIP_("Move assets to catalog") :
+                                               TIP_("Move asset to catalog");
+
+  return basic_tip + ": " + catalog_item_.get_name() + " (" + catalog_item_.catalog_path().str() +
+         ")";
+}
+
+bool AssetCatalogTreeViewItem::on_drop(const wmDrag &drag)
+{
+  const ListBase *asset_drags = WM_drag_asset_list_get(&drag);
+  if (!asset_drags) {
+    return false;
+  }
+
+  const AssetCatalogTreeView &tree_view = static_cast<const AssetCatalogTreeView &>(
+      get_tree_view());
+
+  LISTBASE_FOREACH (wmDragAssetListItem *, asset_item, asset_drags) {
+    if (asset_item->is_external) {
+      /* Only internal assets can be modified! */
+      continue;
+    }
+    BKE_asset_metadata_catalog_id_set(asset_item->asset_data.local_id->asset_data,
+                                      catalog_item_.get_catalog_id(),
+                                      catalog_item_.get_simple_name().c_str());
+
+    /* Trigger re-run of filtering to update visible assets. */
+    filelist_tag_needs_filtering(tree_view.space_file_.files);
+    file_select_deselect_all(&tree_view.space_file_, FILE_SEL_SELECTED | FILE_SEL_HIGHLIGHTED);
+  }
+
+  return true;
+}
+
+/* --------------------------------------------

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list