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"