From 5a341e087fca1c20e14d5281daea3f42ebcf2dbf Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 12 Apr 2023 20:55:18 +0200 Subject: [PATCH] LocatorFiltersFilter: Reimplement matchers() Change-Id: I59d7f005e9e044b0375cb94254392f23a330f3f0 Reviewed-by: Qt CI Bot Reviewed-by: Eike Ziller --- .../locator/locatorfiltersfilter.cpp | 44 +++++++++++++++++++ .../coreplugin/locator/locatorfiltersfilter.h | 2 + 2 files changed, 46 insertions(+) diff --git a/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp b/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp index b8c05aae97e..4ac12091ffc 100644 --- a/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp +++ b/src/plugins/coreplugin/locator/locatorfiltersfilter.cpp @@ -12,6 +12,8 @@ Q_DECLARE_METATYPE(Core::ILocatorFilter*) +using namespace Utils; + namespace Core::Internal { LocatorFiltersFilter::LocatorFiltersFilter(): @@ -25,6 +27,48 @@ LocatorFiltersFilter::LocatorFiltersFilter(): setConfigurable(false); } +LocatorMatcherTasks LocatorFiltersFilter::matchers() +{ + using namespace Tasking; + + TreeStorage storage; + + const auto onSetup = [=] { + if (!storage->input().isEmpty()) + return true; + + QMap uniqueFilters; + const QList allFilters = Locator::filters(); + for (ILocatorFilter *filter : allFilters) { + const QString filterId = filter->shortcutString() + ',' + filter->displayName(); + uniqueFilters.insert(filterId, filter); + } + + LocatorFilterEntries entries; + for (ILocatorFilter *filter : std::as_const(uniqueFilters)) { + const QString shortcutString = filter->shortcutString(); + if (!shortcutString.isEmpty() && !filter->isHidden() && filter->isEnabled()) { + LocatorFilterEntry entry; + entry.displayName = shortcutString; + entry.acceptor = [shortcutString] { + return AcceptResult{shortcutString + ' ', int(shortcutString.size() + 1)}; + }; + entry.displayIcon = m_icon; + entry.extraInfo = filter->displayName(); + entry.toolTip = filter->description(); + QString keyboardShortcut; + if (auto command = ActionManager::command(filter->actionId())) + keyboardShortcut = command->keySequence().toString(QKeySequence::NativeText); + entry.displayExtra = keyboardShortcut; + entries.append(entry); + } + } + storage->reportOutput(entries); + return true; + }; + return {{Sync(onSetup), storage}}; +} + void LocatorFiltersFilter::prepareSearch(const QString &entry) { m_filterShortcutStrings.clear(); diff --git a/src/plugins/coreplugin/locator/locatorfiltersfilter.h b/src/plugins/coreplugin/locator/locatorfiltersfilter.h index 7ad19f8c4dd..e1cf75a75bf 100644 --- a/src/plugins/coreplugin/locator/locatorfiltersfilter.h +++ b/src/plugins/coreplugin/locator/locatorfiltersfilter.h @@ -28,6 +28,8 @@ public: QList matchesFor(QFutureInterface &future, const QString &entry) override; private: + LocatorMatcherTasks matchers() final; + QStringList m_filterShortcutStrings; QStringList m_filterDisplayNames; QStringList m_filterDescriptions;