From 0eaba469cf08e8496877e6bbb54d7e096ac8c550 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 25 Nov 2021 13:57:38 +0100 Subject: [PATCH] ProjectExplorer: Add "link back from issues" functionality ... to the app output pane. Change-Id: I3e11f63a42fb30ae4e40da50d5ba8143ce99cd65 Reviewed-by: hjk --- src/plugins/coreplugin/ioutputpane.h | 1 + src/plugins/projectexplorer/appoutputpane.cpp | 23 ++++++++++++++++++- src/plugins/projectexplorer/appoutputpane.h | 5 ++++ .../projectexplorer/showoutputtaskhandler.cpp | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/ioutputpane.h b/src/plugins/coreplugin/ioutputpane.h index 4b338a1f8b3..6722a217dee 100644 --- a/src/plugins/coreplugin/ioutputpane.h +++ b/src/plugins/coreplugin/ioutputpane.h @@ -56,6 +56,7 @@ public: virtual QList toolBarWidgets() const; virtual QString displayName() const = 0; virtual const QList outputWindows() const { return {}; } + virtual void ensureWindowVisible(OutputWindow *) { } virtual int priorityInStatusBar() const = 0; diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 9a6d512bc34..c022e90e633 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -30,6 +30,7 @@ #include "projectexplorericons.h" #include "runcontrol.h" #include "session.h" +#include "showoutputtaskhandler.h" #include "windebuginterface.h" #include @@ -170,8 +171,11 @@ AppOutputPane::AppOutputPane() : m_stopButton(new QToolButton), m_attachButton(new QToolButton), m_settingsButton(new QToolButton), - m_formatterWidget(new QWidget) + m_formatterWidget(new QWidget), + m_handler(new ShowOutputTaskHandler(this)) { + ExtensionSystem::PluginManager::addObject(m_handler); + setObjectName("AppOutputPane"); // Used in valgrind engine loadSettings(); @@ -252,6 +256,8 @@ AppOutputPane::~AppOutputPane() delete rt.runControl; } delete m_mainWidget; + ExtensionSystem::PluginManager::removeObject(m_handler); + delete m_handler; } int AppOutputPane::currentIndex() const @@ -368,6 +374,21 @@ void AppOutputPane::updateFilter() } } +const QList AppOutputPane::outputWindows() const +{ + QList windows; + for (const RunControlTab &tab : qAsConst(m_runControlTabs)) { + if (tab.window) + windows << tab.window; + } + return windows; +} + +void AppOutputPane::ensureWindowVisible(Core::OutputWindow *ow) +{ + m_tabWidget->setCurrentWidget(ow); +} + void AppOutputPane::createNewOutputWindow(RunControl *rc) { QTC_ASSERT(rc, return); diff --git a/src/plugins/projectexplorer/appoutputpane.h b/src/plugins/projectexplorer/appoutputpane.h index 24728d5e716..8628616944a 100644 --- a/src/plugins/projectexplorer/appoutputpane.h +++ b/src/plugins/projectexplorer/appoutputpane.h @@ -51,7 +51,9 @@ class Project; namespace Internal { +class ShowOutputTaskHandler; class TabWidget; + class AppOutputPane : public Core::IOutputPane { Q_OBJECT @@ -138,6 +140,8 @@ private: void handleOldOutput(Core::OutputWindow *window) const; void updateCloseActions(); void updateFilter() override; + const QList outputWindows() const override; + void ensureWindowVisible(Core::OutputWindow *ow) override; void loadSettings(); void storeSettings() const; @@ -155,6 +159,7 @@ private: QToolButton *m_attachButton; QToolButton * const m_settingsButton; QWidget *m_formatterWidget; + ShowOutputTaskHandler * const m_handler; AppOutputSettings m_settings; }; diff --git a/src/plugins/projectexplorer/showoutputtaskhandler.cpp b/src/plugins/projectexplorer/showoutputtaskhandler.cpp index d0398d27320..8190cd7431b 100644 --- a/src/plugins/projectexplorer/showoutputtaskhandler.cpp +++ b/src/plugins/projectexplorer/showoutputtaskhandler.cpp @@ -55,6 +55,7 @@ void ShowOutputTaskHandler::handle(const Task &task) m_window->popup(Core::IOutputPane::Flags(Core::IOutputPane::ModeSwitch | Core::IOutputPane::WithFocus)); for (Core::OutputWindow * const ow : m_window->outputWindows()) { if (ow->knowsPositionOf(task.taskId)) { + m_window->ensureWindowVisible(ow); ow->showPositionOf(task.taskId); break; }