diff --git a/src/common/parameters/value/value.h b/src/common/parameters/value/value.h index 87a8f724b..3aad13b68 100644 --- a/src/common/parameters/value/value.h +++ b/src/common/parameters/value/value.h @@ -98,6 +98,13 @@ public: virtual Value* clone() const = 0; virtual bool operator==(const Value& p) const = 0; virtual void fillToXMLElement(QDomElement& element) const = 0; + + template + bool isOfType() const + { + const Val* t = dynamic_cast(this); + return (t != nullptr); + } }; #endif //MESHLAB_VALUE_H diff --git a/src/common_gui/rich_parameter/richparameterlistframe.cpp b/src/common_gui/rich_parameter/richparameterlistframe.cpp index 2f8fc9a2a..0ef0a979a 100644 --- a/src/common_gui/rich_parameter/richparameterlistframe.cpp +++ b/src/common_gui/rich_parameter/richparameterlistframe.cpp @@ -219,66 +219,66 @@ RichParameterWidget* RichParameterListFrame::createWidgetFromRichParameter( const RichParameter& pd, const RichParameter& def) { - if (pd.isOfType()) { - return new AbsPercWidget(parent, (const RichAbsPerc&) pd, (const RichAbsPerc&) def); + if (pd.isOfType() && def.isOfType()) { + return new AbsPercWidget(parent, (const RichAbsPerc&) pd, (const FloatValue&) def.value()); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new DynamicFloatWidget( parent, (const RichDynamicFloat&) pd, (const RichDynamicFloat&) def); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new EnumWidget(parent, (const RichEnum&) pd, (const RichEnum&) def); } - else if (pd.isOfType()) { - return new BoolWidget(parent, (const RichBool&) pd, (const RichBool&) def); + else if (pd.isOfType() && def.isOfType()) { + return new BoolWidget(parent, (const RichBool&) pd, (const BoolValue&) def.value()); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new IntWidget(parent, (const RichInt&) pd, (const RichInt&) def); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new FloatWidget(parent, (const RichFloat&) pd, (const RichFloat&) def); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new StringWidget(parent, (const RichString&) pd, (const RichString&) def); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new Matrix44Widget( parent, (const RichMatrix44f&) pd, (const RichMatrix44f&) def, reinterpret_cast(parent)->gla); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new PositionWidget( parent, (const RichPosition&) pd, (const RichPosition&) def, reinterpret_cast(parent)->gla); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new DirectionWidget( parent, (const RichDirection&) pd, (const RichDirection&) def, reinterpret_cast(parent)->gla); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new ShotWidget( parent, (const RichShotf&) pd, (const RichShotf&) def, reinterpret_cast(parent)->gla); } - else if (pd.isOfType()) { - return new ColorWidget(parent, (const RichColor&) pd, (const RichColor&) def); + else if (pd.isOfType() && def.isOfType()) { + return new ColorWidget(parent, (const RichColor&) pd, (const ColorValue&) def.value()); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new OpenFileWidget(parent, (const RichOpenFile&) pd, (const RichOpenFile&) def); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new SaveFileWidget(parent, (const RichSaveFile&) pd, (const RichSaveFile&) def); } - else if (pd.isOfType()) { + else if (pd.isOfType() && def.isOfType()) { return new MeshWidget(parent, (const RichMesh&) pd, (const RichMesh&) def); } else { diff --git a/src/common_gui/rich_parameter/widgets/abs_perc_widget.cpp b/src/common_gui/rich_parameter/widgets/abs_perc_widget.cpp index bd07840f6..67c0bb0eb 100644 --- a/src/common_gui/rich_parameter/widgets/abs_perc_widget.cpp +++ b/src/common_gui/rich_parameter/widgets/abs_perc_widget.cpp @@ -29,13 +29,9 @@ #include #include -AbsPercWidget::AbsPercWidget(QWidget* p, const RichAbsPerc& rabs, const RichAbsPerc& rdef) : - RichParameterWidget(p, rabs, rdef) - +AbsPercWidget::AbsPercWidget(QWidget *p, const RichAbsPerc &rabs, const FloatValue &defaultValue) : + RichParameterWidget(p, rabs, defaultValue), m_min(rabs.min), m_max(rabs.max) { - m_min = rabs.min; - m_max = rabs.max; - descriptionLabel->setText(descriptionLabel->text() + " (abs and %)"); absSB = new QDoubleSpinBox(this); diff --git a/src/common_gui/rich_parameter/widgets/abs_perc_widget.h b/src/common_gui/rich_parameter/widgets/abs_perc_widget.h index 81b192b4f..7d662319e 100644 --- a/src/common_gui/rich_parameter/widgets/abs_perc_widget.h +++ b/src/common_gui/rich_parameter/widgets/abs_perc_widget.h @@ -30,7 +30,7 @@ class AbsPercWidget : public RichParameterWidget { Q_OBJECT public: - AbsPercWidget(QWidget* p, const RichAbsPerc& rabs, const RichAbsPerc& rdef); + AbsPercWidget(QWidget* p, const RichAbsPerc &rabs, const FloatValue &defaultValue); ~AbsPercWidget(); void addWidgetToGridLayout(QGridLayout* lay, const int r); diff --git a/src/common_gui/rich_parameter/widgets/bool_widget.cpp b/src/common_gui/rich_parameter/widgets/bool_widget.cpp index b3167b9dd..4665d288d 100644 --- a/src/common_gui/rich_parameter/widgets/bool_widget.cpp +++ b/src/common_gui/rich_parameter/widgets/bool_widget.cpp @@ -29,8 +29,8 @@ #include #include -BoolWidget::BoolWidget(QWidget* p, const RichBool& rb, const RichBool& rdef) : - RichParameterWidget(p, rb, rdef) +BoolWidget::BoolWidget(QWidget *p, const RichBool ¶m, const BoolValue &defaultValue) : + RichParameterWidget(p, param, defaultValue) { cb = new QCheckBox("", this); cb->setToolTip(parameter->toolTip()); diff --git a/src/common_gui/rich_parameter/widgets/bool_widget.h b/src/common_gui/rich_parameter/widgets/bool_widget.h index 9f7359918..166f5ae86 100644 --- a/src/common_gui/rich_parameter/widgets/bool_widget.h +++ b/src/common_gui/rich_parameter/widgets/bool_widget.h @@ -29,7 +29,7 @@ class BoolWidget : public RichParameterWidget { public: - BoolWidget(QWidget* p, const RichBool& rb, const RichBool& rdef); + BoolWidget(QWidget* p, const RichBool& param, const BoolValue& defaultValue); ~BoolWidget(); void addWidgetToGridLayout(QGridLayout* lay, const int r); diff --git a/src/common_gui/rich_parameter/widgets/color_widget.cpp b/src/common_gui/rich_parameter/widgets/color_widget.cpp index 04fef7aa3..ac5ce0244 100644 --- a/src/common_gui/rich_parameter/widgets/color_widget.cpp +++ b/src/common_gui/rich_parameter/widgets/color_widget.cpp @@ -29,8 +29,8 @@ #include #include -ColorWidget::ColorWidget(QWidget* p, const RichColor& newColor, const RichColor& rdef) : - RichParameterWidget(p, newColor, rdef), pickcol() +ColorWidget::ColorWidget(QWidget *p, const RichColor &newColor, const ColorValue &defaultValue) : + RichParameterWidget(p, newColor, defaultValue), pickcol(defaultValue.getColor()) { colorLabel = new QLabel(this); colorButton = new QPushButton(this); @@ -51,7 +51,6 @@ ColorWidget::ColorWidget(QWidget* p, const RichColor& newColor, const RichColor& widgets.push_back(colorLabel); widgets.push_back(colorButton); - pickcol = parameter->value().getColor(); connect(colorButton, SIGNAL(clicked()), this, SLOT(pickColor())); connect(this, SIGNAL(dialogParamChanged()), this, SLOT(setParameterChanged())); } diff --git a/src/common_gui/rich_parameter/widgets/color_widget.h b/src/common_gui/rich_parameter/widgets/color_widget.h index 87f4515e4..918ee6475 100644 --- a/src/common_gui/rich_parameter/widgets/color_widget.h +++ b/src/common_gui/rich_parameter/widgets/color_widget.h @@ -30,7 +30,7 @@ class ColorWidget : public RichParameterWidget { Q_OBJECT public: - ColorWidget(QWidget* p, const RichColor& newColor, const RichColor& rdef); + ColorWidget(QWidget* p, const RichColor& newColor, const ColorValue& defaultValue); ~ColorWidget(); void addWidgetToGridLayout(QGridLayout* lay, const int r);