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/Include/ScriptCanvas/Bus/RequestBus.h

265 lines
9.4 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/EBus/EBus.h>
#include <AzCore/Component/EntityId.h>
#include <AzCore/Component/Entity.h>
#include <AzCore/Asset/AssetCommon.h>
#include <AzCore/Outcome/Outcome.h>
#include <AzCore/Math/Vector2.h>
#include <GraphCanvas/Types/Types.h>
#include <ScriptCanvas/Bus/ScriptCanvasBus.h>
#include <ScriptCanvas/Bus/NodeIdPair.h>
#include <ScriptCanvas/Data/Data.h>
class QLineEdit;
class QPushButton;
class QTableView;
class QToolButton;
namespace ScriptCanvas { class Slot; }
namespace GraphCanvas
{
struct Endpoint;
class GraphCanvasMimeEvent;
class GraphCanvasTreeItem;
class NodePaletteDockWidget;
}
namespace ScriptCanvas
{
class ScriptCanvasAssetBase;
}
namespace ScriptCanvasEditor
{
struct CategoryInformation;
struct NodePaletteModelInformation;
namespace Widget
{
struct GraphTabMetadata;
}
namespace TypeDefs
{
typedef AZStd::pair<AZ::EntityId, AZ::ComponentId> EntityComponentId;
}
class GeneralRequests
: public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
//! Opens an existing graph and returns the tab index in which it was open in.
//! \param File AssetId
//! \return index of open tab if the asset was able to be open successfully or error message of why the open failed
virtual AZ::Outcome<int, AZStd::string> OpenScriptCanvasAsset(AZ::Data::AssetId scriptCanvasAssetId, int tabIndex = -1) = 0;
virtual AZ::Outcome<int, AZStd::string> OpenScriptCanvasAssetId(const AZ::Data::AssetId& scriptCanvasAsset) = 0;
virtual int CloseScriptCanvasAsset(const AZ::Data::AssetId&) = 0;
virtual bool CreateScriptCanvasAssetFor(const TypeDefs::EntityComponentId& requestingComponent) = 0;
virtual bool IsScriptCanvasAssetOpen(const AZ::Data::AssetId& assetId) const = 0;
virtual void OnChangeActiveGraphTab(AZ::Data::AssetId) {}
virtual void CreateNewRuntimeAsset() = 0;
virtual ScriptCanvas::ScriptCanvasId GetActiveScriptCanvasId() const
{
return ScriptCanvas::ScriptCanvasId();
}
virtual GraphCanvas::GraphId GetActiveGraphCanvasGraphId() const
{
return GraphCanvas::GraphId();
}
virtual GraphCanvas::GraphId GetGraphCanvasGraphId([[maybe_unused]] const ScriptCanvas::ScriptCanvasId& scriptCanvasEntityId) const
{
return GraphCanvas::GraphId();
}
virtual ScriptCanvas::ScriptCanvasId GetScriptCanvasId([[maybe_unused]] const GraphCanvas::GraphId& graphCanvasSceneId) const
{
return ScriptCanvas::ScriptCanvasId();
}
virtual GraphCanvas::GraphId FindGraphCanvasGraphIdByAssetId([[maybe_unused]] const AZ::Data::AssetId& assetId) const
{
return GraphCanvas::GraphId();
}
virtual ScriptCanvas::ScriptCanvasId FindScriptCanvasIdByAssetId([[maybe_unused]] const AZ::Data::AssetId& assetId) const
{
return ScriptCanvas::ScriptCanvasId();
}
virtual bool IsInUndoRedo(const AZ::EntityId& graphCanvasGraphId) const = 0;
virtual bool IsScriptCanvasInUndoRedo(const ScriptCanvas::ScriptCanvasId& scriptCanvasId) const = 0;
virtual bool IsActiveGraphInUndoRedo() const = 0;
virtual void UpdateName(const AZ::EntityId& /*graphId*/, const AZStd::string& /*name*/) {}
virtual void DeleteNodes(const AZ::EntityId& /*sceneId*/, const AZStd::vector<AZ::EntityId>& /*nodes*/){}
virtual void DeleteConnections(const AZ::EntityId& /*sceneId*/, const AZStd::vector<AZ::EntityId>& /*connections*/){}
virtual void DisconnectEndpoints(const AZ::EntityId& /*sceneId*/, const AZStd::vector<GraphCanvas::Endpoint>& /*endpoints*/) {}
virtual void PostUndoPoint(ScriptCanvas::ScriptCanvasId) = 0;
virtual void SignalSceneDirty(AZ::Data::AssetId) = 0;
// Increment the value of the ignore undo point tracker
virtual void PushPreventUndoStateUpdate() = 0;
// Decrement the value of the ignore undo point tracker
virtual void PopPreventUndoStateUpdate() = 0;
// Sets the value of the ignore undo point tracker to 0.
// Therefore allowing undo points to be posted
virtual void ClearPreventUndoStateUpdate() = 0;
virtual void TriggerUndo() = 0;
virtual void TriggerRedo() = 0;
virtual const CategoryInformation* FindNodePaletteCategoryInformation(AZStd::string_view categoryPath) const = 0;
virtual const NodePaletteModelInformation* FindNodePaletteModelInformation(const ScriptCanvas::NodeTypeIdentifier& nodeType) const = 0;
};
using GeneralRequestBus = AZ::EBus<GeneralRequests>;
class GeneralEditorNotifications
: public AZ::EBusTraits
{
public:
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = ScriptCanvas::ScriptCanvasId;
virtual void OnUndoRedoBegin() {}
virtual void OnUndoRedoEnd() {}
};
using GeneralEditorNotificationBus = AZ::EBus<GeneralEditorNotifications>;
class GeneralAssetNotifications
: public AZ::EBusTraits
{
public:
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = AZ::Data::AssetId;
virtual void OnAssetVisualized() {};
virtual void OnAssetUnloaded() {};
};
using GeneralAssetNotificationBus = AZ::EBus<GeneralAssetNotifications>;
class NodeCreationNotifications : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = ScriptCanvas::ScriptCanvasId;
virtual void OnGraphCanvasNodeCreated(const AZ::EntityId& nodeId) = 0;
};
using NodeCreationNotificationBus = AZ::EBus<NodeCreationNotifications>;
class VariablePaletteRequests : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual void RegisterVariableType(const ScriptCanvas::Data::Type& variabletype) = 0;
virtual bool IsValidVariableType(const ScriptCanvas::Data::Type& variableType) const = 0;
struct SlotSetup
{
AZStd::string m_name;
AZ::Uuid m_type = AZ::Uuid::CreateNull();
};
virtual bool ShowSlotTypeSelector(ScriptCanvas::Slot* slot, const QPoint& scenePosition, SlotSetup&) = 0;
};
using VariablePaletteRequestBus = AZ::EBus<VariablePaletteRequests>;
class VariableAutomationRequests : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual AZStd::vector< ScriptCanvas::Data::Type > GetPrimitiveTypes() const = 0;
virtual AZStd::vector< ScriptCanvas::Data::Type > GetBehaviorContextObjectTypes() const = 0;
virtual AZStd::vector< ScriptCanvas::Data::Type > GetMapTypes() const = 0;
virtual AZStd::vector< ScriptCanvas::Data::Type > GetArrayTypes() const = 0;
AZStd::vector< ScriptCanvas::Data::Type > GetVariableTypes() const
{
AZStd::vector< ScriptCanvas::Data::Type > dataTypes = GetPrimitiveTypes();
auto workingTypes = GetBehaviorContextObjectTypes();
dataTypes.insert(dataTypes.begin(), workingTypes.begin(), workingTypes.end());
workingTypes.clear();
workingTypes = GetMapTypes();
dataTypes.insert(dataTypes.begin(), workingTypes.begin(), workingTypes.end());
workingTypes.clear();
workingTypes = GetArrayTypes();
dataTypes.insert(dataTypes.begin(), workingTypes.begin(), workingTypes.end());
workingTypes.clear();
return dataTypes;
}
virtual bool IsShowingVariablePalette() const = 0;
virtual bool IsShowingGraphVariables() const = 0;
virtual QPushButton* GetCreateVariableButton() const = 0;
virtual QTableView* GetGraphPaletteTableView() const = 0;
virtual QTableView* GetVariablePaletteTableView() const = 0;
virtual QLineEdit* GetVariablePaletteFilter() const = 0;
virtual QLineEdit* GetGraphVariablesFilter() const = 0;
};
using VariableAutomationRequestBus = AZ::EBus<VariableAutomationRequests>;
class AutomationRequests : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual NodeIdPair ProcessCreateNodeMimeEvent(GraphCanvas::GraphCanvasMimeEvent* mimeEvent, const AZ::EntityId& graphCanvasGraphId, AZ::Vector2 nodeCreationPos) = 0;
virtual const GraphCanvas::GraphCanvasTreeItem* GetNodePaletteRoot() const = 0;
virtual void SignalAutomationBegin() = 0;
virtual void SignalAutomationEnd() = 0;
virtual void ForceCloseActiveAsset() = 0;
};
using AutomationRequestBus = AZ::EBus<AutomationRequests>;
}