Browse Source

Merge pull request #337 from tstellanova/config_review

Cleanup pending items tree completely when we receive an update
QGC4.4
Lorenz Meier 12 years ago
parent
commit
dc56864924
  1. 9
      src/uas/QGCUASParamManager.cc
  2. 6
      src/uas/QGCUASParamManager.h
  3. 8
      src/ui/QGCBaseParamWidget.cc
  4. 18
      src/ui/QGCPX4VehicleConfig.cc
  5. 42
      src/ui/QGCPendingParamWidget.cc

9
src/uas/QGCUASParamManager.cc

@ -40,6 +40,15 @@ void QGCUASParamManager::connectToModelAndComms()
connect(paramCommsMgr, SIGNAL(parameterListUpToDate()), connect(paramCommsMgr, SIGNAL(parameterListUpToDate()),
this, SIGNAL(parameterListUpToDate())); this, SIGNAL(parameterListUpToDate()));
// Pass along data model updates
connect(&paramDataModel, SIGNAL(parameterUpdated(int, QString , QVariant )),
this, SIGNAL(parameterUpdated(int, QString , QVariant )));
connect(&paramDataModel, SIGNAL(pendingParamUpdate(int , const QString& , QVariant , bool )),
this, SIGNAL(pendingParamUpdate(int , const QString& , QVariant , bool )));
} }

6
src/uas/QGCUASParamManager.h

@ -72,6 +72,12 @@ signals:
/** @brief We have received a complete list of all parameters onboard the MAV */ /** @brief We have received a complete list of all parameters onboard the MAV */
void parameterListUpToDate(); void parameterListUpToDate();
/** @brief We've received an update of a parameter's value */
void parameterUpdated(int compId, QString paramName, QVariant value);
/** @brief Notifies listeners that a param was added to or removed from the pending list */
void pendingParamUpdate(int compId, const QString& paramName, QVariant value, bool isPending);
public slots: public slots:

8
src/ui/QGCBaseParamWidget.cc

