Browse Source

Fix generic metadata loading

QGC4.4
Don Gagne 10 years ago
parent
commit
e79c71622b
  1. 21
      src/FactSystem/FactLoader.cc

21
src/FactSystem/FactLoader.cc

@ -82,18 +82,18 @@ void FactLoader::_parameterChanged(int uas, int component, QString parameterName @@ -82,18 +82,18 @@ void FactLoader::_parameterChanged(int uas, int component, QString parameterName
Q_ASSERT(component == _lastSeenComponent);
}
bool setMetaData = false;
if (!_mapParameterName2Variant.contains(parameterName)) {
qCDebug(FactLoaderLog) << "Adding new fact" << parameterName;
Fact* fact = new Fact(parameterName, this);
setMetaData = true;
_mapParameterName2Variant[parameterName] = QVariant::fromValue(fact);
_mapFact2ParameterName[fact] = parameterName;
// We need to know when the fact changes from QML so that we can send the new value to the parameter manager
connect(fact, &Fact::_containerValueChanged, this, &FactLoader::_valueUpdated);
_addMetaDataToFact(fact);
}
Q_ASSERT(_mapParameterName2Variant.contains(parameterName));
@ -103,6 +103,10 @@ void FactLoader::_parameterChanged(int uas, int component, QString parameterName @@ -103,6 +103,10 @@ void FactLoader::_parameterChanged(int uas, int component, QString parameterName
Fact* fact = _mapParameterName2Variant[parameterName].value<Fact*>();
Q_ASSERT(fact);
fact->_containerSetValue(value);
if (setMetaData) {
_addMetaDataToFact(fact);
}
}
/// Connected to Fact::valueUpdated
@ -122,23 +126,26 @@ void FactLoader::_valueUpdated(QVariant value) @@ -122,23 +126,26 @@ void FactLoader::_valueUpdated(QVariant value)
case FactMetaData::valueTypeInt8:
case FactMetaData::valueTypeInt16:
case FactMetaData::valueTypeInt32:
typedValue = QVariant(value.value<int>());
typedValue.setValue(QVariant(value.toInt()));
break;
case FactMetaData::valueTypeUint8:
case FactMetaData::valueTypeUint16:
case FactMetaData::valueTypeUint32:
typedValue = QVariant(value.value<uint>());
typedValue.setValue(value.toUInt());
break;
case FactMetaData::valueTypeFloat:
typedValue = QVariant(value.toFloat());
typedValue.setValue(value.toFloat());
break;
case FactMetaData::valueTypeDouble:
typedValue = QVariant(value.toDouble());
typedValue.setValue(value.toDouble());
break;
}
qCDebug(FactLoaderLog) << "Set parameter" << fact->name() << typedValue;
_paramMgr->setParameter(_lastSeenComponent, _mapFact2ParameterName[fact], typedValue);
_paramMgr->sendPendingParameters(true /* persistAfterSend */, false /* forceSend */);
}
@ -191,7 +198,7 @@ void FactLoader::_addMetaDataToFact(Fact* fact) @@ -191,7 +198,7 @@ void FactLoader::_addMetaDataToFact(Fact* fact)
break;
default:
qCWarning(FactLoaderLog) << "Invalid variant type" << fact->value().type();
qWarning() << fact->name() << "Invalid variant type" << fact->value().type();
break;
}

Loading…
Cancel
Save