diff --git a/ground/openpilotgcs/src/plugins/config/configairframewidget.cpp b/ground/openpilotgcs/src/plugins/config/configairframewidget.cpp index a12d34dca..6a6ad66be 100644 --- a/ground/openpilotgcs/src/plugins/config/configairframewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configairframewidget.cpp @@ -36,6 +36,9 @@ #include #include #include +#include "systemsettings.h" +#include "mixersettings.h" +#include "actuatorsettings.h" /** Helper delegate for the custom mixer editor table. @@ -443,6 +446,13 @@ void ConfigAirframeWidget::updateCustomThrottle2CurveValue(QList list, d */ void ConfigAirframeWidget::refreshWidgetsValues() { + if(!allObjectsUpdated()) + { + SystemSettings::GetInstance(getObjectManager())->requestUpdate(); + MixerSettings::GetInstance(getObjectManager())->requestUpdate(); + ActuatorSettings::GetInstance(getObjectManager())->requestUpdate(); + return; + } bool dirty=isDirty(); // Get the Airframe type from the system settings: UAVDataObject* obj = dynamic_cast(getObjectManager()->getObject(QString("SystemSettings"))); diff --git a/ground/openpilotgcs/src/plugins/config/configtaskwidget.cpp b/ground/openpilotgcs/src/plugins/config/configtaskwidget.cpp index 98b10683c..cad342d6f 100644 --- a/ground/openpilotgcs/src/plugins/config/configtaskwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configtaskwidget.cpp @@ -62,6 +62,8 @@ void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString fiel { obj = objManager->getObject(QString(object)); Q_ASSERT(obj); + objectUpdates.insert(obj,false); + connect(obj, SIGNAL(objectUpdated(UAVObject*)),this, SLOT(objectUpdated(UAVObject*))); connect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(refreshWidgetsValues())); } //smartsave->addObject(obj); @@ -153,6 +155,10 @@ void ConfigTaskWidget::onAutopilotDisconnect() { isConnected=false; enableControls(false); + foreach(UAVObject *obj, objectUpdates.keys()) + { + objectUpdates[obj]=false; + } } void ConfigTaskWidget::onAutopilotConnect() @@ -308,6 +314,22 @@ void ConfigTaskWidget::enableObjUpdates() } } +void ConfigTaskWidget::objectUpdated(UAVObject *obj) +{ + objectUpdates[obj]=true; +} + +bool ConfigTaskWidget::allObjectsUpdated() +{ + bool ret=true; + foreach(UAVObject *obj, objectUpdates.keys()) + { + ret=ret & objectUpdates[obj]; + } + qDebug()<<"ALL OBJECTS UPDATE:"< objectUpdates; bool dirty; protected slots: virtual void disableObjUpdates();