From 7af96b27241f86e5c74b2850bd85b9a3c39f28ef Mon Sep 17 00:00:00 2001 From: Thomas Gubler Date: Fri, 27 Dec 2013 12:51:30 +0100 Subject: [PATCH] sorted parameters: make search more efficient --- src/ui/QGCParamWidget.cc | 48 ++++++++++++++++++++++++++++++---------- src/ui/QGCParamWidget.h | 4 +++- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index d9c8c2a7b..f241196b6 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; @@ -344,19 +377,10 @@ QTreeWidgetItem* QGCParamWidget::updateParameterDisplay(int compId, QString para paramItem->setFlags(paramItem->flags() | Qt::ItemIsEditable); //Insert alphabetically - bool inserted = false; - for(int i = 0; i < parentItem->childCount(); i++) { - if (parameterName.compare(parentItem->child(i)->text(0)) < 0 ) - { - parentItem->insertChild(i, paramItem); - inserted = true; - break; - } - } - - if (!inserted) + if (parentItem->childCount() > 0) { + insertParamAlphabetical(0, parentItem->childCount() - 1, parentItem, paramItem); + } else { - //Insert at the end parentItem->addChild(paramItem); } diff --git a/src/ui/QGCParamWidget.h b/src/ui/QGCParamWidget.h index 83787de1d..98b5d044a 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); -- 2.22.0