diff --git a/src/ui/QGCPendingParamWidget.cc b/src/ui/QGCPendingParamWidget.cc index 384547f07e09ff638d1060e9df56658b8d4269e8..35402d995e3220617509004ce7f46466bee2866c 100644 --- a/src/ui/QGCPendingParamWidget.cc +++ b/src/ui/QGCPendingParamWidget.cc @@ -75,13 +75,39 @@ void QGCPendingParamWidget::handlePendingParamUpdate(int compId, const QString& } else { //we don't display non-pending items - QTreeWidgetItem* parentItem = paramItem->parent(); + 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* 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(); - if (NULL != parentItem && 1 == parentItem->childCount()) { - parentItem->parent()->removeChild(parentItem); - } - else { - paramItem->parent()->removeChild(paramItem); } }