summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-05-14 13:55:14 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2019-05-24 10:54:37 +0000
commit2439cfcbdb6ade63bc37c1a5aecc4d91aa1995f3 (patch)
tree559e7d254d3317ea43f9ed5a19a87f99aa0143f9 /src/plugins/coreplugin
parenta9d2e14dca0a04e261634b0b34b394aa7f66a29f (diff)
downloadqt-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.h21
-rw-r--r--src/plugins/coreplugin/outputpanemanager.cpp78
-rw-r--r--src/plugins/coreplugin/outputwindow.cpp11
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();
}
}