You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/ScriptCanvas/Code/Editor/View/Widgets/StatisticsDialog/NodeUsageTreeItem.h

157 lines
5.7 KiB
C++

/*
* 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 <QIcon>
#include <GraphCanvas/Editor/EditorTypes.h>
#include <GraphCanvas/Widgets/GraphCanvasTreeCategorizer.h>
#include <GraphCanvas/Widgets/GraphCanvasTreeItem.h>
#include <GraphCanvas/Widgets/NodePalette/TreeItems/IconDecoratedNodePaletteTreeItem.h>
#include <Editor/View/Widgets/NodePalette/NodePaletteModel.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <ScriptCanvas/Components/EditorUtils.h>
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<AZ::Data::AssetData> asset) override;
void OnAssetSaved(AZ::Data::Asset<AZ::Data::AssetData> asset, bool isSuccessful) override;
void OnAssetReloaded(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
////
private:
void ProcessAsset(const AZ::Data::Asset<ScriptCanvas::ScriptCanvasAssetBase>& 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<AZ::Data::AssetData> asset) override;
GraphCanvas::GraphCanvasTreeCategorizer m_categorizer;
ScriptCanvasAssetMap m_scriptCanvasAssetItems;
};
////
}