Salome HOME
Provide preselection
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetEditor.cpp
index f62eae3d3fbe4085328d8c643146d0e566c83850..ee5bc67f476ba024490da025fc8dbea9f5f87b10 100644 (file)
@@ -3,12 +3,14 @@
 // Author:      Natalia ERMOLAEVA
 
 #include <ModuleBase_WidgetEditor.h>
+#include <ModuleBase_DoubleSpinBox.h>
+#include <ModuleBase_Tools.h>
 
 #include <Config_Keywords.h>
 #include <Config_WidgetAPI.h>
 
 #include <Events_Loop.h>
-#include <Model_Events.h>
+#include <ModelAPI_Events.h>
 
 #include <ModelAPI_Feature.h>
 #include <ModelAPI_Data.h>
 #include <QLayout>
 
 ModuleBase_WidgetEditor::ModuleBase_WidgetEditor(QWidget* theParent,
-                                                 const Config_WidgetAPI* theData)
-: ModuleBase_ModelWidget(theParent, theData), myValue(0)
+                                                 const Config_WidgetAPI* theData,
+                                                 const std::string& theParentId)
+    : ModuleBase_WidgetDoubleValue(theParent, theData, theParentId)
 {
 }
 
 ModuleBase_WidgetEditor::~ModuleBase_WidgetEditor()
 {
-  //delete myEditor;
 }
 
-bool ModuleBase_WidgetEditor::storeValue(FeaturePtr theFeature) const
+double editedValue(double theValue, bool& isDone)
 {
-  DataPtr aData = theFeature->data();
-  AttributeDoublePtr aReal = aData->real(attributeID());
-  bool isOk;
-  if (isOk && aReal->value() != myValue) {
-    aReal->setValue(myValue);
-    Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_FEATURE_UPDATED));
-  }
-  return true;
-}
-
-bool ModuleBase_WidgetEditor::restoreValue(FeaturePtr theFeature)
-{
-  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
-  AttributeDoublePtr aRef = aData->real(attributeID());
-
-  myValue = aRef->value();
-  return true;
-}
-
-void ModuleBase_WidgetEditor::focusTo()
-{
-  QPoint aPoint = QCursor::pos();
-
   QDialog aDlg;
   aDlg.setWindowFlags(Qt::FramelessWindowHint);
   QHBoxLayout* aLay = new QHBoxLayout(&aDlg);
-  aLay->setContentsMargins(0,0,0,0);
+  ModuleBase_Tools::zeroMargins(aLay);
 
-  QLineEdit* aEditor = new QLineEdit(QString::number(myValue), &aDlg);
-  connect(aEditor, SIGNAL(returnPressed()), &aDlg, SLOT(accept()));
+  QLineEdit* aEditor = new QLineEdit(QString::number(theValue), &aDlg);
+  aEditor->setValidator(new QDoubleValidator(aEditor));
+  QObject::connect(aEditor, SIGNAL(returnPressed()), &aDlg, SLOT(accept()));
   aLay->addWidget(aEditor);
 
+  QPoint aPoint = QCursor::pos();
   aDlg.move(aPoint);
-  int aRes = aDlg.exec();
-
-  if (aRes == QDialog::Accepted)
-    myValue = aEditor->text().toDouble();
 
-  emit focusOutWidget(this);
+  isDone = aDlg.exec() == QDialog::Accepted;
+  double aValue = theValue;
+  if (isDone)
+    aValue = aEditor->text().toDouble();
+  return aValue;
 }
 
-QWidget* ModuleBase_WidgetEditor::getControl() const
+bool ModuleBase_WidgetEditor::focusTo()
 {
-  return 0;
+  double aValue = mySpinBox->value();
+  bool isDone;
+  aValue = editedValue(aValue, isDone);
+
+  if (isDone) {
+    bool isBlocked = mySpinBox->blockSignals(true);
+    mySpinBox->setValue(aValue);
+    mySpinBox->blockSignals(isBlocked);
+  }
+  emit valuesChanged();
+  emit focusOutWidget(this);
+
+  return false;
 }
 
-QList<QWidget*> ModuleBase_WidgetEditor::getControls() const
+void ModuleBase_WidgetEditor::editFeatureValue(FeaturePtr theFeature,
+                                               const std::string theAttribute)
 {
-  QList<QWidget*> aControls;
-  return aControls;
-}
+  DataPtr aData = theFeature->data();
+  AttributeDoublePtr aRef = aData->real(theAttribute);
+  double aValue = aRef->value();
 
+  bool isDone;
+  aValue = editedValue(aValue, isDone);
+  if (isDone)
+    aRef->setValue(aValue);
+}