ProjectExplorer: Add "link back from issues" functionality

... to the app output pane.

Change-Id: I3e11f63a42fb30ae4e40da50d5ba8143ce99cd65
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2021-11-25 13:57:38 +01:00
parent 304e5c7552
commit 0eaba469cf
4 changed files with 29 additions and 1 deletions

View File

@@ -56,6 +56,7 @@ public:
virtual QList<QWidget *> toolBarWidgets() const;
virtual QString displayName() const = 0;
virtual const QList<OutputWindow *> outputWindows() const { return {}; }
virtual void ensureWindowVisible(OutputWindow *) { }
virtual int priorityInStatusBar() const = 0;

View File

@@ -30,6 +30,7 @@
#include "projectexplorericons.h"
#include "runcontrol.h"
#include "session.h"
#include "showoutputtaskhandler.h"
#include "windebuginterface.h"
#include <coreplugin/actionmanager/actionmanager.h>
@@ -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<Core::OutputWindow *> AppOutputPane::outputWindows() const
{
QList<Core::OutputWindow *> 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);

View File

@@ -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<Core::OutputWindow *> 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;
};

View File

@@ -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;
}