2020-07-22 14:52:03 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "IDetailCustomization.h"
|
2024-06-20 15:27:03 -04:00
|
|
|
#include "MetasoundFrontendDocumentModifyDelegates.h"
|
2021-02-24 02:02:03 -04:00
|
|
|
#include "SGraphActionMenu.h"
|
2021-11-22 15:55:50 -05:00
|
|
|
#include "SSearchableComboBox.h"
|
|
|
|
|
#include "Templates/SharedPointer.h"
|
2021-03-19 15:10:57 -04:00
|
|
|
#include "Types/SlateEnums.h"
|
2020-07-30 16:57:04 -04:00
|
|
|
#include "UObject/NameTypes.h"
|
2020-07-22 14:52:03 -04:00
|
|
|
|
2021-11-22 15:55:50 -05:00
|
|
|
|
2020-07-22 14:52:03 -04:00
|
|
|
// Forward Declarations
|
2021-01-20 00:42:47 -04:00
|
|
|
class FPropertyRestriction;
|
2020-07-22 14:52:03 -04:00
|
|
|
class IDetailLayoutBuilder;
|
2024-06-10 13:41:25 -04:00
|
|
|
class UMetaSoundBuilderBase;
|
2021-03-19 15:10:57 -04:00
|
|
|
struct FPointerEvent;
|
2020-07-22 14:52:03 -04:00
|
|
|
|
2020-08-05 12:47:19 -04:00
|
|
|
namespace Metasound
|
2020-07-22 14:52:03 -04:00
|
|
|
{
|
2020-08-05 12:47:19 -04:00
|
|
|
namespace Editor
|
|
|
|
|
{
|
2024-08-14 13:27:46 -04:00
|
|
|
const FName GetMissingPageName(const FGuid& InPageID);
|
|
|
|
|
|
2024-06-10 13:41:25 -04:00
|
|
|
class FMetaSoundDetailCustomizationBase : public IDetailCustomization
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual ~FMetaSoundDetailCustomizationBase() = default;
|
|
|
|
|
|
2024-06-17 14:50:21 -04:00
|
|
|
bool IsGraphEditable() const;
|
|
|
|
|
|
2024-06-10 13:41:25 -04:00
|
|
|
protected:
|
|
|
|
|
UObject* GetMetaSound() const;
|
|
|
|
|
void InitBuilder(UObject& MetaSound);
|
|
|
|
|
|
|
|
|
|
TStrongObjectPtr<UMetaSoundBuilderBase> Builder;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class FMetasoundDetailCustomization : public FMetaSoundDetailCustomizationBase
|
2020-08-05 12:47:19 -04:00
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
FMetasoundDetailCustomization(FName InDocumentPropertyName);
|
2024-06-10 13:41:25 -04:00
|
|
|
virtual ~FMetasoundDetailCustomization() = default;
|
2020-07-30 16:57:04 -04:00
|
|
|
|
2020-08-05 12:47:19 -04:00
|
|
|
// IDetailCustomization interface
|
|
|
|
|
virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override;
|
|
|
|
|
// End of IDetailCustomization interface
|
2020-07-30 16:57:04 -04:00
|
|
|
|
2020-08-05 12:47:19 -04:00
|
|
|
private:
|
2024-06-20 15:27:03 -04:00
|
|
|
FName GetInterfaceVersionsPropertyPath() const;
|
|
|
|
|
FName GetRootClassPropertyPath() const;
|
2020-08-05 12:47:19 -04:00
|
|
|
FName GetMetadataPropertyPath() const;
|
2020-07-30 16:57:04 -04:00
|
|
|
|
2022-03-01 14:29:17 -05:00
|
|
|
FName DocumentPropertyName;
|
|
|
|
|
};
|
|
|
|
|
|
2024-06-20 15:27:03 -04:00
|
|
|
class FMetasoundPagesDetailCustomization : public FMetaSoundDetailCustomizationBase
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
FMetasoundPagesDetailCustomization();
|
|
|
|
|
|
|
|
|
|
// IDetailCustomization interface
|
|
|
|
|
virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override;
|
|
|
|
|
// End of IDetailCustomization interface
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
UObject& GetMetaSound() const;
|
|
|
|
|
void RebuildImplemented();
|
2024-07-16 12:40:36 -04:00
|
|
|
void RefreshView();
|
2024-06-20 15:27:03 -04:00
|
|
|
void UpdateItemNames();
|
|
|
|
|
|
|
|
|
|
TArray<TSharedPtr<FString>> AddableItems;
|
|
|
|
|
|
|
|
|
|
TSet<FName> ImplementedNames;
|
|
|
|
|
TSharedPtr<SSearchableComboBox> ComboBox;
|
|
|
|
|
TSharedPtr<SVerticalBox> EntryWidgets;
|
|
|
|
|
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);
|
2024-07-16 12:40:36 -04:00
|
|
|
void OnPageSet(const Frontend::FDocumentMutatePageArgs& Args);
|
2024-06-20 15:27:03 -04:00
|
|
|
void OnRemovingPage(const Frontend::FDocumentMutatePageArgs& Args);
|
|
|
|
|
};
|
|
|
|
|
TSharedPtr<FPageListener> PageListener;
|
|
|
|
|
};
|
|
|
|
|
|
2024-06-10 13:41:25 -04:00
|
|
|
class FMetasoundInterfacesDetailCustomization : public FMetaSoundDetailCustomizationBase
|
2022-03-01 14:29:17 -05:00
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// IDetailCustomization interface
|
|
|
|
|
virtual void CustomizeDetails(IDetailLayoutBuilder& DetailLayout) override;
|
|
|
|
|
// End of IDetailCustomization interface
|
|
|
|
|
|
|
|
|
|
private:
|
2021-11-22 15:55:50 -05:00
|
|
|
void UpdateInterfaceNames();
|
|
|
|
|
|
|
|
|
|
TArray<TSharedPtr<FString>> AddableInterfaceNames;
|
|
|
|
|
|
|
|
|
|
TSet<FName> ImplementedInterfaceNames;
|
|
|
|
|
TSharedPtr<SSearchableComboBox> InterfaceComboBox;
|
2020-08-05 12:47:19 -04:00
|
|
|
};
|
|
|
|
|
} // namespace Editor
|
|
|
|
|
} // namespace Metasound
|