From 2d2e69340a719689edb10bfe48708ad11fb96d06 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Mon, 24 Mar 2014 22:32:54 +0000 Subject: [PATCH] fixed issue 12: In Feature2d panel, only show parameters of the current selected detector/descriptor. git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@201 620bd6b2-0a58-f614-fd9a-1bd335dccda9 --- src/ParametersToolBox.cpp | 79 +++++++++++++++++++++++++++++++++++++++ src/ParametersToolBox.h | 1 + 2 files changed, 80 insertions(+) diff --git a/src/ParametersToolBox.cpp b/src/ParametersToolBox.cpp index 7f79ea6a..6b394a9f 100644 --- a/src/ParametersToolBox.cpp +++ b/src/ParametersToolBox.cpp @@ -109,6 +109,76 @@ void ParametersToolBox::resetAllPages() emit parametersChanged(paramChanged); } +void ParametersToolBox::updateParametersVisibility() +{ + //show/hide not used parameters + QComboBox * descriptorBox = this->findChild(Settings::kFeature2D_2Descriptor()); + QComboBox * detectorBox = this->findChild(Settings::kFeature2D_1Detector()); + if(descriptorBox && detectorBox) + { + QString group = Settings::kFeature2D_2Descriptor().split('/').first(); + QWidget * panel = 0; + for(int i=0; icount(); ++i) + { + if(this->widget(i)->objectName().compare(group) == 0) + { + panel = this->widget(i); + break; + } + } + if(panel) + { + const QObjectList & objects = panel->children(); + QString descriptorName = descriptorBox->currentText(); + QString detectorName = detectorBox->currentText(); + + for(int i=0; iobjectName().contains(descriptorName) || objects[i]->objectName().contains(detectorName)) + { + ((QWidget*)objects[i])->setVisible(true); + } + else if(!objects[i]->objectName().split('/').at(1).at(0).isDigit()) + { + ((QWidget*)objects[i])->setVisible(false); + } + } + } + } + + QComboBox * nnBox = this->findChild(Settings::kNearestNeighbor_1Strategy()); + if(nnBox) + { + QString group = Settings::kNearestNeighbor_1Strategy().split('/').first(); + QWidget * panel = 0; + for(int i=0; icount(); ++i) + { + if(this->widget(i)->objectName().compare(group) == 0) + { + panel = this->widget(i); + break; + } + } + if(panel) + { + const QObjectList & objects = panel->children(); + QString nnName = nnBox->currentText(); + + for(int i=0; iobjectName().contains(nnName)) + { + ((QWidget*)objects[i])->setVisible(true); + } + else if(!objects[i]->objectName().split('/').at(1).at(0).isDigit()) + { + ((QWidget*)objects[i])->setVisible(false); + } + } + } + } +} + void ParametersToolBox::setupUi() { this->removeItem(0); // remove dummy page used in .ui @@ -139,6 +209,8 @@ void ParametersToolBox::setupUi() addParameter((QVBoxLayout*)currentItem->layout(), iter.key(), iter.value()); } } + + updateParametersVisibility(); } void ParametersToolBox::updateParameter(const QString & key) @@ -316,6 +388,7 @@ void ParametersToolBox::addParameter(QVBoxLayout * layout, const QString & key, tmp.remove(0,1); } QLabel * label = new QLabel(tmp, this); + label->setObjectName(key+"/label"); label->setToolTip(QString("%1").arg(Settings::getDescriptions().value(key, ""))); hLayout->addWidget(label); hLayout->addWidget(widget); @@ -355,6 +428,7 @@ void ParametersToolBox::changeParameter() emit parametersChanged(paramChanged); } } + void ParametersToolBox::changeParameter(const int & value) { if(sender()) @@ -391,6 +465,7 @@ void ParametersToolBox::changeParameter(const int & value) nnBox->blockSignals(false); if(sender() == nnBox) { + this->updateParametersVisibility(); return; } nnStrategyChanged = true; @@ -412,6 +487,7 @@ void ParametersToolBox::changeParameter(const int & value) nnBox->blockSignals(false); if(sender() == nnBox) { + this->updateParametersVisibility(); return; } nnStrategyChanged = true; @@ -442,6 +518,7 @@ void ParametersToolBox::changeParameter(const int & value) distBox->blockSignals(false); if(sender() == distBox) { + this->updateParametersVisibility(); return; } paramChanged.append(Settings::kNearestNeighbor_2Distance_type()); @@ -455,6 +532,8 @@ void ParametersToolBox::changeParameter(const int & value) } QString merged = QString::number(value) + QString(":") + items.join(";"); Settings::setParameter(sender()->objectName(), merged); + + this->updateParametersVisibility(); } else if(checkBox) { diff --git a/src/ParametersToolBox.h b/src/ParametersToolBox.h index 8450bb32..a23caa38 100644 --- a/src/ParametersToolBox.h +++ b/src/ParametersToolBox.h @@ -42,6 +42,7 @@ private slots: private: QStringList resetPage(int index); + void updateParametersVisibility(); }; #endif /* PARAMETERSTOOLBOX_H_ */