ExecuteFilter: Reimplement matchers()

Change-Id: I4a916164d1a81e0bed678ed1579a5da1cbb57f50
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2023-04-12 23:05:06 +02:00
parent 52246b8760
commit 8903e7f387
2 changed files with 38 additions and 0 deletions

View File

@@ -39,6 +39,43 @@ ExecuteFilter::~ExecuteFilter()
removeProcess();
}
LocatorMatcherTasks ExecuteFilter::matchers()
{
using namespace Tasking;
TreeStorage<LocatorStorage> storage;
const auto onSetup = [=] {
const QString input = storage->input();
LocatorFilterEntries entries;
if (!input.isEmpty()) { // avoid empty entry
LocatorFilterEntry entry;
entry.displayName = input;
entry.acceptor = [this, input] { acceptCommand(input); return AcceptResult(); };
entries.append(entry);
}
LocatorFilterEntries others;
const Qt::CaseSensitivity entryCaseSensitivity = caseSensitivity(input);
for (const QString &cmd : std::as_const(m_commandHistory)) {
if (cmd == input) // avoid repeated entry
continue;
LocatorFilterEntry entry;
entry.displayName = cmd;
entry.acceptor = [this, cmd] { acceptCommand(cmd); return AcceptResult(); };
const int index = cmd.indexOf(input, 0, entryCaseSensitivity);
if (index >= 0) {
entry.highlightInfo = {index, int(input.length())};
entries.append(entry);
} else {
others.append(entry);
}
}
storage->reportOutput(entries + others);
return true;
};
return {{Sync(onSetup), storage}};
}
void ExecuteFilter::acceptCommand(const QString &cmd)
{
const QString displayName = cmd.trimmed();

View File

@@ -32,6 +32,7 @@ public:
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
const QString &entry) override;
private:
LocatorMatcherTasks matchers() final;
void acceptCommand(const QString &cmd);
void done();
void readStandardOutput();