From 83409be57cd2e6843a0cd1c1726a730ae014f193 Mon Sep 17 00:00:00 2001 From: tstellanova Date: Mon, 5 Aug 2013 21:29:48 -0700 Subject: [PATCH] utility methods for data model --- src/uas/UASParameterDataModel.cc | 40 +++++++++++++++++++++++++------- src/uas/UASParameterDataModel.h | 15 ++++++++++++ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/uas/UASParameterDataModel.cc b/src/uas/UASParameterDataModel.cc index 8effd144c..8396594e1 100644 --- a/src/uas/UASParameterDataModel.cc +++ b/src/uas/UASParameterDataModel.cc @@ -7,20 +7,44 @@ UASParameterDataModel::UASParameterDataModel(QObject *parent) : { +} +void UASParameterDataModel::addPendingIfParameterChanged(int componentId, QString& key, QVariant &value) +{ + addComponent(componentId); + QMap *existParams = getOnbardParametersForComponent(componentId); + QMap *pendParams = getPendingParametersForComponent(componentId); + + QVariant existValue = existParams->value(key); + QVariant pendValue = pendParams->value(key); + if (!(existValue == pendValue)) { + setPendingParameter(componentId,key,value); + } +} +void UASParameterDataModel::setPendingParameter(int componentId, QString& key, QVariant &value) +{ + //ensure we have a placeholder map for this component + addComponent(componentId); + QMap *params = getPendingParametersForComponent(componentId); + params->insert(key,value); } +void UASParameterDataModel::setOnboardParameter(int componentId, QString& key, QVariant &value) +{ + //ensure we have a placeholder map for this component + addComponent(componentId); + QMap *params = getOnbardParametersForComponent(componentId); + params->insert(key,value); +} -void UASParameterDataModel::setPendingParameter(int componentId, QString& key, QVariant &value) +void UASParameterDataModel::addComponent(int componentId) { - QMap *compPendingParams = pendingParameters.value(componentId); - //TODO insert blank map if necessary - if (NULL == compPendingParams) { - pendingParameters.insert(componentId,new QMap()); - compPendingParams = pendingParameters.value(componentId); + if (!onboardParameters.contains(componentId)) { + onboardParameters.insert(componentId, new QMap()); + } + if (!pendingParameters.contains(componentId)) { + pendingParameters.insert(componentId, new QMap()); } - - compPendingParams->insert(key,value); } diff --git a/src/uas/UASParameterDataModel.h b/src/uas/UASParameterDataModel.h index 60bfbbfa8..7122d523e 100644 --- a/src/uas/UASParameterDataModel.h +++ b/src/uas/UASParameterDataModel.h @@ -12,8 +12,23 @@ public: explicit UASParameterDataModel(QObject *parent = 0); + virtual void addComponent(int componentId); + /** @brief Write a new pending parameter value that may be eventually sent to the UAS */ virtual void setPendingParameter(int componentId, QString& paramKey, QVariant& paramValue); + virtual void setOnboardParameter(int componentId, QString& key, QVariant &value); + + /** @brief add this parameter to pending list iff it has changed from onboard value */ + virtual void addPendingIfParameterChanged(int componentId, QString& key, QVariant &value); + + + QMap* getPendingParametersForComponent(int componentId) { + return pendingParameters.value(componentId); + } + + QMap* getOnbardParametersForComponent(int componentId) { + return onboardParameters.value(componentId); + } QMap* > getPendingParameters() { return pendingParameters; -- 2.22.0