From 46a86dce9258d722e7c757b6793e3c5f2f1b5410 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 21 Nov 2016 17:58:00 +0100 Subject: [PATCH] Add utility function to raise a toolwindow --- .../toolwindowmanager/ToolWindowManager.cpp | 20 +++++++++++++++++++ .../toolwindowmanager/ToolWindowManager.h | 1 + qrenderdoc/Windows/Dialogs/LiveCapture.cpp | 4 ++-- qrenderdoc/Windows/MainWindow.cpp | 10 +++++----- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp index 79c3d7812..8d9f1d136 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp @@ -297,6 +297,26 @@ void ToolWindowManager::closeToolWindow(QWidget *toolWindow) { qWarning("window not child of any tool window"); } +void ToolWindowManager::raiseToolWindow(QWidget *toolWindow) { + if (!toolWindow) { + qWarning("NULL tool window"); + return; + } + + // if the parent is a ToolWindowManagerArea, switch tabs + QWidget *parent = toolWindow->parentWidget(); + ToolWindowManagerArea *area = qobject_cast(parent); + if(area == NULL) + parent = parent->parentWidget(); + + area = qobject_cast(parent); + + if(area) + area->setCurrentWidget(toolWindow); + else + qWarning("parent is not a tool window area"); +} + QWidget* ToolWindowManager::createToolWindow(const QString& objectName) { if (m_createCallback) { diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h index 02653fb55..662b22fde 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h @@ -235,6 +235,7 @@ public: void hideToolWindow(QWidget* toolWindow) { moveToolWindow(toolWindow, NoArea); } static void closeToolWindow(QWidget *toolWindow); + static void raiseToolWindow(QWidget *toolWindow); /*! * \brief saveState diff --git a/qrenderdoc/Windows/Dialogs/LiveCapture.cpp b/qrenderdoc/Windows/Dialogs/LiveCapture.cpp index 234d86cac..ae7c6500e 100644 --- a/qrenderdoc/Windows/Dialogs/LiveCapture.cpp +++ b/qrenderdoc/Windows/Dialogs/LiveCapture.cpp @@ -501,7 +501,7 @@ bool LiveCapture::checkAllowDelete() if(!needcheck || ui->captures->selectedItems().empty()) return true; - this->activateWindow(); + ToolWindowManager::raiseToolWindow(this); QMessageBox::StandardButton res = RDDialog::question( this, tr("Unsaved log(s)", "", ui->captures->selectedItems().size()), @@ -539,7 +539,7 @@ bool LiveCapture::checkAllowClose() continue; ui->captures->clearSelection(); - this->activateWindow(); + ToolWindowManager::raiseToolWindow(this); ui->captures->setFocus(); item->setSelected(true); diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index 386466ec1..ec8cf1468 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -868,7 +868,7 @@ void MainWindow::OnLogfileLoaded() PopulateRecentFiles(); - m_Ctx->eventBrowser()->activateWindow(); + ToolWindowManager::raiseToolWindow(m_Ctx->eventBrowser()); } void MainWindow::OnLogfileClosed() @@ -922,7 +922,7 @@ void MainWindow::on_action_Event_Browser_triggered() EventBrowser *eventBrowser = m_Ctx->eventBrowser(); if(ui->toolWindowManager->toolWindows().contains(eventBrowser)) - eventBrowser->activateWindow(); + ToolWindowManager::raiseToolWindow(eventBrowser); else ui->toolWindowManager->addToolWindow(eventBrowser, leftToolArea()); } @@ -932,7 +932,7 @@ void MainWindow::on_action_Texture_Viewer_triggered() TextureViewer *textureViewer = m_Ctx->textureViewer(); if(ui->toolWindowManager->toolWindows().contains(textureViewer)) - textureViewer->activateWindow(); + ToolWindowManager::raiseToolWindow(textureViewer); else ui->toolWindowManager->addToolWindow(textureViewer, mainToolArea()); } @@ -944,7 +944,7 @@ void MainWindow::on_action_Capture_Log_triggered() capDialog->setInjectMode(false); if(ui->toolWindowManager->toolWindows().contains(capDialog)) - capDialog->activateWindow(); + ToolWindowManager::raiseToolWindow(capDialog); else ui->toolWindowManager->addToolWindow(capDialog, mainToolArea()); } @@ -956,7 +956,7 @@ void MainWindow::on_action_Inject_into_Process_triggered() capDialog->setInjectMode(true); if(ui->toolWindowManager->toolWindows().contains(capDialog)) - capDialog->activateWindow(); + ToolWindowManager::raiseToolWindow(capDialog); else ui->toolWindowManager->addToolWindow(capDialog, mainToolArea()); }