]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
More clear way to process the operations
authorsbh <sergey.belash@opencascade.com>
Thu, 18 Sep 2014 15:00:13 +0000 (19:00 +0400)
committersbh <sergey.belash@opencascade.com>
Thu, 18 Sep 2014 15:00:13 +0000 (19:00 +0400)
17 files changed:
src/ModuleBase/ModuleBase_Operation.cpp
src/ModuleBase/ModuleBase_Operation.h
src/ModuleBase/ModuleBase_WidgetDoubleValue.cpp
src/ModuleBase/ModuleBase_WidgetDoubleValue.h
src/ModuleBase/ModuleBase_WidgetPoint2D.cpp
src/ModuleBase/ModuleBase_WidgetPoint2D.h
src/ModuleBase/ModuleBase_WidgetSelector.cpp
src/ModuleBase/ModuleBase_WidgetSelector.h
src/PartSet/PartSet_OperationFeatureCreate.cpp
src/PartSet/PartSet_OperationFeatureCreate.h
src/PartSet/PartSet_OperationFeatureEdit.cpp
src/PartSet/PartSet_OperationFeatureEdit.h
src/XGUI/XGUI_OperationMgr.cpp
src/XGUI/XGUI_OperationMgr.h
src/XGUI/XGUI_PropertyPanel.cpp
src/XGUI/XGUI_PropertyPanel.h
src/XGUI/XGUI_Workshop.cpp

index 12eb36e53b40d9b8503c51319d6c7316aa6a0164..9b24d742d722f407fd27ae9c99fc0a1b7e056f70 100644 (file)
@@ -174,9 +174,3 @@ bool ModuleBase_Operation::hasObject(ObjectPtr theObj) const
   return false;
 }
 
-bool ModuleBase_Operation::keyReleased(const int theKey)
-{
-  // Do nothing...
-  return false;
-}
-
index e29bdc6bc925bef59fa04669f28b8c23f71b0233..0a5e1a54db084bdc52072512f008d0368a5427d8 100644 (file)
@@ -72,7 +72,9 @@ Q_OBJECT
   /// Returns True if the current operation works with the given object (feature or result)
   virtual bool hasObject(ObjectPtr theObj) const;
 
-  virtual bool keyReleased(const int theKey);
+  virtual void keyReleased(const int theKey) {};
+
+  virtual void activateNextToCurrentWidget() {};
 
  public slots:
   /// Slots which listen the mode widget activation
index 16837acce7f66f27bb19032263bb96be839ebccf..6d470dbbd14567860f40444e50068f7f1ce2b6e6 100644 (file)
@@ -128,20 +128,3 @@ QList<QWidget*> ModuleBase_WidgetDoubleValue::getControls() const
   aList.append(mySpinBox);
   return aList;
 }
-
-bool ModuleBase_WidgetDoubleValue::eventFilter(QObject *theObject, QEvent *theEvent)
-{
-  if (theObject == mySpinBox) {
-    if (theEvent->type() == QEvent::KeyRelease) {
-      QKeyEvent* aKeyEvent = (QKeyEvent*) theEvent;
-      if (aKeyEvent && (aKeyEvent->key() == Qt::Key_Return ||
-                        aKeyEvent->key() == Qt::Key_Enter)) {
-        emit focusOutWidget(this);
-      }
-      emit keyReleased((QKeyEvent*) theEvent);
-      return true;
-    }
-  }
-  return ModuleBase_ModelWidget::eventFilter(theObject, theEvent);
-}
-
index 70c8a272b15d309684668836b7a6447d07295a95..20afafbe18f9862e7a43b15c0287660334f79ed7 100644 (file)
@@ -43,11 +43,6 @@ Q_OBJECT
     return myContainer;
   }
 
-  /// Process key release envent on the widget spin box controls
-  /// \param theObject the object where the event happens
-  /// \param theEvent the processed event
-  virtual bool eventFilter(QObject *theObject, QEvent *theEvent);
-
  public slots:
  /// Delayed value chnged: when user starts typing something,
  // it gives him a 0,5 second to finish typing, when sends valueChnaged() signal
index b20f2e8d7065077c142cdde128f593c3f631d74f..8feec7a6c5e96aa9f7d7983c0d4e7af82a8b9cf7 100644 (file)
@@ -144,22 +144,6 @@ QList<QWidget*> ModuleBase_WidgetPoint2D::getControls() const
   return aControls;
 }
 
