void SMessagingDebugger::Construct(const FArguments& InArgs, const TSharedRef<SDockTab>& ConstructUnderMajorTab, const TSharedPtr<SWindow>& ConstructUnderWindow, const IMessageTracerRef& InMessageTracer, const TSharedRef<ISlateStyle>& InStyle) { MessageTracer = InMessageTracer; Style = InStyle; // bind commands FUICommandList& ActionList = *CommandList; { const FMessagingDebuggerCommands& Commands = FMessagingDebuggerCommands::Get(); ActionList.MapAction(Commands.BreakDebugger, FExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleBreakDebuggerCommandExecute), FCanExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleBreakDebuggerCommandCanExecute)); ActionList.MapAction(Commands.ClearHistory, FExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleClearHistoryCommandExecute), FCanExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleClearHistoryCommandCanExecute)); ActionList.MapAction(Commands.ContinueDebugger, FExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleContinueDebuggerCommandExecute), FCanExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleContinueDebuggerCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SMessagingDebugger::HandleContinueDebuggerCommandIsVisible)); ActionList.MapAction(Commands.StartDebugger, FExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleStartDebuggerCommandExecute), FCanExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleStartDebuggerCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SMessagingDebugger::HandleStartDebuggerCommandIsVisible)); ActionList.MapAction(Commands.StepDebugger, FExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleStepDebuggerCommandExecute), FCanExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleStepDebuggerCommandCanExecute)); ActionList.MapAction(Commands.StopDebugger, FExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleStopDebuggerCommandExecute), FCanExecuteAction::CreateRaw(this, &SMessagingDebugger::HandleStopDebuggerCommandCanExecute)); } // create & initialize tab manager TabManager = FGlobalTabmanager::Get()->NewTabManager(ConstructUnderMajorTab); { TSharedRef<FWorkspaceItem> AppMenuGroup = TabManager->AddLocalWorkspaceMenuCategory(LOCTEXT("MessagingDebuggerGroupName", "Messaging Debugger")); TabManager->RegisterTabSpawner(BreakpointsTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, BreakpointsTabId)) .SetDisplayName(LOCTEXT("BreakpointsTabTitle", "Breakpoints")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "BreakpointsTabIcon")); TabManager->RegisterTabSpawner(EndpointDetailsTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, EndpointDetailsTabId)) .SetDisplayName(LOCTEXT("EndpointDetailsTabTitle", "Endpoint Details")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "EndpointDetailsTabIcon")); TabManager->RegisterTabSpawner(EndpointsTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, EndpointsTabId)) .SetDisplayName(LOCTEXT("EndpointsTabTitle", "Endpoints")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "EndpointsTabIcon")); TabManager->RegisterTabSpawner(InteractionGraphTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, InteractionGraphTabId)) .SetDisplayName(LOCTEXT("InteractionGraphTabTitle", "Interaction Graph")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "InteractionGraphTabIcon")); TabManager->RegisterTabSpawner(InterceptorsTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, InterceptorsTabId)) .SetDisplayName(LOCTEXT("InterceptorsTabTitle", "Interceptors")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "InterceptorsTabIcon")); TabManager->RegisterTabSpawner(MessageDataTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, MessageDataTabId)) .SetDisplayName(LOCTEXT("MessageDataTabTitle", "Message Data")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "MessageDataTabIcon")); TabManager->RegisterTabSpawner(MessageDetailsTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, MessageDetailsTabId)) .SetDisplayName(LOCTEXT("MessageDetailsTabTitle", "Message Details")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "MessageDetailsTabIcon")); TabManager->RegisterTabSpawner(MessageHistoryTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, MessageHistoryTabId)) .SetDisplayName(LOCTEXT("MessageHistoryTabTitle", "Message History")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "MessageHistoryTabIcon")); TabManager->RegisterTabSpawner(MessageTypesTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, MessageTypesTabId)) .SetDisplayName(LOCTEXT("MessageTypesTabTitle", "Message Types")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "MessageTypesTabIcon")); TabManager->RegisterTabSpawner(ToolbarTabId, FOnSpawnTab::CreateRaw(this, &SMessagingDebugger::HandleTabManagerSpawnTab, ToolbarTabId)) .SetDisplayName(LOCTEXT("ToolbarTabTitle", "Toolbar")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(Style->GetStyleSetName(), "ToolbarTabIcon")); } // create tab layout const TSharedRef<FTabManager::FLayout> Layout = FTabManager::NewLayout("MessagingDebuggerLayout_v1.0") ->AddArea ( FTabManager::NewPrimaryArea() ->SetOrientation(Orient_Horizontal) ->Split ( // left column FTabManager::NewSplitter() ->SetOrientation(Orient_Vertical) ->SetSizeCoefficient(0.25f) ->Split ( FTabManager::NewStack() ->AddTab(EndpointsTabId, ETabState::OpenedTab) ->SetSizeCoefficient(0.5f) ) ->Split ( FTabManager::NewStack() ->AddTab(EndpointDetailsTabId, ETabState::OpenedTab) ->AddTab(InterceptorsTabId, ETabState::OpenedTab) ->SetForegroundTab(EndpointDetailsTabId) ->SetSizeCoefficient(0.5f) ) ) ->Split ( // center column FTabManager::NewSplitter() ->SetOrientation(Orient_Vertical) ->SetSizeCoefficient(0.5f) ->Split ( FTabManager::NewStack() ->AddTab(ToolbarTabId, ETabState::OpenedTab) ->SetHideTabWell(true) )/* ->Split ( FTabManager::NewStack() ->AddTab(InteractionGraphTabName, ETabState::OpenedTab) ->SetHideTabWell(true) )*/ ->Split ( FTabManager::NewStack() ->AddTab(MessageHistoryTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ->SetSizeCoefficient(0.725f) ) ->Split ( FTabManager::NewStack() ->AddTab(BreakpointsTabId, ETabState::OpenedTab) ->AddTab(MessageDetailsTabId, ETabState::OpenedTab) ->SetSizeCoefficient(0.275f) ) ) ->Split ( // right column FTabManager::NewSplitter() ->SetOrientation(Orient_Vertical) ->SetSizeCoefficient(0.25f) ->Split ( FTabManager::NewStack() ->AddTab(MessageTypesTabId, ETabState::OpenedTab) ->SetSizeCoefficient(0.5f) ) ->Split ( FTabManager::NewStack() ->AddTab(MessageDataTabId, ETabState::OpenedTab) ->SetForegroundTab(MessageDetailsTabId) ->SetSizeCoefficient(0.5f) ) ) ); // create & initialize main menu FMenuBarBuilder MenuBarBuilder = FMenuBarBuilder(TSharedPtr<FUICommandList>()); MenuBarBuilder.AddPullDownMenu( LOCTEXT("WindowMenuLabel", "Window"), FText::GetEmpty(), FNewMenuDelegate::CreateStatic(&SMessagingDebugger::FillWindowMenu, TabManager), "Window" ); ChildSlot [ SNew(SVerticalBox) + SVerticalBox::Slot() .AutoHeight() [ MenuBarBuilder.MakeWidget() ] + SVerticalBox::Slot() .FillHeight(1.0f) [ TabManager->RestoreFrom(Layout, ConstructUnderWindow).ToSharedRef() ] ]; ConstructUnderMajorTab->SetOnPersistVisualState(SDockTab::FOnPersistVisualState::CreateRaw(this, &SMessagingDebugger::HandleMajorTabPersistVisualState)); }
void SSessionFrontend::Construct( const FArguments& InArgs, const TSharedRef<SDockTab>& ConstructUnderMajorTab, const TSharedPtr<SWindow>& ConstructUnderWindow ) { InitializeControllers(); // create & initialize tab manager TabManager = FGlobalTabmanager::Get()->NewTabManager(ConstructUnderMajorTab); TSharedRef<FWorkspaceItem> AppMenuGroup = TabManager->AddLocalWorkspaceMenuCategory(LOCTEXT("SessionFrontendMenuGroupName", "Session Frontend")); TabManager->RegisterTabSpawner(AutomationTabId, FOnSpawnTab::CreateRaw(this, &SSessionFrontend::HandleTabManagerSpawnTab, AutomationTabId)) .SetDisplayName(LOCTEXT("AutomationTabTitle", "Automation")) .SetIcon(FSlateIcon(FEditorStyle::GetStyleSetName(), "SessionFrontEnd.Tabs.Tools")) .SetGroup(AppMenuGroup); TabManager->RegisterTabSpawner(SessionBrowserTabId, FOnSpawnTab::CreateRaw(this, &SSessionFrontend::HandleTabManagerSpawnTab, SessionBrowserTabId)) .SetDisplayName(LOCTEXT("SessionBrowserTitle", "Session Browser")) .SetIcon(FSlateIcon(FEditorStyle::GetStyleSetName(), "SessionFrontEnd.Tabs.Tools")) .SetGroup(AppMenuGroup); TabManager->RegisterTabSpawner(SessionConsoleTabId, FOnSpawnTab::CreateRaw(this, &SSessionFrontend::HandleTabManagerSpawnTab, SessionConsoleTabId)) .SetDisplayName(LOCTEXT("ConsoleTabTitle", "Console")) .SetIcon(FSlateIcon(FEditorStyle::GetStyleSetName(), "SessionFrontEnd.Tabs.Tools")) .SetGroup(AppMenuGroup); TabManager->RegisterTabSpawner(SessionScreenTabId, FOnSpawnTab::CreateRaw(this, &SSessionFrontend::HandleTabManagerSpawnTab, SessionScreenTabId)) .SetDisplayName(LOCTEXT("ScreenTabTitle", "Screen Comparison")) .SetIcon(FSlateIcon(FEditorStyle::GetStyleSetName(), "SessionFrontEnd.Tabs.Tools")) .SetGroup(AppMenuGroup); TabManager->RegisterTabSpawner(ProfilerTabId, FOnSpawnTab::CreateRaw(this, &SSessionFrontend::HandleTabManagerSpawnTab, ProfilerTabId)) .SetDisplayName(LOCTEXT("ProfilerTabTitle", "Profiler")) .SetIcon(FSlateIcon(FEditorStyle::GetStyleSetName(), "Profiler.Tab")) .SetGroup(AppMenuGroup); // create tab layout const TSharedRef<FTabManager::FLayout> Layout = FTabManager::NewLayout("SessionFrontendLayout_v1.1") ->AddArea ( FTabManager::NewPrimaryArea() ->SetOrientation(Orient_Vertical) ->Split ( // session browser FTabManager::NewStack() ->AddTab(SessionBrowserTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ->SetSizeCoefficient(0.15f) ) ->Split ( // applications FTabManager::NewStack() ->AddTab(SessionConsoleTabId, ETabState::OpenedTab) ->AddTab(AutomationTabId, ETabState::OpenedTab) ->AddTab(SessionScreenTabId, ETabState::ClosedTab) ->AddTab(ProfilerTabId, ETabState::OpenedTab) ->SetSizeCoefficient(0.85f) ->SetForegroundTab(SessionConsoleTabId) ) ); // create & initialize main menu FMenuBarBuilder MenuBarBuilder = FMenuBarBuilder(TSharedPtr<FUICommandList>()); MenuBarBuilder.AddPullDownMenu( LOCTEXT("WindowMenuLabel", "Window"), FText::GetEmpty(), FNewMenuDelegate::CreateStatic(&SSessionFrontend::FillWindowMenu, TabManager), "Window" ); ChildSlot [ SNew(SVerticalBox) + SVerticalBox::Slot() .AutoHeight() [ MenuBarBuilder.MakeWidget() ] + SVerticalBox::Slot() .FillHeight(1.0f) [ TabManager->RestoreFrom(Layout, ConstructUnderWindow).ToSharedRef() ] ]; }
void SVisualLogger::Construct(const FArguments& InArgs, const TSharedRef<SDockTab>& ConstructUnderMajorTab, const TSharedPtr<SWindow>& ConstructUnderWindow) { bPausedLogger = false; bGotHistogramData = false; FLogVisualizer::Get().SetCurrentVisualizer(SharedThis(this)); ////////////////////////////////////////////////////////////////////////// // Visual Logger Events FLogVisualizer::Get().GetVisualLoggerEvents().OnItemSelectionChanged = FOnItemSelectionChanged::CreateRaw(this, &SVisualLogger::OnItemSelectionChanged); FLogVisualizer::Get().GetVisualLoggerEvents().OnFiltersChanged = FOnFiltersChanged::CreateRaw(this, &SVisualLogger::OnFiltersChanged); FLogVisualizer::Get().GetVisualLoggerEvents().OnObjectSelectionChanged = FOnObjectSelectionChanged::CreateRaw(this, &SVisualLogger::OnObjectSelectionChanged); FLogVisualizer::Get().GetVisualLoggerEvents().OnLogLineSelectionChanged = FOnLogLineSelectionChanged::CreateRaw(this, &SVisualLogger::OnLogLineSelectionChanged); ////////////////////////////////////////////////////////////////////////// // Command Action Lists const FVisualLoggerCommands& Commands = FVisualLoggerCommands::Get(); FUICommandList& ActionList = *CommandList; ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject<ULogVisualizerSettings>(); FCategoryFiltersManager::Get().LoadPresistentData(); ActionList.MapAction(Commands.StartRecording, FExecuteAction::CreateRaw(this, &SVisualLogger::HandleStartRecordingCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleStartRecordingCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleStartRecordingCommandIsVisible)); ActionList.MapAction(Commands.StopRecording, FExecuteAction::CreateRaw(this, &SVisualLogger::HandleStopRecordingCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleStopRecordingCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleStopRecordingCommandIsVisible)); ActionList.MapAction(Commands.Pause, FExecuteAction::CreateRaw(this, &SVisualLogger::HandlePauseCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandlePauseCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandlePauseCommandIsVisible)); ActionList.MapAction(Commands.Resume, FExecuteAction::CreateRaw(this, &SVisualLogger::HandleResumeCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleResumeCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleResumeCommandIsVisible)); ActionList.MapAction(Commands.LoadFromVLog, FExecuteAction::CreateRaw(this, &SVisualLogger::HandleLoadCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleLoadCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleLoadCommandCanExecute)); ActionList.MapAction(Commands.SaveToVLog, FExecuteAction::CreateRaw(this, &SVisualLogger::HandleSaveCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleSaveCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleSaveCommandCanExecute)); ActionList.MapAction(Commands.FreeCamera, FExecuteAction::CreateRaw(this, &SVisualLogger::HandleCameraCommandExecute), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleCameraCommandCanExecute), FIsActionChecked::CreateRaw(this, &SVisualLogger::HandleCameraCommandIsChecked), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleCameraCommandCanExecute)); ActionList.MapAction(Commands.ToggleGraphs, FExecuteAction::CreateLambda([](){bool& bEnableGraphsVisualization = ULogVisualizerSessionSettings::StaticClass()->GetDefaultObject<ULogVisualizerSessionSettings>()->bEnableGraphsVisualization; bEnableGraphsVisualization = !bEnableGraphsVisualization; }), FCanExecuteAction::CreateLambda([this]()->bool{return bGotHistogramData; }), FIsActionChecked::CreateLambda([]()->bool{return ULogVisualizerSessionSettings::StaticClass()->GetDefaultObject<ULogVisualizerSessionSettings>()->bEnableGraphsVisualization; }), FIsActionButtonVisible::CreateLambda([this]()->bool{return bGotHistogramData; })); ActionList.MapAction(Commands.ResetData, FExecuteAction::CreateRaw(this, &SVisualLogger::ResetData), FCanExecuteAction::CreateRaw(this, &SVisualLogger::HandleSaveCommandCanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(this, &SVisualLogger::HandleSaveCommandCanExecute)); ActionList.MapAction( Commands.MoveCursorLeft, FExecuteAction::CreateRaw(this, &SVisualLogger::OnMoveCursorLeftCommand)); ActionList.MapAction( Commands.MoveCursorRight, FExecuteAction::CreateRaw(this, &SVisualLogger::OnMoveCursorRightCommand)); // Tab Spawners TabManager = FGlobalTabmanager::Get()->NewTabManager(ConstructUnderMajorTab); TSharedRef<FWorkspaceItem> AppMenuGroup = TabManager->AddLocalWorkspaceMenuCategory(LOCTEXT("VisualLoggerGroupName", "Visual Logger")); TabManager->RegisterTabSpawner(ToolbarTabId, FOnSpawnTab::CreateRaw(this, &SVisualLogger::HandleTabManagerSpawnTab, ToolbarTabId)) .SetDisplayName(LOCTEXT("ToolbarTabTitle", "Toolbar")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(FLogVisualizerStyle::Get().GetStyleSetName(), "ToolbarTabIcon")); TabManager->RegisterTabSpawner(FiltersTabId, FOnSpawnTab::CreateRaw(this, &SVisualLogger::HandleTabManagerSpawnTab, FiltersTabId)) .SetDisplayName(LOCTEXT("FiltersTabTitle", "Filters")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(FLogVisualizerStyle::Get().GetStyleSetName(), "FiltersTabIcon")); TabManager->RegisterTabSpawner(MainViewTabId, FOnSpawnTab::CreateRaw(this, &SVisualLogger::HandleTabManagerSpawnTab, MainViewTabId)) .SetDisplayName(LOCTEXT("MainViewTabTitle", "MainView")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(FLogVisualizerStyle::Get().GetStyleSetName(), "MainViewTabIcon")); TabManager->RegisterTabSpawner(LogsListTabId, FOnSpawnTab::CreateRaw(this, &SVisualLogger::HandleTabManagerSpawnTab, LogsListTabId)) .SetDisplayName(LOCTEXT("LogsListTabTitle", "LogsList")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(FLogVisualizerStyle::Get().GetStyleSetName(), "LogsListTabIcon")); TabManager->RegisterTabSpawner(StatusViewTabId, FOnSpawnTab::CreateRaw(this, &SVisualLogger::HandleTabManagerSpawnTab, StatusViewTabId)) .SetDisplayName(LOCTEXT("StatusViewTabTitle", "StatusView")) .SetGroup(AppMenuGroup) .SetIcon(FSlateIcon(FLogVisualizerStyle::Get().GetStyleSetName(), "StatusViewTabIcon")); // Default Layout const TSharedRef<FTabManager::FLayout> Layout = FTabManager::NewLayout("VisualLoggerLayout_v1.0") ->AddArea ( FTabManager::NewPrimaryArea() ->SetOrientation(Orient_Vertical) ->Split ( FTabManager::NewStack() ->AddTab(ToolbarTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ) ->Split ( FTabManager::NewStack() ->AddTab(FiltersTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ) ->Split ( FTabManager::NewStack() ->AddTab(MainViewTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ) ->Split ( FTabManager::NewSplitter() ->SetOrientation(Orient_Horizontal) ->SetSizeCoefficient(0.6f) ->Split ( FTabManager::NewStack() ->AddTab(StatusViewTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ->SetSizeCoefficient(0.3f) ) ->Split ( FTabManager::NewStack() ->AddTab(LogsListTabId, ETabState::OpenedTab) ->SetHideTabWell(true) ->SetSizeCoefficient(0.7f) ) ) ); TabManager->SetOnPersistLayout(FTabManager::FOnPersistLayout::CreateRaw(this, &SVisualLogger::HandleTabManagerPersistLayout)); // Load the potentially previously saved new layout TSharedRef<FTabManager::FLayout> UserConfiguredNewLayout = FLayoutSaveRestore::LoadFromConfig(GEditorLayoutIni, Layout); TabManager->RestoreFrom(UserConfiguredNewLayout, TSharedPtr<SWindow>()); // Window Menu FMenuBarBuilder MenuBarBuilder = FMenuBarBuilder(TSharedPtr<FUICommandList>()); #if 0 //disabled File menu for now (SebaK) MenuBarBuilder.AddPullDownMenu( LOCTEXT("FileMenuLabel", "File"), FText::GetEmpty(), FNewMenuDelegate::CreateRaw(this, &SVisualLogger::FillFileMenu, TabManager), "File" ); #endif MenuBarBuilder.AddPullDownMenu( LOCTEXT("WindowMenuLabel", "Window"), FText::GetEmpty(), FNewMenuDelegate::CreateStatic(&SVisualLogger::FillWindowMenu, TabManager), "Window" ); MenuBarBuilder.AddMenuEntry( LOCTEXT("SettingsMenuLabel", "Settings"), FText::GetEmpty(), FSlateIcon(), FUIAction( FExecuteAction::CreateLambda( [this](){ ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"); if (SettingsModule != nullptr) { SettingsModule->ShowViewer("Editor", "General", "VisualLogger"); } } )), "Settings" ); ChildSlot [ SNew(SVerticalBox) + SVerticalBox::Slot() .AutoHeight() [ MenuBarBuilder.MakeWidget() ] + SVerticalBox::Slot() .FillHeight(1.0f) [ TabManager->RestoreFrom(Layout, ConstructUnderWindow).ToSharedRef() ] ]; VisualLoggerCanvasRenderer = MakeShareable(new FVisualLoggerCanvasRenderer()); DrawOnCanvasDelegateHandle = UDebugDrawService::Register(TEXT("VisLog"), FDebugDrawDelegate::CreateRaw(VisualLoggerCanvasRenderer.Get(), &FVisualLoggerCanvasRenderer::DrawOnCanvas)); //UGameplayDebuggingComponent::OnDebuggingTargetChangedDelegate.AddSP(this, &SVisualLogger::SelectionChanged); }