NodeUsageTreeItem.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <QIcon>
  10. #include <GraphCanvas/Editor/EditorTypes.h>
  11. #include <GraphCanvas/Widgets/GraphCanvasTreeCategorizer.h>
  12. #include <GraphCanvas/Widgets/GraphCanvasTreeItem.h>
  13. #include <GraphCanvas/Widgets/NodePalette/TreeItems/IconDecoratedNodePaletteTreeItem.h>
  14. #include <Editor/View/Widgets/NodePalette/NodePaletteModel.h>
  15. #include <ScriptCanvas/Components/EditorUtils.h>
  16. namespace ScriptCanvasEditor
  17. {
  18. // NodePaletteItems
  19. class NodePaletteNodeUsageRootItem
  20. : public GraphCanvas::NodePaletteTreeItem
  21. {
  22. public:
  23. AZ_CLASS_ALLOCATOR(NodePaletteNodeUsageRootItem, AZ::SystemAllocator);
  24. AZ_RTTI(NodePaletteNodeUsageRootItem, "{ED21874C-6955-40F0-B451-F5FF5A16CF71}", GraphCanvas::NodePaletteTreeItem);
  25. NodePaletteNodeUsageRootItem(const NodePaletteModel& nodePaletteModel);
  26. ~NodePaletteNodeUsageRootItem();
  27. GraphCanvas::NodePaletteTreeItem* GetCategoryNode(const char* categoryPath, GraphCanvas::NodePaletteTreeItem* parentRoot = nullptr);
  28. void PruneEmptyNodes();
  29. private:
  30. GraphCanvas::GraphCanvasTreeCategorizer m_categorizer;
  31. };
  32. class NodePaletteNodeUsagePaletteItem
  33. : public GraphCanvas::IconDecoratedNodePaletteTreeItem
  34. {
  35. public:
  36. AZ_CLASS_ALLOCATOR(NodePaletteNodeUsagePaletteItem, AZ::SystemAllocator);
  37. AZ_RTTI(NodePaletteNodeUsagePaletteItem, "{CA8E31A8-56CA-49A2-80F2-68A1E3A9EDF6}", GraphCanvas::IconDecoratedNodePaletteTreeItem);
  38. NodePaletteNodeUsagePaletteItem(const ScriptCanvas::NodeTypeIdentifier& nodeIdentifier, AZStd::string_view displayName);
  39. ~NodePaletteNodeUsagePaletteItem();
  40. const ScriptCanvas::NodeTypeIdentifier& GetNodeTypeIdentifier() const;
  41. private:
  42. ScriptCanvas::NodeTypeIdentifier m_nodeIdentifier;
  43. };
  44. ////
  45. // General TreeItems
  46. class ScriptCanvasAssetNodeUsageTreeItem
  47. : public GraphCanvas::GraphCanvasTreeItem
  48. , public AZ::Data::AssetBus::Handler
  49. {
  50. public:
  51. AZ_CLASS_ALLOCATOR(ScriptCanvasAssetNodeUsageTreeItem, AZ::SystemAllocator);
  52. AZ_RTTI(ScriptCanvasAssetNodeUsageTreeItem, "{1FF437D9-5159-49CD-8D80-8AC3334886E8}", GraphCanvas::GraphCanvasTreeItem);
  53. enum Column
  54. {
  55. IndexForce = -1,
  56. Name,
  57. UsageCount,
  58. OpenIcon,
  59. Count
  60. };
  61. ScriptCanvasAssetNodeUsageTreeItem(AZStd::string_view assetName);
  62. ~ScriptCanvasAssetNodeUsageTreeItem() = default;
  63. int GetColumnCount() const override final;
  64. QVariant Data(const QModelIndex& index, int role) const override final;
  65. Qt::ItemFlags Flags(const QModelIndex& index) const override final;
  66. void SetAssetId(const AZ::Data::AssetId& assetId, AZ::Data::AssetType assetType);
  67. const AZ::Data::AssetId& GetAssetId() const;
  68. const QString& GetName() const;
  69. void SetActiveNodeType(const ScriptCanvas::NodeTypeIdentifier& nodeTypeIdentifier);
  70. int GetNodeCount() const;
  71. private:
  72. // AZ::Data::AssetBus::Handler
  73. /*
  74. void OnAssetReady(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
  75. void OnAssetSaved(AZ::Data::Asset<AZ::Data::AssetData> asset, bool isSuccessful) override;
  76. void OnAssetReloaded(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
  77. */
  78. ////
  79. // void ProcessAsset(const AZ::Data::Asset<LegacyScriptCanvasBaseAsset>& scriptCanvasAsset);
  80. QString m_name;
  81. QIcon m_icon;
  82. ScriptCanvas::NodeTypeIdentifier m_activeIdentifier;
  83. AZ::Data::AssetId m_assetId;
  84. AZ::Data::AssetType m_assetType;
  85. GraphStatisticsHelper m_statisticsHelper;
  86. };
  87. class ScriptCanvasAssetNodeUsageTreeItemRoot
  88. : public ScriptCanvasAssetNodeUsageTreeItem
  89. , public GraphCanvas::CategorizerInterface
  90. , public AZ::Data::AssetBus::MultiHandler
  91. {
  92. public:
  93. AZ_CLASS_ALLOCATOR(ScriptCanvasAssetNodeUsageTreeItemRoot, AZ::SystemAllocator);
  94. AZ_RTTI(ScriptCanvasAssetNodeUsageTreeItemRoot, "{EDCBFE97-0BF9-4AE5-8C6E-C4805E08CBFC}", ScriptCanvasAssetNodeUsageTreeItem);
  95. typedef AZStd::unordered_map< AZ::Data::AssetId, ScriptCanvasAssetNodeUsageTreeItem* > ScriptCanvasAssetMap;
  96. ScriptCanvasAssetNodeUsageTreeItemRoot();
  97. ~ScriptCanvasAssetNodeUsageTreeItemRoot() = default;
  98. void RegisterAsset(const AZ::Data::AssetId& assetId, AZ::Data::AssetType assetType);
  99. void RemoveAsset(const AZ::Data::AssetId& assetId);
  100. ScriptCanvasAssetNodeUsageTreeItem* GetAssetItem(const AZ::Data::AssetId& assetId);
  101. // CategorizerInterface
  102. GraphCanvas::GraphCanvasTreeItem* CreateCategoryNode(AZStd::string_view categoryPath, AZStd::string_view categoryName, GraphCanvasTreeItem* parent) const override;
  103. ////
  104. const ScriptCanvasAssetMap& GetAssetTreeItems() const;
  105. private:
  106. // AZ::Data::AssetBus::MultiHandler
  107. void OnAssetReady(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
  108. GraphCanvas::GraphCanvasTreeCategorizer m_categorizer;
  109. ScriptCanvasAssetMap m_scriptCanvasAssetItems;
  110. };
  111. ////
  112. }