void FOutputLogModule::ToggleDebugConsoleForWindow( const TSharedRef< SWindow >& Window, const EDebugConsoleStyle::Type InStyle, const FDebugConsoleDelegates& DebugConsoleDelegates ) { bool bShouldOpen = true; // Close an existing console box, if there is one TSharedPtr< SWidget > PinnedDebugConsole( DebugConsole.Pin() ); if( PinnedDebugConsole.IsValid() ) { // If the console is already open close it unless it is in a different window. In that case reopen it on that window bShouldOpen = false; TSharedPtr< SWindow > WindowForExistingConsole = FSlateApplication::Get().FindWidgetWindow(PinnedDebugConsole.ToSharedRef()); if (WindowForExistingConsole.IsValid()) { WindowForExistingConsole->RemoveOverlaySlot(PinnedDebugConsole.ToSharedRef()); DebugConsole.Reset(); } if( WindowForExistingConsole != Window ) { // Console is being opened on another window bShouldOpen = true; } } TSharedPtr<SDockTab> ActiveTab = FGlobalTabmanager::Get()->GetActiveTab(); if (ActiveTab.IsValid() && ActiveTab->GetLayoutIdentifier() == FTabId(OutputLogModule::OutputLogTabName)) { FGlobalTabmanager::Get()->DrawAttention(ActiveTab.ToSharedRef()); bShouldOpen = false; } if( bShouldOpen ) { const EDebugConsoleStyle::Type DebugConsoleStyle = InStyle; TSharedRef< SDebugConsole > DebugConsoleRef = SNew( SDebugConsole, DebugConsoleStyle, this, &DebugConsoleDelegates ); DebugConsole = DebugConsoleRef; const int32 MaximumZOrder = MAX_int32; Window->AddOverlaySlot( MaximumZOrder ) .VAlign(VAlign_Bottom) .HAlign(HAlign_Center) .Padding( 10.0f ) [ DebugConsoleRef ]; // Force keyboard focus DebugConsoleRef->SetFocusToEditableText(); } }
void STutorialRoot::MaybeAddOverlay(TSharedRef<SWindow> InWindow) { if(InWindow->HasOverlay()) { // check we don't already have a widget overlay for this window TWeakPtr<SEditorTutorials>* FoundWidget = TutorialWidgets.Find(InWindow); if(FoundWidget == nullptr) { TSharedPtr<SEditorTutorials> TutorialWidget = nullptr; InWindow->AddOverlaySlot() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .VAlign(VAlign_Fill) .HAlign(HAlign_Fill) [ SAssignNew(TutorialWidget, SEditorTutorials) .ParentWindow(InWindow) .OnNextClicked(FOnNextClicked::CreateSP(this, &STutorialRoot::HandleNextClicked)) .OnBackClicked(FSimpleDelegate::CreateSP(this, &STutorialRoot::HandleBackClicked)) .OnHomeClicked(FSimpleDelegate::CreateSP(this, &STutorialRoot::HandleHomeClicked)) .OnCloseClicked(FSimpleDelegate::CreateSP(this, &STutorialRoot::HandleCloseClicked)) .OnGetCurrentTutorial(FOnGetCurrentTutorial::CreateSP(this, &STutorialRoot::HandleGetCurrentTutorial)) .OnGetCurrentTutorialStage(FOnGetCurrentTutorialStage::CreateSP(this, &STutorialRoot::HandleGetCurrentTutorialStage)) .OnLaunchTutorial(FOnLaunchTutorial::CreateSP(this, &STutorialRoot::LaunchTutorial)) .OnWasWidgetDrawn(FOnWasWidgetDrawn::CreateSP(this, &STutorialRoot::WasWidgetDrawn)) .OnWidgetWasDrawn(FOnWidgetWasDrawn::CreateSP(this, &STutorialRoot::WidgetWasDrawn)) ] ]; FoundWidget = &TutorialWidgets.Add(InWindow, TutorialWidget); FoundWidget->Pin()->RebuildCurrentContent(); } } TArray<TSharedRef<SWindow>> ChildWindows = InWindow->GetChildWindows(); for(auto& ChildWindow : ChildWindows) { MaybeAddOverlay(ChildWindow); } }