2019-12-26 14:45:42 -05:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
2019-09-10 11:35:20 -04:00
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "CoreMinimal.h"
|
2021-10-12 21:21:22 -04:00
|
|
|
#include "Misc/NamePermissionList.h"
|
2019-09-10 11:35:20 -04:00
|
|
|
|
|
|
|
|
#include "ToolMenuBase.generated.h"
|
|
|
|
|
|
|
|
|
|
class FMultiBox;
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
UENUM()
|
|
|
|
|
enum class ECustomizedToolMenuVisibility
|
|
|
|
|
{
|
|
|
|
|
None,
|
|
|
|
|
Visible,
|
|
|
|
|
Hidden
|
|
|
|
|
};
|
|
|
|
|
|
2019-09-10 11:35:20 -04:00
|
|
|
USTRUCT()
|
|
|
|
|
struct FCustomizedToolMenuEntry
|
|
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
FCustomizedToolMenuEntry() :
|
|
|
|
|
Visibility(ECustomizedToolMenuVisibility::None)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-10 11:35:20 -04:00
|
|
|
UPROPERTY()
|
2019-10-01 20:41:42 -04:00
|
|
|
ECustomizedToolMenuVisibility Visibility;
|
2019-09-10 11:35:20 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
USTRUCT()
|
|
|
|
|
struct FCustomizedToolMenuSection
|
|
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
2019-10-01 20:41:42 -04:00
|
|
|
|
|
|
|
|
FCustomizedToolMenuSection() :
|
|
|
|
|
Visibility(ECustomizedToolMenuVisibility::None)
|
|
|
|
|
{
|
|
|
|
|
}
|
2019-09-10 11:35:20 -04:00
|
|
|
|
|
|
|
|
UPROPERTY()
|
2019-10-01 20:41:42 -04:00
|
|
|
ECustomizedToolMenuVisibility Visibility;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
USTRUCT()
|
|
|
|
|
struct FCustomizedToolMenuNameArray
|
|
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
|
|
|
UPROPERTY()
|
|
|
|
|
TArray<FName> Names;
|
2019-09-10 11:35:20 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
USTRUCT()
|
|
|
|
|
struct SLATE_API FCustomizedToolMenu
|
|
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
|
|
|
UPROPERTY()
|
|
|
|
|
FName Name;
|
|
|
|
|
|
|
|
|
|
UPROPERTY()
|
2019-10-01 20:41:42 -04:00
|
|
|
TMap<FName, FCustomizedToolMenuEntry> Entries;
|
2019-09-10 11:35:20 -04:00
|
|
|
|
|
|
|
|
UPROPERTY()
|
2019-10-01 20:41:42 -04:00
|
|
|
TMap<FName, FCustomizedToolMenuSection> Sections;
|
2019-09-10 11:35:20 -04:00
|
|
|
|
|
|
|
|
UPROPERTY()
|
2019-10-01 20:41:42 -04:00
|
|
|
TMap<FName, FCustomizedToolMenuNameArray> EntryOrder;
|
2019-09-10 11:35:20 -04:00
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
UPROPERTY()
|
|
|
|
|
TArray<FName> SectionOrder;
|
|
|
|
|
|
2021-10-12 21:21:22 -04:00
|
|
|
FNamePermissionList MenuPermissions;
|
2019-11-06 13:52:20 -05:00
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
FCustomizedToolMenuEntry* FindEntry(const FName InEntryName);
|
|
|
|
|
const FCustomizedToolMenuEntry* FindEntry(const FName InEntryName) const;
|
|
|
|
|
FCustomizedToolMenuEntry* AddEntry(const FName InEntryName);
|
|
|
|
|
ECustomizedToolMenuVisibility GetEntryVisiblity(const FName InSectionName) const;
|
|
|
|
|
bool IsEntryHidden(const FName InEntryName) const;
|
|
|
|
|
FName GetEntrySectionName(const FName InEntryName) const;
|
2019-09-10 11:35:20 -04:00
|
|
|
|
|
|
|
|
FCustomizedToolMenuSection* FindSection(const FName InSectionName);
|
|
|
|
|
const FCustomizedToolMenuSection* FindSection(const FName InSectionName) const;
|
2019-10-01 20:41:42 -04:00
|
|
|
FCustomizedToolMenuSection* AddSection(const FName InSectionName);
|
|
|
|
|
ECustomizedToolMenuVisibility GetSectionVisiblity(const FName InSectionName) const;
|
|
|
|
|
bool IsSectionHidden(const FName InSectionName) const;
|
|
|
|
|
};
|
2019-09-10 11:35:20 -04:00
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
struct SLATE_API FCustomizedToolMenuHierarchy
|
|
|
|
|
{
|
|
|
|
|
FName GetEntrySectionName(const FName InEntryName) const;
|
|
|
|
|
bool IsEntryHidden(const FName InEntryName) const;
|
2019-09-10 11:35:20 -04:00
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
bool IsSectionHidden(const FName InSectionName) const;
|
|
|
|
|
|
|
|
|
|
FCustomizedToolMenu GenerateFlattened() const;
|
|
|
|
|
|
|
|
|
|
TArray<const FCustomizedToolMenu*> Hierarchy;
|
2020-06-23 18:40:00 -04:00
|
|
|
TArray<const FCustomizedToolMenu*> RuntimeHierarchy;
|
2019-09-10 11:35:20 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
UCLASS(Abstract)
|
|
|
|
|
class SLATE_API UToolMenuBase : public UObject
|
|
|
|
|
{
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual bool IsEditing() const { return false; }
|
|
|
|
|
virtual FName GetSectionName(const FName InEntryName) const { return NAME_None; }
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
virtual bool ContainsSection(const FName InName) const { return false; }
|
|
|
|
|
virtual bool ContainsEntry(const FName InName) const { return false; }
|
|
|
|
|
|
2019-09-10 11:35:20 -04:00
|
|
|
virtual FCustomizedToolMenu* FindMenuCustomization() const { return nullptr; }
|
|
|
|
|
virtual FCustomizedToolMenu* AddMenuCustomization() const { return nullptr; }
|
2019-10-01 20:41:42 -04:00
|
|
|
virtual FCustomizedToolMenuHierarchy GetMenuCustomizationHierarchy() const { return FCustomizedToolMenuHierarchy(); }
|
|
|
|
|
virtual void UpdateMenuCustomizationFromMultibox(const TSharedRef<const FMultiBox>& InMultiBox) {}
|
2021-03-01 18:20:08 -04:00
|
|
|
virtual void OnMenuDestroyed() {}
|
2019-09-10 11:35:20 -04:00
|
|
|
};
|
2019-10-01 20:41:42 -04:00
|
|
|
|