diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-04-12 20:12:57 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-04-25 13:39:02 +0000 |
commit | fde32a206ba06f6025a77beb3ce6b7a4ce9c663d (patch) | |
tree | 7511e2f24297f79094d364e52e831e6fd5d381d4 | |
parent | 8cf500c5bc2d2171f80f392d325ddcf5107e184c (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.cpp | 45 | ||||
-rw-r--r-- | src/plugins/texteditor/linenumberfilter.h | 1 |
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; }; |