From c019b132a53d6fcaedcb78f5fb8c4829f8e5f391 Mon Sep 17 00:00:00 2001 From: lm Date: Fri, 14 May 2010 20:46:43 +0200 Subject: [PATCH] Fixed parameter interface, now transmits minimum data --- src/ui/QGCParamWidget.cc | 91 +++++++++++++++++++++++++++++++++++------------- src/ui/QGCParamWidget.h | 2 +- 2 files changed, 68 insertions(+), 25 deletions(-) diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index 203fe3e..746cf2d 100644 --- a/src/ui/QGCParamWidget.cc +++ b/src/ui/QGCParamWidget.cc @@ -83,7 +83,7 @@ QGCParamWidget::QGCParamWidget(UASInterface* uas, QWidget *parent) : // Connect signals/slots connect(this, SIGNAL(parameterChanged(int,QString,float)), mav, SLOT(setParameter(int,QString,float))); - connect(tree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(parameterItemChanged(QTreeWidgetItem*,QTreeWidgetItem*))); + connect(tree, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(parameterItemChanged(QTreeWidgetItem*,int))); // New parameters from UAS connect(uas, SIGNAL(parameterChanged(int,int,QString,float)), this, SLOT(addParameter(int,int,QString,float))); @@ -141,9 +141,25 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName, { addComponent(uas, component, "Component #" + QString::number(component)); } - // TODO Replace old value - components->value(component)->addChild(item); - item->setFlags(item->flags() | Qt::ItemIsEditable); + + bool found = false; + QTreeWidgetItem* parent = components->value(component); + for (int i = 0; i < parent->childCount(); i++) + { + QTreeWidgetItem* child = parent->child(i); + QString key = child->data(0, Qt::DisplayRole).toString(); + if (key == parameterName) + { + child->setData(1, Qt::DisplayRole, value); + found = true; + } + } + + if (!found) + { + components->value(component)->addChild(item); + item->setFlags(item->flags() | Qt::ItemIsEditable); + } //connect(item, SIGNAL()) tree->expandAll(); tree->update(); @@ -160,31 +176,38 @@ void QGCParamWidget::requestParameterList() mav->requestParameters(); } -void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous) +void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, int column) { - /* - int key; - if (!changedValues.contains(key)) - { - changedValues.insert(key, new QMap()); - } - QMap* map = changedValues.value(key, NULL); - if (map) + if (current && column > 0) { - bool ok; - QString str = current->data(0, Qt::DisplayRole).toString(); - float value = current->data(1, Qt::DisplayRole).toDouble(&ok); - // Send parameter to MAV - if (ok) + QTreeWidgetItem* parent = current->parent(); + while (parent->parent() != NULL) + { + parent = parent->parent(); + } + // Parent is now top-level component + int key = components->key(parent); + if (!changedValues.contains(key)) + { + changedValues.insert(key, new QMap()); + } + QMap* map = changedValues.value(key, NULL); + if (map) { - float oldvalue = current->data(1, Qt::DisplayRole).toDouble(&ok); - if (ok && (oldvalue != value)) + bool ok; + QString str = current->data(0, Qt::DisplayRole).toString(); + float value = current->data(1, Qt::DisplayRole).toDouble(&ok); + // Send parameter to MAV + if (ok) { - qDebug() << "PARAM CHANGED: KEY:" << str << "VALUE:" << value; - map->insert(str, value); + if (ok) + { + qDebug() << "PARAM CHANGED: COMP:" << key << "KEY:" << str << "VALUE:" << value; + map->insert(str, value); + } } } - }*/ + } } /** @@ -202,6 +225,25 @@ void QGCParamWidget::setParameter(int component, QString parameterName, float va */ void QGCParamWidget::setParameters() { + // Iterate through all components, through all parameters and emit them + QMap*>::iterator i; + for (i = changedValues.begin(); i != changedValues.end(); ++i) + { + // Iterate through the parameters of the component + int compid = i.key(); + QMap* comp = i.value(); + { + QMap::iterator j; + for (j = comp->begin(); j != comp->end(); ++j) + { + emit parameterChanged(compid, j.key(), j.value()); + } + } + } + + + + /* //mav->setParameter(component, parameterName, value); // Iterate through all components, through all parameters and emit them QMap::iterator i; @@ -222,7 +264,7 @@ void QGCParamWidget::setParameters() if (ok) { emit parameterChanged(compid, key, value); - qDebug() << "KEY:" << key << "VALUE:" << value; + qDebug() << " SET PARAM: KEY:" << key << "VALUE:" << value; } else { @@ -234,6 +276,7 @@ void QGCParamWidget::setParameters() // TODO Instead of clearing, keep parameter list and wait for individual update messages clear(); + */ //mav->requestParameters(); qDebug() << __FILE__ << __LINE__ << "SETTING ALL PARAMETERS"; } diff --git a/src/ui/QGCParamWidget.h b/src/ui/QGCParamWidget.h index d3b0d71..13c1bf4 100644 --- a/src/ui/QGCParamWidget.h +++ b/src/ui/QGCParamWidget.h @@ -68,7 +68,7 @@ public slots: /** @brief Clear the parameter list */ void clear(); /** @brief Update when user changes parameters */ - void parameterItemChanged(QTreeWidgetItem* prev, QTreeWidgetItem* curr); + void parameterItemChanged(QTreeWidgetItem* prev, int column); protected: UASInterface* mav; ///< The MAV this widget is controlling QTreeWidget* tree; ///< The parameter tree