diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-05-14 13:55:14 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-05-24 10:54:37 +0000 |
commit | 2439cfcbdb6ade63bc37c1a5aecc4d91aa1995f3 (patch) | |
tree | 559e7d254d3317ea43f9ed5a19a87f99aa0143f9 /src/plugins/coreplugin | |
parent | a9d2e14dca0a04e261634b0b34b394aa7f66a29f (diff) | |
download | qt-creator-2439cfcbdb6ade63bc37c1a5aecc4d91aa1995f3.tar.gz |
ProjectExplorer: Move filtering infrastructure up
... from AppOutputPane to IOutputPane. We want to have filtering in
other output panes too.
Change-Id: I805ec68baedf491b71d392c3370dee78ed4ab76c
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/coreplugin')
-rw-r--r-- | src/plugins/coreplugin/ioutputpane.h | 21 | ||||
-rw-r--r-- | src/plugins/coreplugin/outputpanemanager.cpp | 78 | ||||
-rw-r--r-- | src/plugins/coreplugin/outputwindow.cpp | 11 |
3 files changed, 108 insertions, 2 deletions
diff --git a/src/plugins/coreplugin/ioutputpane.h b/src/plugins/coreplugin/ioutputpane.h index 3513d85095..506ecddf5f 100644 --- a/src/plugins/coreplugin/ioutputpane.h +++ b/src/plugins/coreplugin/ioutputpane.h @@ -26,12 +26,16 @@ #pragma once #include "core_global.h" +#include "id.h" + +#include <utils/fancylineedit.h> #include <QObject> #include <QList> #include <QString> QT_BEGIN_NAMESPACE +class QAction; class QToolButton; class QWidget; QT_END_NAMESPACE @@ -93,11 +97,28 @@ signals: void fontChanged(const QFont &font); protected: + void setupFilterUi(const QString &historyKey); + QString filterText() const; + void setFilteringEnabled(bool enable); + void setZoomButtonsEnabled(bool enabled); private: + virtual void updateFilter(); + + void filterOutputButtonClicked(); + void setCaseSensitive(bool caseSensitive); + void setRegularExpressions(bool regularExpressions); + Id filterRegexpActionId() const; + Id filterCaseSensitivityActionId() const; + QToolButton * const m_zoomInButton = nullptr; QToolButton * const m_zoomOutButton = nullptr; + QAction *m_filterActionRegexp = nullptr; + QAction *m_filterActionCaseSensitive = nullptr; + Utils::FancyLineEdit *m_filterOutputLineEdit = nullptr; + bool m_filterRegexp = false; + bool m_filterCaseSensitive = false; }; } // namespace Core diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp index 6ed62e141e..5bee2fb5f7 100644 --- a/src/plugins/coreplugin/outputpanemanager.cpp +++ b/src/plugins/coreplugin/outputpanemanager.cpp @@ -37,6 +37,7 @@ #include <coreplugin/actionmanager/command.h> #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/ieditor.h> +#include <coreplugin/find/optionspopup.h> #include <utils/algorithm.h> #include <utils/hostosinfo.h> @@ -117,7 +118,10 @@ IOutputPane::~IOutputPane() QList<QWidget *> IOutputPane::toolBarWidgets() const { - return {m_zoomInButton, m_zoomOutButton}; + QList<QWidget *> widgets; + if (m_filterOutputLineEdit) + widgets << m_filterOutputLineEdit; + return widgets << m_zoomInButton << m_zoomOutButton; } void IOutputPane::setFont(const QFont &font) @@ -130,12 +134,84 @@ void IOutputPane::setWheelZoomEnabled(bool enabled) emit wheelZoomEnabledChanged(enabled); } +void IOutputPane::setupFilterUi(const QString &historyKey) +{ + m_filterOutputLineEdit = new FancyLineEdit; + m_filterActionRegexp = new QAction(this); + m_filterActionRegexp->setCheckable(true); + m_filterActionRegexp->setText(tr("Use Regular Expressions")); + connect(m_filterActionRegexp, &QAction::toggled, this, &IOutputPane::setRegularExpressions); + Core::ActionManager::registerAction(m_filterActionRegexp, filterRegexpActionId()); + + m_filterActionCaseSensitive = new QAction(this); + m_filterActionCaseSensitive->setCheckable(true); + m_filterActionCaseSensitive->setText(tr("Case Sensitive")); + connect(m_filterActionCaseSensitive, &QAction::toggled, this, &IOutputPane::setCaseSensitive); + Core::ActionManager::registerAction(m_filterActionCaseSensitive, + filterCaseSensitivityActionId()); + + m_filterOutputLineEdit->setPlaceholderText(tr("Filter output...")); + m_filterOutputLineEdit->setButtonVisible(FancyLineEdit::Left, true); + m_filterOutputLineEdit->setButtonIcon(FancyLineEdit::Left, Icons::MAGNIFIER.icon()); + m_filterOutputLineEdit->setFiltering(true); + m_filterOutputLineEdit->setEnabled(false); + m_filterOutputLineEdit->setHistoryCompleter(historyKey); + connect(m_filterOutputLineEdit, &FancyLineEdit::textChanged, + this, &IOutputPane::updateFilter); + connect(m_filterOutputLineEdit, &FancyLineEdit::returnPressed, + this, &IOutputPane::updateFilter); + connect(m_filterOutputLineEdit, &FancyLineEdit::leftButtonClicked, + this, &IOutputPane::filterOutputButtonClicked); +} + +QString IOutputPane::filterText() const +{ + return m_filterOutputLineEdit->text(); +} + +void IOutputPane::setFilteringEnabled(bool enable) +{ + m_filterOutputLineEdit->setEnabled(enable); +} + void IOutputPane::setZoomButtonsEnabled(bool enabled) { m_zoomInButton->setEnabled(enabled); m_zoomOutButton->setEnabled(enabled); } +void IOutputPane::updateFilter() +{ + QTC_ASSERT(false, qDebug() << "updateFilter() needs to get re-implemented"); +} + +void IOutputPane::filterOutputButtonClicked() +{ + auto popup = new Core::OptionsPopup(m_filterOutputLineEdit, + {filterRegexpActionId(), filterCaseSensitivityActionId()}); + popup->show(); +} + +void IOutputPane::setRegularExpressions(bool regularExpressions) +{ + m_filterRegexp = regularExpressions; +} + +Id IOutputPane::filterRegexpActionId() const +{ + return Id("OutputFilter.RegularExpressions").withSuffix(metaObject()->className()); +} + +Id IOutputPane::filterCaseSensitivityActionId() const +{ + return Id("OutputFilter.CaseSensitive").withSuffix(metaObject()->className()); +} + +void IOutputPane::setCaseSensitive(bool caseSensitive) +{ + m_filterCaseSensitive = caseSensitive; +} + namespace Internal { const char outputPaneSettingsKeyC[] = "OutputPaneVisibility"; diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index 71de96207b..4502948644 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -68,6 +68,7 @@ public: bool linksActive = true; bool m_zoomEnabled = false; float m_originalFontSize = 0.; + bool m_originalReadOnly = false; int maxCharCount = Core::Constants::DEFAULT_MAX_CHAR_COUNT; Qt::MouseButton mouseButtonPressed = Qt::NoButton; QTextCursor cursor; @@ -291,6 +292,7 @@ void OutputWindow::setFilterText(const QString &filterText) { if (d->filterText != filterText) { d->lastFilteredBlock = {}; + const bool filterTextWasEmpty = d->filterText.isEmpty(); d->filterText = filterText; // Update textedit's background color @@ -305,7 +307,14 @@ void OutputWindow::setFilterText(const QString &filterText) setPalette(pal); } - setReadOnly(!filterText.isEmpty()); + if (filterText.isEmpty()) { + setReadOnly(d->m_originalReadOnly); + } else { + if (filterTextWasEmpty) + d->m_originalReadOnly = isReadOnly(); + setReadOnly(true); + } + filterNewContent(); } } |