diff options
| author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-04-24 20:45:25 +0200 |
|---|---|---|
| committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-05-10 12:24:02 +0000 |
| commit | dab004b3c201f332ea38184bfec924cdfe800800 (patch) | |
| tree | 9e28b5d736b625f7564c38a195954b852a6010ec /src/plugins/coreplugin | |
| parent | 2d58d1b280959236968211f7811b040ae0d14daa (diff) | |
| download | qt-creator-dab004b3c201f332ea38184bfec924cdfe800800.tar.gz | |
ActionsFilter: Remove the old matchesFor() implementation
Change-Id: I9f2d4c3d070869a720b63089b689c22c06dd4f4e
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/plugins/coreplugin')
| -rw-r--r-- | src/plugins/coreplugin/actionsfilter.cpp | 129 | ||||
| -rw-r--r-- | src/plugins/coreplugin/actionsfilter.h | 13 |
2 files changed, 6 insertions, 136 deletions
diff --git a/src/plugins/coreplugin/actionsfilter.cpp b/src/plugins/coreplugin/actionsfilter.cpp index 7bb1d51d82..01772ac252 100644 --- a/src/plugins/coreplugin/actionsfilter.cpp +++ b/src/plugins/coreplugin/actionsfilter.cpp @@ -200,118 +200,6 @@ LocatorMatcherTasks ActionsFilter::matchers() return {{AsyncTask<void>(onSetup), storage}}; } - -QList<LocatorFilterEntry> ActionsFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &future, - const QString &entry) -{ - using Highlight = LocatorFilterEntry::HighlightInfo; - if (entry.simplified().isEmpty()) - return m_entries; - - const QRegularExpression regExp = createRegExp(entry, Qt::CaseInsensitive, true); - - using FilterResult = std::pair<MatchLevel, LocatorFilterEntry>; - const auto filter = [&](const LocatorFilterEntry &filterEntry) -> std::optional<FilterResult> { - if (future.isCanceled()) - return {}; - Highlight highlight; - - const auto withHighlight = [&](LocatorFilterEntry result) { - result.highlightInfo = highlight; - return result; - }; - - Highlight::DataType first = Highlight::DisplayName; - QString allText = filterEntry.displayName + ' ' + filterEntry.extraInfo; - QRegularExpressionMatch allTextMatch = regExp.match(allText); - if (!allTextMatch.hasMatch()) { - first = Highlight::ExtraInfo; - allText = filterEntry.extraInfo + ' ' + filterEntry.displayName; - allTextMatch = regExp.match(allText); - } - if (allTextMatch.hasMatch()) { - if (first == Highlight::DisplayName) { - const QRegularExpressionMatch displayMatch = regExp.match(filterEntry.displayName); - if (displayMatch.hasMatch()) - highlight = highlightInfo(displayMatch); - const QRegularExpressionMatch extraMatch = regExp.match(filterEntry.extraInfo); - if (extraMatch.hasMatch()) { - Highlight extraHighlight = highlightInfo(extraMatch, Highlight::ExtraInfo); - highlight.startsExtraInfo = extraHighlight.startsExtraInfo; - highlight.lengthsExtraInfo = extraHighlight.lengthsExtraInfo; - } - - if (filterEntry.displayName.startsWith(entry, Qt::CaseInsensitive)) - return FilterResult{MatchLevel::Best, withHighlight(filterEntry)}; - if (filterEntry.displayName.contains(entry, Qt::CaseInsensitive)) - return FilterResult{MatchLevel::Better, withHighlight(filterEntry)}; - if (displayMatch.hasMatch()) - return FilterResult{MatchLevel::Good, withHighlight(filterEntry)}; - if (extraMatch.hasMatch()) - return FilterResult{MatchLevel::Normal, withHighlight(filterEntry)}; - } - - const FuzzyMatcher::HighlightingPositions positions - = FuzzyMatcher::highlightingPositions(allTextMatch); - const int positionsCount = positions.starts.count(); - QTC_ASSERT(positionsCount == positions.lengths.count(), return {}); - const int border = first == Highlight::DisplayName ? filterEntry.displayName.length() - : filterEntry.extraInfo.length(); - for (int i = 0; i < positionsCount; ++i) { - int start = positions.starts.at(i); - const int length = positions.lengths.at(i); - Highlight::DataType type = first; - if (start > border) { - // this highlight is behind the border so switch type and reset start index - start -= border + 1; - type = first == Highlight::DisplayName ? Highlight::ExtraInfo - : Highlight::DisplayName; - } else if (start + length > border) { - const int firstStart = start; - const int firstLength = border - start; - const int secondStart = 0; - const int secondLength = length - firstLength - 1; - if (first == Highlight::DisplayName) { - highlight.startsDisplay.append(firstStart); - highlight.lengthsDisplay.append(firstLength); - highlight.startsExtraInfo.append(secondStart); - highlight.lengthsExtraInfo.append(secondLength); - } else { - highlight.startsExtraInfo.append(firstStart); - highlight.lengthsExtraInfo.append(firstLength); - highlight.startsDisplay.append(secondStart); - highlight.lengthsDisplay.append(secondLength); - } - continue; - } - if (type == Highlight::DisplayName) { - highlight.startsDisplay.append(start); - highlight.lengthsDisplay.append(length); - } else { - highlight.startsExtraInfo.append(start); - highlight.lengthsExtraInfo.append(length); - } - } - - return FilterResult{MatchLevel::Normal, withHighlight(filterEntry)}; - } - return {}; - }; - - QMap<MatchLevel, QList<LocatorFilterEntry>> filtered; - const QList<std::optional<FilterResult>> filterResults - = QtConcurrent::blockingMapped(m_entries, filter); - for (const std::optional<FilterResult> &filterResult : filterResults) { - if (filterResult) - filtered[filterResult->first] << filterResult->second; - } - - QList<LocatorFilterEntry> result; - for (const QList<LocatorFilterEntry> &sublist : std::as_const(filtered)) - result << sublist; - return result; -} - LocatorFilterEntry::Acceptor ActionsFilter::acceptor(const ActionFilterEntryData &data) const { static const int maxHistorySize = 30; @@ -415,7 +303,7 @@ void ActionsFilter::collectEntriesForLastTriggered() void ActionsFilter::updateEntry(const QPointer<QAction> action, const LocatorFilterEntry &entry) { - auto index = m_indexes.value(action, -1); + const int index = m_indexes.value(action, -1); if (index < 0) { m_indexes[action] = m_entries.size(); m_entries << entry; @@ -459,18 +347,6 @@ void ActionsFilter::updateEnabledActionCache() } } -void Core::Internal::ActionsFilter::prepareSearch(const QString &entry) -{ - Q_UNUSED(entry) - m_entries.clear(); - m_indexes.clear(); - QList<const QMenu *> processedMenus; - collectEntriesForLastTriggered(); - for (QAction* action : menuBarActions()) - collectEntriesForAction(action, QStringList(), processedMenus); - collectEntriesForCommands(); -} - void ActionsFilter::saveState(QJsonObject &object) const { QJsonArray commands; @@ -484,7 +360,8 @@ void ActionsFilter::saveState(QJsonObject &object) const void ActionsFilter::restoreState(const QJsonObject &object) { m_lastTriggered.clear(); - for (const QJsonValue &command : object.value(lastTriggeredC).toArray()) { + const QJsonArray commands = object.value(lastTriggeredC).toArray(); + for (const QJsonValue &command : commands) { if (command.isString()) m_lastTriggered.append({nullptr, Id::fromString(command.toString())}); } diff --git a/src/plugins/coreplugin/actionsfilter.h b/src/plugins/coreplugin/actionsfilter.h index 3d5cf43814..692dea95d2 100644 --- a/src/plugins/coreplugin/actionsfilter.h +++ b/src/plugins/coreplugin/actionsfilter.h @@ -14,8 +14,7 @@ class QAction; class QMenu; QT_END_NAMESPACE -namespace Core { -namespace Internal { +namespace Core::Internal { class ActionFilterEntryData { @@ -30,14 +29,9 @@ public: class ActionsFilter : public ILocatorFilter { - Q_OBJECT public: ActionsFilter(); - QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future, - const QString &entry) override; - void prepareSearch(const QString &entry) override; - private: LocatorMatcherTasks matchers() final; void saveState(QJsonObject &object) const override; @@ -51,11 +45,10 @@ private: void updateEntry(const QPointer<QAction> action, const LocatorFilterEntry &entry); void updateEnabledActionCache(); - QList<LocatorFilterEntry> m_entries; + LocatorFilterEntries m_entries; QMap<QPointer<QAction>, int> m_indexes; QSet<QPointer<QAction>> m_enabledActions; mutable QList<ActionFilterEntryData> m_lastTriggered; }; -} // namespace Internal -} // namespace Core +} // namespace Core::Internal |
