Salome HOME
Issue #3052: Conflicting constraint after trim ellipse
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetIntValue.cpp
index e694d35f58b0953cc71ef626fcc081cc5d056917..0e131bb1dc8dda8766947714177e795ea9a01e38 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include <ModuleBase_WidgetIntValue.h>
@@ -52,7 +51,7 @@
 
 ModuleBase_WidgetIntValue::ModuleBase_WidgetIntValue(QWidget* theParent,
                                                      const Config_WidgetAPI* theData)
-: ModuleBase_ModelWidget(theParent, theData)
+: ModuleBase_ModelWidget(theParent, theData), myHasDefault(false)
 {
   QFormLayout* aControlLay = new QFormLayout(this);
   ModuleBase_Tools::adjustMargins(aControlLay);
@@ -91,17 +90,16 @@ ModuleBase_WidgetIntValue::ModuleBase_WidgetIntValue(QWidget* theParent,
     mySpinBox->setSingleStep(aStepVal);
   }
 
-  int aDefVal = QString::fromStdString(getDefaultValue()).toInt(&isOk);
-  if (isOk) {
-    mySpinBox->setValue(aDefVal);
-  }
+  myDefVal = QString::fromStdString(getDefaultValue()).toInt(&myHasDefault);
+  if (myHasDefault)
+    mySpinBox->setValue(myDefVal);
 
   QString aTTip = translate(theData->widgetTooltip());
   mySpinBox->setToolTip(aTTip);
   myLabel->setToolTip(aTTip);
 
   aControlLay->addRow(myLabel, mySpinBox);
-  connect(mySpinBox, SIGNAL(valueChanged(int)), this, SIGNAL(valuesModified()));
+  connect(mySpinBox, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified()));
 }
 
 ModuleBase_WidgetIntValue::~ModuleBase_WidgetIntValue()
@@ -157,7 +155,7 @@ bool ModuleBase_WidgetIntValue::storeValueCustom()
       } else {
         ModuleBase_Tools::editParameter(myParameter, aText);
       }
-      aText = aText.split('=').at(0) + "=";
+      aText = aText.split('=').at(0);
     } else if (myParameter.get()) {
       // Nullyfy the parameter reference without deletion of the created
       myParameter = FeaturePtr();
@@ -167,6 +165,10 @@ bool ModuleBase_WidgetIntValue::storeValueCustom()
     // it is important to set the empty text value to the attribute before set the value
     // because setValue tries to calculate the attribute value according to the
     // attribute current text
+    if (anAttribute->expressionInvalid()) {
+      anAttribute->setExpressionError("");
+      anAttribute->setExpressionInvalid(false);
+    }
     anAttribute->setText("");
     anAttribute->setValue(mySpinBox->value());
   }
@@ -181,21 +183,28 @@ bool ModuleBase_WidgetIntValue::restoreValueCustom()
   std::string aTextRepr = anAttribute->text();
   if (!aTextRepr.empty()) {
     QString aText = QString::fromStdString(aTextRepr);
-    if (aText.endsWith('=')) {
-      if (!myParameter.get()) {
-        QString aName = aText.left(aText.indexOf('=')).trimmed();
-        myParameter = ModuleBase_Tools::findParameter(aName);
-      }
-      /// If myParameter is empty then it was not created because of an error
-      if (!myParameter.get())
-        return false;
-
-      AttributeStringPtr aExprAttr = myParameter->string("expression");
-      aText += aExprAttr->value().c_str();
-    }
+    //if (aText.endsWith('=')) {
+    //  if (!myParameter.get()) {
+    //    QString aName = aText.left(aText.indexOf('=')).trimmed();
+    //    myParameter = ModuleBase_Tools::findParameter(aName);
+    //  }
+    //  /// If myParameter is empty then it was not created because of an error
+    //  if (!myParameter.get())
+    //    return false;
+
+    //  AttributeStringPtr aExprAttr = myParameter->string("expression");
+    //  aText += aExprAttr->value().c_str();
+    //}
     ModuleBase_Tools::setSpinText(mySpinBox, aText);
   } else {
-    ModuleBase_Tools::setSpinValue(mySpinBox, anAttribute->value());
+    ModuleBase_Tools::setSpinValue(mySpinBox,
+      anAttribute->isInitialized() ? anAttribute->value() : myDefVal);
+    if (anAttribute->isInitialized() && anAttribute->expressionInvalid()) {
+      anAttribute->setExpressionError("");
+      anAttribute->setExpressionInvalid(false);
+    }
+    if ((!anAttribute->isInitialized()) && myHasDefault)
+      anAttribute->setValue(myDefVal);
   }
   return true;
 }