// Copyright Epic Games, Inc. All Rights Reserved. #include "WorkspaceMenuStructureModule.h" #include "Textures/SlateIcon.h" #include "Framework/Docking/WorkspaceItem.h" #include "WorkspaceMenuStructure.h" #include "EditorStyleSet.h" IMPLEMENT_MODULE( FWorkspaceMenuStructureModule, WorkspaceMenuStructure ); #define LOCTEXT_NAMESPACE "UnrealEditor" class FWorkspaceMenuStructure : public IWorkspaceMenuStructure { public: virtual TSharedRef GetStructureRoot() const override { return MenuRoot.ToSharedRef(); } virtual TSharedRef GetToolsStructureRoot() const override { return ToolsMenuRoot.ToSharedRef(); } virtual TSharedRef GetLevelEditorCategory() const override { return LevelEditorCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorViewportsCategory() const override { return LevelEditorViewportsCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorDetailsCategory() const override { return LevelEditorDetailsCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorModesCategory() const override { return LevelEditorModesCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorCinematicsCategory() const override { return LevelEditorCinematicsCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorVirtualProductionCategory() const override { return LevelEditorVirtualProductionCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorWorldPartitionCategory() const override { return LevelEditorWorldPartitionCategory.ToSharedRef(); } virtual TSharedRef GetLevelEditorOutlinerCategory() const override { return LevelEditorOutlinerCategory.ToSharedRef(); } virtual TSharedRef GetToolsCategory() const override { return ToolsCategory.ToSharedRef(); } virtual TSharedRef GetDeveloperToolsDebugCategory() const override { return DeveloperToolsDebugCategory.ToSharedRef(); } virtual TSharedRef GetDeveloperToolsLogCategory() const override { return DeveloperToolsLogCategory.ToSharedRef(); } virtual TSharedRef GetDeveloperToolsProfilingCategory() const override { return DeveloperToolsProfilingCategory.ToSharedRef(); } virtual TSharedRef GetDeveloperToolsAuditCategory() const override { return DeveloperToolsAuditCategory.ToSharedRef(); } virtual TSharedRef GetDeveloperToolsPlatformsCategory() const override { return DeveloperToolsPlatformsCategory.ToSharedRef(); } virtual TSharedRef GetDeveloperToolsMiscCategory() const override { return DeveloperToolsMiscCategory.ToSharedRef(); } virtual TSharedRef GetAutomationToolsCategory() const override { return AutomationToolsCategory.ToSharedRef(); } virtual TSharedRef GetEditOptions() const override { return EditOptions.ToSharedRef(); } void ResetLevelEditorCategory() { LevelEditorCategory->ClearItems(); LevelEditorViewportsCategory = LevelEditorCategory->AddGroup(LOCTEXT( "WorkspaceMenu_LevelEditorViewportCategory", "Viewports" ), LOCTEXT( "WorkspaceMenu_LevelEditorViewportCategoryTooltip", "Open a Viewport tab." ), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.Viewports"), true); LevelEditorDetailsCategory = LevelEditorCategory->AddGroup(LOCTEXT("WorkspaceMenu_LevelEditorDetailCategory", "Details" ), LOCTEXT("WorkspaceMenu_LevelEditorDetailCategoryTooltip", "Open a Details tab." ), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.Details"), true ); LevelEditorCinematicsCategory = LevelEditorCategory->AddGroup(LOCTEXT("WorkspaceMenu_LevelEditorCinematicsCategory", "Cinematics"), LOCTEXT("WorkspaceMenu_LevelEditorCinematicsCategoryTooltip", "Open a Cinematics tab."), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.Cinematics"), true); LevelEditorVirtualProductionCategory = LevelEditorCategory->AddGroup(LOCTEXT("WorkspaceMenu_LevelEditorVirtualProductionCategory", "Virtual Production"), LOCTEXT("WorkspaceMenu_LevelEditorVirtualProductionCategoryTooltip", "Open a Virtual Production tab."), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.VirtualProduction"), true); LevelEditorModesCategory = LevelEditorCategory->AddGroup(LOCTEXT("WorkspaceMenu_LevelEditorToolsCategory", "Editor Modes" ), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.EditorModes"), true ); LevelEditorWorldPartitionCategory = LevelEditorCategory->AddGroup(LOCTEXT("WorkspaceMenu_LevelEditorWorldPartitionCategory", "World Partition"), LOCTEXT("WorkspaceMenu_LevelEditorWorldPartitionCategoryTooltip", "Open a World Partition tab."), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.WorldPartition"), true); LevelEditorOutlinerCategory = LevelEditorCategory->AddGroup(LOCTEXT("WorkspaceMenu_LevelEditorOutlinerCategory", "Outliner"), LOCTEXT("WorkspaceMenu_LevelEditorOutlinerCategoryTooltip", "Open an Outliner tab."), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.Outliner"), true); } void ResetToolsCategory() { // Developer tools sections DeveloperToolsCategory->ClearItems(); DeveloperToolsSubMenuDebugCategory = DeveloperToolsCategory->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsDebugCategory", "Debug"), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.Debug"), true); DeveloperToolsDebugCategory = DeveloperToolsSubMenuDebugCategory->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsDebugCategory", "Debug"), FSlateIcon(), true); AutomationToolsCategory = DeveloperToolsSubMenuDebugCategory->AddGroup(LOCTEXT("WorkspaceMenu_AutomationToolsCategory", "Testing"), FSlateIcon(), true); DeveloperToolsProfilingCategory = DeveloperToolsCategory->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsProfilingCategory", "Profile"), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Profile"), true); DeveloperToolsAuditCategory = DeveloperToolsCategory->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsAuditCategory", "Audit"), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Audit"), true); DeveloperToolsPlatformsCategory = DeveloperToolsCategory->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsPlatforms:WCategory", "Platforms"), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Platforms"), true); DeveloperToolsMiscCategory = DeveloperToolsCategory->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsMiscCategory", "Miscellaneous"), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Tabs.Debug"), true); } public: FWorkspaceMenuStructure() : MenuRoot ( FWorkspaceItem::NewGroup(LOCTEXT( "WorkspaceMenu_Root", "Menu Root" )) ) , ToolsMenuRoot ( FWorkspaceItem::NewGroup(LOCTEXT( "WorkspaceToolsMenu_Root", "Tools Menu Root" )) ) , LevelEditorCategory ( MenuRoot->AddGroup(LOCTEXT( "WorkspaceMenu_LevelEditorCategory", "Level Editor" ), FSlateIcon(), true) ) , ToolsCategory ( ToolsMenuRoot->AddGroup(LOCTEXT( "WorkspaceMenu_ToolsCategory", "Tools" ), FSlateIcon(), true) ) , DeveloperToolsCategory ( ToolsMenuRoot->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsCategory", "Instrumentation"), FSlateIcon()) ) , DeveloperToolsLogCategory ( MenuRoot->AddGroup(LOCTEXT("WorkspaceMenu_DeveloperToolsLogCategory", "Log"), FSlateIcon(), true)) , EditOptions( FWorkspaceItem::NewGroup(LOCTEXT( "WorkspaceEdit_Options", "Edit Options" )) ) { ResetLevelEditorCategory(); ResetToolsCategory(); } virtual ~FWorkspaceMenuStructure() {} private: TSharedPtr MenuRoot; TSharedPtr ToolsMenuRoot; TSharedPtr LevelEditorCategory; TSharedPtr LevelEditorViewportsCategory; TSharedPtr LevelEditorDetailsCategory; TSharedPtr LevelEditorCinematicsCategory; TSharedPtr LevelEditorVirtualProductionCategory; TSharedPtr LevelEditorModesCategory; TSharedPtr LevelEditorWorldPartitionCategory; TSharedPtr LevelEditorOutlinerCategory; TSharedPtr ToolsCategory; TSharedPtr DeveloperToolsCategory; TSharedPtr DeveloperToolsLogCategory; TSharedPtr DeveloperToolsSubMenuDebugCategory; TSharedPtr DeveloperToolsDebugCategory; TSharedPtr DeveloperToolsAuditCategory; TSharedPtr DeveloperToolsProfilingCategory; TSharedPtr DeveloperToolsPlatformsCategory; TSharedPtr DeveloperToolsMiscCategory; TSharedPtr AutomationToolsCategory; TSharedPtr EditOptions; }; void FWorkspaceMenuStructureModule::StartupModule() { WorkspaceMenuStructure = MakeShareable(new FWorkspaceMenuStructure); } void FWorkspaceMenuStructureModule::ShutdownModule() { WorkspaceMenuStructure.Reset(); } const IWorkspaceMenuStructure& FWorkspaceMenuStructureModule::GetWorkspaceMenuStructure() const { check(WorkspaceMenuStructure.IsValid()); return *WorkspaceMenuStructure; } void FWorkspaceMenuStructureModule::ResetLevelEditorCategory() { check(WorkspaceMenuStructure.IsValid()); WorkspaceMenuStructure->ResetLevelEditorCategory(); } void FWorkspaceMenuStructureModule::ResetToolsCategory() { check(WorkspaceMenuStructure.IsValid()); WorkspaceMenuStructure->ResetToolsCategory(); } #undef LOCTEXT_NAMESPACE