Files
UnrealEngine/Engine/Plugins/Runtime/Metasound/Source/MetasoundFrontend/Private/MetasoundFrontendInputController.h
2025-05-18 13:04:45 +08:00

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;
};
}
}