]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Make possible to input formula to Point2d widget
authorvsv <vitaly.smetannikov@opencascade.com>
Wed, 27 May 2015 07:28:24 +0000 (10:28 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Wed, 27 May 2015 07:28:24 +0000 (10:28 +0300)
src/ModuleBase/ModuleBase_Tools.cpp
src/ModuleBase/ModuleBase_Tools.h
src/PartSet/PartSet_WidgetPoint2d.cpp
src/PartSet/PartSet_WidgetPoint2d.h

index 449dd2d3fe8562ec91477c68e8d907c67f66da17..2deb05c7c5206d77ddb3e441fe867f2770c77955 100644 (file)
@@ -125,6 +125,13 @@ void setSpinValue(QDoubleSpinBox* theSpin, double theValue)
   theSpin->blockSignals(isBlocked);
 }
 
+void setSpinValue(ModuleBase_ParamSpinBox* theSpin, double theValue)
+{
+  bool isBlocked = theSpin->blockSignals(true);
+  theSpin->setValue(theValue);
+  theSpin->blockSignals(isBlocked);
+}
+
 QString objectInfo(const ObjectPtr& theObj, const bool isUseAttributesInfo)
 {
   QString aFeatureStr = "feature";
index 410f01de2b77459e2df124391b060fbc968ec858..0bb3e68eeaabe006d9e1c6db3beca31107d3805b 100644 (file)
@@ -62,6 +62,11 @@ MODULEBASE_EXPORT QPixmap lighter(const QString& theIcon, const int theLighterVa
 /// \param theValue a new value
 MODULEBASE_EXPORT void setSpinValue(QDoubleSpinBox* theSpin, double theValue);
 
+/// Sets programmatically the value to the spin box without emitting any signals(e.g. valueChanged)
+/// \param theSpin an X or Y coordinate widget
+/// \param theValue a new value
+MODULEBASE_EXPORT void setSpinValue(ModuleBase_ParamSpinBox* theSpin, double theValue);
+
 /// Sets programmatically the value to the spin box without emitting any signals(e.g. valueChanged)
 /// \param theSpin an ModuleBase_ParamSpinBox that accepts text
 /// \param theText a new value
index add40ce6abeff8281fb092c603022aa4005db2c9..df7aab9dca3ce905ef015c06f7a799661210f926 100644 (file)
@@ -15,7 +15,7 @@
 #include <XGUI_Selection.h>
 #include <XGUI_OperationMgr.h>
 
-#include <ModuleBase_DoubleSpinBox.h>
+#include <ModuleBase_ParamSpinBox.h>
 #include <ModuleBase_Tools.h>
 #include <ModuleBase_IViewWindow.h>
 
@@ -72,13 +72,13 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent,
     aLabel->setPixmap(QPixmap(":pictures/x_point.png"));
     aGroupLay->addWidget(aLabel, 0, 0);
 
-    myXSpin = new ModuleBase_DoubleSpinBox(myGroupBox);
+    myXSpin = new ModuleBase_ParamSpinBox(myGroupBox);
     myXSpin->setMinimum(-DBL_MAX);
     myXSpin->setMaximum(DBL_MAX);
     myXSpin->setToolTip(tr("X"));
     aGroupLay->addWidget(myXSpin, 0, 1);
 
-    connect(myXSpin, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged()));
+    connect(myXSpin, SIGNAL(valueChanged(const QString&)), this, SLOT(onValuesChanged()));
   }
   {
     QLabel* aLabel = new QLabel(myGroupBox);
@@ -86,13 +86,13 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent,
     aLabel->setPixmap(QPixmap(":pictures/y_point.png"));
     aGroupLay->addWidget(aLabel, 1, 0);
 
-    myYSpin = new ModuleBase_DoubleSpinBox(myGroupBox);
+    myYSpin = new ModuleBase_ParamSpinBox(myGroupBox);
     myYSpin->setMinimum(-DBL_MAX);
     myYSpin->setMaximum(DBL_MAX);
     myYSpin->setToolTip(tr("Y"));
     aGroupLay->addWidget(myYSpin, 1, 1);
 
-    connect(myYSpin, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged()));
+    connect(myYSpin, SIGNAL(valueChanged(const QString&)), this, SLOT(onValuesChanged()));
   }
   QVBoxLayout* aLayout = new QVBoxLayout(this);
   ModuleBase_Tools::zeroMargins(aLayout);
