Files
UnrealEngine/Engine/Plugins/Runtime/Metasound/Source/MetasoundEditor/Public/MetasoundDefaultLiteralCustomization.h
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

81 lines
3.1 KiB
C++

// 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"
#define UE_API METASOUNDEDITOR_API
// Forward Declarations
class IDetailPropertyRow;
class IPropertyHandle;
class SSearchableComboBox;
class UEdGraphPin;
class UMetasoundEditorGraph;
class UMetasoundEditorGraphMemberDefaultLiteral;
class UMetasoundEditorGraphNode;
namespace Metasound::Editor
{
class FMetasoundDefaultLiteralCustomizationBase
{
protected:
IDetailCategoryBuilder* DefaultCategoryBuilder = nullptr;
public:
using FOnDefaultPageRowAdded = TFunction<void(IDetailPropertyRow& /* Value Row */, TSharedRef<IPropertyHandle> /* Page Property Handle */)>;
UE_API FMetasoundDefaultLiteralCustomizationBase(IDetailCategoryBuilder& InDefaultCategoryBuilder);
UE_API virtual ~FMetasoundDefaultLiteralCustomizationBase();
UE_API virtual void CustomizeDefaults(UMetasoundEditorGraphMemberDefaultLiteral& InLiteral, IDetailLayoutBuilder& InDetailLayout);
UE_DEPRECATED(5.5, "Use CustomizeDefaults instead and provide returned customized handles")
UE_API virtual TArray<IDetailPropertyRow*> CustomizeLiteral(UMetasoundEditorGraphMemberDefaultLiteral& InLiteral, IDetailLayoutBuilder& InDetailLayout);
UE_API virtual TAttribute<EVisibility> GetDefaultVisibility() const;
UE_API virtual TAttribute<bool> GetEnabled() const;
UE_API virtual void SetDefaultVisibility(TAttribute<EVisibility> VisibilityAttribute);
UE_API virtual void SetEnabled(TAttribute<bool> EnableAttribute);
UE_API virtual void SetResetOverride(const TOptional<FResetToDefaultOverride>& InResetOverride);
protected:
UE_API void CustomizePageDefaultRows(UMetasoundEditorGraphMemberDefaultLiteral& InLiteral, IDetailLayoutBuilder& InDetailLayout);
UE_API virtual void BuildDefaultValueWidget(IDetailPropertyRow& ValueRow, TSharedPtr<IPropertyHandle> ValueProperty);
TArray<TSharedPtr<IPropertyHandle>> DefaultProperties;
private:
UE_API TSharedRef<SWidget> BuildPageDefaultNameWidget(UMetasoundEditorGraphMemberDefaultLiteral& Literal, TSharedRef<IPropertyHandle> ElementProperty);
UE_API void BuildPageDefaultComboBox(UMetasoundEditorGraphMemberDefaultLiteral& Literal, FText RowName);
UE_API void UpdatePagePickerNames(TWeakObjectPtr<UMetasoundEditorGraphMemberDefaultLiteral> LiteralPtr);
TArray<TSharedPtr<FString>> AddablePageStringNames;
TSet<FName> ImplementedPageNames;
TSharedPtr<SSearchableComboBox> PageDefaultComboBox;
FDelegateHandle OnPageSettingsUpdatedHandle;
TAttribute<bool> Enabled;
TAttribute<EVisibility> Visibility;
TOptional<FResetToDefaultOverride> ResetOverride;
};
class IMemberDefaultLiteralCustomizationFactory
{
public:
virtual ~IMemberDefaultLiteralCustomizationFactory() = default;
virtual TUniquePtr<FMetasoundDefaultLiteralCustomizationBase> CreateLiteralCustomization(IDetailCategoryBuilder& DefaultCategoryBuilder) const = 0;
};
} // namespace Metasound::Editor
#undef UE_API