Locator: Show actions shortcuts in locator widget

Change-Id: Ib4d1e55e6335e691ee9ee85735e69a86b9276f15
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2022-09-13 15:26:11 +02:00
parent 729805e7fd
commit faa38e5eb8
5 changed files with 33 additions and 3 deletions

View File

@@ -139,8 +139,24 @@ void HighlightingItemDelegate::drawText(QPainter *painter,
QVector<int> searchTermLengths = QVector<int> searchTermLengths =
index.model()->data(index, int(HighlightingItemRole::Length)).value<QVector<int>>(); index.model()->data(index, int(HighlightingItemRole::Length)).value<QVector<int>>();
QVector<QTextLayout::FormatRange> 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<QColor>();
QTextCharFormat extraFormat;
extraFormat.setForeground(highlightForeground);
formats.append({start, int(extraText.length()), extraFormat});
}
text.append(extraText);
}
if (searchTermStarts.isEmpty()) { if (searchTermStarts.isEmpty()) {
drawDisplay(painter, option, rect, text.replace('\t', m_tabString), {}); drawDisplay(painter, option, rect, text.replace('\t', m_tabString), formats);
return; return;
} }
@@ -175,7 +191,6 @@ void HighlightingItemDelegate::drawText(QPainter *painter,
highlightFormat.setForeground(highlightForeground); highlightFormat.setForeground(highlightForeground);
highlightFormat.setBackground(highlightBackground); highlightFormat.setBackground(highlightBackground);
QVector<QTextLayout::FormatRange> formats;
for (int i = 0, size = searchTermStarts.size(); i < size; ++i) for (int i = 0, size = searchTermStarts.size(); i < size; ++i)
formats.append({searchTermStarts.at(i), searchTermLengths.at(i), highlightFormat}); formats.append({searchTermStarts.at(i), searchTermLengths.at(i), highlightFormat});

View File

@@ -16,7 +16,9 @@ enum class HighlightingItemRole {
Length, Length,
Foreground, Foreground,
Background, Background,
User User,
DisplayExtra,
DisplayExtraForeground
}; };
class QTCREATOR_UTILS_EXPORT HighlightingItemDelegate : public QItemDelegate class QTCREATOR_UTILS_EXPORT HighlightingItemDelegate : public QItemDelegate

View File

@@ -245,6 +245,7 @@ void ActionsFilter::collectEntriesForCommands()
const QStringList path = identifier.split(QLatin1Char('.')); const QStringList path = identifier.split(QLatin1Char('.'));
const ActionFilterEntryData data{action, command->id()}; const ActionFilterEntryData data{action, command->id()};
LocatorFilterEntry filterEntry(this, text, QVariant::fromValue(data), action->icon()); LocatorFilterEntry filterEntry(this, text, QVariant::fromValue(data), action->icon());
filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText);
if (path.size() >= 2) if (path.size() >= 2)
filterEntry.extraInfo = path.mid(0, path.size() - 1).join(" > "); filterEntry.extraInfo = path.mid(0, path.size() - 1).join(" > ");
updateEntry(action, filterEntry); updateEntry(action, filterEntry);

View File

@@ -79,6 +79,8 @@ struct LocatorFilterEntry
ILocatorFilter *filter = nullptr; ILocatorFilter *filter = nullptr;
/* displayed string */ /* displayed string */
QString displayName; 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) */ /* extra information displayed in light-gray in a second column (optional) */
QString extraInfo; QString extraInfo;
/* additional tooltip */ /* additional tooltip */

View File

@@ -213,6 +213,16 @@ QVariant LocatorModel::data(const QModelIndex &index, int role) const
} }
break; 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): case int(HighlightingItemRole::Background):
return mBackgroundColor; return mBackgroundColor;
case int(HighlightingItemRole::Foreground): case int(HighlightingItemRole::Foreground):