]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #910 - Impossible to set start point , end points for line manually
authorspo <sergey.pokhodenko@opencascade.com>
Wed, 9 Sep 2015 11:33:53 +0000 (14:33 +0300)
committerspo <sergey.pokhodenko@opencascade.com>
Wed, 9 Sep 2015 13:20:14 +0000 (16:20 +0300)
src/Model/Model_Expression.cpp
src/ModuleBase/ModuleBase_DoubleSpinBox.cpp
src/ModuleBase/ModuleBase_DoubleSpinBox.h
src/ModuleBase/ModuleBase_ParamSpinBox.cpp
src/ModuleBase/ModuleBase_ParamSpinBox.h
src/ModuleBase/ModuleBase_WidgetDoubleValue.cpp
src/PartSet/PartSet_WidgetPoint2d.cpp
src/XGUI/XGUI_Workshop.cpp

index d87020b6420cb35a9f8b8f7cf4d8fe9326643ef1..27e94d4067eedbd0ab8f78b2d9bc63e36b6d9133 100644 (file)
@@ -71,6 +71,8 @@ void Model_Expression::setText(const std::string& theValue)
 {
   if (text() != theValue)
     myText->Set(TCollection_ExtendedString(theValue.c_str()));
+
+  setError(text().empty() ? "" : "Not a double value.");
 }
 
 std::string Model_Expression::text() const 
index a8489408dc6bec240b76ccaf602e7552d6523ac5..59d5c0285e40256c87a28c9d02b4d81479e88997 100644 (file)
@@ -36,7 +36,7 @@ const double PSEUDO_ZERO = 1.e-20;
  \endcode
 
  Another useful feature is possibility to use scientific notation (e.g. 1.234e+18)
- for the widegt text. To enable this, negative precision should be specified either
+ for the widget text. To enable this, negative precision should be specified either
  through a constructor or using setPrecision() method.
 
  Note that "decimals" property of QDoubleSpinBox is almost completely substituted
@@ -240,6 +240,7 @@ QValidator::State ModuleBase_DoubleSpinBox::validate(QString& str, int& pos) con
   // Otherwise, expect myPrecision digits after the decimal point.
   int decs = myPrecision < 0 ? qAbs(myPrecision) - 1 : myPrecision;
 
+  v.setLocale(this->locale());
   v.setDecimals(decs);
   v.setBottom(minimum());
   v.setTop(maximum());
index 2daa53b955a94ecf7f4052f326168c79136238ea..87cbe6e84e665075d2fe425b3cafbd8834b9a4af 100644 (file)
@@ -21,7 +21,7 @@ class MODULEBASE_EXPORT ModuleBase_DoubleSpinBox : public QDoubleSpinBox
 Q_OBJECT
 
  public:
-  explicit ModuleBase_DoubleSpinBox( QWidget* theParent = 0, int thePrecision = 12 );
+  explicit ModuleBase_DoubleSpinBox( QWidget* theParent = 0, int thePrecision = -12 );
   virtual ~ModuleBase_DoubleSpinBox();
 
   /// Returns true if the control is clear
index 55543e80e1ba048f0733df1a162df6743ef44918..febd29badbf419cdbf187edbbcf8533742bf04e6 100644 (file)
@@ -85,9 +85,9 @@ void ModuleBase_ParamSpinBox::onTextChanged(const QString& text)
  */
 double ModuleBase_ParamSpinBox::valueFromText(const QString& theText) const
 {
-  if (!hasVariable(theText)) {
+  if (!hasVariable(theText))
     return ModuleBase_DoubleSpinBox::valueFromText(theText);
-  }
+
   // small hack: return length of the string to initiate valuesChanged signal
   return qHash(theText);
 }
@@ -178,18 +178,19 @@ bool ModuleBase_ParamSpinBox::hasVariable(const QString& theText) const
   //  QRegExp varNameMask(aDigitPattern.arg(","));
   //  aHasDigit = varNameMask.exactMatch(theText);
   //}