@@ -105,10 +105,10 @@ void PartSet_WidgetPoint2D::reset()
   if (!isUseReset())
     return;
 
-  if (isComputedDefault()) {
-    //return;
-    if (myFeature->compute(myAttributeID))
-      restoreValue();
+  if (isComputedDefault() || myXSpin->hasVariable() || myYSpin->hasVariable()) {
+    return;
+    //if (myFeature->compute(myAttributeID))
+    //  restoreValue();
   }
   else {
     bool isOk;
@@ -167,12 +167,13 @@ bool PartSet_WidgetPoint2D::storeValueCustom() const
   PartSet_WidgetPoint2D* that = (PartSet_WidgetPoint2D*) this;
   bool isBlocked = that->blockSignals(true);
   bool isImmutable = aPoint->setImmutable(true);
-#ifdef _DEBUG
-  std::string _attr_name = myAttributeID;
-  double _X = myXSpin->value();
-  double _Y = myYSpin->value();
-#endif
-  aPoint->setValue(myXSpin->value(), myYSpin->value());
+  
+  if (myXSpin->hasVariable() || myYSpin->hasVariable()) {
+    aPoint->setText(myXSpin->text().toStdString(), myYSpin->text().toStdString());
+  } else {
+    aPoint->setValue(myXSpin->value(), myYSpin->value());
+    aPoint->setText("", "");
+  }
   // after movement the solver will call the update event: optimization
   moveObject(myFeature);
   aPoint->setImmutable(isImmutable);
@@ -186,15 +187,16 @@ bool PartSet_WidgetPoint2D::restoreValue()
   std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
   std::shared_ptr<GeomDataAPI_Point2D> aPoint = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
       aData->attribute(attributeID()));
-
-#ifdef _DEBUG
-  std::string _attr_name = myAttributeID;
-  double _X = aPoint->x();
-  double _Y = aPoint->y();
-#endif
-
-  ModuleBase_Tools::setSpinValue(myXSpin, aPoint->x());
-  ModuleBase_Tools::setSpinValue(myYSpin, aPoint->y());
+  std::string aTextX = aPoint->textX();
+  std::string aTextY = aPoint->textY();
+  if (aTextX.empty() || aTextY.empty()) {
+    double aX = aPoint->x();
+    ModuleBase_Tools::setSpinValue(myXSpin, aPoint->x());
+    ModuleBase_Tools::setSpinValue(myYSpin, aPoint->y());
+  } else {
+    ModuleBase_Tools::setSpinText(myXSpin, QString::fromStdString(aTextX));
+    ModuleBase_Tools::setSpinText(myYSpin, QString::fromStdString(aTextY));
+  }
   return true;
 }
 
index dc47f2d7a7d78d46b9cbab0bf7bbdc4a36356cd4..75c617ca005707440afaf5db41e213704327dc90 100644 (file)
@@ -18,7 +18,7 @@
 
 class ModelAPI_Feature;
 class ModuleBase_IWorkshop;
-class ModuleBase_DoubleSpinBox;
+class ModuleBase_ParamSpinBox;
 class ModuleBase_IViewWindow;
 class GeomAPI_Pnt2d;
 class XGUI_Workshop;
@@ -136,8 +136,8 @@ private slots:
   XGUI_Workshop* myWorkshop;
 
   QGroupBox* myGroupBox;  ///< the parent group box for all intenal widgets
-  ModuleBase_DoubleSpinBox* myXSpin;  ///< the spin box for the X coordinate
-  ModuleBase_DoubleSpinBox* myYSpin;  ///< the spin box for the Y coordinate
+  ModuleBase_ParamSpinBox* myXSpin;  ///< the spin box for the X coordinate
+  ModuleBase_ParamSpinBox* myYSpin;  ///< the spin box for the Y coordinate
 
   //std::string myOptionParam;  /// Parameter name which has to be taken from previous feature