Files
UnrealEngineUWP/Engine/Source/Developer/ToolMenus/Public/ToolMenuEntry.h
aurel cordonnier 50944fd712 Merge UE5/RES @ 16162155 to UE5/Main
This represents UE4/Main @ 16130047 and Dev-PerfTest @ 16126156

[CL 16163576 by aurel cordonnier in ue5-main branch]
2021-04-29 19:32:06 -04:00

210 lines
9.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ToolMenuOwner.h"
#include "ToolMenuDelegates.h"
#include "ToolMenuMisc.h"
#include "Misc/Attribute.h"
#include "Framework/MultiBox/MultiBoxDefs.h"
#include "Framework/Commands/UICommandInfo.h"
#include "UObject/TextProperty.h"
#include "ToolMenuEntry.generated.h"
class UToolMenuEntryScript;
struct FKeyEvent;
struct FToolMenuEntrySubMenuData
{
public:
FToolMenuEntrySubMenuData() :
bIsSubMenu(false),
bOpenSubMenuOnClick(false),
bAutoCollapse(false)
{
}
bool bIsSubMenu;
bool bOpenSubMenuOnClick;
/** Entry placed into the parent's menu when there is only one entry */
bool bAutoCollapse;
FNewToolMenuChoice ConstructMenu;
};
struct FToolMenuEntryOptionsDropdownData
{
FNewToolMenuChoice MenuContentGenerator;
TAttribute<FText> ToolTip;
FUIAction Action;
};
struct FToolMenuEntryToolBarData
{
public:
FToolMenuEntryToolBarData() :
bSimpleComboBox(false),
bIsFocusable(false),
bForceSmallIcons(false)
{
}
/** Delegate that generates a widget for this combo button's menu content. Called when the menu is summoned. */
FNewToolMenuChoice ComboButtonContextMenuGenerator;
/** Legacy delegate that generates a widget for this combo button's menu content. Called when the menu is summoned. */
FNewToolBarDelegateLegacy ConstructLegacy;
TSharedPtr<FToolMenuEntryOptionsDropdownData> OptionsDropdownData;
bool bSimpleComboBox;
/** Whether ToolBar will have Focusable buttons */
bool bIsFocusable;
/** Whether this toolbar should always use small icons, regardless of the current settings */
bool bForceSmallIcons;
};
struct FToolMenuEntryWidgetData
{
public:
FToolMenuEntryWidgetData() :
bNoIndent(false),
bSearchable(false),
bNoPadding(false)
{
}
/** Remove the padding from the left of the widget that lines it up with other menu items */
bool bNoIndent;
/** If true, widget will be searchable */
bool bSearchable;
/** If true, no padding will be added */
bool bNoPadding;
};
USTRUCT(BlueprintType)
struct TOOLMENUS_API FToolMenuEntry
{
GENERATED_BODY()
FToolMenuEntry();
FToolMenuEntry(const FToolMenuOwner InOwner, const FName InName, EMultiBlockType InType);
static FToolMenuEntry InitMenuEntry(const FName InName, const TAttribute<FText>& InLabel, const TAttribute<FText>& InToolTip, const TAttribute<FSlateIcon>& InIcon, const FToolUIActionChoice& InAction, const EUserInterfaceActionType UserInterfaceActionType = EUserInterfaceActionType::Button, const FName InTutorialHighlightName = NAME_None);
static FToolMenuEntry InitMenuEntry(const TSharedPtr< const FUICommandInfo >& InCommand, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), const FName InTutorialHighlightName = NAME_None, const TOptional<FName> InNameOverride = TOptional<FName>());
static FToolMenuEntry InitMenuEntry(const FName InNameOverride, const TSharedPtr< const FUICommandInfo >& InCommand, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), const FName InTutorialHighlightName = NAME_None);
static FToolMenuEntry InitMenuEntryWithCommandList(const TSharedPtr<const FUICommandInfo>& InCommand, const TSharedPtr<const FUICommandList>& InCommandList, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), const FName InTutorialHighlightName = NAME_None, const TOptional<FName> InNameOverride = TOptional<FName>());
static FToolMenuEntry InitMenuEntry(const FName InName, const FToolUIActionChoice& InAction, const TSharedRef<SWidget>& Widget);
static FToolMenuEntry InitSubMenu(const FName InName, const TAttribute<FText>& InLabel, const TAttribute<FText>& InToolTip, const FNewToolMenuChoice& InMakeMenu, const FToolUIActionChoice& InAction, const EUserInterfaceActionType InUserInterfaceActionType, bool bInOpenSubMenuOnClick = false, const TAttribute<FSlateIcon>& InIcon = TAttribute<FSlateIcon>(), const bool bShouldCloseWindowAfterMenuSelection = true);
static FToolMenuEntry InitSubMenu(const FName InName, const TAttribute<FText>& InLabel, const TAttribute<FText>& InToolTip, const FNewToolMenuChoice& InMakeMenu, bool bInOpenSubMenuOnClick = false, const TAttribute<FSlateIcon>& InIcon = TAttribute<FSlateIcon>(), const bool bShouldCloseWindowAfterMenuSelection = true);
static FToolMenuEntry InitSubMenu(const FName InName, const FToolUIActionChoice& InAction, const TSharedRef<SWidget>& InWidget, const FNewToolMenuChoice& InMakeMenu, bool bShouldCloseWindowAfterMenuSelection = true);
static FToolMenuEntry InitToolBarButton(const FName InName, const FToolUIActionChoice& InAction, const TAttribute<FText>& InLabel = TAttribute<FText>(), const TAttribute<FText>& InToolTip = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIcon = TAttribute<FSlateIcon>(), const EUserInterfaceActionType UserInterfaceActionType = EUserInterfaceActionType::Button, FName InTutorialHighlightName = NAME_None);
static FToolMenuEntry InitToolBarButton(const TSharedPtr< const FUICommandInfo >& InCommand, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), FName InTutorialHighlightName = NAME_None, const TOptional<FName> InNameOverride = TOptional<FName>());
static FToolMenuEntry InitComboButton(const FName InName, const FToolUIActionChoice& InAction, const FNewToolMenuChoice& InMenuContentGenerator, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), bool bInSimpleComboBox = false, FName InTutorialHighlightName = NAME_None);
static FToolMenuEntry InitSeparator(const FName InName);
static FToolMenuEntry InitWidget(const FName InName, const TSharedRef<SWidget>& InWidget, const FText& Label, bool bNoIndent = false, bool bSearchable = true, bool bNoPadding = false);
bool IsSubMenu() const { return SubMenuData.bIsSubMenu; }
bool IsConstructLegacy() const { return ConstructLegacy.IsBound(); }
const FUIAction* GetActionForCommand(const FToolMenuContext& InContext, TSharedPtr<const FUICommandList>& OutCommandList) const;
void SetCommandList(const TSharedPtr<const FUICommandList>& InCommandList);
void AddOptionsDropdown(FUIAction InAction, const FOnGetContent InMenuContentGenerator, const TAttribute<FText>& InToolTip = TAttribute<FText>());
void AddKeybindFromCommand(const TSharedPtr< const FUICommandInfo >& InCommand);
bool IsCommandKeybindOnly() const;
bool CommandAcceptsInput(const FKeyEvent& InKeyEvent) const;
bool TryExecuteToolUIAction(const FToolMenuContext& InContext);
friend struct FToolMenuSection;
friend class UToolMenuEntryScript;
private:
void SetCommand(const TSharedPtr< const FUICommandInfo >& InCommand, TOptional<FName> InName, const TAttribute<FText>& InLabel, const TAttribute<FText>& InToolTip, const TAttribute<FSlateIcon>& InIcon);
void ResetActions();
bool IsScriptObjectDynamicConstruct() const;
bool IsNonLegacyDynamicConstruct() const;
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
FName Name;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
FToolMenuOwner Owner;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
EMultiBlockType Type;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
EUserInterfaceActionType UserInterfaceActionType;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
FName TutorialHighlightName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
FToolMenuInsert InsertPosition;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
bool bShouldCloseWindowAfterMenuSelection;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
TObjectPtr<UToolMenuEntryScript> ScriptObject;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Tool Menus")
FName StyleNameOverride;
FToolMenuEntrySubMenuData SubMenuData;
FToolMenuEntryToolBarData ToolBarData;
FToolMenuEntryWidgetData WidgetData;
/** Optional delegate that returns a widget to use as this menu entry */
FNewToolMenuWidget MakeWidget;
TAttribute<FText> Label;
TAttribute<FText> ToolTip;
TAttribute<FSlateIcon> Icon;
private:
friend class UToolMenus;
friend class UToolMenuEntryExtensions;
friend class FPopulateMenuBuilderWithToolMenuEntry;
FToolUIActionChoice Action;
FToolMenuStringCommand StringExecuteAction;
TSharedPtr< const FUICommandInfo > Command;
TSharedPtr< const FUICommandList > CommandList;
FNewToolMenuSectionDelegate Construct;
FNewToolMenuDelegateLegacy ConstructLegacy;
bool bAddedDuringRegister;
UPROPERTY()
bool bCommandIsKeybindOnly;
};