diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index f3a61761428170e8fe7f636b0c19e9bfe05294dc..abbd3d0210a17c0094b8a566317d6abec201668b 100644 --- a/src/FactSystem/Fact.cc +++ b/src/FactSystem/Fact.cc @@ -165,7 +165,7 @@ QVariant Fact::cookedValue(void) const } } -QString Fact::enumStringValue(void) const +QString Fact::enumStringValue(void) { if (_metaData) { int enumIndex = this->enumIndex(); @@ -179,16 +179,23 @@ QString Fact::enumStringValue(void) const return QString(); } -int Fact::enumIndex(void) const +int Fact::enumIndex(void) { if (_metaData) { int index = 0; + foreach (QVariant enumValue, _metaData->enumValues()) { if (enumValue == rawValue()) { return index; } index ++; } + + // Current value is not in list, add it manually + _metaData->addEnumInfo(QString("Unknown: %1").arg(rawValue().toString()), rawValue()); + emit enumStringsChanged(); + emit enumValuesChanged(); + return index; } else { qWarning() << "Meta data pointer missing"; } diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index 4acd5f70deadf8c726096e87b3ae1b43d8f69a46..f2e311c8f59eafc3d2dd3c2ca539dab4163444dd 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -52,9 +52,9 @@ public: Q_PROPERTY(QString defaultValueString READ defaultValueString CONSTANT) Q_PROPERTY(bool defaultValueAvailable READ defaultValueAvailable CONSTANT) Q_PROPERTY(int enumIndex READ enumIndex WRITE setEnumIndex NOTIFY valueChanged) - Q_PROPERTY(QStringList enumStrings READ enumStrings CONSTANT) + Q_PROPERTY(QStringList enumStrings READ enumStrings NOTIFY enumStringsChanged) Q_PROPERTY(QString enumStringValue READ enumStringValue WRITE setEnumStringValue NOTIFY valueChanged) - Q_PROPERTY(QVariantList enumValues READ enumValues CONSTANT) + Q_PROPERTY(QVariantList enumValues READ enumValues NOTIFY enumValuesChanged) Q_PROPERTY(QString group READ group CONSTANT) Q_PROPERTY(QString longDescription READ longDescription CONSTANT) Q_PROPERTY(QVariant max READ max CONSTANT) @@ -81,9 +81,9 @@ public: QVariant defaultValue (void) const; bool defaultValueAvailable (void) const; QString defaultValueString (void) const; - int enumIndex (void) const; + int enumIndex (void); // This is not const, since an unknown value can modify the enum lists QStringList enumStrings (void) const; - QString enumStringValue (void) const; + QString enumStringValue (void); // This is not const, since an unknown value can modify the enum lists QVariantList enumValues (void) const; QString group (void) const; QString longDescription (void) const; @@ -120,6 +120,9 @@ public: void _setName(const QString& name) { _name = name; } signals: + void enumStringsChanged(void); + void enumValuesChanged(void); + /// QObject Property System signal for value property changes /// /// This signal is only meant for use by the QT property system. It should not be connected to by client code.