ExternalToolsFilter: Reimplement matchers()

Change-Id: I158558688f3013329a8970e29744527003070f7e
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2023-04-12 23:42:47 +02:00
parent 9d9f1f9c23
commit 836cffc161
2 changed files with 61 additions and 0 deletions

View File

@@ -25,6 +25,65 @@ ExternalToolsFilter::ExternalToolsFilter()
setPriority(Medium); setPriority(Medium);
} }
LocatorMatcherTasks ExternalToolsFilter::matchers()
{
using namespace Utils::Tasking;
TreeStorage<LocatorStorage> storage;
const auto onSetup = [storage] {
const QString input = storage->input();
LocatorFilterEntries bestEntries;
LocatorFilterEntries betterEntries;
LocatorFilterEntries goodEntries;
const Qt::CaseSensitivity entryCaseSensitivity = caseSensitivity(input);
const QMap<QString, ExternalTool *> externalToolsById = ExternalToolManager::toolsById();
for (ExternalTool *tool : externalToolsById) {
int index = tool->displayName().indexOf(input, 0, entryCaseSensitivity);
LocatorFilterEntry::HighlightInfo::DataType hDataType = LocatorFilterEntry::HighlightInfo::DisplayName;
if (index < 0) {
index = tool->description().indexOf(input, 0, entryCaseSensitivity);
hDataType = LocatorFilterEntry::HighlightInfo::ExtraInfo;
}
if (index >= 0) {
LocatorFilterEntry filterEntry;
filterEntry.displayName = tool->displayName();
filterEntry.acceptor = [tool] {
auto runner = new ExternalToolRunner(tool);
if (runner->hasError())
MessageManager::writeFlashing(runner->errorString());
return AcceptResult();
};
filterEntry.extraInfo = tool->description();
filterEntry.highlightInfo = LocatorFilterEntry::HighlightInfo(index, input.length(), hDataType);
if (filterEntry.displayName.startsWith(input, entryCaseSensitivity))
bestEntries.append(filterEntry);
else if (filterEntry.displayName.contains(input, entryCaseSensitivity))
betterEntries.append(filterEntry);
else
goodEntries.append(filterEntry);
}
}
LocatorFilterEntry configEntry;
configEntry.displayName = "Configure External Tool...";
configEntry.extraInfo = "Opens External Tool settings";
configEntry.acceptor = [] {
QMetaObject::invokeMethod(CorePlugin::instance(), [] {
ICore::showOptionsDialog(Constants::SETTINGS_ID_TOOLS);
}, Qt::QueuedConnection);
return AcceptResult();
};
storage->reportOutput(bestEntries + betterEntries + goodEntries
+ LocatorFilterEntries{configEntry});
return true;
};
return {{Sync(onSetup), storage}};
}
QList<LocatorFilterEntry> ExternalToolsFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &, QList<LocatorFilterEntry> ExternalToolsFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &,
const QString &) const QString &)
{ {

View File

@@ -18,6 +18,8 @@ public:
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future, QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
const QString &entry) override; const QString &entry) override;
private: private:
LocatorMatcherTasks matchers() final;
QList<LocatorFilterEntry> m_results; QList<LocatorFilterEntry> m_results;
}; };