From c6440c3a2141a876b3b6795c7069faaedb87ce94 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Mon, 10 Oct 2016 15:43:22 +0300 Subject: [PATCH] Add the needed infrastucture to enable application output filters Currently will be used only by Android, but in the future can be extended everywhere Change-Id: I37314248f2d6dba2401e853b2a6ea4a36859f502 Reviewed-by: Tobias Hunger --- src/libs/utils/outputformatter.h | 2 ++ src/plugins/coreplugin/outputwindow.cpp | 2 ++ src/plugins/projectexplorer/appoutputpane.cpp | 24 +++++++++++++++++-- src/plugins/projectexplorer/appoutputpane.h | 1 + .../projectexplorer/runconfiguration.cpp | 2 +- .../projectexplorer/runconfiguration.h | 2 +- 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/libs/utils/outputformatter.h b/src/libs/utils/outputformatter.h index def0172f42f..bf2083370d2 100644 --- a/src/libs/utils/outputformatter.h +++ b/src/libs/utils/outputformatter.h @@ -59,6 +59,8 @@ public: virtual void appendMessage(const QString &text, OutputFormat format); virtual void appendMessage(const QString &text, const QTextCharFormat &format); virtual void handleLink(const QString &href); + virtual QList toolbarWidgets() const { return {}; } + virtual void clear() {} protected: void initFormats(); diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index 0efc6702f11..d305f3321b0 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -368,6 +368,8 @@ void OutputWindow::clear() { d->enforceNewline = false; QPlainTextEdit::clear(); + if (d->formatter) + d->formatter->clear(); } void OutputWindow::scrollToBottom() diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 8927a4499ba..6dc76d3a0db 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -74,6 +74,15 @@ static QString msgAttachDebuggerTooltip(const QString &handleDescription = QStri AppOutputPane::tr("Attach debugger to %1").arg(handleDescription); } +static void replaceAllChildWidgets(QLayout *layout, const QList &newChildren) +{ + while (QLayoutItem *child = layout->takeAt(0)) + delete child; + + foreach (QWidget *widget, newChildren) + layout->addWidget(widget); +} + namespace { const char SETTINGS_KEY[] = "ProjectExplorer/AppOutput/Zoom"; } @@ -152,7 +161,8 @@ AppOutputPane::AppOutputPane() : m_stopButton(new QToolButton), m_attachButton(new QToolButton), m_zoomInButton(new QToolButton), - m_zoomOutButton(new QToolButton) + m_zoomOutButton(new QToolButton), + m_formatterWidget(new QWidget) { setObjectName(QLatin1String("AppOutputPane")); // Used in valgrind engine @@ -200,6 +210,10 @@ AppOutputPane::AppOutputPane() : connect(m_zoomOutButton, &QToolButton::clicked, this, &AppOutputPane::zoomOut); + auto formatterWidgetsLayout = new QHBoxLayout; + formatterWidgetsLayout->setContentsMargins(QMargins()); + m_formatterWidget->setLayout(formatterWidgetsLayout); + // Spacer (?) QVBoxLayout *layout = new QVBoxLayout; @@ -321,7 +335,8 @@ QWidget *AppOutputPane::outputWidget(QWidget *) QList AppOutputPane::toolBarWidgets() const { - return {m_reRunButton, m_stopButton, m_attachButton, m_zoomInButton, m_zoomOutButton}; + return { m_reRunButton, m_stopButton, m_attachButton, m_zoomInButton, + m_zoomOutButton, m_formatterWidget }; } QString AppOutputPane::displayName() const @@ -639,6 +654,10 @@ void AppOutputPane::enableButtons(const RunControl *rc, bool isRunning) } m_zoomInButton->setEnabled(true); m_zoomOutButton->setEnabled(true); + + replaceAllChildWidgets(m_formatterWidget->layout(), rc->outputFormatter() ? + rc->outputFormatter()->toolbarWidgets() : + QList()); } else { m_reRunButton->setEnabled(false); m_reRunButton->setIcon(Utils::Icons::RUN_SMALL_TOOLBAR.icon()); @@ -648,6 +667,7 @@ void AppOutputPane::enableButtons(const RunControl *rc, bool isRunning) m_zoomInButton->setEnabled(false); m_zoomOutButton->setEnabled(false); } + m_formatterWidget->setVisible(m_formatterWidget->layout()->count()); } void AppOutputPane::tabChanged(int i) diff --git a/src/plugins/projectexplorer/appoutputpane.h b/src/plugins/projectexplorer/appoutputpane.h index adc6f261c89..963b66ec9e3 100644 --- a/src/plugins/projectexplorer/appoutputpane.h +++ b/src/plugins/projectexplorer/appoutputpane.h @@ -160,6 +160,7 @@ private: QToolButton *m_attachButton; QToolButton *m_zoomInButton; QToolButton *m_zoomOutButton; + QWidget *m_formatterWidget; float m_zoom; }; diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index e21f9fb3f85..d5e0c6e56f8 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -573,7 +573,7 @@ RunControl::~RunControl() delete d; } -Utils::OutputFormatter *RunControl::outputFormatter() +Utils::OutputFormatter *RunControl::outputFormatter() const { return d->outputFormatter; } diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 6d0dbda7754..15d7c3abbfe 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -379,7 +379,7 @@ public: Project *project() const; bool canReUseOutputPane(const RunControl *other) const; - Utils::OutputFormatter *outputFormatter(); + Utils::OutputFormatter *outputFormatter() const; Core::Id runMode() const; const Runnable &runnable() const;