-bool ModuleBase_WidgetPoint2D::eventFilter(QObject *theObject, QEvent *theEvent)
-{
-  if (theObject == myXSpin || theObject == myYSpin) {
-    if (theEvent->type() == QEvent::KeyRelease) {
-      QKeyEvent* aKeyEvent = (QKeyEvent*) theEvent;
-      if (aKeyEvent && (aKeyEvent->key() == Qt::Key_Return ||
-                        aKeyEvent->key() == Qt::Key_Enter)) {
-        emit focusOutWidget(this);
-      }
-      emit keyReleased((QKeyEvent*) theEvent);
-      return true;
-    }
-  }
-  return ModuleBase_ModelWidget::eventFilter(theObject, theEvent);
-}
-
 bool ModuleBase_WidgetPoint2D::initFromPrevious(ObjectPtr theObject)
 {
   if (myOptionParam.length() == 0)
index 0151d14552be491a033517f70f01eb71fe7ee779..29d65a7b23288511f351566c41cdd561c0f26b5f 100644 (file)
@@ -53,11 +53,6 @@ Q_OBJECT
   /// \return a control list
   virtual QList<QWidget*> getControls() const;
 
-  /// Process key release envent on the widget spin box controls
-  /// \param theObject the object where the event happens
-  /// \param theEvent the processed event
-  virtual bool eventFilter(QObject *theObject, QEvent *theEvent);
-
   bool initFromPrevious(ObjectPtr theObject);
 
 signals:
index 8f0c1324f5d2daf943468e4dc29c39be308e0511..f5b5af3b1023fb98326f9317d5fe6ac92b61bce4 100644 (file)
@@ -207,18 +207,6 @@ void ModuleBase_WidgetSelector::updateSelectionName()
     myTextLine->setText("");
 }
 
-//********************************************************************
-bool ModuleBase_WidgetSelector::eventFilter(QObject* theObj, QEvent* theEvent)
-{
-  if (theObj == myTextLine) {
-    //if (theEvent->type() == QEvent::Polish) {
-    //  myActivateBtn->setChecked(myActivateOnStart);
-    //  onSelectionChanged();
-    //}
-  }
-  return ModuleBase_ModelWidget::eventFilter(theObj, theEvent);
-}
-
 //********************************************************************
 void ModuleBase_WidgetSelector::enableOthersControls(bool toEnable) const
 {
index 5973c520a143852d2e1df90b2e20317e61a32fef..e39f97f32b0943ea790c917ae43d0e7bf9ee5c27 100644 (file)
@@ -60,9 +60,6 @@ Q_OBJECT
   /// Activate or deactivate selection
   void activateSelection(bool toActivate);
 
- protected:
-  bool eventFilter(QObject* theObj, QEvent* theEvent);
-
  private slots:
   void onSelectionChanged();
 
index 0bfd4a4bcbc0c8ba3f0982ec601c9979dd67ba16..759356cd24b40c0530f00ff45977d5af9600c7f7 100644 (file)
@@ -184,7 +184,7 @@ void PartSet_OperationFeatureCreate::onWidgetActivated(ModuleBase_ModelWidget* t
   }
 }
 
-bool PartSet_OperationFeatureCreate::keyReleased(const int theKey)
+void PartSet_OperationFeatureCreate::keyReleased(const int theKey)
 {
   switch (theKey) {
     case Qt::Key_Return:
@@ -195,16 +195,14 @@ bool PartSet_OperationFeatureCreate::keyReleased(const int theKey)
       }
     }
       break;
-    case Qt::Key_Escape: {
-      if (!commit()) {
-        abort();
-      }
-    }
-      break;
     default:
       break;
   }
-  return true;
+}
+
+void PartSet_OperationFeatureCreate::activateNextToCurrentWidget()
+{
+  emit activateNextWidget(myActiveWidget);
 }
 
 void PartSet_OperationFeatureCreate::startOperation()
index 6fcadf5c0aee948b1118252169a4ba6078eb7143..07dd0eab52e127d07cb1d180ebd9485c1c85a75e 100644 (file)
@@ -71,7 +71,9 @@ Q_OBJECT
   virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView);
   /// Processes the key pressed in the view
   /// \param theKey a key value
-  virtual bool keyReleased(const int theKey);
+  virtual void keyReleased(const int theKey);
+
+  virtual void activateNextToCurrentWidget();
 
  public slots:
   /// Slots which listen the mode widget activation
index 6524fc215cf0f094ef284af832bcd88eee65356f..7a16b92405ee559a0fda5f0009e1e0970e8f6193 100644 (file)
@@ -161,15 +161,6 @@ void PartSet_OperationFeatureEdit::mouseDoubleClick(
   }
 }
 
