diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index a81782238573ceaadd54ad9446c4c4c87ecedae6..f241196b6f36334ea2775400a514c5443aae4120 100644 --- a/src/ui/QGCParamWidget.cc +++ b/src/ui/QGCParamWidget.cc @@ -311,6 +311,39 @@ QTreeWidgetItem* QGCParamWidget::getParentWidgetItemForParam(int compId, const Q return parentItem; } +void QGCParamWidget::insertParamAlphabetical(int indexLowerBound, int indexUpperBound, QTreeWidgetItem* parentItem, QTreeWidgetItem* paramItem) +{ + if (indexLowerBound >= indexUpperBound) + { + if (paramItem->text(0).compare(parentItem->child(indexLowerBound)->text(0)) < 0) { + parentItem->insertChild(indexLowerBound, paramItem); + } + else + { + if (indexLowerBound < parentItem->childCount() - 1) { + parentItem->insertChild(indexLowerBound + 1, paramItem); + } + else + { + parentItem->addChild(paramItem); + } + } + } + else + { + int midpoint = indexLowerBound + floor(indexUpperBound - indexLowerBound)/2; + + if (paramItem->text(0).compare(parentItem->child(midpoint)->text(0)) < 0) + { + insertParamAlphabetical(indexLowerBound, midpoint - 1, parentItem, paramItem); + } else + { + insertParamAlphabetical(midpoint + 1, indexUpperBound, parentItem, paramItem); + } + + } +} + QTreeWidgetItem* QGCParamWidget::updateParameterDisplay(int compId, QString parameterName, QVariant value) { //qDebug() << "QGCParamWidget::updateParameterDisplay" << parameterName; @@ -343,8 +376,13 @@ QTreeWidgetItem* QGCParamWidget::updateParameterDisplay(int compId, QString para } paramItem->setFlags(paramItem->flags() | Qt::ItemIsEditable); - //TODO insert alphabetically - parentItem->addChild(paramItem); + //Insert alphabetically + if (parentItem->childCount() > 0) { + insertParamAlphabetical(0, parentItem->childCount() - 1, parentItem, paramItem); + } else + { + parentItem->addChild(paramItem); + } //only add the tooltip when the parameter item is first added QString paramDesc = paramMgr->dataModel()->getParamDescription(parameterName); diff --git a/src/ui/QGCParamWidget.h b/src/ui/QGCParamWidget.h index 83787de1d43193de0684c93972791865ed0c8216..98b5d044a2b98ad28c7c6204aab14f732cf24348 100644 --- a/src/ui/QGCParamWidget.h +++ b/src/ui/QGCParamWidget.h @@ -83,10 +83,12 @@ public slots: virtual void clearOnboardParamDisplay(); virtual void clearPendingParamDisplay(); + /** @brief Adds parameter at the correct location by a alphapetical comparison of the parameter names */ + void insertParamAlphabetical(int indexLowerBound, int indexUpperBound, QTreeWidgetItem* parentItem, QTreeWidgetItem* paramItem); + /** @brief Ensure that view of parameter matches data in the model */ QTreeWidgetItem* updateParameterDisplay(int component, QString parameterName, QVariant value); - /** @brief Update when user changes parameters */ void parameterItemChanged(QTreeWidgetItem* prev, int column);