QString keyName(int index, SO::KeyNameOptions opt = {}) { constexpr static auto const getEnum = [](const char *name) { int enumIndex = qt_getQtMetaObject()->indexOfEnumerator(name); return qt_getQtMetaObject()->enumerator(enumIndex); }; static const auto keyEnum = getEnum("Key"); static const auto modifierEnum = getEnum("KeyboardModifiers"); auto name = modifierEnum.valueToKeys(index & Qt::KeyboardModifierMask); index &= ~Qt::KeyboardModifierMask; if (name == "NoModifier") name.clear(); else { name.replace('|', '+'); name.replace("Modifier", ""); name.append('+'); } auto keyName = keyEnum.valueToKey(index); if (keyName) name.append(keyName + 4); if ((opt & SO::AppendArrow) && index >= Qt::Key_Left && index <= Qt::Key_Down) name.append(" Arrow"); return QLatin1String(name); }
QString DesignerMetaEnum::toString(int value, SerializationMode sm, bool *ok) const { // find value bool valueOk; const QString item = valueToKey(value, &valueOk); if (ok) *ok = valueOk; if (!valueOk || sm == NameOnly) return item; QString qualifiedItem; appendQualifiedName(item, qualifiedItem); return qualifiedItem; }
QVariant PerfConfigEventsModel::data(const QModelIndex &index, int role) const { switch (role) { case Qt::DisplayRole: case Qt::EditRole: break; // Retrieve the actual value default: return QVariant(); // ignore } QString event = m_settings->events().value(index.row()); const EventDescription description = parseEvent(event); switch (index.column()) { case ColumnEventType: { if (role == Qt::DisplayRole) { if (description.eventType == EventTypeInvalid) return QVariant(); auto meta = QMetaEnum::fromType<EventType>(); return QString::fromLatin1(meta.valueToKey(description.eventType)) .mid(static_cast<int>(strlen("EventType"))).toLower(); } return description.eventType; } case ColumnSubType: { switch (description.eventType) { case EventTypeHardware: case EventTypeSoftware: case EventTypeCache: if (role == Qt::DisplayRole) return subTypeString(description.eventType, description.subType); return description.subType; case EventTypeRaw: if (role == Qt::DisplayRole) return QString("r%1").arg(description.numericEvent, 3, 16, QLatin1Char('0')); else return description.numericEvent; case EventTypeBreakpoint: if (role == Qt::DisplayRole) return QString("0x%1").arg(description.numericEvent, 16, 16, QLatin1Char('0')); else return description.numericEvent; case EventTypeCustom: return description.customEvent; default: return QVariant(); } } case ColumnOperation: if (role == Qt::DisplayRole) { if (description.eventType == EventTypeBreakpoint) { QString result; if (description.operation & OperationLoad) result += 'r'; if (description.operation & OperationStore) result += 'w'; if (description.operation & OperationExecute) result += 'x'; return result; } if (description.eventType == EventTypeCache) { if (description.operation == OperationInvalid) return QVariant(); auto meta = QMetaEnum::fromType<Operation>(); return QString::fromLatin1(meta.valueToKey(description.operation)).mid( static_cast<int>(strlen("Operation"))).toLower(); } return QVariant(); } return description.operation; case ColumnResult: if (role == Qt::DisplayRole) { if (description.result == ResultInvalid) return QVariant(); auto meta = QMetaEnum::fromType<Result>(); return QString::fromLatin1(meta.valueToKey(description.result)).mid( static_cast<int>(strlen("Result"))).toLower(); } return description.result; default: return QVariant(); } }