-bool PartSet_OperationFeatureEdit::keyReleased(const int theKey)
-{
-  if (theKey == Qt::Key_Return || theKey == Qt::Key_Enter) {
-    commit();
-    return true;
-  }
-  return PartSet_OperationSketchBase::keyReleased(theKey);
-}
-
 void PartSet_OperationFeatureEdit::startOperation()
 {
   PartSet_OperationSketchBase::startOperation();
index 0f7ed18c83b36eb63d827a7ecaa9291930529871..7bdb6aee29cb67eba2e24a1cc91c729a724d84bc 100644 (file)
@@ -111,10 +111,6 @@ Q_OBJECT
                                 const std::list<ModuleBase_ViewerPrs>& theSelected,
                                 const std::list<ModuleBase_ViewerPrs>& theHighlighted);
 
-  /// Processes the key pressed in the view
-  /// \param theKey a key value
-  virtual bool keyReleased(const int theKey);
-
  protected:
   /// \brief Virtual method called when operation is started
   /// Virtual method called when operation started (see start() method for more description)
index 3a5060d8cda0538d3f8c7f90b36c4c85e42980aa..b8e43d7ea0ac8d07bd6a8b61f81869643fc0485a 100644 (file)
@@ -48,6 +48,18 @@ QStringList XGUI_OperationMgr::operationList()
   return result;
 }
 
+bool XGUI_OperationMgr::eventFilter(QObject *theObject, QEvent *theEvent)
+{
+  if (theEvent->type() == QEvent::KeyRelease) {
+    QKeyEvent* aKeyEvent = dynamic_cast<QKeyEvent*>(theEvent);
+    if(aKeyEvent) {
+      onKeyReleased(aKeyEvent);
+      return true;
+    }
+  }
+  return QObject::eventFilter(theObject, theEvent);
+}
+
 bool XGUI_OperationMgr::startOperation(ModuleBase_Operation* theOperation)
 {
   if (!canStartOperation(theOperation))
@@ -106,25 +118,13 @@ void XGUI_OperationMgr::onValidateOperation()
   validateOperation(currentOperation());
 }
 
-bool XGUI_OperationMgr::eventFilter(QObject *theObject, QEvent *theEvent)
-{
-  if (theEvent->type() == QEvent::KeyRelease) {
-    QKeyEvent* aKeyEvent = dynamic_cast<QKeyEvent*>(theEvent);
-    // TODO: this is Escape button processing when the property panel has empty content,
-    // but the operation should be stopped by the Enter has been clicked
-    if(aKeyEvent) {
-      onKeyReleased(aKeyEvent);
-      return true;
-    }
-  }
-  return QObject::eventFilter(theObject, theEvent);
-}
-
-void XGUI_OperationMgr::commitOperation()
+bool XGUI_OperationMgr::commitOperation()
 {
   if (validateOperation(currentOperation())) {
     onCommitOperation();
+    return true;
   }
+  return false;
 }
 
 void XGUI_OperationMgr::resumeOperation(ModuleBase_Operation* theOperation)
@@ -154,7 +154,6 @@ bool XGUI_OperationMgr::canStartOperation(ModuleBase_Operation* theOperation)
 void XGUI_OperationMgr::onCommitOperation()
 {
   ModuleBase_Operation* anOperation = currentOperation();
-  anOperation->onWidgetActivated(NULL);
   if (anOperation)
     anOperation->commit();
 }
