File indexing completed on 2024-12-15 03:45:00
0001 /* 0002 SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #ifndef KUSERFEEDBACK_CONSOLE_UTIL_H 0008 #define KUSERFEEDBACK_CONSOLE_UTIL_H 0009 0010 #include <QMetaEnum> 0011 #include <QMetaType> 0012 0013 class QString; 0014 0015 namespace KUserFeedback { 0016 namespace Console { 0017 namespace Util 0018 { 0019 template<typename Enum, typename Table, std::size_t N> 0020 Enum stringToEnum(const QString &s, const Table(&lookupTable)[N]) 0021 { 0022 for (std::size_t i = 0; i < N; ++i) { 0023 if (s == QLatin1String(lookupTable[i].name)) 0024 return lookupTable[i].type; 0025 } 0026 return Enum(); 0027 } 0028 0029 template<typename Enum> 0030 QByteArray enumToString(Enum v) 0031 { 0032 const auto mo = QMetaType::metaObjectForType(qMetaTypeId<Enum>()); 0033 if (!mo) 0034 return {}; 0035 0036 const QByteArray typeName = QMetaType::typeName(qMetaTypeId<Enum>()); 0037 const auto idx = typeName.lastIndexOf("::"); 0038 if (idx <= 0) 0039 return {}; 0040 0041 const auto enumName = typeName.mid(idx + 2); 0042 const auto enumIdx = mo->indexOfEnumerator(enumName.constData()); 0043 if (enumIdx < 0) 0044 return {}; 0045 0046 const auto me = mo->enumerator(enumIdx); 0047 return me.valueToKeys(v); 0048 } 0049 } 0050 } 0051 } 0052 0053 #endif // KUSERFEEDBACK_CONSOLE_UTIL_H