@ -53,10 +53,10 @@ void QGCBaseParamWidget::connectToParamManager()
paramMgr = mav->getParamManager(); paramMgr = mav->getParamManager();
//TODO route via paramManager instead? //TODO route via paramManager instead?
// Listen to updated param signals from the data model // Listen to updated param signals from the data model
connect(paramMgr->dataModel(), SIGNAL(parameterUpdated(int, QString , QVariant )), connect(paramMgr, SIGNAL(parameterUpdated(int, QString , QVariant )),
this, SLOT(handleOnboardParamUpdate(int,QString,QVariant))); this, SLOT(handleOnboardParamUpdate(int,QString,QVariant)));
connect(paramMgr->dataModel(), SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )), connect(paramMgr, SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )),
this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool ))); this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool )));
// Listen for param list reload finished // Listen for param list reload finished
@ -71,10 +71,10 @@ void QGCBaseParamWidget::connectToParamManager()
void QGCBaseParamWidget::disconnectFromParamManager() void QGCBaseParamWidget::disconnectFromParamManager()
{ {
disconnect(paramMgr->dataModel(), SIGNAL(parameterUpdated(int, QString , QVariant )), disconnect(paramMgr, SIGNAL(parameterUpdated(int, QString , QVariant )),
this, SLOT(handleOnboardParamUpdate(int,QString,QVariant))); this, SLOT(handleOnboardParamUpdate(int,QString,QVariant)));
disconnect(paramMgr->dataModel(), SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )), disconnect(paramMgr, SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )),
this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool ))); this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool )));
disconnect(paramMgr, SIGNAL(parameterListUpToDate()), disconnect(paramMgr, SIGNAL(parameterListUpToDate()),

18
src/ui/QGCPX4VehicleConfig.cc

@ -103,12 +103,18 @@ QGCPX4VehicleConfig::QGCPX4VehicleConfig(QWidget *parent) :
ui->radio8Widget->setOrientation(Qt::Horizontal); ui->radio8Widget->setOrientation(Qt::Horizontal);
ui->radio8Widget->setName("Radio 8"); ui->radio8Widget->setName("Radio 8");
connect(ui->rcMenuButton,SIGNAL(clicked()),this,SLOT(rcMenuButtonClicked())); connect(ui->rcMenuButton,SIGNAL(clicked()),
connect(ui->sensorMenuButton,SIGNAL(clicked()),this,SLOT(sensorMenuButtonClicked())); this,SLOT(rcMenuButtonClicked()));
connect(ui->generalMenuButton,SIGNAL(clicked()),this,SLOT(generalMenuButtonClicked())); connect(ui->sensorMenuButton,SIGNAL(clicked()),
connect(ui->advancedMenuButton,SIGNAL(clicked()),this,SLOT(advancedMenuButtonClicked())); this,SLOT(sensorMenuButtonClicked()));
connect(ui->airframeMenuButton, SIGNAL(clicked()), this, SLOT(airframeMenuButtonClicked())); connect(ui->generalMenuButton,SIGNAL(clicked()),
connect(ui->firmwareMenuButton, SIGNAL(clicked()), this, SLOT(firmwareButtonClicked())); this,SLOT(generalMenuButtonClicked()));
connect(ui->advancedMenuButton,SIGNAL(clicked()),
this,SLOT(advancedMenuButtonClicked()));
connect(ui->airframeMenuButton, SIGNAL(clicked()),
this, SLOT(airframeMenuButtonClicked()));
connect(ui->firmwareMenuButton, SIGNAL(clicked()),
this, SLOT(firmwareMenuButtonClicked()));
ui->rcCalibrationButton->setCheckable(true); ui->rcCalibrationButton->setCheckable(true);
connect(ui->rcCalibrationButton, SIGNAL(clicked(bool)), this, SLOT(toggleCalibrationRC(bool))); connect(ui->rcCalibrationButton, SIGNAL(clicked(bool)), this, SLOT(toggleCalibrationRC(bool)));

42
src/ui/QGCPendingParamWidget.cc

@ -16,9 +16,9 @@ QGCPendingParamWidget::QGCPendingParamWidget(QObject *parent) :
void QGCPendingParamWidget::connectToParamManager() void QGCPendingParamWidget::connectToParamManager()
{ {
paramMgr = mav->getParamManager(); paramMgr = mav->getParamManager();
//TODO route via paramManager instead?
// Listen to updated param signals from the data model // Listen to updated param signals from the data model
connect(paramMgr->dataModel(), SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )), connect(paramMgr, SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )),
this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool ))); this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool )));
// Listen to communications status messages so we can display them // Listen to communications status messages so we can display them
@ -29,9 +29,8 @@ void QGCPendingParamWidget::connectToParamManager()
void QGCPendingParamWidget::disconnectFromParamManager() void QGCPendingParamWidget::disconnectFromParamManager()
{ {
//TODO route via paramManager instead?
// Listen to updated param signals from the data model // Listen to updated param signals from the data model
disconnect(paramMgr->dataModel(), SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )), disconnect(paramMgr, SIGNAL(pendingParamUpdate(int , const QString&, QVariant , bool )),
this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool ))); this, SLOT(handlePendingParamUpdate(int , const QString& , QVariant, bool )));
// Listen to communications status messages so we can display them // Listen to communications status messages so we can display them
@ -76,7 +75,40 @@ void QGCPendingParamWidget::handlePendingParamUpdate(int compId, const QString&
} }
else { else {
//we don't display non-pending items //we don't display non-pending items
paramItem->parent()->removeChild(paramItem); QTreeWidgetItem* groupItem = paramItem->parent();
if (NULL != groupItem) {
tree->setUpdatesEnabled(false);
QTreeWidgetItem* componentItem = NULL;
if (1 == groupItem->childCount()) {
componentItem = groupItem->parent();
}
//always remove the actual paramItem from its parent
groupItem->removeChild(paramItem);
//now we may need to remove the groupItem if it has no more children
if (NULL != componentItem) {
//remove the group from our internal data structures
QMap<QString, QTreeWidgetItem*>* compParamGroups = paramGroups.value(compId);
QString groupStr = paramName.section("_", 0, 0, QString::SectionSkipEmpty);
compParamGroups->remove(groupStr);
//remove the group item from componentItems
componentItems->value(compId)->removeChild(groupItem);
// remove the group item from the tree widget itself
componentItem->removeChild(groupItem);
if (0 == componentItem->childCount()) {
//the component itself no longer has any pending changes: remove it
paramGroups.remove(compId);
componentItems->remove(compId);
QTreeWidgetItem* compTop = tree->takeTopLevelItem(tree->indexOfTopLevelItem(componentItem));
delete compTop; //we own it after take
}
}
tree->setUpdatesEnabled(true);
tree->update();
}
} }
updatingParamNameLock.clear(); updatingParamNameLock.clear();

Loading…
Cancel
Save