From faa38e5eb80f01c5df65dc678ab018e784f54df1 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 13 Sep 2022 15:26:11 +0200 Subject: [PATCH] Locator: Show actions shortcuts in locator widget Change-Id: Ib4d1e55e6335e691ee9ee85735e69a86b9276f15 Reviewed-by: Reviewed-by: Eike Ziller --- src/libs/utils/highlightingitemdelegate.cpp | 19 +++++++++++++++++-- src/libs/utils/highlightingitemdelegate.h | 4 +++- src/plugins/coreplugin/actionsfilter.cpp | 1 + .../coreplugin/locator/ilocatorfilter.h | 2 ++ .../coreplugin/locator/locatorwidget.cpp | 10 ++++++++++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/highlightingitemdelegate.cpp b/src/libs/utils/highlightingitemdelegate.cpp index 306ee22e086..7282578c81f 100644 --- a/src/libs/utils/highlightingitemdelegate.cpp +++ b/src/libs/utils/highlightingitemdelegate.cpp @@ -139,8 +139,24 @@ void HighlightingItemDelegate::drawText(QPainter *painter, QVector searchTermLengths = index.model()->data(index, int(HighlightingItemRole::Length)).value>(); + QVector formats; + + const QString extraText + = index.model()->data(index, int(HighlightingItemRole::DisplayExtra)).toString(); + if (!extraText.isEmpty()) { + if (!option.state.testFlag(QStyle::State_Selected)) { + int start = text.length(); + auto dataType = int(HighlightingItemRole::DisplayExtraForeground); + const QColor highlightForeground = index.model()->data(index, dataType).value(); + QTextCharFormat extraFormat; + extraFormat.setForeground(highlightForeground); + formats.append({start, int(extraText.length()), extraFormat}); + } + text.append(extraText); + } + if (searchTermStarts.isEmpty()) { - drawDisplay(painter, option, rect, text.replace('\t', m_tabString), {}); + drawDisplay(painter, option, rect, text.replace('\t', m_tabString), formats); return; } @@ -175,7 +191,6 @@ void HighlightingItemDelegate::drawText(QPainter *painter, highlightFormat.setForeground(highlightForeground); highlightFormat.setBackground(highlightBackground); - QVector formats; for (int i = 0, size = searchTermStarts.size(); i < size; ++i) formats.append({searchTermStarts.at(i), searchTermLengths.at(i), highlightFormat}); diff --git a/src/libs/utils/highlightingitemdelegate.h b/src/libs/utils/highlightingitemdelegate.h index 8b9c529ad74..363fee70da8 100644 --- a/src/libs/utils/highlightingitemdelegate.h +++ b/src/libs/utils/highlightingitemdelegate.h @@ -16,7 +16,9 @@ enum class HighlightingItemRole { Length, Foreground, Background, - User + User, + DisplayExtra, + DisplayExtraForeground }; class QTCREATOR_UTILS_EXPORT HighlightingItemDelegate : public QItemDelegate diff --git a/src/plugins/coreplugin/actionsfilter.cpp b/src/plugins/coreplugin/actionsfilter.cpp index 68a48c6fdfa..3c3153cdd42 100644 --- a/src/plugins/coreplugin/actionsfilter.cpp +++ b/src/plugins/coreplugin/actionsfilter.cpp @@ -245,6 +245,7 @@ void ActionsFilter::collectEntriesForCommands() const QStringList path = identifier.split(QLatin1Char('.')); const ActionFilterEntryData data{action, command->id()}; LocatorFilterEntry filterEntry(this, text, QVariant::fromValue(data), action->icon()); + filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText); if (path.size() >= 2) filterEntry.extraInfo = path.mid(0, path.size() - 1).join(" > "); updateEntry(action, filterEntry); diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.h b/src/plugins/coreplugin/locator/ilocatorfilter.h index cc7a2124ed3..c8c558b7bc4 100644 --- a/src/plugins/coreplugin/locator/ilocatorfilter.h +++ b/src/plugins/coreplugin/locator/ilocatorfilter.h @@ -79,6 +79,8 @@ struct LocatorFilterEntry ILocatorFilter *filter = nullptr; /* displayed string */ QString displayName; + /* extra information displayed in parentheses and light-gray next to display name (optional)*/ + QString displayExtra; /* extra information displayed in light-gray in a second column (optional) */ QString extraInfo; /* additional tooltip */ diff --git a/src/plugins/coreplugin/locator/locatorwidget.cpp b/src/plugins/coreplugin/locator/locatorwidget.cpp index 71c0d5f90ce..08835179fac 100644 --- a/src/plugins/coreplugin/locator/locatorwidget.cpp +++ b/src/plugins/coreplugin/locator/locatorwidget.cpp @@ -213,6 +213,16 @@ QVariant LocatorModel::data(const QModelIndex &index, int role) const } break; } + case int(HighlightingItemRole::DisplayExtra): { + if (index.column() == LocatorFilterEntry::HighlightInfo::DisplayName) { + LocatorFilterEntry &entry = mEntries[index.row()]; + if (!entry.displayExtra.isEmpty()) + return QString(" (" + entry.displayExtra + ')'); + } + break; + } + case int(HighlightingItemRole::DisplayExtraForeground): + return QColor(Qt::darkGray); case int(HighlightingItemRole::Background): return mBackgroundColor; case int(HighlightingItemRole::Foreground):