]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2666: Create parameter on parametrical point control input
authorvsv <vsv@opencascade.com>
Mon, 1 Oct 2018 14:42:53 +0000 (17:42 +0300)
committervsv <vsv@opencascade.com>
Mon, 1 Oct 2018 14:43:15 +0000 (17:43 +0300)
src/ModuleBase/ModuleBase_ParamSpinBox.cpp
src/ModuleBase/ModuleBase_WidgetPointInput.cpp
src/ModuleBase/ModuleBase_WidgetPointInput.h

index aa6eaca7cdb27409af911c41519fbf92de2bcee0..941a2e2cf0e359990ca18a23077d957e37e602b7 100644 (file)
@@ -177,6 +177,12 @@ void ModuleBase_ParamSpinBox::setText(const QString& value)
     lineEdit()->setText(value);
     emit textChanged(value);
   }
+  else {
+    bool isConv = false;
+    double aVal = value.toDouble(&isConv);
+    if (isConv)
+      setValue(aVal);
+  }
 }
 
 /*!
index 7917a909ac9c7fc49144e258ce9e249671b8da78..7d8596556b0eaf6a7c47c734fd3e4057ad04db4d 100644 (file)
@@ -34,6 +34,9 @@
 #include <QFormLayout>
 #include <QLabel>
 
+
+#define ERR_STRING "ERROR"
+
 ModuleBase_WidgetPointInput::ModuleBase_WidgetPointInput(QWidget* theParent,
   ModuleBase_IWorkshop* theWorkshop,
   const Config_WidgetAPI* theData)
@@ -101,6 +104,24 @@ QList<QWidget*> ModuleBase_WidgetPointInput::getControls() const
   return aList;
 }
 
+std::string getParmText(ModuleBase_ParamSpinBox* theSpin, FeaturePtr& theParam)
+{
+  QString aText = theSpin->text();
+  if (aText.contains('=')) {
+    if (!theParam.get()) {
+      theParam = ModuleBase_Tools::createParameter(aText);
+      if (!theParam.get()) {
+        return ERR_STRING;
+      }
+    }
+    else {
+      ModuleBase_Tools::editParameter(theParam, aText);
+    }
+    aText = aText.split('=').at(0);
+  }
+  return aText.toStdString();
+}
+
 //********************************************************************
 bool ModuleBase_WidgetPointInput::storeValueCustom()
 {
@@ -108,8 +129,28 @@ bool ModuleBase_WidgetPointInput::storeValueCustom()
   if (aAttr.get()) {
     if (aAttr->isInitialized()) {
       if (myXSpin->hasVariable() || myYSpin->hasVariable() || myZSpin->hasVariable()) {
-        aAttr->setText(myXSpin->text().toStdString(),
-          myYSpin->text().toStdString(), myZSpin->text().toStdString());
+        std::string aXText = getParmText(myXSpin, myXParam);
+        if (aXText == ERR_STRING) {
+          aAttr->setExpressionError(0, "Parameter cannot be created");
+          aAttr->setExpressionInvalid(0, true);
+          updateObject(myFeature);
+          return false;
+        }
+        std::string aYText = getParmText(myYSpin, myYParam);
+        if (aYText == ERR_STRING) {
+          aAttr->setExpressionError(1, "Parameter cannot be created");
+          aAttr->setExpressionInvalid(1, true);
+          updateObject(myFeature);
+          return false;
+        }
+        std::string aZText = getParmText(myZSpin, myZParam);
+        if (aZText == ERR_STRING) {
+          aAttr->setExpressionError(2, "Parameter cannot be created");
+          aAttr->setExpressionInvalid(2, true);
+          updateObject(myFeature);
+          return false;
+        }
+        aAttr->setText(aXText, aYText, aZText);
       } else {
         aAttr->setValue(myXSpin->value(), myYSpin->value(), myZSpin->value());
       }
index 7b6ec3b5940a3adef891f31494aa4b04a628f8e5..bae10d61a71ca2af8a2a6d763f2e911d5224a037 100644 (file)
@@ -76,6 +76,10 @@ protected:
   ModuleBase_ParamSpinBox* myYSpin;
   ModuleBase_ParamSpinBox* myZSpin;
 
+  FeaturePtr myXParam;
+  FeaturePtr myYParam;
+  FeaturePtr myZParam;
+
   double myDefaultValue[3];
 };