// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Containers/SortedMap.h" #include "ToolMenuContext.generated.h" struct FUIAction; class FUICommandInfo; class FUICommandList; class FTabManager; class FExtender; UCLASS(BlueprintType, Abstract) class TOOLMENUS_API UToolMenuContextBase : public UObject { GENERATED_BODY() }; UCLASS() class TOOLMENUS_API USlateTabManagerContext : public UToolMenuContextBase { GENERATED_BODY() public: TWeakPtr TabManager; }; USTRUCT(BlueprintType) struct TOOLMENUS_API FToolMenuContext { GENERATED_BODY() public: using FContextObjectCleanup = TFunction; FToolMenuContext() = default; FToolMenuContext(UObject* InContext); FToolMenuContext(UObject* InContext, FContextObjectCleanup&& InCleanup); 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(); } UObject* FindByClass(UClass* InClass) const; void AppendCommandList(const TSharedRef& InCommandList); void AppendCommandList(const TSharedPtr& InCommandList); const FUIAction* GetActionForCommand(TSharedPtr Command, TSharedPtr& OutCommandList) const; const FUIAction* GetActionForCommand(TSharedPtr Command) const; void AddExtender(const TSharedPtr& InExtender); TSharedPtr GetAllExtenders() const; void ResetExtenders(); void AppendObjects(const TArray& InObjects); void AddObject(UObject* InObject); void AddObject(UObject* InObject, FContextObjectCleanup&& InCleanup); void CleanupObjects(); friend class UToolMenus; friend class UToolMenu; friend struct FToolMenuEntry; bool IsEditing() const { return bIsEditing; } void SetIsEditing(bool InIsEditing) { bIsEditing = InIsEditing; } private: void Empty(); bool bIsEditing = false; UPROPERTY() TArray> ContextObjects; TSortedMap, FContextObjectCleanup> ContextObjectCleanupFuncs; TArray> CommandLists; TSharedPtr CommandList; TArray> Extenders; };