// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Containers/SortedMap.h" #include "ToolMenuContext.generated.h" #define UE_API TOOLMENUS_API struct FUIAction; class FUICommandInfo; class FUICommandList; class FTabManager; class FExtender; UCLASS(MinimalAPI, BlueprintType, Abstract) class UToolMenuContextBase : public UObject { GENERATED_BODY() }; UCLASS(MinimalAPI) class USlateTabManagerContext : public UToolMenuContextBase { GENERATED_BODY() public: TWeakPtr TabManager; }; USTRUCT(BlueprintType) struct FToolMenuContext { GENERATED_BODY() public: using FContextObjectCleanup = TFunction; using FContextCleanup = TFunction; FToolMenuContext() = default; UE_API FToolMenuContext(UObject* InContext); UE_API FToolMenuContext(UObject* InContext, FContextObjectCleanup&& InCleanup); UE_API FToolMenuContext(TSharedPtr InCommandList, TSharedPtr InExtender = TSharedPtr(), UObject* InContext = nullptr); template TContextType* FindContext() const { for (UObject* Object : ContextObjects) { if (TContextType* Result = Cast(Object)) { return Result; } } return nullptr; } template UE_DEPRECATED(4.27, "Find is deprecated. Use the FindContext instead.") TContextType* Find() const { return FindContext(); } UE_API UObject* FindByClass(UClass* InClass) const; UE_API void AppendCommandList(const TSharedRef& InCommandList); UE_API void AppendCommandList(const TSharedPtr& InCommandList); UE_API const FUIAction* GetActionForCommand(TSharedPtr Command, TSharedPtr& OutCommandList) const; UE_API const FUIAction* GetActionForCommand(TSharedPtr Command) const; UE_API void AddExtender(const TSharedPtr& InExtender); UE_API TSharedPtr GetAllExtenders() const; UE_API void ResetExtenders(); UE_API void AppendObjects(const TArray& InObjects); UE_API void AddObject(UObject* InObject); UE_API void AddObject(UObject* InObject, FContextObjectCleanup&& InCleanup); UE_API void AddCleanup(FContextCleanup&& InCleanup); UE_API void CleanupObjects(); friend class UToolMenus; friend class UToolMenu; friend struct FToolMenuEntry; friend class UToolMenuContextExtensions; bool IsEditing() const { return bIsEditing; } void SetIsEditing(bool InIsEditing) { bIsEditing = InIsEditing; } private: UE_API void Empty(); bool bIsEditing = false; UPROPERTY() TArray> ContextObjects; TSortedMap, FContextObjectCleanup> ContextObjectCleanupFuncs; TArray ContextCleanupFuncs; TArray> CommandLists; TSharedPtr CommandList; TArray> Extenders; }; #undef UE_API