// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "DetailCategoryBuilder.h" #include "IDetailPropertyRow.h" #include "MetasoundFrontendDataTypeRegistry.h" #include "MetasoundFrontendLiteral.h" #include "MetasoundFrontendRegistries.h" #include "Modules/ModuleInterface.h" #include "PropertyHandle.h" #include "Templates/Function.h" // Forward Declarations class IDetailPropertyRow; class IPropertyHandle; class SSearchableComboBox; class UEdGraphPin; class UMetasoundEditorGraph; class UMetasoundEditorGraphMemberDefaultLiteral; class UMetasoundEditorGraphNode; namespace Metasound::Editor { class METASOUNDEDITOR_API FMetasoundDefaultLiteralCustomizationBase { protected: IDetailCategoryBuilder* DefaultCategoryBuilder = nullptr; public: using FOnDefaultPageRowAdded = TFunction /* Page Property Handle */)>; FMetasoundDefaultLiteralCustomizationBase(IDetailCategoryBuilder& InDefaultCategoryBuilder); virtual ~FMetasoundDefaultLiteralCustomizationBase(); virtual void CustomizeDefaults(UMetasoundEditorGraphMemberDefaultLiteral& InLiteral, IDetailLayoutBuilder& InDetailLayout); UE_DEPRECATED(5.5, "Use CustomizeDefaults instead and provide returned customized handles") virtual TArray CustomizeLiteral(UMetasoundEditorGraphMemberDefaultLiteral& InLiteral, IDetailLayoutBuilder& InDetailLayout); virtual TAttribute GetDefaultVisibility() const; virtual TAttribute GetEnabled() const; virtual void SetDefaultVisibility(TAttribute VisibilityAttribute); virtual void SetEnabled(TAttribute EnableAttribute); virtual void SetResetOverride(const TOptional& InResetOverride); protected: void CustomizePageDefaultRows(UMetasoundEditorGraphMemberDefaultLiteral& InLiteral, IDetailLayoutBuilder& InDetailLayout); TArray> DefaultProperties; private: TSharedRef BuildPageDefaultNameWidget(UMetasoundEditorGraphMemberDefaultLiteral& Literal, TSharedRef ElementProperty); void BuildPageDefaultComboBox(UMetasoundEditorGraphMemberDefaultLiteral& Literal, FText RowName); void UpdatePagePickerNames(TWeakObjectPtr LiteralPtr); TArray> AddablePageStringNames; TSet ImplementedPageNames; TSharedPtr PageDefaultComboBox; FDelegateHandle OnPageSettingsUpdatedHandle; TAttribute Enabled; TAttribute Visibility; TOptional ResetOverride; }; class METASOUNDEDITOR_API IMemberDefaultLiteralCustomizationFactory { public: virtual ~IMemberDefaultLiteralCustomizationFactory() = default; virtual TUniquePtr CreateLiteralCustomization(IDetailCategoryBuilder& DefaultCategoryBuilder) const = 0; }; } // namespace Metasound::Editor