File indexing completed on 2024-12-15 03:45:03
0001 /* 0002 SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #include "metaenumcombobox.h" 0008 0009 #include <QDebug> 0010 #include <QMetaEnum> 0011 #include <QMetaType> 0012 0013 using namespace KUserFeedback::Console; 0014 0015 MetaEnumComboBox::MetaEnumComboBox(QWidget* parent) : 0016 QComboBox(parent) 0017 { 0018 } 0019 0020 MetaEnumComboBox::~MetaEnumComboBox() 0021 { 0022 } 0023 0024 QVariant MetaEnumComboBox::value() const 0025 { 0026 auto value = m_value; 0027 *(static_cast<int*>(value.data())) = currentData().toInt(); 0028 return value; 0029 } 0030 0031 void MetaEnumComboBox::setValue(const QVariant& value) 0032 { 0033 clear(); 0034 m_value = value; 0035 0036 const auto mo = QMetaType::metaObjectForType(value.userType()); 0037 if (!mo) 0038 return; 0039 0040 const QByteArray typeName = value.typeName(); 0041 const auto idx = typeName.lastIndexOf("::"); 0042 if (idx <= 0) 0043 return; 0044 0045 const auto enumName = typeName.mid(idx + 2); 0046 const auto enumIdx = mo->indexOfEnumerator(enumName.constData()); 0047 if (enumIdx < 0) 0048 return; 0049 0050 const auto me = mo->enumerator(enumIdx); 0051 for (int i = 0; i < me.keyCount(); ++i) { 0052 addItem(QLatin1String(me.key(i)), me.value(i)); 0053 if (me.value(i) == value.toInt()) 0054 setCurrentIndex(i); 0055 } 0056 } 0057 0058 #include "moc_metaenumcombobox.cpp"