From b33fb23ea3f8aae9e31ab712c9de3a1b268d0a96 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Tue, 29 Dec 2015 14:26:32 -0800 Subject: [PATCH] Add bit mask meta data support --- src/FactSystem/Fact.cc | 20 ++++++++++++++++++++ src/FactSystem/Fact.h | 8 +++++++- src/FactSystem/FactMetaData.cc | 32 ++++++++++++++++++++++++++------ src/FactSystem/FactMetaData.h | 8 ++++++++ 4 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index 919a1e6365..116992a2cf 100644 --- a/src/FactSystem/Fact.cc +++ b/src/FactSystem/Fact.cc @@ -223,6 +223,26 @@ QVariantList Fact::enumValues(void) const } } +QStringList Fact::bitmaskStrings(void) const +{ + if (_metaData) { + return _metaData->bitmaskStrings(); + } else { + qWarning() << "Meta data pointer missing"; + return QStringList(); + } +} + +QVariantList Fact::bitmaskValues(void) const +{ + if (_metaData) { + return _metaData->bitmaskValues(); + } else { + qWarning() << "Meta data pointer missing"; + return QVariantList(); + } +} + QString Fact::_variantToString(const QVariant& variant) const { QString valueString; diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index b5e659b5c2..0c68756ee7 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -47,6 +47,8 @@ public: const Fact& operator=(const Fact& other); Q_PROPERTY(int componentId READ componentId CONSTANT) + Q_PROPERTY(QStringList bitmaskStrings READ bitmaskStrings NOTIFY bitmaskStringsChanged) + Q_PROPERTY(QVariantList bitmaskValues READ bitmaskValues NOTIFY bitmaskValuesChanged) Q_PROPERTY(int decimalPlaces READ decimalPlaces CONSTANT) Q_PROPERTY(QVariant defaultValue READ cookedDefaultValue CONSTANT) Q_PROPERTY(QString defaultValueString READ cookedDefaultValueString CONSTANT) @@ -74,7 +76,7 @@ public: /// Convert and validate value /// @param convertOnly true: validate type conversion only, false: validate against meta data as well Q_INVOKABLE QString validate(const QString& cookedValue, bool convertOnly); - + QVariant cookedValue (void) const; /// Value after translation QVariant rawValue (void) const { return _rawValue; } /// value prior to translation, careful int componentId (void) const; @@ -83,6 +85,8 @@ public: QVariant cookedDefaultValue (void) const; bool defaultValueAvailable (void) const; QString cookedDefaultValueString(void) const; + QStringList bitmaskStrings (void) const; + QVariantList bitmaskValues (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); // This is not const, since an unknown value can modify the enum lists @@ -125,6 +129,8 @@ public: void _setName(const QString& name) { _name = name; } signals: + void bitmaskStringsChanged(void); + void bitmaskValuesChanged(void); void enumStringsChanged(void); void enumValuesChanged(void); diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index 87dd67b0fd..26160336e8 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -83,6 +83,8 @@ const FactMetaData& FactMetaData::operator=(const FactMetaData& other) _decimalPlaces = other._decimalPlaces; _rawDefaultValue = other._rawDefaultValue; _defaultValueAvailable = other._defaultValueAvailable; + _bitmaskStrings = other._bitmaskStrings; + _bitmaskValues = other._bitmaskValues; _enumStrings = other._enumStrings; _enumValues = other._enumValues; _group = other._group; @@ -306,6 +308,24 @@ bool FactMetaData::convertAndValidateCooked(const QVariant& cookedValue, bool co return convertOk && errorString.isEmpty(); } +void FactMetaData::setBitmaskInfo(const QStringList& strings, const QVariantList& values) +{ + if (strings.count() != values.count()) { + qWarning() << "Count mismatch strings:values" << strings.count() << values.count(); + return; + } + + _bitmaskStrings = strings; + _bitmaskValues = values; + _setBuiltInTranslator(); +} + +void FactMetaData::addBitmaskInfo(const QString& name, const QVariant& value) +{ + _bitmaskStrings << name; + _bitmaskValues << value; +} + void FactMetaData::setEnumInfo(const QStringList& strings, const QVariantList& values) { if (strings.count() != values.count()) { @@ -318,6 +338,12 @@ void FactMetaData::setEnumInfo(const QStringList& strings, const QVariantList& v _setBuiltInTranslator(); } +void FactMetaData::addEnumInfo(const QString& name, const QVariant& value) +{ + _enumStrings << name; + _enumValues << value; +} + void FactMetaData::setTranslators(Translator rawTranslator, Translator cookedTranslator) { _rawTranslator = rawTranslator; @@ -342,12 +368,6 @@ void FactMetaData::_setBuiltInTranslator(void) } } -void FactMetaData::addEnumInfo(const QString& name, const QVariant& value) -{ - _enumStrings << name; - _enumValues << value; -} - QVariant FactMetaData::_degreesToRadians(const QVariant& degrees) { return QVariant(degrees.toDouble() * (M_PI / 180.0)); diff --git a/src/FactSystem/FactMetaData.h b/src/FactSystem/FactMetaData.h index c61a94f24c..8791814ac7 100644 --- a/src/FactSystem/FactMetaData.h +++ b/src/FactSystem/FactMetaData.h @@ -64,6 +64,8 @@ public: QVariant rawDefaultValue (void) const; QVariant cookedDefaultValue (void) const { return _rawTranslator(rawDefaultValue()); } bool defaultValueAvailable (void) const { return _defaultValueAvailable; } + QStringList bitmaskStrings (void) const { return _bitmaskStrings; } + QVariantList bitmaskValues (void) const { return _bitmaskValues; } QStringList enumStrings (void) const { return _enumStrings; } QVariantList enumValues (void) const { return _enumValues; } QString group (void) const { return _group; } @@ -83,11 +85,15 @@ public: Translator rawTranslator (void) const { return _rawTranslator; } Translator cookedTranslator (void) const { return _cookedTranslator; } + /// Used to add new values to the bitmask lists after the meta data has been loaded + void addBitmaskInfo(const QString& name, const QVariant& value); + /// Used to add new values to the enum lists after the meta data has been loaded void addEnumInfo(const QString& name, const QVariant& value); void setDecimalPlaces (int decimalPlaces) { _decimalPlaces = decimalPlaces; } void setRawDefaultValue (const QVariant& rawDefaultValue); + void setBitmaskInfo (const QStringList& strings, const QVariantList& values); void setEnumInfo (const QStringList& strings, const QVariantList& values); void setGroup (const QString& group) { _group = group; } void setLongDescription (const QString& longDescription) { _longDescription = longDescription;} @@ -128,6 +134,8 @@ private: int _decimalPlaces; QVariant _rawDefaultValue; bool _defaultValueAvailable; + QStringList _bitmaskStrings; + QVariantList _bitmaskValues; QStringList _enumStrings; QVariantList _enumValues; QString _group; -- GitLab