diff --git a/src/ui/configuration/AdvancedParamConfig.cc b/src/ui/configuration/AdvancedParamConfig.cc index 3475da4d1da62b6ed7775b3c1a83d8dbbdc6511e..98f0c1c62e4df6cca8798dc05b15c1df7fe96da1 100644 --- a/src/ui/configuration/AdvancedParamConfig.cc +++ b/src/ui/configuration/AdvancedParamConfig.cc @@ -12,7 +12,9 @@ AdvancedParamConfig::~AdvancedParamConfig() } void AdvancedParamConfig::addRange(QString title,QString description,QString param,double min,double max) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); m_paramToWidgetMap[param] = widget; widget->setupDouble(title + "(" + param + ")",description,0,min,max); ui.verticalLayout->addWidget(widget); @@ -21,7 +23,9 @@ void AdvancedParamConfig::addRange(QString title,QString description,QString par void AdvancedParamConfig::addCombo(QString title,QString description,QString param,QList > valuelist) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); m_paramToWidgetMap[param] = widget; widget->setupCombo(title + "(" + param + ")",description,valuelist); ui.verticalLayout->addWidget(widget); @@ -31,6 +35,30 @@ void AdvancedParamConfig::parameterChanged(int uas, int component, QString param { if (m_paramToWidgetMap.contains(parameterName)) { - m_paramToWidgetMap[parameterName]->setValue(value.toDouble()); + if (value.type() == QVariant::Double) + { + m_paramToWidgetMap[parameterName]->setValue(value.toDouble()); + } + else + { + m_paramToWidgetMap[parameterName]->setValue(value.toInt()); + } } } +void AdvancedParamConfig::doubleValueChanged(QString param,double value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} + +void AdvancedParamConfig::intValueChanged(QString param,int value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} diff --git a/src/ui/configuration/AdvancedParamConfig.h b/src/ui/configuration/AdvancedParamConfig.h index 6d52ede4cdc194285590f47760bce096ec14a02e..07e55d61d1d697e360861cc9814afaada7f2bdb1 100644 --- a/src/ui/configuration/AdvancedParamConfig.h +++ b/src/ui/configuration/AdvancedParamConfig.h @@ -16,6 +16,8 @@ public: void addCombo(QString title,QString description,QString param,QList > valuelist); private slots: void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void doubleValueChanged(QString param,double value); + void intValueChanged(QString param,int value); private: QMap m_paramToWidgetMap; Ui::AdvancedParamConfig ui; diff --git a/src/ui/configuration/ApmSoftwareConfig.cc b/src/ui/configuration/ApmSoftwareConfig.cc index fabc49139b3b18a3c8c9b38ee3866db9f0679741..a5308dab76eeeb3c8080336a93e99a012d2679a0 100644 --- a/src/ui/configuration/ApmSoftwareConfig.cc +++ b/src/ui/configuration/ApmSoftwareConfig.cc @@ -85,23 +85,27 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) ui.advancedParamButton->setVisible(true); ui.advParamListButton->setVisible(true); + QString compare = ""; if (uas->getSystemType() == MAV_TYPE_FIXED_WING) { ui.arduPlanePidButton->setVisible(true); ui.arduCopterPidButton->setVisible(false); ui.arduRoverPidButton->setVisible(false); + compare = "ArduPlane"; } else if (uas->getSystemType() == MAV_TYPE_QUADROTOR) { ui.arduCopterPidButton->setVisible(true); ui.arduPlanePidButton->setVisible(false); ui.arduRoverPidButton->setVisible(false); + compare = "ArduCopter"; } else if (uas->getSystemType() == MAV_TYPE_GROUND_ROVER) { ui.arduRoverPidButton->setVisible(true); ui.arduCopterPidButton->setVisible(false); ui.arduPlanePidButton->setVisible(false); + compare = "APMRover2"; } @@ -138,6 +142,7 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) { parametersname = xml.attributes().value("name").toString(); } + QVariantMap genset; QVariantMap advset; @@ -301,24 +306,25 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) { valuelist.append(QPair(i.key().toInt(),i.value())); } - if (tab == "Standard") - { - m_standardParamConfig->addCombo(humanname,docs,name,valuelist); - } - else if (tab == "Advanced") + if (compare == parametersname) { - m_advancedParamConfig->addCombo(humanname,docs,name,valuelist); + if (tab == "Standard") + { + m_standardParamConfig->addCombo(humanname,docs,name,valuelist); + } + else if (tab == "Advanced") + { + m_advancedParamConfig->addCombo(humanname,docs,name,valuelist); + } + m_advParameterList->setParameterMetaData(name,humanname,docs); } - m_advParameterList->setParameterMetaData(name,humanname,docs); } else if (fieldmap.size() > 0) { float min = 0; - float max = 100; + float max = 65535; if (fieldmap.contains("Range")) { - float min = 0; - float max = 0; //Some range fields list "0-10" and some list "0 10". Handle both. if (fieldmap["Range"].split(" ").size() > 1) { @@ -331,15 +337,18 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) max = fieldmap["Range"].split("-")[1].trimmed().toFloat(); } } - if (tab == "Standard") - { - m_standardParamConfig->addRange(humanname,docs,name,min,max); - } - else if (tab == "Advanced") + if (compare == parametersname) { - m_advancedParamConfig->addRange(humanname,docs,name,max,min); + if (tab == "Standard") + { + m_standardParamConfig->addRange(humanname,docs,name,min,max); + } + else if (tab == "Advanced") + { + m_advancedParamConfig->addRange(humanname,docs,name,min,max); + } + m_advParameterList->setParameterMetaData(name,humanname,docs); } - m_advParameterList->setParameterMetaData(name,humanname,docs); } } diff --git a/src/ui/configuration/ParamWidget.cc b/src/ui/configuration/ParamWidget.cc index 93b3bfd26455959198253a45956f129a8af155f8..b9fb03c72671989e039a4bc732230974735b0083 100644 --- a/src/ui/configuration/ParamWidget.cc +++ b/src/ui/configuration/ParamWidget.cc @@ -1,9 +1,45 @@ #include "ParamWidget.h" - -ParamWidget::ParamWidget(QWidget *parent) : QWidget(parent) +ParamWidget::ParamWidget(QString param,QWidget *parent) : QWidget(parent) { ui.setupUi(this); + m_param = param; + + connect(ui.doubleSpinBox,SIGNAL(editingFinished()),this,SLOT(doubleSpinEditFinished())); + connect(ui.intSpinBox,SIGNAL(editingFinished()),this,SLOT(intSpinEditFinished())); + connect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); + connect(ui.valueSlider,SIGNAL(sliderReleased()),this,SLOT(valueSliderReleased())); +} +void ParamWidget::doubleSpinEditFinished() +{ + ui.valueSlider->setValue(((ui.doubleSpinBox->value() - m_min) / (m_max - m_min)) * 100.0); + emit doubleValueChanged(m_param,ui.doubleSpinBox->value()); +} + +void ParamWidget::intSpinEditFinished() +{ + ui.valueSlider->setValue(((ui.intSpinBox->value() - m_min) / (m_max - m_min)) * 100.0); + emit intValueChanged(m_param,ui.intSpinBox->value()); +} + +void ParamWidget::comboIndexChanged(int index) +{ + emit intValueChanged(m_param,m_valueList[index].first); +} + +void ParamWidget::valueSliderReleased() +{ + //Set the spin box, and emit a signal. + if (type == INT) + { + ui.intSpinBox->setValue(((ui.valueSlider->value() / 100.0) * (m_max - m_min)) + m_min); + emit intValueChanged(m_param,ui.intSpinBox->value()); + } + else if (type == DOUBLE) + { + ui.doubleSpinBox->setValue(((ui.valueSlider->value() / 100.0) * (m_max - m_min)) + m_min); + emit doubleValueChanged(m_param,ui.doubleSpinBox->value()); + } } ParamWidget::~ParamWidget() @@ -19,8 +55,18 @@ void ParamWidget::setupInt(QString title,QString description,int value,int min,i ui.valueSlider->show(); ui.intSpinBox->show(); ui.doubleSpinBox->hide(); - m_min = min; - m_max = max; + if (min == 0 && max == 0) + { + m_min = 0; + m_max = 65535; + } + else + { + m_min = min; + m_max = max; + } + ui.intSpinBox->setMinimum(m_min); + ui.intSpinBox->setMaximum(m_max); } void ParamWidget::setupDouble(QString title,QString description,double value,double min,double max) @@ -32,8 +78,18 @@ void ParamWidget::setupDouble(QString title,QString description,double value,dou ui.valueSlider->show(); ui.intSpinBox->hide(); ui.doubleSpinBox->show(); - m_min = min; - m_max = max; + if (min == 0 && max == 0) + { + m_min = 0; + m_max = 65535; + } + else + { + m_min = min; + m_max = max; + } + ui.doubleSpinBox->setMinimum(m_min); + ui.doubleSpinBox->setMaximum(m_max); } void ParamWidget::setupCombo(QString title,QString description,QList > list) @@ -47,10 +103,12 @@ void ParamWidget::setupCombo(QString title,QString description,QListhide(); m_valueList = list; ui.valueComboBox->clear(); + disconnect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); for (int i=0;iaddItem(m_valueList[i].second); } + connect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); } void ParamWidget::setValue(double value) @@ -58,12 +116,12 @@ void ParamWidget::setValue(double value) if (type == INT) { ui.intSpinBox->setValue(value); - ui.valueSlider->setValue(((value + m_min) / (m_max + m_min)) * 100.0); + ui.valueSlider->setValue(((value - m_min) / (m_max - m_min)) * 100.0); } else if (type == DOUBLE) { ui.doubleSpinBox->setValue(value); - ui.valueSlider->setValue(((value + m_min) / (m_max + m_min)) * 100.0); + ui.valueSlider->setValue(((value - m_min) / (m_max - m_min)) * 100.0); } else if (type == COMBO) { @@ -71,7 +129,9 @@ void ParamWidget::setValue(double value) { if ((int)value == m_valueList[i].first) { + disconnect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); ui.valueComboBox->setCurrentIndex(i); + connect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); return; } } diff --git a/src/ui/configuration/ParamWidget.h b/src/ui/configuration/ParamWidget.h index aa375d296752f2d2cc9c052d8b5d60a3b9ec2c35..68a3efbf4c6ac2586e056be69c08622a91ca8551 100644 --- a/src/ui/configuration/ParamWidget.h +++ b/src/ui/configuration/ParamWidget.h @@ -9,13 +9,22 @@ class ParamWidget : public QWidget Q_OBJECT public: - explicit ParamWidget(QWidget *parent = 0); + explicit ParamWidget(QString param,QWidget *parent = 0); ~ParamWidget(); void setupInt(QString title,QString description,int value,int min,int max); void setupDouble(QString title,QString description,double value,double min,double max); void setupCombo(QString title,QString description,QList > list); void setValue(double value); +signals: + void doubleValueChanged(QString param,double value); + void intValueChanged(QString param,int value); +private slots: + void doubleSpinEditFinished(); + void intSpinEditFinished(); + void comboIndexChanged(int index); + void valueSliderReleased(); private: + QString m_param; enum VIEWTYPE { INT, diff --git a/src/ui/configuration/ParamWidget.ui b/src/ui/configuration/ParamWidget.ui index ddf4653b8f09169cdc55b6e2edad622e647743c7..8e396cb6fee1c0702dcf8dd1bfe2c66eeffb3331 100644 --- a/src/ui/configuration/ParamWidget.ui +++ b/src/ui/configuration/ParamWidget.ui @@ -46,6 +46,9 @@ 100 + + 0 + Qt::Horizontal diff --git a/src/ui/configuration/StandardParamConfig.cc b/src/ui/configuration/StandardParamConfig.cc index caa49ccde4150fabc13a61c67a204c4b729828dc..0f43a922504a66928ca326e9e478525f35d58d44 100644 --- a/src/ui/configuration/StandardParamConfig.cc +++ b/src/ui/configuration/StandardParamConfig.cc @@ -10,7 +10,9 @@ StandardParamConfig::~StandardParamConfig() } void StandardParamConfig::addRange(QString title,QString description,QString param,double min,double max) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); paramToWidgetMap[param] = widget; widget->setupDouble(title + "(" + param + ")",description,0,min,max); ui.verticalLayout->addWidget(widget); @@ -19,7 +21,9 @@ void StandardParamConfig::addRange(QString title,QString description,QString par void StandardParamConfig::addCombo(QString title,QString description,QString param,QList > valuelist) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); paramToWidgetMap[param] = widget; widget->setupCombo(title + "(" + param + ")",description,valuelist); ui.verticalLayout->addWidget(widget); @@ -29,6 +33,31 @@ void StandardParamConfig::parameterChanged(int uas, int component, QString param { if (paramToWidgetMap.contains(parameterName)) { - paramToWidgetMap[parameterName]->setValue(value.toDouble()); + if (value.type() == QVariant::Double) + { + paramToWidgetMap[parameterName]->setValue(value.toDouble()); + } + else + { + paramToWidgetMap[parameterName]->setValue(value.toInt()); + } } } +void StandardParamConfig::doubleValueChanged(QString param,double value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} + +void StandardParamConfig::intValueChanged(QString param,int value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} + diff --git a/src/ui/configuration/StandardParamConfig.h b/src/ui/configuration/StandardParamConfig.h index b2fbc04f484b25c33e80b79c10ada6484ac9d252..b098d7d05e1863b1ca98c5e0bd08bf86b7ec1d0a 100644 --- a/src/ui/configuration/StandardParamConfig.h +++ b/src/ui/configuration/StandardParamConfig.h @@ -16,6 +16,8 @@ public: void addCombo(QString title,QString description,QString param,QList > valuelist); private slots: void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void doubleValueChanged(QString param,double value); + void intValueChanged(QString param,int value); private: QMap paramToWidgetMap; Ui::StandardParamConfig ui;