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>
This commit is contained in:
Jarek Kobus
2023-04-12 20:12:57 +02:00
parent 8cf500c5bc
commit fde32a206b
2 changed files with 46 additions and 0 deletions

View File

@@ -6,6 +6,7 @@
#include "texteditortr.h" #include "texteditortr.h"
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <utils/tasktree.h>
using namespace Core; using namespace Core;
using namespace Utils; using namespace Utils;
@@ -24,6 +25,50 @@ LineNumberFilter::LineNumberFilter(QObject *parent)
setDefaultIncludedByDefault(true); 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) void LineNumberFilter::prepareSearch(const QString &entry)
{ {
Q_UNUSED(entry) Q_UNUSED(entry)

View File

@@ -21,6 +21,7 @@ public:
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future, QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
const QString &entry) override; const QString &entry) override;
private: private:
Core::LocatorMatcherTasks matchers() final;
bool m_hasCurrentEditor = false; bool m_hasCurrentEditor = false;
}; };