From 9aec09349916110761c73f66ea53f4374ecdaabe Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Sun, 2 Aug 2020 21:50:30 +0200 Subject: [PATCH] fix bug on reset param --- src/meshlab/mainwindow_Init.cpp | 6 +++++- src/meshlab/meshlab_settings/meshlabsettingsdialog.cpp | 2 +- src/meshlab/meshlab_settings/richparameterwidgets.cpp | 7 +++++++ src/meshlab/meshlab_settings/richparameterwidgets.h | 1 + src/meshlab/meshlab_settings/settingdialog.cpp | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/meshlab/mainwindow_Init.cpp b/src/meshlab/mainwindow_Init.cpp index 23d044b8a..626037f40 100644 --- a/src/meshlab/mainwindow_Init.cpp +++ b/src/meshlab/mainwindow_Init.cpp @@ -877,7 +877,10 @@ void MainWindow::loadMeshLabSettings() if (!docElem.isNull()) { - currentGlobalParams.pushFromQDomElement(docElem); + RichParameter* rp = nullptr; + bool b = RichParameterAdapter::create(docElem, &rp); + if (b && defaultGlobalParams.hasParameter(rp->name())) + currentGlobalParams.pushFromQDomElement(docElem); } } @@ -897,6 +900,7 @@ void MainWindow::loadMeshLabSettings() setting.setValue(v->name(), QVariant(docstring)); } } + assert(currentGlobalParams.size() == defaultGlobalParams.size()); } diff --git a/src/meshlab/meshlab_settings/meshlabsettingsdialog.cpp b/src/meshlab/meshlab_settings/meshlabsettingsdialog.cpp index aa0d4c745..4bb49b224 100644 --- a/src/meshlab/meshlab_settings/meshlabsettingsdialog.cpp +++ b/src/meshlab/meshlab_settings/meshlabsettingsdialog.cpp @@ -60,8 +60,8 @@ MeshLabSettingsDialog::MeshLabSettingsDialog( void MeshLabSettingsDialog::openSubDialog(QTableWidgetItem* itm) { int rprow = tw->row(itm); - const RichParameter *defPar = defParSet.at(rprow); RichParameter* curPar = curParSet.at(rprow); + const RichParameter *defPar = defParSet.findParameter(curPar->name()); SettingDialog* setdial = new SettingDialog(*curPar,*defPar,this); connect( setdial, SIGNAL(applySettingSignal(const RichParameter&)), diff --git a/src/meshlab/meshlab_settings/richparameterwidgets.cpp b/src/meshlab/meshlab_settings/richparameterwidgets.cpp index 7e6411ddc..dcfe5c365 100644 --- a/src/meshlab/meshlab_settings/richparameterwidgets.cpp +++ b/src/meshlab/meshlab_settings/richparameterwidgets.cpp @@ -57,6 +57,13 @@ void RichParameterWidget::resetValue() resetWidgetValue(); } +void RichParameterWidget::setValue(const Value& v) +{ + rp->setValue(v); + resetWidgetValue(); +} + + const Value& RichParameterWidget::widgetValue() { diff --git a/src/meshlab/meshlab_settings/richparameterwidgets.h b/src/meshlab/meshlab_settings/richparameterwidgets.h index 355400199..710ff890e 100644 --- a/src/meshlab/meshlab_settings/richparameterwidgets.h +++ b/src/meshlab/meshlab_settings/richparameterwidgets.h @@ -54,6 +54,7 @@ public: // called when the user press the 'default' button to reset the parameter values to its default. // It just set the parameter value and then it calls the specialized resetWidgetValue() to update also the widget. void resetValue(); + void setValue(const Value& v); // update the parameter with the current widget values and return it. const Value& widgetValue(); const RichParameter& richParameter() const; diff --git a/src/meshlab/meshlab_settings/settingdialog.cpp b/src/meshlab/meshlab_settings/settingdialog.cpp index f10701297..78eab38cd 100644 --- a/src/meshlab/meshlab_settings/settingdialog.cpp +++ b/src/meshlab/meshlab_settings/settingdialog.cpp @@ -94,7 +94,7 @@ void SettingDialog::reset() qDebug("resetting the value of param %s to the hardwired default", qUtf8Printable(curPar->name())); assert(frame.stdfieldwidgets.size() == 1); - frame.stdfieldwidgets.at(0)->resetValue(); + frame.stdfieldwidgets.at(0)->setValue(defPar->value()); apply(); }