aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2023-04-12 20:12:57 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2023-04-25 13:39:02 +0000
commitfde32a206ba06f6025a77beb3ce6b7a4ce9c663d (patch)
tree7511e2f24297f79094d364e52e831e6fd5d381d4
parent8cf500c5bc2d2171f80f392d325ddcf5107e184c (diff)
LineNumberFilter: Reimplement matchers()
Change-Id: I5c4905aabaee81c7870994ca9019e451a7c23119 Reviewed-by: Eike Ziller <eike.ziller@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/plugins/texteditor/linenumberfilter.cpp45
-rw-r--r--src/plugins/texteditor/linenumberfilter.h1
2 files changed, 46 insertions, 0 deletions
diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp
index b22c73bfd8..1a7003877e 100644
--- a/src/plugins/texteditor/linenumberfilter.cpp
+++ b/src/plugins/texteditor/linenumberfilter.cpp
@@ -6,6 +6,7 @@
#include "texteditortr.h"
#include <coreplugin/editormanager/editormanager.h>
+#include <utils/tasktree.h>
using namespace Core;
using namespace Utils;
@@ -24,6 +25,50 @@ LineNumberFilter::LineNumberFilter(QObject *parent)
setDefaultIncludedByDefault(true);
}
+LocatorMatcherTasks LineNumberFilter::matchers()
+{
+ using namespace Tasking;
+
+ TreeStorage<LocatorStorage> storage;
+
+ const auto onSetup = [=] {
+ const QStringList lineAndColumn = storage->input().split(':');
+ int sectionCount = lineAndColumn.size();
+ int line = 0;
+ int column = 0;
+ bool ok = false;
+ if (sectionCount > 0)
+ line = lineAndColumn.at(0).toInt(&ok);
+ if (ok && sectionCount > 1)
+ column = lineAndColumn.at(1).toInt(&ok);
+ if (!ok)
+ return true;
+ if (EditorManager::currentEditor() && (line > 0 || column > 0)) {
+ QString text;
+ if (line > 0 && column > 0)
+ text = Tr::tr("Line %1, Column %2").arg(line).arg(column);
+ else if (line > 0)
+ text = Tr::tr("Line %1").arg(line);
+ else
+ text = Tr::tr("Column %1").arg(column);
+ LocatorFilterEntry entry;
+ entry.displayName = text;
+ entry.acceptor = [line, targetColumn = column - 1] {
+ IEditor *editor = EditorManager::currentEditor();
+ if (!editor)
+ return AcceptResult();
+ EditorManager::addCurrentPositionToNavigationHistory();
+ editor->gotoLine(line < 1 ? editor->currentLine() : line, targetColumn);
+ EditorManager::activateEditor(editor);
+ return AcceptResult();
+ };
+ storage->reportOutput({entry});
+ }
+ return true;
+ };
+ return {{Sync(onSetup), storage}};
+}
+
void LineNumberFilter::prepareSearch(const QString &entry)
{
Q_UNUSED(entry)
diff --git a/src/plugins/texteditor/linenumberfilter.h b/src/plugins/texteditor/linenumberfilter.h
index 70d2c1b6f0..5717da176d 100644
--- a/src/plugins/texteditor/linenumberfilter.h
+++ b/src/plugins/texteditor/linenumberfilter.h
@@ -21,6 +21,7 @@ public:
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
const QString &entry) override;
private:
+ Core::LocatorMatcherTasks matchers() final;
bool m_hasCurrentEditor = false;
};