Browse Source

Add support for valueTypeElapsedTimeInSeconds

QGC4.4
DonLakeFlyer 8 years ago
parent
commit
ab397c9993
  1. 12
      src/FactSystem/Fact.cc
  2. 17
      src/FactSystem/FactMetaData.cc
  3. 3
      src/FactSystem/FactMetaData.h
  4. 1
      src/FirmwarePlugin/APM/APMParameterMetaData.cc
  5. 1
      src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc

12
src/FactSystem/Fact.cc

@ -270,6 +270,18 @@ QString Fact::_variantToString(const QVariant& variant, int decimalPlaces) const
} }
} }
break; break;
case FactMetaData::valueTypeElapsedTimeInSeconds:
{
double dValue = variant.toDouble();
if (qIsNaN(dValue)) {
valueString = QStringLiteral("--:--:--");
} else {
QTime time(0, 0, 0, 0);
time = time.addSecs(dValue);
valueString = time.toString(QStringLiteral("hh:mm:ss"));
}
}
break;
default: default:
valueString = variant.toString(); valueString = variant.toString();
break; break;

17
src/FactSystem/FactMetaData.cc

@ -210,6 +210,8 @@ QVariant FactMetaData::_minForType(void) const
return QVariant(); return QVariant();
case valueTypeBool: case valueTypeBool:
return QVariant(0); return QVariant(0);
case valueTypeElapsedTimeInSeconds:
return QVariant(0.0);
} }
// Make windows compiler happy, even switch is full cased // Make windows compiler happy, even switch is full cased
@ -233,6 +235,7 @@ QVariant FactMetaData::_maxForType(void) const
return QVariant(std::numeric_limits<int>::max()); return QVariant(std::numeric_limits<int>::max());
case valueTypeFloat: case valueTypeFloat:
return QVariant(std::numeric_limits<float>::max()); return QVariant(std::numeric_limits<float>::max());
case valueTypeElapsedTimeInSeconds:
case valueTypeDouble: case valueTypeDouble:
return QVariant(std::numeric_limits<double>::max()); return QVariant(std::numeric_limits<double>::max());
case valueTypeString: case valueTypeString:
@ -262,7 +265,6 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
} }
} }
break; break;
case FactMetaData::valueTypeUint8: case FactMetaData::valueTypeUint8:
case FactMetaData::valueTypeUint16: case FactMetaData::valueTypeUint16:
case FactMetaData::valueTypeUint32: case FactMetaData::valueTypeUint32:
@ -273,7 +275,6 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
} }
} }
break; break;
case FactMetaData::valueTypeFloat: case FactMetaData::valueTypeFloat:
typedValue = QVariant(rawValue.toFloat(&convertOk)); typedValue = QVariant(rawValue.toFloat(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
@ -282,7 +283,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
} }
} }
break; break;
case FactMetaData::valueTypeElapsedTimeInSeconds:
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
typedValue = QVariant(rawValue.toDouble(&convertOk)); typedValue = QVariant(rawValue.toDouble(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
@ -325,7 +326,6 @@ bool FactMetaData::convertAndValidateCooked(const QVariant& cookedValue, bool co
} }
} }
break; break;
case FactMetaData::valueTypeUint8: case FactMetaData::valueTypeUint8:
case FactMetaData::valueTypeUint16: case FactMetaData::valueTypeUint16:
case FactMetaData::valueTypeUint32: case FactMetaData::valueTypeUint32:
@ -336,7 +336,6 @@ bool FactMetaData::convertAndValidateCooked(const QVariant& cookedValue, bool co
} }
} }
break; break;
case FactMetaData::valueTypeFloat: case FactMetaData::valueTypeFloat:
typedValue = QVariant(cookedValue.toFloat(&convertOk)); typedValue = QVariant(cookedValue.toFloat(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
@ -345,7 +344,7 @@ bool FactMetaData::convertAndValidateCooked(const QVariant& cookedValue, bool co
} }
} }
break; break;
case FactMetaData::valueTypeElapsedTimeInSeconds:
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
typedValue = QVariant(cookedValue.toDouble(&convertOk)); typedValue = QVariant(cookedValue.toDouble(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
@ -604,7 +603,8 @@ FactMetaData::ValueType_t FactMetaData::stringToType(const QString& typeString,
<< QStringLiteral("Float") << QStringLiteral("Float")
<< QStringLiteral("Double") << QStringLiteral("Double")
<< QStringLiteral("String") << QStringLiteral("String")
<< QStringLiteral("Bool"); << QStringLiteral("Bool")
<< QStringLiteral("ElapsedSeconds");
knownTypes << valueTypeUint8 knownTypes << valueTypeUint8
<< valueTypeInt8 << valueTypeInt8
@ -615,7 +615,8 @@ FactMetaData::ValueType_t FactMetaData::stringToType(const QString& typeString,
<< valueTypeFloat << valueTypeFloat
<< valueTypeDouble << valueTypeDouble
<< valueTypeString << valueTypeString
<< valueTypeBool; << valueTypeBool
<< valueTypeElapsedTimeInSeconds;
for (int i=0; i<knownTypeStrings.count(); i++) { for (int i=0; i<knownTypeStrings.count(); i++) {
if (knownTypeStrings[i].compare(typeString, Qt::CaseInsensitive) == 0) { if (knownTypeStrings[i].compare(typeString, Qt::CaseInsensitive) == 0) {

3
src/FactSystem/FactMetaData.h

@ -39,7 +39,8 @@ public:
valueTypeFloat, valueTypeFloat,
valueTypeDouble, valueTypeDouble,
valueTypeString, valueTypeString,
valueTypeBool valueTypeBool,
valueTypeElapsedTimeInSeconds, // Internally stored as double, valueString displays as HH:MM:SS
} ValueType_t; } ValueType_t;
typedef QVariant (*Translator)(const QVariant& from); typedef QVariant (*Translator)(const QVariant& from);

1
src/FirmwarePlugin/APM/APMParameterMetaData.cc

@ -52,6 +52,7 @@ QVariant APMParameterMetaData::_stringToTypedVariant(const QString& string,
case FactMetaData::valueTypeFloat: case FactMetaData::valueTypeFloat:
convertTo = QMetaType::Float; convertTo = QMetaType::Float;
break; break;
case FactMetaData::valueTypeElapsedTimeInSeconds:
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
convertTo = QVariant::Double; convertTo = QVariant::Double;
break; break;

1
src/FirmwarePlugin/PX4/PX4ParameterMetaData.cc

@ -52,6 +52,7 @@ QVariant PX4ParameterMetaData::_stringToTypedVariant(const QString& string, Fact
case FactMetaData::valueTypeFloat: case FactMetaData::valueTypeFloat:
convertTo = QMetaType::Float; convertTo = QMetaType::Float;
break; break;
case FactMetaData::valueTypeElapsedTimeInSeconds:
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
convertTo = QVariant::Double; convertTo = QVariant::Double;
break; break;

Loading…
Cancel
Save