/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #pragma once #include #include #include #include #include #include #include #include namespace ScriptCanvasEditor { // NodePaletteItems class NodePaletteNodeUsageRootItem : public GraphCanvas::NodePaletteTreeItem { public: AZ_CLASS_ALLOCATOR(NodePaletteNodeUsageRootItem, AZ::SystemAllocator, 0); AZ_RTTI(NodePaletteNodeUsageRootItem, "{ED21874C-6955-40F0-B451-F5FF5A16CF71}", GraphCanvas::NodePaletteTreeItem); NodePaletteNodeUsageRootItem(const NodePaletteModel& nodePaletteModel); ~NodePaletteNodeUsageRootItem(); GraphCanvas::NodePaletteTreeItem* GetCategoryNode(const char* categoryPath, GraphCanvas::NodePaletteTreeItem* parentRoot = nullptr); void PruneEmptyNodes(); private: const NodePaletteModel& m_nodePaletteModel; GraphCanvas::GraphCanvasTreeCategorizer m_categorizer; }; class NodePaletteNodeUsagePaletteItem : public GraphCanvas::IconDecoratedNodePaletteTreeItem { public: AZ_CLASS_ALLOCATOR(NodePaletteNodeUsagePaletteItem, AZ::SystemAllocator, 0); AZ_RTTI(NodePaletteNodeUsagePaletteItem, "{CA8E31A8-56CA-49A2-80F2-68A1E3A9EDF6}", GraphCanvas::IconDecoratedNodePaletteTreeItem); NodePaletteNodeUsagePaletteItem(const ScriptCanvas::NodeTypeIdentifier& nodeIdentifier, AZStd::string_view displayName); ~NodePaletteNodeUsagePaletteItem(); const ScriptCanvas::NodeTypeIdentifier& GetNodeTypeIdentifier() const; private: ScriptCanvas::NodeTypeIdentifier m_nodeIdentifier; }; //// // General TreeItems class ScriptCanvasAssetNodeUsageTreeItem : public GraphCanvas::GraphCanvasTreeItem , public AZ::Data::AssetBus::Handler { public: AZ_CLASS_ALLOCATOR(ScriptCanvasAssetNodeUsageTreeItem, AZ::SystemAllocator, 0); AZ_RTTI(ScriptCanvasAssetNodeUsageTreeItem, "{1FF437D9-5159-49CD-8D80-8AC3334886E8}", GraphCanvas::GraphCanvasTreeItem); enum Column { IndexForce = -1, Name, UsageCount, OpenIcon, Count }; ScriptCanvasAssetNodeUsageTreeItem(AZStd::string_view assetName); ~ScriptCanvasAssetNodeUsageTreeItem() = default; int GetColumnCount() const override final; QVariant Data(const QModelIndex& index, int role) const override final; Qt::ItemFlags Flags(const QModelIndex& index) const override final; void SetAssetId(const AZ::Data::AssetId& assetId, AZ::Data::AssetType assetType); const AZ::Data::AssetId& GetAssetId() const; const QString& GetName() const; void SetActiveNodeType(const ScriptCanvas::NodeTypeIdentifier& nodeTypeIdentifier); int GetNodeCount() const; // AZ::Data::AssetBus::Handler void OnAssetReady(AZ::Data::Asset asset) override; void OnAssetSaved(AZ::Data::Asset asset, bool isSuccessful) override; void OnAssetReloaded(AZ::Data::Asset asset) override; //// private: void ProcessAsset(const AZ::Data::Asset& scriptCanvasAsset); QString m_name; QIcon m_icon; ScriptCanvas::NodeTypeIdentifier m_activeIdentifier; AZ::Data::AssetId m_assetId; AZ::Data::AssetType m_assetType; GraphStatisticsHelper m_statisticsHelper; }; class ScriptCanvasAssetNodeUsageTreeItemRoot : public ScriptCanvasAssetNodeUsageTreeItem , public GraphCanvas::CategorizerInterface , public AZ::Data::AssetBus::MultiHandler { public: AZ_CLASS_ALLOCATOR(ScriptCanvasAssetNodeUsageTreeItemRoot, AZ::SystemAllocator, 0); AZ_RTTI(ScriptCanvasAssetNodeUsageTreeItemRoot, "{EDCBFE97-0BF9-4AE5-8C6E-C4805E08CBFC}", ScriptCanvasAssetNodeUsageTreeItem); typedef AZStd::unordered_map< AZ::Data::AssetId, ScriptCanvasAssetNodeUsageTreeItem* > ScriptCanvasAssetMap; ScriptCanvasAssetNodeUsageTreeItemRoot(); ~ScriptCanvasAssetNodeUsageTreeItemRoot() = default; void RegisterAsset(const AZ::Data::AssetId& assetId, AZ::Data::AssetType assetType); void RemoveAsset(const AZ::Data::AssetId& assetId); ScriptCanvasAssetNodeUsageTreeItem* GetAssetItem(const AZ::Data::AssetId& assetId); // CategorizerInterface GraphCanvas::GraphCanvasTreeItem* CreateCategoryNode(AZStd::string_view categoryPath, AZStd::string_view categoryName, GraphCanvasTreeItem* parent) const override; //// const ScriptCanvasAssetMap& GetAssetTreeItems() const; private: // AZ::Data::AssetBus::MultiHandler void OnAssetReady(AZ::Data::Asset asset) override; GraphCanvas::GraphCanvasTreeCategorizer m_categorizer; ScriptCanvasAssetMap m_scriptCanvasAssetItems; }; //// }