@@ -169,6 +168,8 @@ void XGUI_OperationMgr::onAbortOperation()
 bool XGUI_OperationMgr::canAbortOperation()
 {
   ModuleBase_Operation* anOperation = currentOperation();
+  if(operationsCount() > 1) //in case of nested (sketch) operation no confirmation needed
+    return true;
   if (anOperation && anOperation->isModified()) {
     QString aMessage = tr("%1 operation will be aborted.").arg(anOperation->id());
     int anAnswer = QMessageBox::question(qApp->activeWindow(),
@@ -212,24 +213,27 @@ void XGUI_OperationMgr::onOperationStopped()
 
 void XGUI_OperationMgr::onKeyReleased(QKeyEvent* theEvent)
 {
+  // Let the manager decide what to do with the given key combination.
   ModuleBase_Operation* anOperation = currentOperation();
-  if (anOperation) {
-    bool isFinished = anOperation->keyReleased(theEvent->key());
-    if(isFinished)
-      return;
+  if(anOperation) {
+    anOperation->activateNextToCurrentWidget();
   }
-  // Let the manager decide what to do with the given key combination.
+  bool isRestart = false;
   switch (theEvent->key()) {
-    case Qt::Key_Escape:
+    case Qt::Key_Escape: {
       onAbortOperation();
+    }
       break;
     case Qt::Key_Return:
-    case Qt::Key_Enter:
+    case Qt::Key_Enter: {
       commitOperation();
+    }
       break;
     default:
       break;
   }
+  if(anOperation)
+    anOperation->keyReleased(theEvent->key());
 }
 
 void XGUI_OperationMgr::onWidgetActivated(ModuleBase_ModelWidget* theWidget)
index 954f61e88327c1a95b17b8bbbffe3ff67a8b5fde..b19fcefacacac4e6e22fd757b6be0ec6a6f3cf2b 100644 (file)
@@ -78,7 +78,7 @@ signals:
  protected:
 
   /// Commits the current operatin if it is valid
-  void commitOperation();
+  bool commitOperation();
   /// Sets the current operation or NULL
   /// \param theOperation the started operation
   /// \param isCheckBeforeStart the flag whether to check whether the operation can be started
@@ -99,11 +99,7 @@ signals:
   /// Returns true if the operation can be aborted
   bool canAbortOperation();
 
- protected slots:
-  /// Slot that is called by an operation stop. Removes the stopped operation form the stack.
-  /// If there is a suspended operation, restart it.
-  void onOperationStopped();
-
+ public slots:
   /// SLOT, that is called by the key in the property panel is clicked.
   /// \param theName the attribute name
   /// \param theEvent the mouse event
@@ -113,6 +109,11 @@ signals:
   /// \param theWidget an activated widget
   void onWidgetActivated(ModuleBase_ModelWidget* theWidget);
 
+  protected slots:
+  /// Slot that is called by an operation stop. Removes the stopped operation form the stack.
+  /// If there is a suspended operation, restart it.
+  void onOperationStopped();
+
  private:
   typedef QList<ModuleBase_Operation*> Operations;  ///< definition for a list of operations
   Operations myOperations;  ///< a stack of started operations. The active operation is on top,
index d6b88d19c9171e29cb6d9f754b1c3532f6e52a84..69408d05c209cb849dc4ff1310c6551a5f79e697 100644 (file)
@@ -84,9 +84,7 @@ void XGUI_PropertyPanel::setModelWidgets(const QList<ModuleBase_ModelWidget*>& t
   QList<ModuleBase_ModelWidget*>::const_iterator anIt = theWidgets.begin(), aLast =
       theWidgets.end();
   for (; anIt != aLast; anIt++) {
-    //TODO(sbh): Think how to connect prop panle hotkeys and operations mgr
-    connect(*anIt, SIGNAL(keyReleased(QKeyEvent*)), this,
-            SIGNAL(keyReleased(QKeyEvent*)));
+    connect(*anIt, SIGNAL(keyReleased(QKeyEvent*)), this, SIGNAL(keyReleased(QKeyEvent*)));
 
     connect(*anIt, SIGNAL(focusOutWidget(ModuleBase_ModelWidget*)), this,
             SLOT(onActivateNextWidget(ModuleBase_ModelWidget*)));
index d6ff28170106dca9d63e71dca0c6207f49646826..c292321105817d2fc898a13ab630f8c1f0a2efa4 100644 (file)
@@ -31,7 +31,6 @@ Q_OBJECT
 
   void cleanContent();
 
- protected:
   virtual bool eventFilter(QObject *theObject, QEvent *theEvent);
 
  public slots:
index 0f3fa139cae557e8daeb4cbf4a0a2f58064fbaa2..f3c19f8b36a4e4db55e216769e36f14da068619e 100644 (file)
@@ -940,10 +940,8 @@ void XGUI_Workshop::createDockWidgets()
   connect(aOkBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onCommitOperation()));
   QPushButton* aCancelBtn = myPropertyPanel->findChild<QPushButton*>(XGUI::PROP_PANEL_CANCEL);
   connect(aCancelBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onAbortOperation()));
-//TODO(sbh): KeyReleasedProblem
   connect(myPropertyPanel, SIGNAL(keyReleased(QKeyEvent*)), myOperationMgr,
           SLOT(onKeyReleased(QKeyEvent*)));
-
   connect(myPropertyPanel, SIGNAL(widgetActivated(ModuleBase_ModelWidget*)), myOperationMgr,
           SLOT(onWidgetActivated(ModuleBase_ModelWidget*)));
   connect(myOperationMgr, SIGNAL(activateNextWidget(ModuleBase_ModelWidget*)), myPropertyPanel,