aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-04-14 15:28:44 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2020-04-14 14:15:26 +0000
commitc0c2df203dd26b6af2be5757501bb3cacd692ef6 (patch)
tree961d12dc7ba7db4fb0c9cb3a338250d65efd64b0 /src/plugins/vcsbase
parent70bddbcab42759c3105db6801a918375449b848c (diff)
Utils: Split up OutputFormatter class
An OutputFormatter takes some string and prints it into a text edit. In addition, it can ask any number of registered OutputLineParsers whether they think any special formatting should be applied to the current line. This mechanism is now properly modeled by our class design, rather than being hidden in a monolithic class where everything had the same type, no matter what its purpose was. Prospective contributors can now simply be pointed to the OutputLineParser class and will see at one glance what they have to do. Change-Id: I9844499f062c94fb038ce73fd6f26576910148c2 Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/vcsbase')
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.cpp10
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.h9
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.cpp30
3 files changed, 21 insertions, 28 deletions
diff --git a/src/plugins/vcsbase/vcsoutputformatter.cpp b/src/plugins/vcsbase/vcsoutputformatter.cpp
index be6a065f6b..9fd116dda0 100644
--- a/src/plugins/vcsbase/vcsoutputformatter.cpp
+++ b/src/plugins/vcsbase/vcsoutputformatter.cpp
@@ -34,7 +34,7 @@
namespace VcsBase {
-VcsOutputFormatter::VcsOutputFormatter() :
+VcsOutputLineParser::VcsOutputLineParser() :
m_regexp(
"(https?://\\S*)" // https://codereview.org/c/1234
"|(v[0-9]+\\.[0-9]+\\.[0-9]+[\\-A-Za-z0-9]*)" // v0.1.2-beta3
@@ -43,8 +43,8 @@ VcsOutputFormatter::VcsOutputFormatter() :
{
}
-Utils::OutputFormatter::Result VcsOutputFormatter::handleMessage(const QString &text,
- Utils::OutputFormat format)
+Utils::OutputLineParser::Result VcsOutputLineParser::handleLine(const QString &text,
+ Utils::OutputFormat format)
{
Q_UNUSED(format);
QRegularExpressionMatchIterator it = m_regexp.globalMatch(text);
@@ -62,7 +62,7 @@ Utils::OutputFormatter::Result VcsOutputFormatter::handleMessage(const QString &
return {Status::Done, linkSpecs};
}
-bool VcsOutputFormatter::handleLink(const QString &href)
+bool VcsOutputLineParser::handleLink(const QString &href)
{
if (href.startsWith("http://") || href.startsWith("https://"))
QDesktopServices::openUrl(QUrl(href));
@@ -71,7 +71,7 @@ bool VcsOutputFormatter::handleLink(const QString &href)
return true;
}
-void VcsOutputFormatter::fillLinkContextMenu(
+void VcsOutputLineParser::fillLinkContextMenu(
QMenu *menu, const QString &workingDirectory, const QString &href)
{
if (href.isEmpty() || href.startsWith("http://") || href.startsWith("https://")) {
diff --git a/src/plugins/vcsbase/vcsoutputformatter.h b/src/plugins/vcsbase/vcsoutputformatter.h
index 32cc9de068..e4ebfc6fee 100644
--- a/src/plugins/vcsbase/vcsoutputformatter.h
+++ b/src/plugins/vcsbase/vcsoutputformatter.h
@@ -31,20 +31,19 @@ QT_FORWARD_DECLARE_CLASS(QMenu)
namespace VcsBase {
-class VcsOutputFormatter : public Utils::OutputFormatter
+class VcsOutputLineParser : public QObject, public Utils::OutputLineParser
{
Q_OBJECT
public:
- VcsOutputFormatter();
- ~VcsOutputFormatter() override = default;
- bool handleLink(const QString &href) override;
+ VcsOutputLineParser();
void fillLinkContextMenu(QMenu *menu, const QString &workingDirectory, const QString &href);
signals:
void referenceClicked(const QString &reference);
private:
- Result handleMessage(const QString &text, Utils::OutputFormat format) override;
+ Result handleLine(const QString &text, Utils::OutputFormat format) override;
+ bool handleLink(const QString &href) override;
const QRegularExpression m_regexp;
};
diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp
index f1ca4da868..d2b96e7948 100644
--- a/src/plugins/vcsbase/vcsoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsoutputwindow.cpp
@@ -97,12 +97,11 @@ class OutputWindowPlainTextEdit : public Core::OutputWindow
{
public:
explicit OutputWindowPlainTextEdit(QWidget *parent = nullptr);
- ~OutputWindowPlainTextEdit() override;
void appendLines(const QString &s, const QString &repository = QString());
void appendLinesWithStyle(const QString &s, VcsOutputWindow::MessageStyle style,
const QString &repository = QString());
- VcsOutputFormatter *formatter();
+ VcsOutputLineParser *parser();
protected:
void contextMenuEvent(QContextMenuEvent *event) override;
@@ -112,7 +111,8 @@ private:
QString identifierUnderCursor(const QPoint &pos, QString *repository = nullptr) const;
Utils::OutputFormat m_format;
- VcsOutputFormatter *m_formatter = nullptr;
+ Utils::OutputFormatter m_formatter;
+ VcsOutputLineParser m_parser;
};
OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
@@ -121,19 +121,13 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
setReadOnly(true);
setUndoRedoEnabled(false);
setFrameStyle(QFrame::NoFrame);
- m_formatter = new VcsOutputFormatter;
- m_formatter->setBoldFontEnabled(false);
- setFormatters({m_formatter});
+ m_formatter.setBoldFontEnabled(false);
+ setLineParsers({&m_parser});
auto agg = new Aggregation::Aggregate;
agg->add(this);
agg->add(new Core::BaseTextFind(this));
}
-OutputWindowPlainTextEdit::~OutputWindowPlainTextEdit()
-{
- delete m_formatter;
-}
-
// Search back for beginning of word
static inline int firstWordCharacter(const QString &s, int startPos)
{
@@ -181,9 +175,9 @@ void OutputWindowPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)
QString repository;
const QString token = identifierUnderCursor(event->pos(), &repository);
if (!repository.isEmpty()) {
- if (VcsOutputFormatter *f = formatter()) {
+ if (VcsOutputLineParser * const p = parser()) {
if (!href.isEmpty())
- f->fillLinkContextMenu(menu, repository, href);
+ p->fillLinkContextMenu(menu, repository, href);
}
}
QAction *openAction = nullptr;
@@ -228,7 +222,7 @@ void OutputWindowPlainTextEdit::appendLines(const QString &s, const QString &rep
const int previousLineCount = document()->lineCount();
- m_formatter->appendMessage(s, m_format);
+ m_formatter.appendMessage(s, m_format);
// Scroll down
moveCursor(QTextCursor::End);
@@ -255,14 +249,14 @@ void OutputWindowPlainTextEdit::appendLinesWithStyle(const QString &s,
}
}
-VcsOutputFormatter *OutputWindowPlainTextEdit::formatter()
+VcsOutputLineParser *OutputWindowPlainTextEdit::parser()
{
- return m_formatter;
+ return &m_parser;
}
void OutputWindowPlainTextEdit::setFormat(VcsOutputWindow::MessageStyle style)
{
- m_formatter->setBoldFontEnabled(style == VcsOutputWindow::Command);
+ m_formatter.setBoldFontEnabled(style == VcsOutputWindow::Command);
switch (style) {
case VcsOutputWindow::Warning:
@@ -318,7 +312,7 @@ VcsOutputWindow::VcsOutputWindow()
connect(this, &IOutputPane::resetZoom, &d->widget, &Core::OutputWindow::resetZoom);
connect(TextEditor::TextEditorSettings::instance(), &TextEditor::TextEditorSettings::behaviorSettingsChanged,
this, updateBehaviorSettings);
- connect(d->widget.formatter(), &VcsOutputFormatter::referenceClicked,
+ connect(d->widget.parser(), &VcsOutputLineParser::referenceClicked,
VcsOutputWindow::instance(), &VcsOutputWindow::referenceClicked);
}