2021-01-13 10:48:59 -04:00
// Copyright Epic Games, Inc. All Rights Reserved.
# pragma once
2021-10-12 21:21:22 -04:00
# include "Containers/Array.h"
2021-12-10 20:37:31 -05:00
# include "Containers/Set.h"
2021-08-09 15:13:40 -04:00
# include "MetasoundAssetBase.h"
2021-01-13 10:48:59 -04:00
# include "MetasoundBuilderInterface.h"
# include "MetasoundFrontendController.h"
2021-03-31 15:34:29 -04:00
# include "MetasoundFrontendDocument.h"
2021-01-13 10:48:59 -04:00
# include "MetasoundGraph.h"
2021-09-13 14:14:37 -04:00
# include "MetasoundVertex.h"
2021-01-13 10:48:59 -04:00
2021-10-12 21:21:22 -04:00
class FText ;
class FName ;
class FString ;
2021-08-09 15:13:40 -04:00
2021-01-13 10:48:59 -04:00
namespace Metasound
{
namespace Frontend
{
2021-10-12 21:21:22 -04:00
namespace Invalid
2021-01-13 10:48:59 -04:00
{
2021-10-12 21:21:22 -04:00
const FText & GetInvalidText ( ) ;
const FName & GetInvalidName ( ) ;
const FString & GetInvalidString ( ) ;
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-10-12 21:21:22 -04:00
const FMetasoundFrontendVertexMetadata & GetInvalidVertexMetadata ( ) ;
2022-02-10 15:07:39 -05:00
const FMetasoundFrontendInterfaceStyle & GetInvalidInterfaceStyle ( ) ;
const FMetasoundFrontendClassStyle & GetInvalidClassStyle ( ) ;
const FMetasoundFrontendGraphStyle & GetInvalidGraphStyle ( ) ;
# endif // WITH_EDITOR
2021-10-12 21:21:22 -04:00
const FMetasoundFrontendLiteral & GetInvalidLiteral ( ) ;
const FMetasoundFrontendClassInterface & GetInvalidClassInterface ( ) ;
const FMetasoundFrontendClassMetadata & GetInvalidClassMetadata ( ) ;
2022-02-09 12:52:07 -05:00
const FMetasoundFrontendGraphClassPresetOptions & GetInvalidGraphClassPresetOptions ( ) ;
2021-10-12 21:21:22 -04:00
const FMetasoundFrontendGraphClass & GetInvalidGraphClass ( ) ;
const TArray < FMetasoundFrontendClass > & GetInvalidClassArray ( ) ;
const TArray < FMetasoundFrontendGraphClass > & GetInvalidGraphClassArray ( ) ;
2022-02-09 12:52:07 -05:00
const TSet < FName > & GetInvalidNameSet ( ) ;
2021-10-12 21:21:22 -04:00
const FMetasoundFrontendDocumentMetadata & GetInvalidDocumentMetadata ( ) ;
2021-01-13 10:48:59 -04:00
}
/** FInvalidOutputController is a controller which is always invalid.
*
* All methods return defaults and return error flags or invalid values .
*/
class METASOUNDFRONTEND_API FInvalidOutputController : public IOutputController
{
public :
FInvalidOutputController ( ) = default ;
virtual ~ FInvalidOutputController ( ) = default ;
2021-11-07 23:43:01 -05:00
virtual bool IsValid ( ) const override { return false ; }
virtual FGuid GetID ( ) const override { return Metasound : : FrontendInvalidID ; }
virtual const FName & GetDataType ( ) const override { return Invalid : : GetInvalidName ( ) ; }
virtual const FVertexName & GetName ( ) const override { return Invalid : : GetInvalidName ( ) ; }
2022-06-02 10:50:07 -04:00
virtual EMetasoundFrontendVertexAccessType GetVertexAccessType ( ) const override { return EMetasoundFrontendVertexAccessType : : Reference ; }
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual FText GetDisplayName ( ) const override { return FText : : GetEmpty ( ) ; }
virtual const FText & GetTooltip ( ) const override { return FText : : GetEmpty ( ) ; }
virtual const FMetasoundFrontendVertexMetadata & GetMetadata ( ) const override { return Invalid : : GetInvalidVertexMetadata ( ) ; }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual FGuid GetOwningNodeID ( ) const override { return Metasound : : FrontendInvalidID ; }
virtual FNodeHandle GetOwningNode ( ) override ;
virtual FConstNodeHandle GetOwningNode ( ) const override ;
virtual void SetName ( const FVertexName & InName ) override { }
virtual bool IsConnected ( ) const override { return false ; }
virtual TArray < FInputHandle > GetConnectedInputs ( ) override { return TArray < FInputHandle > ( ) ; }
virtual TArray < FConstInputHandle > GetConstConnectedInputs ( ) const override { return TArray < FConstInputHandle > ( ) ; }
virtual bool Disconnect ( ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual bool IsConnectionUserModifiable ( ) const override { return false ; }
virtual FConnectability CanConnectTo ( const IInputController & InController ) const override { return FConnectability ( ) ; }
virtual bool Connect ( IInputController & InController ) override { return false ; }
virtual bool ConnectWithConverterNode ( IInputController & InController , const FConverterNodeInfo & InNodeClassName ) override { return false ; }
virtual bool Disconnect ( IInputController & InController ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-01-20 17:26:40 -04:00
protected :
2021-11-07 23:43:01 -05:00
virtual FDocumentAccess ShareAccess ( ) override { return FDocumentAccess ( ) ; }
virtual FConstDocumentAccess ShareAccess ( ) const override { return FConstDocumentAccess ( ) ; }
2021-01-20 17:26:40 -04:00
2021-01-13 10:48:59 -04:00
} ;
/** FInvalidInputController is a controller which is always invalid.
*
* All methods return defaults and return error flags or invalid values .
*/
class METASOUNDFRONTEND_API FInvalidInputController : public IInputController
{
public :
FInvalidInputController ( ) = default ;
virtual ~ FInvalidInputController ( ) = default ;
2021-11-07 23:43:01 -05:00
virtual bool IsValid ( ) const override { return false ; }
virtual FGuid GetID ( ) const override { return Metasound : : FrontendInvalidID ; }
virtual bool IsConnected ( ) const override { return false ; }
virtual const FName & GetDataType ( ) const override { return Invalid : : GetInvalidName ( ) ; }
virtual const FVertexName & GetName ( ) const override { return Invalid : : GetInvalidName ( ) ; }
2022-06-02 10:50:07 -04:00
virtual EMetasoundFrontendVertexAccessType GetVertexAccessType ( ) const override { return EMetasoundFrontendVertexAccessType : : Reference ; }
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual FText GetDisplayName ( ) const override { return Invalid : : GetInvalidText ( ) ; }
virtual const FText & GetTooltip ( ) const override { return Invalid : : GetInvalidText ( ) ; }
virtual const FMetasoundFrontendVertexMetadata & GetMetadata ( ) const override { return Invalid : : GetInvalidVertexMetadata ( ) ; }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
virtual bool ClearLiteral ( ) override { return false ; }
2021-11-07 23:43:01 -05:00
virtual const FMetasoundFrontendLiteral * GetLiteral ( ) const override { return nullptr ; }
virtual void SetLiteral ( const FMetasoundFrontendLiteral & InLiteral ) { } ;
virtual const FMetasoundFrontendLiteral * GetClassDefaultLiteral ( ) const override { return nullptr ; }
virtual FGuid GetOwningNodeID ( ) const override { return Metasound : : FrontendInvalidID ; }
virtual FNodeHandle GetOwningNode ( ) override ;
virtual FConstNodeHandle GetOwningNode ( ) const override ;
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual bool IsConnectionUserModifiable ( ) const override { return false ; }
2021-10-12 21:21:22 -04:00
virtual FOutputHandle GetConnectedOutput ( ) override { return IOutputController : : GetInvalidHandle ( ) ; }
virtual FConstOutputHandle GetConnectedOutput ( ) const override { return IOutputController : : GetInvalidHandle ( ) ; }
2021-11-07 23:43:01 -05:00
virtual bool Disconnect ( ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual void SetName ( const FVertexName & InName ) override { }
2021-09-13 14:14:37 -04:00
2021-01-13 10:48:59 -04:00
virtual FConnectability CanConnectTo ( const IOutputController & InController ) const override { return FConnectability ( ) ; }
virtual bool Connect ( IOutputController & InController ) override { return false ; }
virtual bool ConnectWithConverterNode ( IOutputController & InController , const FConverterNodeInfo & InNodeClassName ) override { return false ; }
virtual bool Disconnect ( IOutputController & InController ) override { return false ; }
2021-01-20 17:26:40 -04:00
protected :
2021-11-07 23:43:01 -05:00
virtual FDocumentAccess ShareAccess ( ) override { return FDocumentAccess ( ) ; }
virtual FConstDocumentAccess ShareAccess ( ) const override { return FConstDocumentAccess ( ) ; }
2021-01-13 10:48:59 -04:00
} ;
2021-10-12 21:21:22 -04:00
class METASOUNDFRONTEND_API FInvalidVariableController : public IVariableController
{
public :
FInvalidVariableController ( ) = default ;
virtual ~ FInvalidVariableController ( ) = default ;
/** Returns true if the controller is in a valid state. */
virtual bool IsValid ( ) const override { return false ; }
virtual FGuid GetID ( ) const override { return Metasound : : FrontendInvalidID ; }
/** Returns the data type name associated with this output. */
virtual const FName & GetDataType ( ) const override { return Invalid : : GetInvalidName ( ) ; }
2021-10-25 20:05:28 -04:00
/** Returns the name associated with this variable. */
virtual const FName & GetName ( ) const override { return Invalid : : GetInvalidName ( ) ; }
virtual void SetName ( const FName & ) override { }
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-10-12 21:21:22 -04:00
/** Returns the human readable name associated with this output. */
virtual FText GetDisplayName ( ) const override { return Invalid : : GetInvalidText ( ) ; }
virtual void SetDisplayName ( const FText & ) override { }
2021-10-25 20:05:28 -04:00
virtual FText GetDescription ( ) const override { return Invalid : : GetInvalidText ( ) ; }
virtual void SetDescription ( const FText & ) override { }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-10-12 21:21:22 -04:00
virtual FNodeHandle FindMutatorNode ( ) override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FConstNodeHandle FindMutatorNode ( ) const override { return INodeController : : GetInvalidHandle ( ) ; }
virtual TArray < FNodeHandle > FindAccessorNodes ( ) override { return TArray < FNodeHandle > ( ) ; }
virtual TArray < FConstNodeHandle > FindAccessorNodes ( ) const override { return TArray < FConstNodeHandle > ( ) ; }
virtual TArray < FNodeHandle > FindDeferredAccessorNodes ( ) override { return TArray < FNodeHandle > ( ) ; }
virtual TArray < FConstNodeHandle > FindDeferredAccessorNodes ( ) const override { return TArray < FConstNodeHandle > ( ) ; }
/** Returns a FGraphHandle to the node which owns this output. */
virtual FGraphHandle GetOwningGraph ( ) override { return IGraphController : : GetInvalidHandle ( ) ; }
/** Returns a FConstGraphHandle to the node which owns this output. */
virtual FConstGraphHandle GetOwningGraph ( ) const override { return IGraphController : : GetInvalidHandle ( ) ; }
/** Returns the value for the given variable instance if set. */
virtual const FMetasoundFrontendLiteral & GetLiteral ( ) const override { return Invalid : : GetInvalidLiteral ( ) ; }
/** Sets the value for the given variable instance */
virtual bool SetLiteral ( const FMetasoundFrontendLiteral & InLiteral ) override { return false ; }
protected :
2021-11-07 23:43:01 -05:00
virtual FDocumentAccess ShareAccess ( ) override { return FDocumentAccess ( ) ; }
virtual FConstDocumentAccess ShareAccess ( ) const override { return FConstDocumentAccess ( ) ; }
2021-10-12 21:21:22 -04:00
} ;
2021-01-13 10:48:59 -04:00
/** FInvalidNodeController is a controller which is always invalid.
*
* All methods return defaults and return error flags or invalid values .
*/
class METASOUNDFRONTEND_API FInvalidNodeController : public INodeController
{
public :
FInvalidNodeController ( ) = default ;
virtual ~ FInvalidNodeController ( ) = default ;
2021-11-07 23:43:01 -05:00
virtual bool IsValid ( ) const override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TArray < FInputHandle > GetInputs ( ) override { return TArray < FInputHandle > ( ) ; }
virtual TArray < FOutputHandle > GetOutputs ( ) override { return TArray < FOutputHandle > ( ) ; }
virtual TArray < FConstInputHandle > GetConstInputs ( ) const override { return TArray < FConstInputHandle > ( ) ; }
virtual TArray < FConstOutputHandle > GetConstOutputs ( ) const override { return TArray < FConstOutputHandle > ( ) ; }
2021-01-13 10:48:59 -04:00
2021-10-12 21:21:22 -04:00
virtual FInputHandle GetInputWithVertexName ( const FVertexName & InName ) override { return IInputController : : GetInvalidHandle ( ) ; }
virtual FConstInputHandle GetConstInputWithVertexName ( const FVertexName & InName ) const override { return IInputController : : GetInvalidHandle ( ) ; }
virtual FOutputHandle GetOutputWithVertexName ( const FVertexName & InName ) override { return IOutputController : : GetInvalidHandle ( ) ; }
virtual FConstOutputHandle GetConstOutputWithVertexName ( const FVertexName & InName ) const override { return IOutputController : : GetInvalidHandle ( ) ; }
2021-11-07 23:43:01 -05:00
virtual FInputHandle GetInputWithID ( FGuid InVertexID ) override { return IInputController : : GetInvalidHandle ( ) ; }
virtual FOutputHandle GetOutputWithID ( FGuid InVertexID ) override { return IOutputController : : GetInvalidHandle ( ) ; }
virtual FConstInputHandle GetInputWithID ( FGuid InVertexID ) const override { return IInputController : : GetInvalidHandle ( ) ; }
virtual FConstOutputHandle GetOutputWithID ( FGuid InVertexID ) const override { return IOutputController : : GetInvalidHandle ( ) ; }
2021-01-13 10:48:59 -04:00
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual const FMetasoundFrontendNodeStyle & GetNodeStyle ( ) const override { static const FMetasoundFrontendNodeStyle Invalid ; return Invalid ; }
virtual void SetNodeStyle ( const FMetasoundFrontendNodeStyle & InNodeStyle ) override { }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual void SetNodeName ( const FVertexName & InName ) override { }
2021-01-23 12:59:01 -04:00
2022-03-01 21:25:04 -05:00
virtual FNodeHandle ReplaceWithVersion ( const FMetasoundFrontendVersionNumber & InNewVersion , TArray < FVertexNameAndType > * OutDisconnectedInputs , TArray < FVertexNameAndType > * OutDisconnectedOutputs ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-07-27 15:36:03 -04:00
2021-11-07 23:43:01 -05:00
virtual bool CanAddInput ( const FVertexName & InVertexName ) const override { return false ; }
virtual FInputHandle AddInput ( const FVertexName & InVertexName , const FMetasoundFrontendLiteral * InDefault ) override { return IInputController : : GetInvalidHandle ( ) ; }
virtual bool RemoveInput ( FGuid InVertexID ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual bool CanAddOutput ( const FVertexName & InVertexName ) const override { return false ; }
virtual FInputHandle AddOutput ( const FVertexName & InVertexName , const FMetasoundFrontendLiteral * InDefault ) override { return IInputController : : GetInvalidHandle ( ) ; }
virtual bool RemoveOutput ( FGuid InVertexID ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual bool ClearInputLiteral ( FGuid InVertexID ) override { return false ; } ;
virtual const FMetasoundFrontendLiteral * GetInputLiteral ( const FGuid & InVertexID ) const override { return nullptr ; }
virtual void SetInputLiteral ( const FMetasoundFrontendVertexLiteral & InVertexLiteral ) override { }
2021-05-28 14:09:45 -04:00
2021-11-07 23:43:01 -05:00
virtual const FMetasoundFrontendClassInterface & GetClassInterface ( ) const override { return Invalid : : GetInvalidClassInterface ( ) ; }
virtual const FMetasoundFrontendClassMetadata & GetClassMetadata ( ) const override { return Invalid : : GetInvalidClassMetadata ( ) ; }
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual const FMetasoundFrontendInterfaceStyle & GetInputStyle ( ) const override { return Invalid : : GetInvalidInterfaceStyle ( ) ; }
virtual const FMetasoundFrontendInterfaceStyle & GetOutputStyle ( ) const override { return Invalid : : GetInvalidInterfaceStyle ( ) ; }
virtual const FMetasoundFrontendClassStyle & GetClassStyle ( ) const override { return Invalid : : GetInvalidClassStyle ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual const FText & GetDescription ( ) const override { return Invalid : : GetInvalidText ( ) ; }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-03-19 15:10:57 -04:00
2021-11-22 15:55:50 -05:00
virtual const FMetasoundFrontendVersion & GetInterfaceVersion ( ) const { return FMetasoundFrontendVersion : : GetInvalid ( ) ; }
virtual bool IsInterfaceMember ( ) const override { return false ; }
2021-03-19 15:10:57 -04:00
2021-11-07 23:43:01 -05:00
virtual bool DiffAgainstRegistryInterface ( FClassInterfaceUpdates & OutInterfaceUpdates , bool bInUseHighestMinorVersion ) const override { return false ; }
2022-01-31 15:53:54 -05:00
virtual bool CanAutoUpdate ( FClassInterfaceUpdates & OutInterfaceUpdates ) const override { OutInterfaceUpdates = { } ; return false ; }
2021-07-27 15:36:03 -04:00
2021-11-07 23:43:01 -05:00
virtual TSharedRef < IGraphController > AsGraph ( ) override ;
virtual TSharedRef < const IGraphController > AsGraph ( ) const override ;
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FGuid GetID ( ) const override { return Metasound : : FrontendInvalidID ; }
virtual FGuid GetClassID ( ) const override { return Metasound : : FrontendInvalidID ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FGuid GetOwningGraphClassID ( ) const override { return Metasound : : FrontendInvalidID ; }
virtual TSharedRef < IGraphController > GetOwningGraph ( ) override ;
virtual TSharedRef < const IGraphController > GetOwningGraph ( ) const override ;
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual void IterateInputs ( TUniqueFunction < void ( FInputHandle ) > InFunction ) override { }
virtual void IterateConstInputs ( TUniqueFunction < void ( FConstInputHandle ) > InFunction ) const override { }
2021-03-19 15:10:57 -04:00
2021-11-07 23:43:01 -05:00
virtual void IterateOutputs ( TUniqueFunction < void ( FOutputHandle ) > InFunction ) override { }
virtual void IterateConstOutputs ( TUniqueFunction < void ( FConstOutputHandle ) > InFunction ) const override { }
2021-03-19 15:10:57 -04:00
2021-11-07 23:43:01 -05:00
virtual int32 GetNumInputs ( ) const override { return 0 ; }
virtual int32 GetNumOutputs ( ) const override { return 0 ; }
2021-03-19 15:10:57 -04:00
2021-11-07 23:43:01 -05:00
virtual const FVertexName & GetNodeName ( ) const override { return Invalid : : GetInvalidName ( ) ; }
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual FText GetDisplayName ( ) const override { return Invalid : : GetInvalidText ( ) ; }
virtual const FText & GetDisplayTitle ( ) const override { return Invalid : : GetInvalidText ( ) ; }
virtual void SetDescription ( const FText & InDescription ) override { }
virtual void SetDisplayName ( const FText & InText ) override { }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-03-19 15:10:57 -04:00
2021-01-20 17:26:40 -04:00
protected :
2021-11-07 23:43:01 -05:00
virtual FDocumentAccess ShareAccess ( ) override { return FDocumentAccess ( ) ; }
virtual FConstDocumentAccess ShareAccess ( ) const override { return FConstDocumentAccess ( ) ; }
2021-01-13 10:48:59 -04:00
} ;
/** FInvalidGraphController is a controller which is always invalid.
*
* All methods return defaults and return error flags or invalid values .
*/
class METASOUNDFRONTEND_API FInvalidGraphController : public IGraphController
{
public :
FInvalidGraphController ( ) = default ;
virtual ~ FInvalidGraphController ( ) = default ;
2021-11-07 23:43:01 -05:00
virtual bool IsValid ( ) const override { return false ; }
virtual FGuid GetClassID ( ) const override { return Metasound : : FrontendInvalidID ; }
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual FText GetDisplayName ( ) const override { return Invalid : : GetInvalidText ( ) ; }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TArray < FVertexName > GetInputVertexNames ( ) const override { return TArray < FVertexName > ( ) ; }
virtual TArray < FVertexName > GetOutputVertexNames ( ) const override { return TArray < FVertexName > ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TArray < FNodeHandle > GetNodes ( ) override { return TArray < FNodeHandle > ( ) ; }
virtual TArray < FConstNodeHandle > GetConstNodes ( ) const override { return TArray < FConstNodeHandle > ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FConstNodeHandle GetNodeWithID ( FGuid InNodeID ) const override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle GetNodeWithID ( FGuid InNodeID ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TArray < FNodeHandle > GetOutputNodes ( ) override { return TArray < FNodeHandle > ( ) ; }
virtual TArray < FNodeHandle > GetInputNodes ( ) override { return TArray < FNodeHandle > ( ) ; }
virtual TArray < FConstNodeHandle > GetConstOutputNodes ( ) const override { return TArray < FConstNodeHandle > ( ) ; }
virtual TArray < FConstNodeHandle > GetConstInputNodes ( ) const override { return TArray < FConstNodeHandle > ( ) ; }
2021-01-13 10:48:59 -04:00
2022-02-09 12:52:07 -05:00
virtual const TSet < FName > & GetInputsInheritingDefault ( ) const { return Invalid : : GetInvalidNameSet ( ) ; }
virtual bool SetInputInheritsDefault ( FName InName , bool bDefaultIsInherited ) { return false ; }
virtual void SetInputsInheritingDefault ( TSet < FName > & & InNames ) { }
2021-10-12 21:21:22 -04:00
virtual FVariableHandle AddVariable ( const FName & InDataTypeName ) override { return IVariableController : : GetInvalidHandle ( ) ; }
virtual FVariableHandle FindVariable ( const FGuid & InVariableID ) override { return IVariableController : : GetInvalidHandle ( ) ; }
virtual FConstVariableHandle FindVariable ( const FGuid & InVariableID ) const { return IVariableController : : GetInvalidHandle ( ) ; }
2021-11-18 14:37:34 -05:00
virtual FVariableHandle FindVariableContainingNode ( const FGuid & InNodeID ) override { return IVariableController : : GetInvalidHandle ( ) ; }
virtual FConstVariableHandle FindVariableContainingNode ( const FGuid & InNodeID ) const override { return IVariableController : : GetInvalidHandle ( ) ; }
2021-10-12 21:21:22 -04:00
virtual bool RemoveVariable ( const FGuid & InVariableID ) override { return false ; }
virtual TArray < FVariableHandle > GetVariables ( ) override { return TArray < FVariableHandle > ( ) ; }
virtual TArray < FConstVariableHandle > GetVariables ( ) const override { return TArray < FConstVariableHandle > ( ) ; }
virtual FNodeHandle FindOrAddVariableMutatorNode ( const FGuid & InVariableID ) override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle AddVariableAccessorNode ( const FGuid & InVariableID ) override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle AddVariableDeferredAccessorNode ( const FGuid & InVariableID ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-03-19 15:10:57 -04:00
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual const FMetasoundFrontendGraphStyle & GetGraphStyle ( ) const override { return Invalid : : GetInvalidGraphStyle ( ) ; }
virtual void SetGraphStyle ( const FMetasoundFrontendGraphStyle & InStyle ) override { }
2022-03-02 22:11:18 -05:00
virtual const FMetasoundFrontendInterfaceStyle & GetInputStyle ( ) const override { return Invalid : : GetInvalidInterfaceStyle ( ) ; }
virtual const FMetasoundFrontendInterfaceStyle & GetOutputStyle ( ) const override { return Invalid : : GetInvalidInterfaceStyle ( ) ; }
2022-03-01 16:31:55 -05:00
virtual void SetInputStyle ( const FMetasoundFrontendInterfaceStyle & InStyle ) override { }
virtual void SetOutputStyle ( const FMetasoundFrontendInterfaceStyle & InStyle ) override { }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-06-08 10:52:31 -04:00
2021-11-07 23:43:01 -05:00
virtual void ClearGraph ( ) override { } ;
2021-07-27 15:36:03 -04:00
2021-11-07 23:43:01 -05:00
virtual void IterateConstNodes ( TFunctionRef < void ( FConstNodeHandle ) > InFunction , EMetasoundFrontendClassType InClassType /* = EMetasoundFrontendClassType::Invalid */ ) const override { }
virtual void IterateNodes ( TFunctionRef < void ( FNodeHandle ) > InFunction , EMetasoundFrontendClassType InClassType /* = EMetasoundFrontendClassType::Invalid */ ) override { }
2021-03-19 15:10:57 -04:00
2021-11-07 23:43:01 -05:00
virtual bool ContainsOutputVertex ( const FVertexName & InName , const FName & InTypeName ) const override { return false ; }
virtual bool ContainsOutputVertexWithName ( const FVertexName & InName ) const override { return false ; }
virtual bool ContainsInputVertex ( const FVertexName & InName , const FName & InTypeName ) const override { return false ; }
virtual bool ContainsInputVertexWithName ( const FVertexName & InName ) const override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FConstNodeHandle GetOutputNodeWithName ( const FVertexName & InName ) const override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FConstNodeHandle GetInputNodeWithName ( const FVertexName & InName ) const override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle GetOutputNodeWithName ( const FVertexName & InName ) override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle GetInputNodeWithName ( const FVertexName & InName ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FConstClassInputAccessPtr FindClassInputWithName ( const FVertexName & InName ) const override { return FConstClassInputAccessPtr ( ) ; }
virtual FConstClassOutputAccessPtr FindClassOutputWithName ( const FVertexName & InName ) const override { return FConstClassOutputAccessPtr ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FNodeHandle AddInputVertex ( const FMetasoundFrontendClassInput & InDescription ) override { return INodeController : : GetInvalidHandle ( ) ; }
2022-01-26 18:11:52 -05:00
virtual TSharedRef < INodeController > AddInputVertex ( const FVertexName & InName , const FName InTypeName , const FMetasoundFrontendLiteral * InDefaultValue ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-11-07 23:43:01 -05:00
virtual bool RemoveInputVertex ( const FVertexName & InputName ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FNodeHandle AddOutputVertex ( const FMetasoundFrontendClassOutput & InDescription ) override { return INodeController : : GetInvalidHandle ( ) ; }
2022-01-26 18:11:52 -05:00
virtual TSharedRef < INodeController > AddOutputVertex ( const FVertexName & InName , const FName InTypeName ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-11-07 23:43:01 -05:00
virtual bool RemoveOutputVertex ( const FVertexName & OutputName ) override { return false ; }
2021-01-13 10:48:59 -04:00
// This can be used to determine what kind of property editor we should use for the data type of a given input.
// Will return Invalid if the input couldn't be found, or if the input doesn't support any kind of literals.
2021-11-07 23:43:01 -05:00
virtual ELiteralType GetPreferredLiteralTypeForInputVertex ( const FVertexName & InInputName ) const override { return ELiteralType : : Invalid ; }
2021-01-13 10:48:59 -04:00
// For inputs whose preferred literal type is UObject or UObjectArray, this can be used to determine the UObject corresponding to that input's datatype.
2021-11-07 23:43:01 -05:00
virtual UClass * GetSupportedClassForInputVertex ( const FVertexName & InInputName ) override { return nullptr ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FGuid GetVertexIDForInputVertex ( const FVertexName & InInputName ) const override { return Metasound : : FrontendInvalidID ; }
virtual FGuid GetVertexIDForOutputVertex ( const FVertexName & InOutputName ) const override { return Metasound : : FrontendInvalidID ; }
virtual FMetasoundFrontendLiteral GetDefaultInput ( const FGuid & InVertexID ) const override { return FMetasoundFrontendLiteral { } ; }
2021-01-13 10:48:59 -04:00
// These can be used to set the default value for a given input on this graph.
// @returns false if the input name couldn't be found, or if the literal type was incompatible with the Data Type of this input.
2021-11-07 23:43:01 -05:00
virtual bool SetDefaultInput ( const FGuid & InVertexID , const FMetasoundFrontendLiteral & InLiteral ) override { return false ; }
virtual bool SetDefaultInputToDefaultLiteralOfType ( const FGuid & InVertexID ) override { return false ; }
2021-01-13 10:48:59 -04:00
2022-02-10 15:07:39 -05:00
# if WITH_EDITOR
2021-11-07 23:43:01 -05:00
virtual const FText & GetInputDescription ( const FVertexName & InName ) const override { return FText : : GetEmpty ( ) ; }
virtual const FText & GetOutputDescription ( const FVertexName & InName ) const override { return FText : : GetEmpty ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual void SetInputDescription ( const FVertexName & InName , const FText & InDescription ) override { }
virtual void SetOutputDescription ( const FVertexName & InName , const FText & InDescription ) override { }
virtual void SetInputDisplayName ( const FVertexName & InName , const FText & InDisplayName ) override { }
virtual void SetOutputDisplayName ( const FVertexName & InName , const FText & InDisplayName ) override { }
2022-03-01 16:31:55 -05:00
virtual int32 GetSortOrderIndexForInput ( const FVertexName & InName ) const { return 0 ; }
virtual int32 GetSortOrderIndexForOutput ( const FVertexName & InName ) const { return 0 ; }
virtual void SetSortOrderIndexForInput ( const FVertexName & InName , int32 InSortOrderIndex ) { }
virtual void SetSortOrderIndexForOutput ( const FVertexName & InName , int32 InSortOrderIndex ) { }
2022-02-10 15:07:39 -05:00
# endif // WITH_EDITOR
2021-01-13 10:48:59 -04:00
// This can be used to clear the current literal for a given input.
// @returns false if the input name couldn't be found.
2021-11-07 23:43:01 -05:00
virtual bool ClearLiteralForInput ( const FVertexName & InInputName , FGuid InVertexID ) override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FNodeHandle AddNode ( const FNodeRegistryKey & InNodeClass , FGuid InNodeGuid ) override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle AddNode ( const FMetasoundFrontendClassMetadata & InNodeClass , FGuid InNodeGuid ) override { return INodeController : : GetInvalidHandle ( ) ; }
virtual FNodeHandle AddDuplicateNode ( const INodeController & InNode ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-01-22 03:05:22 -04:00
2021-01-13 10:48:59 -04:00
// Remove the node corresponding to this node handle.
// On success, invalidates the received node handle.
2021-11-07 23:43:01 -05:00
virtual bool RemoveNode ( INodeController & InNode ) override { return false ; }
2021-01-13 10:48:59 -04:00
2022-02-09 12:52:07 -05:00
// Returns the metadata for the current graph, including the name, description and author.
virtual const FMetasoundFrontendGraphClassPresetOptions & GetGraphPresetOptions ( ) const override { return Invalid : : GetInvalidGraphClassPresetOptions ( ) ; }
virtual void SetGraphPresetOptions ( const FMetasoundFrontendGraphClassPresetOptions & InMetadata ) override { }
2021-01-13 10:48:59 -04:00
// Returns the metadata for the current graph, including the name, description and author.
2021-11-07 23:43:01 -05:00
virtual const FMetasoundFrontendClassMetadata & GetGraphMetadata ( ) const override { return Invalid : : GetInvalidClassMetadata ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual void SetGraphMetadata ( const FMetasoundFrontendClassMetadata & InMetadata ) override { }
2021-06-08 10:52:31 -04:00
2021-11-07 23:43:01 -05:00
virtual FNodeHandle CreateEmptySubgraph ( const FMetasoundFrontendClassMetadata & InInfo ) override { return INodeController : : GetInvalidHandle ( ) ; }
2021-01-13 10:48:59 -04:00
2022-05-19 14:18:38 -04:00
virtual TUniquePtr < IOperator > BuildOperator ( const FOperatorSettings & InSettings , const FMetasoundEnvironment & InEnvironment , FBuildResults & OutBuildErrors ) const override { return { } ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FDocumentHandle GetOwningDocument ( ) override ;
virtual FConstDocumentHandle GetOwningDocument ( ) const override ;
2021-07-27 15:36:03 -04:00
2021-11-07 23:43:01 -05:00
virtual void UpdateInterfaceChangeID ( ) override { }
2021-07-27 15:36:03 -04:00
2021-01-20 17:26:40 -04:00
protected :
2021-11-07 23:43:01 -05:00
virtual FDocumentAccess ShareAccess ( ) override { return FDocumentAccess ( ) ; }
virtual FConstDocumentAccess ShareAccess ( ) const override { return FConstDocumentAccess ( ) ; }
2021-01-13 10:48:59 -04:00
} ;
/** FInvalidDocumentController is a controller which is always invalid.
*
* All methods return defaults and return error flags or invalid values .
*/
class METASOUNDFRONTEND_API FInvalidDocumentController : public IDocumentController
{
public :
FInvalidDocumentController ( ) = default ;
virtual ~ FInvalidDocumentController ( ) = default ;
2021-11-07 23:43:01 -05:00
virtual bool IsValid ( ) const override { return false ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual const TArray < FMetasoundFrontendClass > & GetDependencies ( ) const override { return Invalid : : GetInvalidClassArray ( ) ; }
2022-01-26 18:11:52 -05:00
virtual void IterateDependencies ( TFunctionRef < void ( FMetasoundFrontendClass & ) > InFunction ) override { }
virtual void IterateDependencies ( TFunctionRef < void ( const FMetasoundFrontendClass & ) > InFunction ) const override { }
2021-11-07 23:43:01 -05:00
virtual const TArray < FMetasoundFrontendGraphClass > & GetSubgraphs ( ) const override { return Invalid : : GetInvalidGraphClassArray ( ) ; }
virtual const FMetasoundFrontendGraphClass & GetRootGraphClass ( ) const override { return Invalid : : GetInvalidGraphClass ( ) ; }
2022-01-26 18:11:52 -05:00
virtual void SetRootGraphClass ( FMetasoundFrontendGraphClass & & InClass ) override { }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FConstClassAccessPtr FindDependencyWithID ( FGuid InClassID ) const override { return FConstClassAccessPtr ( ) ; }
virtual FConstGraphClassAccessPtr FindSubgraphWithID ( FGuid InClassID ) const override { return FConstGraphClassAccessPtr ( ) ; }
virtual FConstClassAccessPtr FindClassWithID ( FGuid InClassID ) const override { return FConstClassAccessPtr ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FConstClassAccessPtr FindClass ( const FNodeRegistryKey & InKey ) const override { return FConstClassAccessPtr ( ) ; }
2022-01-19 19:32:01 -05:00
virtual FConstClassAccessPtr FindOrAddClass ( const FNodeRegistryKey & InKey , bool bInRefreshFromRegistry ) override { return FConstClassAccessPtr ( ) ; }
2021-11-07 23:43:01 -05:00
virtual FConstClassAccessPtr FindClass ( const FMetasoundFrontendClassMetadata & InMetadata ) const override { return FConstClassAccessPtr ( ) ; }
virtual FConstClassAccessPtr FindOrAddClass ( const FMetasoundFrontendClassMetadata & InMetadata ) override { return FConstClassAccessPtr ( ) ; }
virtual FGraphHandle AddDuplicateSubgraph ( const IGraphController & InGraph ) override { return IGraphController : : GetInvalidHandle ( ) ; }
2021-05-03 17:52:04 -04:00
2021-12-10 20:37:31 -05:00
virtual const TSet < FMetasoundFrontendVersion > & GetInterfaceVersions ( ) const override { static const TSet < FMetasoundFrontendVersion > EmptyArray ; return EmptyArray ; }
2021-11-22 15:55:50 -05:00
virtual void AddInterfaceVersion ( const FMetasoundFrontendVersion & InVersion ) override { }
virtual void RemoveInterfaceVersion ( const FMetasoundFrontendVersion & InVersion ) override { }
virtual void ClearInterfaceVersions ( ) override { }
2021-06-23 20:08:21 -04:00
2021-11-07 23:43:01 -05:00
virtual void SetMetadata ( const FMetasoundFrontendDocumentMetadata & InMetadata ) override { }
virtual const FMetasoundFrontendDocumentMetadata & GetMetadata ( ) const override { return Invalid : : GetInvalidDocumentMetadata ( ) ; }
2021-05-28 14:09:45 -04:00
2022-01-19 19:32:01 -05:00
virtual void RemoveUnreferencedDependencies ( ) override { }
virtual TArray < FConstClassAccessPtr > SynchronizeDependencyMetadata ( ) override { return { } ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TArray < FGraphHandle > GetSubgraphHandles ( ) override { return TArray < FGraphHandle > ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TArray < FConstGraphHandle > GetSubgraphHandles ( ) const override { return TArray < FConstGraphHandle > ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FGraphHandle GetSubgraphWithClassID ( FGuid InClassID ) override { return IGraphController : : GetInvalidHandle ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual FConstGraphHandle GetSubgraphWithClassID ( FGuid InClassID ) const override { return IGraphController : : GetInvalidHandle ( ) ; }
2021-01-13 10:48:59 -04:00
2021-11-07 23:43:01 -05:00
virtual TSharedRef < IGraphController > GetRootGraph ( ) override ;
virtual TSharedRef < const IGraphController > GetRootGraph ( ) const override ;
virtual bool ExportToJSONAsset ( const FString & InAbsolutePath ) const override { return false ; }
virtual FString ExportToJSON ( ) const override { return FString ( ) ; }
2021-01-20 17:26:40 -04:00
protected :
2021-11-07 23:43:01 -05:00
virtual FDocumentAccess ShareAccess ( ) override { return FDocumentAccess ( ) ; }
virtual FConstDocumentAccess ShareAccess ( ) const override { return FConstDocumentAccess ( ) ; }
2021-01-13 10:48:59 -04:00
} ;
}
}