Salome HOME
Improve multi-selector control to provide items multi-selection and "Delete" context...
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetExprEditor.cpp
index 3b3d25c0815a8b9c8c2fdf2086de0da80dcd6a34..c0e683f89751ae8fd1da7e52c00b5059919ba923 100644 (file)
@@ -52,6 +52,10 @@ ExpressionEditor::ExpressionEditor(QWidget* theParent)
           this,        SLOT(insertCompletion(const QString&)));
   (void) new QShortcut(QKeySequence(tr("Ctrl+Space", "Complete")),
                        this, SLOT(performCompletion()));
+
+  connect(this, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
+
+  setTabChangesFocus(true);
 }
 
 ExpressionEditor::~ExpressionEditor()
@@ -117,16 +121,28 @@ void ExpressionEditor::keyPressEvent(QKeyEvent* theEvent)
     switch (theEvent->key()) {
       case Qt::Key_Up:
       case Qt::Key_Down:
+      case Qt::Key_Escape:
       case Qt::Key_Enter:
       case Qt::Key_Return:
-      case Qt::Key_Escape:
         theEvent->ignore();
-        return;
+      return;
       default:
         myCompleter->popup()->hide();
         break;
     }
   }
+  else {
+    switch (theEvent->key()) {
+      case Qt::Key_Enter:
+      case Qt::Key_Return:
+        emit keyReleased(theEvent);
+        // do not react to the Enter key, the property panel processes it
+        return;
+      break;
+      default:
+        break;
+    }
+  }
   QPlainTextEdit::keyPressEvent(theEvent);
 }
 
@@ -184,6 +200,10 @@ void ExpressionEditor::paintEvent( QPaintEvent* theEvent )
   }
 }
 
+void ExpressionEditor::onTextChanged()
+{
+  emit valueModified();
+}
 
 
 ModuleBase_WidgetExprEditor::ModuleBase_WidgetExprEditor( QWidget* theParent,
@@ -207,13 +227,18 @@ ModuleBase_WidgetExprEditor::ModuleBase_WidgetExprEditor( QWidget* theParent,
   aMainLay->addWidget(myEditor);
   this->setLayout(aMainLay);
 
-  connect(myEditor, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
+  connect(myEditor, SIGNAL(valueModified()), this, SIGNAL(valuesModified()));
+  connect(myEditor, SIGNAL(keyReleased(QKeyEvent*)), this, SIGNAL(keyReleased(QKeyEvent*)));
 }
 
 ModuleBase_WidgetExprEditor::~ModuleBase_WidgetExprEditor()
 {
 }
 
+void ModuleBase_WidgetExprEditor::initializeValueByActivate()
+{
+}
+
 bool ModuleBase_WidgetExprEditor::storeValueCustom() const
 {
   // A rare case when plugin was not loaded. 
@@ -221,6 +246,7 @@ bool ModuleBase_WidgetExprEditor::storeValueCustom() const
     return false;
   DataPtr aData = myFeature->data();
   AttributeStringPtr aStringAttr = aData->string(attributeID());
+
   QString aWidgetValue = myEditor->toPlainText();
   aStringAttr->setValue(aWidgetValue.toStdString());
   updateObject(myFeature);
@@ -273,7 +299,17 @@ QList<QWidget*> ModuleBase_WidgetExprEditor::getControls() const
   return result;
 }
 
+bool ModuleBase_WidgetExprEditor::processEnter()
+{
+  bool isModified = getValueState() == ModifiedInPP;
+  if (isModified) {
+    emit valuesChanged();
+    myEditor->selectAll();
+  }
+  return isModified;
+}
+
 void ModuleBase_WidgetExprEditor::onTextChanged()
 {
-  storeValue();
+  emit valuesChanged();
 }