From cfbfbe12090609a0c8bec7aa491c1ac6be7b13e8 Mon Sep 17 00:00:00 2001 From: zedamota Date: Sun, 16 Oct 2011 00:57:59 +0100 Subject: [PATCH] Only one output configuration at a time is now able to receive user input while the test outputs is enabled. --- .../src/plugins/config/configoutputwidget.cpp | 22 +++++++++++++++++-- .../src/plugins/config/configoutputwidget.h | 3 ++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp index 0adc41e2c..7ce5fe6fe 100644 --- a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp @@ -39,7 +39,7 @@ #include #include -ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(parent) +ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(parent),wasItMe(false) { m_config = new Ui_OutputWidget(); m_config->setupUi(this); @@ -168,6 +168,12 @@ ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(paren addWidget(m_config->ch7OutMax); addWidget(m_config->ch7Rev); addWidget(m_config->spinningArmed); + + UAVObjectManager *objManager = pm->getObject(); + UAVObject* obj = objManager->getObject(QString("ActuatorCommand")); + if(obj->getMetadata().gcsTelemetryUpdateMode == UAVObject::UPDATEMODE_ONCHANGE) + this->setEnabled(false); + connect(obj,SIGNAL(objectUpdated(UAVObject*)),this,SLOT(disableIfNotMe(UAVObject*))); } ConfigOutputWidget::~ConfigOutputWidget() @@ -237,6 +243,7 @@ void ConfigOutputWidget::runChannelTests(bool state) UAVObject::Metadata mdata = obj->getMetadata(); if (state) { + wasItMe=true; accInitialData = mdata; mdata.flightAccess = UAVObject::ACCESS_READONLY; mdata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE; @@ -256,6 +263,7 @@ void ConfigOutputWidget::runChannelTests(bool state) } else { + wasItMe=false; mdata = accInitialData; // Restore metadata foreach (QSpinBox* box, outMin) { box->setEnabled(true); @@ -266,6 +274,7 @@ void ConfigOutputWidget::runChannelTests(bool state) } obj->setMetadata(mdata); + obj->updated(); } @@ -583,4 +592,13 @@ void ConfigOutputWidget::openHelp() QDesktopServices::openUrl( QUrl("http://wiki.openpilot.org/display/Doc/Output+Configuration", QUrl::StrictMode) ); } - +void ConfigOutputWidget::disableIfNotMe(UAVObject* obj) +{ + if(obj->getMetadata().gcsTelemetryUpdateMode == UAVObject::UPDATEMODE_ONCHANGE) + { + if(!wasItMe) + this->setEnabled(false); + } + else + this->setEnabled(true); +} diff --git a/ground/openpilotgcs/src/plugins/config/configoutputwidget.h b/ground/openpilotgcs/src/plugins/config/configoutputwidget.h index 492109df1..b5bd02b37 100644 --- a/ground/openpilotgcs/src/plugins/config/configoutputwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configoutputwidget.h @@ -69,8 +69,9 @@ private: bool firstUpdate; - + bool wasItMe; private slots: + void disableIfNotMe(UAVObject *obj); virtual void refreshWidgetsValues(); void updateObjectsFromWidgets(); void runChannelTests(bool state);