208 lines
6.4 KiB
C++
208 lines
6.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "Internationalization/Text.h"
|
|
#include "MetasoundFrontendController.h"
|
|
#include "MetasoundFrontendDocument.h"
|
|
#include "MetasoundFrontendDocumentAccessPtr.h"
|
|
#include "Misc/Guid.h"
|
|
|
|
namespace Metasound
|
|
{
|
|
namespace Frontend
|
|
{
|
|
/** FBaseInputController provides common functionality for multiple derived
|
|
* input controllers.
|
|
*/
|
|
class FBaseInputController : public IInputController
|
|
{
|
|
using FRegistry = FMetasoundFrontendRegistryContainer;
|
|
public:
|
|
|
|
struct FInitParams
|
|
{
|
|
FGuid ID;
|
|
FConstVertexAccessPtr NodeVertexPtr;
|
|
FConstClassInputAccessPtr ClassInputPtr;
|
|
FGraphAccessPtr GraphPtr;
|
|
FNodeHandle OwningNode;
|
|
};
|
|
|
|
/** Construct the input controller base. */
|
|
FBaseInputController(const FInitParams& InParams);
|
|
|
|
virtual ~FBaseInputController() = default;
|
|
|
|
virtual bool IsValid() const override;
|
|
|
|
virtual FGuid GetID() const override;
|
|
virtual const FName& GetDataType() const override;
|
|
virtual const FVertexName& GetName() const override;
|
|
virtual EMetasoundFrontendVertexAccessType GetVertexAccessType() const override;
|
|
virtual bool ClearLiteral() override;
|
|
virtual const FMetasoundFrontendLiteral* GetLiteral() const override;
|
|
virtual void SetLiteral(const FMetasoundFrontendLiteral& InLiteral) override;
|
|
|
|
virtual const FMetasoundFrontendLiteral* GetClassDefaultLiteral() const override;
|
|
|
|
// This only exists to allow for transform fix-ups to easily cleanup input/output
|
|
// vertex names & should not be used for typical edit or runtime callsites.
|
|
virtual void SetName(const FVertexName& InName) override { checkNoEntry(); }
|
|
|
|
#if WITH_EDITOR
|
|
virtual FText GetDisplayName() const override;
|
|
virtual const FText& GetTooltip() const override;
|
|
|
|
// Input metadata
|
|
virtual const FMetasoundFrontendVertexMetadata& GetMetadata() const override;
|
|
#endif // WITH_EDITOR
|
|
|
|
// Owning node info
|
|
virtual FGuid GetOwningNodeID() const override;
|
|
virtual FNodeHandle GetOwningNode() override;
|
|
virtual FConstNodeHandle GetOwningNode() const override;
|
|
|
|
// Connection info
|
|
virtual bool IsConnectionUserModifiable() const override;
|
|
virtual bool IsConnected() const override;
|
|
virtual FOutputHandle GetConnectedOutput() override;
|
|
virtual FConstOutputHandle GetConnectedOutput() const override;
|
|
|
|
virtual FConnectability CanConnectTo(const IOutputController& InController) const override;
|
|
virtual bool Connect(IOutputController& InController) override;
|
|
|
|
// Connection controls.
|
|
virtual bool ConnectWithConverterNode(IOutputController& InController, const FConverterNodeInfo& InNodeClassName) override;
|
|
|
|
virtual bool Disconnect(IOutputController& InController) override;
|
|
virtual bool Disconnect() override;
|
|
|
|
virtual void ClearConnectedObjectLiterals() override;
|
|
|
|
protected:
|
|
|
|
|
|
virtual FDocumentAccess ShareAccess() override;
|
|
virtual FConstDocumentAccess ShareAccess() const override;
|
|
|
|
const FMetasoundFrontendEdge* FindEdge() const;
|
|
FMetasoundFrontendEdge* FindEdge();
|
|
|
|
FGuid ID;
|
|
FConstVertexAccessPtr NodeVertexPtr;
|
|
FConstClassInputAccessPtr ClassInputPtr;
|
|
FGraphAccessPtr GraphPtr;
|
|
FNodeHandle OwningNode;
|
|
};
|
|
|
|
/** FOutputNodeInputController represents the input vertex of an output
|
|
* node.
|
|
*
|
|
* FOutputNodeInputController is largely to represent outputs exposed from
|
|
* a graph.
|
|
*/
|
|
class FOutputNodeInputController : public FBaseInputController
|
|
{
|
|
using FRegistry = FMetasoundFrontendRegistryContainer;
|
|
public:
|
|
struct FInitParams
|
|
{
|
|
FGuid ID;
|
|
FConstVertexAccessPtr NodeVertexPtr;
|
|
FConstClassInputAccessPtr ClassInputPtr;
|
|
FConstClassOutputAccessPtr OwningGraphClassOutputPtr;
|
|
FGraphAccessPtr GraphPtr;
|
|
FNodeHandle OwningNode;
|
|
};
|
|
|
|
/** Constructs the input controller. */
|
|
FOutputNodeInputController(const FInitParams& InParams);
|
|
|
|
virtual bool IsValid() const override;
|
|
|
|
#if WITH_EDITOR
|
|
virtual FText GetDisplayName() const override;
|
|
virtual const FText& GetTooltip() const override;
|
|
|
|
// Input metadata
|
|
virtual const FMetasoundFrontendVertexMetadata& GetMetadata() const override;
|
|
#endif // WITH_EDITOR
|
|
|
|
virtual void SetName(const FVertexName& InName) override;
|
|
virtual EMetasoundFrontendVertexAccessType GetVertexAccessType() const override;
|
|
|
|
protected:
|
|
|
|
virtual FDocumentAccess ShareAccess() override;
|
|
virtual FConstDocumentAccess ShareAccess() const override;
|
|
|
|
private:
|
|
|
|
mutable FText CachedDisplayName;
|
|
|
|
FConstClassOutputAccessPtr OwningGraphClassOutputPtr;
|
|
};
|
|
|
|
/** FInputNodeInputController represents the input vertex of an output
|
|
* node.
|
|
*
|
|
* FInputNodeInputController is largely to represent outputs exposed from
|
|
* a graph.
|
|
*/
|
|
class FInputNodeInputController : public FBaseInputController
|
|
{
|
|
using FRegistry = FMetasoundFrontendRegistryContainer;
|
|
public:
|
|
struct FInitParams
|
|
{
|
|
FGuid ID;
|
|
FConstVertexAccessPtr NodeVertexPtr;
|
|
FConstClassInputAccessPtr ClassInputPtr;
|
|
FConstClassInputAccessPtr OwningGraphClassInputPtr;
|
|
FGraphAccessPtr GraphPtr;
|
|
FNodeHandle OwningNode;
|
|
};
|
|
|
|
/** Constructs the input controller. */
|
|
FInputNodeInputController(const FInitParams& InParams);
|
|
|
|
virtual bool IsValid() const override;
|
|
|
|
#if WITH_EDITOR
|
|
virtual FText GetDisplayName() const override;
|
|
virtual const FText& GetTooltip() const override;
|
|
|
|
// Input metadata
|
|
virtual const FMetasoundFrontendVertexMetadata& GetMetadata() const override;
|
|
#endif // WITH_EDITOR
|
|
|
|
virtual void SetName(const FVertexName& InName) override;
|
|
virtual EMetasoundFrontendVertexAccessType GetVertexAccessType() const override;
|
|
|
|
virtual bool IsConnectionUserModifiable() const override;
|
|
virtual FConnectability CanConnectTo(const IOutputController& InController) const override;
|
|
virtual bool Connect(IOutputController& InController) override;
|
|
|
|
// Connection controls.
|
|
virtual bool ConnectWithConverterNode(IOutputController& InController, const FConverterNodeInfo& InNodeClassName) override;
|
|
|
|
private:
|
|
FConstClassInputAccessPtr OwningGraphClassInputPtr;
|
|
};
|
|
|
|
/** Input controller for variable data type. */
|
|
class FVariableInputController : public FBaseInputController
|
|
{
|
|
public:
|
|
using FInitParams = FBaseInputController::FInitParams;
|
|
|
|
FVariableInputController(const FInitParams& InParams);
|
|
virtual ~FVariableInputController() = default;
|
|
|
|
/** Variable data type connections are not modifiable by users */
|
|
virtual bool IsConnectionUserModifiable() const override;
|
|
};
|
|
}
|
|
}
|