Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundEditor/Private/MetasoundDetailCustomization.h
rob gay e0f2527ac7 Editor-only fixes included: Initial MetaSound Editor Page Support (cvar disabled until all transactions are supported and tested)
#jira UE-194160
#rb phil.popp
#rnx
#tests PIE, MetaSound Asset Editor, Engine Automation tests

[CL 34541631 by rob gay in ue5-main branch]
2024-06-20 15:27:03 -04:00

115 lines
3.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "IDetailCustomization.h"
#include "MetasoundFrontendDocumentModifyDelegates.h"
#include "SGraphActionMenu.h"
#include "SSearchableComboBox.h"
#include "Templates/SharedPointer.h"
#include "Types/SlateEnums.h"
#include "UObject/NameTypes.h"
// Forward Declarations
class FPropertyRestriction;
class IDetailLayoutBuilder;
class UMetaSoundBuilderBase;
struct FPointerEvent;
namespace Metasound
{
namespace Editor
{
class FMetaSoundDetailCustomizationBase : public IDetailCustomization
{
public:
virtual ~FMetaSoundDetailCustomizationBase() = default;
bool IsGraphEditable() const;
protected:
UObject* GetMetaSound() const;
void InitBuilder(UObject& MetaSound);
TStrongObjectPtr<UMetaSoundBuilderBase> Builder;
};
class FMetasoundDetailCustomization : public FMetaSoundDetailCustomizationBase
{
public:
FMetasoundDetailCustomization(FName InDocumentPropertyName);
virtual ~FMetasoundDetailCustomization() = default;
// IDetailCustomization interface
virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override;
// End of IDetailCustomization interface
private:
FName GetInterfaceVersionsPropertyPath() const;
FName GetRootClassPropertyPath() const;
FName GetMetadataPropertyPath() const;
FName DocumentPropertyName;
};
class FMetasoundPagesDetailCustomization : public FMetaSoundDetailCustomizationBase
{
public:
FMetasoundPagesDetailCustomization();
// IDetailCustomization interface
virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override;
// End of IDetailCustomization interface
private:
UObject& GetMetaSound() const;
void RebuildImplemented();
void UpdateItemNames();
TArray<TSharedPtr<FString>> AddableItems;
TSet<FName> ImplementedNames;
TSharedPtr<SSearchableComboBox> ComboBox;
TSharedPtr<SVerticalBox> EntryWidgets;
FString ItemName;
FName BuildPageName;
class FPageListener : public Frontend::IDocumentBuilderTransactionListener
{
TWeakPtr<FMetasoundPagesDetailCustomization> Parent;
public:
FPageListener() = default;
FPageListener(TSharedRef<FMetasoundPagesDetailCustomization> InParent)
: Parent(InParent)
{
}
virtual ~FPageListener() = default;
private:
virtual void OnBuilderReloaded(Frontend::FDocumentModifyDelegates& OutDelegates) override;
void OnPageAdded(const Frontend::FDocumentMutatePageArgs& Args);
void OnRemovingPage(const Frontend::FDocumentMutatePageArgs& Args);
};
TSharedPtr<FPageListener> PageListener;
};
class FMetasoundInterfacesDetailCustomization : public FMetaSoundDetailCustomizationBase
{
public:
// IDetailCustomization interface
virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override;
// End of IDetailCustomization interface
private:
void UpdateInterfaceNames();
TArray<TSharedPtr<FString>> AddableInterfaceNames;
TSet<FName> ImplementedInterfaceNames;
TSharedPtr<SSearchableComboBox> InterfaceComboBox;
TAttribute<bool> IsGraphEditableAttribute;
};
} // namespace Editor
} // namespace Metasound