// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "UObject/Object.h" #include "Elements/Framework/TypedElementHandle.h" #include "LevelEditorMenuContext.generated.h" class SLevelEditor; class ILevelEditor; class UActorComponent; class SLevelViewport; class SLevelViewportToolBar; class FLevelEditorViewportClient; class UTypedElementSelectionSet; UCLASS() class LEVELEDITOR_API ULevelEditorMenuContext : public UObject { GENERATED_BODY() public: TWeakPtr LevelEditor; }; /** Enum to describe what a level editor context menu should be built for */ UENUM() enum class ELevelEditorMenuContext : uint8 { /** This context menu is applicable to a viewport (limited subset of entries) */ Viewport, /** This context menu is applicable to the Scene Outliner (disables click-position-based menu items) */ SceneOutliner, /** This is the replica of the context menu that appears in the main menu bar (lists all entries) */ MainMenu, }; UCLASS() class LEVELEDITOR_API ULevelEditorContextMenuContext : public UObject { GENERATED_BODY() public: TWeakPtr LevelEditor; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="LevelEditor|Menu") ELevelEditorMenuContext ContextType; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="LevelEditor|Menu") TObjectPtr CurrentSelection; /** If the ContextType is Viewport this property can be set to the HitProxy element that triggered the ContextMenu. */ FTypedElementHandle HitProxyElement; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="LevelEditor|Menu") FVector CursorWorldLocation; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="LevelEditor|Menu") TArray> SelectedComponents; /** If the ContextType is Viewport this property can be set to the HitProxy actor that triggered the ContextMenu. */ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="LevelEditor|Menu") TObjectPtr HitProxyActor = nullptr; UFUNCTION(BlueprintCallable, Category = "LevelEditor | Menu", DisplayName="Get Hit Proxy Element", meta=(ScriptName="GetHitProxyElement")) FScriptTypedElementHandle GetScriptHitProxyElement(); }; UCLASS() class LEVELEDITOR_API ULevelViewportToolBarContext : public UObject { GENERATED_BODY() public: TWeakPtr LevelViewportToolBarWidget; TWeakPtr LevelViewportToolBarWidgetConst; FLevelEditorViewportClient* GetLevelViewportClient(); }; UCLASS() class LEVELEDITOR_API UQuickActionMenuContext : public UObject { GENERATED_BODY() public: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="LevelEditor|Menu") TObjectPtr CurrentSelection; };