//------------------------------------------------------------------------------ void SBlueprintLibraryPalette::BindCommands(TSharedPtr<FUICommandList> CommandListIn) const { SBlueprintSubPalette::BindCommands(CommandListIn); FBlueprintLibraryPaletteCommands::Register(); FBlueprintLibraryPaletteCommands const& PaletteCommands = FBlueprintLibraryPaletteCommands::Get(); struct FActionVisibilityUtils { static bool CanNotRemoveAny(SBlueprintLibraryPaletteUtils::FPaletteActionGetter ActionGetter) { return !SBlueprintLibraryPaletteUtils::IsAnyActionRemovable(ActionGetter); } }; SBlueprintLibraryPaletteUtils::FPaletteActionGetter ActionGetter = SBlueprintLibraryPaletteUtils::FPaletteActionGetter::CreateRaw(GraphActionMenu.Get(), &SGraphActionMenu::GetSelectedActions); CommandListIn->MapAction( PaletteCommands.AddSingleFavorite, FExecuteAction::CreateStatic(&SBlueprintLibraryPaletteUtils::AddSelectedToFavorites, ActionGetter), FCanExecuteAction::CreateStatic(&SBlueprintLibraryPaletteUtils::IsAnyActionFavoritable, ActionGetter), FIsActionChecked(), FIsActionButtonVisible::CreateStatic(&FActionVisibilityUtils::CanNotRemoveAny, ActionGetter) ); SBlueprintLibraryPaletteUtils::FPaletteActionGetter CategoryGetter = SBlueprintLibraryPaletteUtils::FPaletteActionGetter::CreateRaw(GraphActionMenu.Get(), &SGraphActionMenu::GetSelectedCategorySubActions); CommandListIn->MapAction( PaletteCommands.AddSubFavorites, FExecuteAction::CreateStatic(&SBlueprintLibraryPaletteUtils::AddSelectedToFavorites, CategoryGetter), FCanExecuteAction::CreateStatic(&SBlueprintLibraryPaletteUtils::IsAnyActionFavoritable, CategoryGetter), FIsActionChecked(), FIsActionButtonVisible::CreateStatic(&SBlueprintLibraryPaletteUtils::IsAnyActionFavoritable, CategoryGetter) ); CommandListIn->MapAction( PaletteCommands.RemoveSingleFavorite, FExecuteAction::CreateStatic(&SBlueprintLibraryPaletteUtils::RemoveSelectedFavorites, ActionGetter), FCanExecuteAction(), FIsActionChecked(), FIsActionButtonVisible::CreateStatic(&SBlueprintLibraryPaletteUtils::IsAnyActionRemovable, ActionGetter) ); CommandListIn->MapAction( PaletteCommands.RemoveSubFavorites, FExecuteAction::CreateStatic(&SBlueprintLibraryPaletteUtils::RemoveSelectedFavorites, CategoryGetter), FCanExecuteAction(), FIsActionChecked(), FIsActionButtonVisible::CreateStatic(&SBlueprintLibraryPaletteUtils::IsAnyActionRemovable, CategoryGetter) ); }
const FUIAction FProfilerActionManager::OpenSettings_Custom() const { FUIAction UIAction; UIAction.ExecuteAction = FExecuteAction::CreateRaw( this, &FProfilerActionManager::OpenSettings_Execute ); UIAction.CanExecuteAction = FCanExecuteAction::CreateRaw( this, &FProfilerActionManager::OpenSettings_CanExecute ); UIAction.IsCheckedDelegate = FIsActionChecked(); UIAction.IsActionVisibleDelegate = FIsActionButtonVisible(); return UIAction; }
void FProfilerActionManager::Map_ProfilerManager_Load() { FUIAction UIAction; UIAction.ExecuteAction = FExecuteAction::CreateRaw( this, &FProfilerActionManager::ProfilerManager_Load_Execute ); UIAction.CanExecuteAction = FCanExecuteAction::CreateRaw( this, &FProfilerActionManager::ProfilerManager_Load_CanExecute ); UIAction.IsCheckedDelegate = FIsActionChecked(); UIAction.IsActionVisibleDelegate = FIsActionButtonVisible(); This->CommandList->MapAction( This->GetCommands().ProfilerManager_Load, UIAction ); }
void FSpriteGeometryEditMode::BindCommands(TSharedPtr<FUICommandList> CommandList) { const FSpriteGeometryEditCommands& Commands = FSpriteGeometryEditCommands::Get(); // Show toggles CommandList->MapAction( Commands.SetShowNormals, FExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::ToggleShowNormals), FCanExecuteAction(), FIsActionChecked::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::IsShowNormalsEnabled)); // Geometry editing commands CommandList->MapAction( Commands.DeleteSelection, FExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::DeleteSelectedItems), FCanExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanDeleteSelection)); CommandList->MapAction( Commands.AddBoxShape, FExecuteAction::CreateSP(this, &FSpriteGeometryEditMode::AddBoxShape), FCanExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanAddBoxShape), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanAddBoxShape)); CommandList->MapAction( Commands.ToggleAddPolygonMode, FExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::ToggleAddPolygonMode), FCanExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanAddPolygon), FIsActionChecked::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::IsAddingPolygon), FIsActionButtonVisible::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanAddPolygon)); CommandList->MapAction( Commands.AddCircleShape, FExecuteAction::CreateSP(this, &FSpriteGeometryEditMode::AddCircleShape), FCanExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanAddCircleShape), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanAddCircleShape)); CommandList->MapAction( Commands.SnapAllVertices, FExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::SnapAllVerticesToPixelGrid), FCanExecuteAction::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanSnapVerticesToPixelGrid), FIsActionChecked(), FIsActionButtonVisible::CreateRaw(&SpriteGeometryHelper, &FSpriteGeometryEditingHelper::CanSnapVerticesToPixelGrid)); }
void UK2Node_VariableGet::GetContextMenuActions(const FGraphNodeContextMenuBuilder& Context) const { Super::GetContextMenuActions(Context); const UEdGraphPin* ValuePin = GetValuePin(); if (IsValidTypeForNonPure(ValuePin->PinType)) { Context.MenuBuilder->BeginSection("K2NodeVariableGet", LOCTEXT("VariableGetHeader", "Variable Get")); { FText MenuEntryTitle; FText MenuEntryTooltip; bool bCanTogglePurity = true; auto CanExecutePurityToggle = [](bool const bInCanTogglePurity)->bool { return bInCanTogglePurity; }; if (bIsPureGet) { MenuEntryTitle = LOCTEXT("ConvertToImpureGetTitle", "Convert to Validated Get"); MenuEntryTooltip = LOCTEXT("ConvertToImpureGetTooltip", "Adds in branching execution pins so that you can separately handle when the returned value is valid/invalid."); const UEdGraphSchema_K2* K2Schema = Cast<UEdGraphSchema_K2>(GetSchema()); check(K2Schema != nullptr); bCanTogglePurity = K2Schema->DoesGraphSupportImpureFunctions(GetGraph()); if (!bCanTogglePurity) { MenuEntryTooltip = LOCTEXT("CannotMakeImpureGetTooltip", "This graph does not support impure calls!"); } } else { MenuEntryTitle = LOCTEXT("ConvertToPureGetTitle", "Convert to pure Get"); MenuEntryTooltip = LOCTEXT("ConvertToPureGetTooltip", "Removes the execution pins to make the node more versatile."); } Context.MenuBuilder->AddMenuEntry( MenuEntryTitle, MenuEntryTooltip, FSlateIcon(), FUIAction( FExecuteAction::CreateUObject(this, &UK2Node_VariableGet::TogglePurity), FCanExecuteAction::CreateStatic(CanExecutePurityToggle, bCanTogglePurity), FIsActionChecked() ) ); } Context.MenuBuilder->EndSection(); } }
void FDestructibleMeshEditorViewportClient::BindCommands() { const FDestructibleMeshEditorCommands& Commands = FDestructibleMeshEditorCommands::Get(); const TSharedRef<FUICommandList>& UICommandList = DestructibleMeshEditorPtr.Pin()->GetToolkitCommands(); UICommandList->MapAction( Commands.Fracture, FExecuteAction::CreateSP( this, &FDestructibleMeshEditorViewportClient::Fracture ), FCanExecuteAction(), FIsActionChecked() ); UICommandList->MapAction( Commands.Refresh, FExecuteAction::CreateSP( this, &FDestructibleMeshEditorViewportClient::RefreshFromStaticMesh ), FCanExecuteAction::CreateSP( this, &FDestructibleMeshEditorViewportClient::CanRefreshFromStaticMesh ), FIsActionChecked() ); UICommandList->MapAction( Commands.ImportFBXChunks, FExecuteAction::CreateSP( this, &FDestructibleMeshEditorViewportClient::ImportFBXChunks ), FCanExecuteAction(), FIsActionChecked() ); }
void FGameplayDebugger::CreateSettingSubMenu(FMenuBuilder& Builder) { #if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) Builder.AddMenuEntry( LOCTEXT("Test_GameplayDebugger_Menu", "Test Gameplay Debugger Option"), LOCTEXT("Test_GameplayDebugger_Menu_Tooltip", "If Enabled, actors will snap to the nearest location on the constraint plane (NOTE: Only works correctly in perspective views right now!)"), FSlateIcon(), FUIAction( FExecuteAction()/*FExecuteAction::CreateRaw(PlanarPolicy.Get(), &FPlanarConstraintSnapPolicy::ToggleEnabled)*/, FCanExecuteAction(), FIsActionChecked()/*FIsActionChecked::CreateRaw(PlanarPolicy.Get(), &FPlanarConstraintSnapPolicy::IsEnabled)*/ ), NAME_None, EUserInterfaceActionType::Button, NAME_None); #endif }
void UK2Node_DynamicCast::GetContextMenuActions(const FGraphNodeContextMenuBuilder& Context) const { Super::GetContextMenuActions(Context); Context.MenuBuilder->BeginSection("K2NodeDynamicCast", LOCTEXT("DynamicCastHeader", "Cast")); { FText MenuEntryTitle = LOCTEXT("MakePureTitle", "Convert to pure cast"); FText MenuEntryTooltip = LOCTEXT("MakePureTooltip", "Removes the execution pins to make the node more versitile (NOTE: the cast could still, resulting in an invalid output)."); bool bCanTogglePurity = true; auto CanExecutePurityToggle = [](bool const bInCanTogglePurity)->bool { return bInCanTogglePurity; }; if (bIsPureCast) { MenuEntryTitle = LOCTEXT("MakeImpureTitle", "Convert to impure cast"); MenuEntryTooltip = LOCTEXT("MakeImpureTooltip", "Adds in branching execution pins so that you can separatly handle when the cast fails/succeeds."); const UEdGraphSchema_K2* K2Schema = Cast<UEdGraphSchema_K2>(GetSchema()); check(K2Schema != nullptr); bCanTogglePurity = K2Schema->DoesGraphSupportImpureFunctions(GetGraph()); if (!bCanTogglePurity) { MenuEntryTooltip = LOCTEXT("CannotMakeImpureTooltip", "This graph does not support impure calls (and you should therefore test the cast's result for validity)."); } } Context.MenuBuilder->AddMenuEntry( MenuEntryTitle, MenuEntryTooltip, FSlateIcon(), FUIAction( FExecuteAction::CreateUObject(this, &UK2Node_DynamicCast::TogglePurity), FCanExecuteAction::CreateStatic(CanExecutePurityToggle, bCanTogglePurity), FIsActionChecked() ) ); } Context.MenuBuilder->EndSection(); }
void FCodeProjectEditorToolbar::FillEditorToolbar(FToolBarBuilder& ToolbarBuilder) { TSharedPtr<FCodeProjectEditor> CodeProjectEditorPtr = CodeProjectEditor.Pin(); ToolbarBuilder.BeginSection(TEXT("FileManagement")); { ToolbarBuilder.AddToolBarButton(FCodeProjectEditorCommands::Get().Save); ToolbarBuilder.AddToolBarButton(FCodeProjectEditorCommands::Get().SaveAll); } ToolbarBuilder.EndSection(); // Only show the compile options on machines with the solution (assuming they can build it) if ( FSourceCodeNavigation::IsCompilerAvailable() ) { ToolbarBuilder.BeginSection(TEXT("Build")); { struct Local { static void ExecuteCompile(TSharedPtr<FCodeProjectEditor> InCodeProjectEditorPtr) { if(InCodeProjectEditorPtr->SaveAll()) { FLevelEditorActionCallbacks::RecompileGameCode_Clicked(); } } }; // Since we can always add new code to the project, only hide these buttons if we haven't done so yet ToolbarBuilder.AddToolBarButton( FUIAction( FExecuteAction::CreateStatic(&Local::ExecuteCompile, CodeProjectEditorPtr), FCanExecuteAction::CreateStatic(&FLevelEditorActionCallbacks::Recompile_CanExecute), FIsActionChecked(), FIsActionButtonVisible::CreateStatic(FLevelEditorActionCallbacks::CanShowSourceCodeActions)), NAME_None, NSLOCTEXT( "LevelEditorToolBar", "CompileMenuButton", "Compile" ), NSLOCTEXT( "LevelEditorActions", "RecompileGameCode_ToolTip", "Recompiles and reloads C++ code for game systems on the fly" ), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.Recompile") ); } ToolbarBuilder.EndSection(); } }
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 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); }