-  bool aHasDigit = false;
-  theText.toDouble(&aHasDigit);
-  if (aHasDigit) {
-    QLocale aLoc; // create default locale
-    QChar aDecPnt = aLoc.decimalPoint();
-    if (aDecPnt == '.') 
-      aHasDigit = theText.contains(aDecPnt) || (!theText.contains(','));
-    else if (aDecPnt == ',') 
-      aHasDigit = theText.contains(aDecPnt) || (!theText.contains('.'));
-  }
-  return !aHasDigit;
-
+  bool isDouble = false;
+  QLocale::c().toDouble(theText, &isDouble);
+
+//  theText.toDouble(&isDouble);
+//  if (isDouble) {
+//    QLocale aLoc; // create default locale
+//    QChar aDecPnt = aLoc.decimalPoint();
+//    if (aDecPnt == '.')
+//      isDouble = theText.contains(aDecPnt) || (!theText.contains(','));
+//    else if (aDecPnt == ',')
+//      isDouble = theText.contains(aDecPnt) || (!theText.contains('.'));
+//  }
+  return !isDouble;
 }
 
 /*!
index 89e99ff7c0ce5a2889afed0ed065edbd8647f85d..7d14e951136d1f4cc6065fd650adc5adba00ec82 100644 (file)
@@ -15,7 +15,7 @@ class MODULEBASE_EXPORT ModuleBase_ParamSpinBox : public ModuleBase_DoubleSpinBo
   enum State { Invalid = 0, NoVariable, Incompatible, Acceptable };
 
 public:
-  explicit ModuleBase_ParamSpinBox( QWidget* theParent = 0, int thePrecision = 12 );
+  explicit ModuleBase_ParamSpinBox( QWidget* theParent = 0, int thePrecision = -12 );
   virtual ~ModuleBase_ParamSpinBox();
 
   virtual void stepBy(int);
index a576ad31ba2c3e4eef8693fe819d991f3bd6f52b..47799fc54eb11866cf5dff6b98b0588bed58b130 100644 (file)
@@ -115,16 +115,16 @@ bool ModuleBase_WidgetDoubleValue::storeValueCustom() const
 {
   DataPtr aData = myFeature->data();
   AttributeDoublePtr aReal = aData->real(attributeID());
-  if (!mySpinBox->hasVariable()) {
+  if (mySpinBox->hasVariable()) {
+    // Here is a text of a real value or an expression.
+    std::string aText = mySpinBox->text().toStdString();
+    aReal->setText(aText);
+  } else {
     // it is important to set the empty text value to the attribute before set the value
-    // because setValue tries to calculate the attrubyte bakye according to the
+    // because setValue tries to calculate the attribute value according to the
     // attribute current text
     aReal->setText("");
     aReal->setValue(mySpinBox->value());
-  } else {
-    // Here is a text of a real value or an expression.
-    std::string aText = mySpinBox->text().toStdString();
-    aReal->setText(aText);
   }
   updateObject(myFeature);
   return true;
index 1ffc4f4d234d66faf4fdb60b76450309d01eefec..61749d78fc0226a9d8bc19711a9edfd11f95daf6 100644 (file)
@@ -160,7 +160,7 @@ bool PartSet_WidgetPoint2D::storeValueCustom() const
     return false;
   std::shared_ptr<GeomDataAPI_Point2D> aPoint = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
       aData->attribute(attributeID()));
-  
+
   PartSet_WidgetPoint2D* that = (PartSet_WidgetPoint2D*) this;
   bool isBlocked = that->blockSignals(true);
   bool isImmutable = aPoint->setImmutable(true);
index abe349cf27e832f596f629a828d1b703de40563a..6dfaa1765a17b76c76a8d7456e2835bf92a19d13 100644 (file)
@@ -431,7 +431,7 @@ void XGUI_Workshop::onOperationStarted(ModuleBase_Operation* theOperation)
   if (aFOperation->getDescription()->hasXmlRepresentation()) {  //!< No need for property panel
     setPropertyPanel(aFOperation);
     // filling the operation values by the current selection
-    // if the operation can be commited after the controls filling, the method perform should
+    // if the operation can be committed after the controls filling, the method perform should
     // be stopped. Otherwise unnecessary presentations can be shown(e.g. operation prs in sketch)
     if (!aFOperation->isEditOperation()) {
       aFOperation->activateByPreselection();