Salome HOME
Merge branch 'master' of newgeom:newgeom
[modules/shaper.git] / src / XGUI / XGUI_WidgetFactory.cpp
index b2551c62c667dd59a15d3c20ab2c5f6b960d7a2a..eeb6c10cde969231a91c81b772ac563ba28c4ff1 100644 (file)
@@ -6,7 +6,9 @@
  */
 
 #include <XGUI_WidgetFactory.h>
+#include <ModuleBase_Operation.h>
 
+#include <Config_Keywords.h>
 #include <Config_WidgetAPI.h>
 
 #include <QWidget>
 #include <QDebug>
 #endif
 
-XGUI_WidgetFactory::XGUI_WidgetFactory(const std::string& theXml)
+XGUI_WidgetFactory::XGUI_WidgetFactory(ModuleBase_Operation* theOperation)
+    : myOperation(theOperation)
 {
-  myWidgetApi = new Config_WidgetAPI(theXml);
+  QString aXml = myOperation->xmlRepresentation();
+  myWidgetApi = new Config_WidgetAPI(aXml.toStdString());
 }
 
 XGUI_WidgetFactory::~XGUI_WidgetFactory()
@@ -41,8 +45,8 @@ void XGUI_WidgetFactory::fillWidget(QWidget* theParent)
   do {
     std::string aWdgType = myWidgetApi->widgetType();
     QWidget* aWidget = NULL;
-    if (aWdgType == "value") {
-      aWidget = valueWidget();
+    if (aWdgType == NODE_DOUBLE_WDG) {
+      aWidget = doubleSpinBoxWidget();
     } else {
       #ifdef _DEBUG
       qDebug() << "XGUI_WidgetFactory::fillWidget: find bad widget type";
@@ -55,7 +59,7 @@ void XGUI_WidgetFactory::fillWidget(QWidget* theParent)
   theParent->setLayout(aWidgetLay);
 }
 
-QWidget* XGUI_WidgetFactory::valueWidget()
+QWidget* XGUI_WidgetFactory::doubleSpinBoxWidget()
 {
   QWidget* result = new QWidget();
   QHBoxLayout* aControlLay = new QHBoxLayout(result);
@@ -67,20 +71,26 @@ QWidget* XGUI_WidgetFactory::valueWidget()
 
   aControlLay->addWidget(aLabel);
   QDoubleSpinBox* aBox = new QDoubleSpinBox(result);
+  QString anObjName = QString::fromStdString(myWidgetApi->widgetId());
+  aBox->setObjectName(anObjName);
   bool isOk = false;
-  double aMinVal = qs(myWidgetApi->getProperty("min")).toDouble(&isOk);
+  std::string aProp = myWidgetApi->getProperty(DOUBLE_WDG_MIN);
+  double aMinVal = qs(aProp).toDouble(&isOk);
   if (isOk) {
     aBox->setMinimum(aMinVal);
   }
-  double aMaxVal = qs(myWidgetApi->getProperty("max")).toDouble(&isOk);
+  aProp = myWidgetApi->getProperty(DOUBLE_WDG_MAX);
+  double aMaxVal = qs(aProp).toDouble(&isOk);
   if (isOk) {
     aBox->setMaximum(aMaxVal);
   }
-  double aStepVal = qs(myWidgetApi->getProperty("step")).toDouble(&isOk);
+  aProp = myWidgetApi->getProperty(DOUBLE_WDG_STEP);
+  double aStepVal = qs(aProp).toDouble(&isOk);
   if (isOk) {
     aBox->setSingleStep(aStepVal);
   }
-  double aDefVal = qs(myWidgetApi->getProperty("default")).toDouble(&isOk);
+  aProp = myWidgetApi->getProperty(DOUBLE_WDG_DFLT);
+  double aDefVal = qs(aProp).toDouble(&isOk);
   if (isOk) {
     aBox->setValue(aDefVal);
   }
@@ -88,8 +98,18 @@ QWidget* XGUI_WidgetFactory::valueWidget()
   aBox->setToolTip(aTTip);
   aControlLay->addWidget(aBox);
   aControlLay->setStretch(1, 1);
-
   result->setLayout(aControlLay);
+  connectWidget(aBox, NODE_DOUBLE_WDG);
+  return result;
+}
+
+bool XGUI_WidgetFactory::connectWidget(QWidget* theWidget, const QString& theType)
+{
+  bool result = false;
+  if (theType == NODE_DOUBLE_WDG) {
+    result = QObject::connect(theWidget, SIGNAL(valueChanged(double)), 
+                              myOperation, SLOT(storeReal(double)));
+  }
   return result;
 }