]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #368 move constraint problem
authornds <natalia.donis@opencascade.com>
Wed, 28 Jan 2015 06:30:04 +0000 (09:30 +0300)
committernds <natalia.donis@opencascade.com>
Wed, 28 Jan 2015 06:30:04 +0000 (09:30 +0300)
The operation should be applyed if the apply state is true in the operation manager, otherwise, it is aborted.
The isOkEnabled, setOkEnabled methods should not be avaialabe in the property panel because this state is updated according to operation manager state by workshop object.
canAbortOperation is renamed to canStopOperation, because it is possible that the given operation is commited or aborted.

src/ModuleBase/ModuleBase_IPropertyPanel.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_WidgetPoint2d.cpp
src/PartSet/PartSet_WidgetPoint2dDistance.cpp
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 224691890ed8d4eae59f5a69f6e87e5c72337053..22648e99806486e6f98a69384f5c25c4ca56bec8 100644 (file)
@@ -41,13 +41,6 @@ public:
   /// \return State of editing mode flag
   bool isEditingMode() const { return myIsEditing; }
 
-  /// Set Enable/Disable state of Ok button
-  /// \param theEnabled Enable/Disable state of Ok button
-  virtual void setOkEnabled(bool theEnabled) = 0;
-
-  /// \return Enable/disable state of Ok button
-  virtual bool isOkEnabled() const = 0;
-
   /// Set Enable/Disable state of Cancel button
   /// \param theEnabled Enable/Disable state of Cancel button
   virtual void setCancelEnabled(bool theEnabled) = 0;
index 66a4e52dafb94081b4974c60a0159406c1b2c293..c0ea09cd9a950e132fbc553375d3b07e8ef7ff1c 100644 (file)
@@ -212,7 +212,7 @@ void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation)
           aPnt2dWgt->setPoint(aPoint->x(), aPoint->y());
           PartSet_Tools::setConstraints(mySketchMgr->activeSketch(), theOperation->feature(), 
             aWgt->attributeID(), aPoint->x(), aPoint->y());
-          theOperation->propertyPanel()->activateNextWidget(aPnt2dWgt);
+          aPanel->activateNextWidget(aPnt2dWgt);
         }
       }
     }
index 249fd9a0e7fb2395e44e6f3dfe99aa7117015648..1e061643c10d3e882968a739c3c0219ce2c2fe73 100644 (file)
@@ -12,7 +12,6 @@
 #include <XGUI_ModuleConnector.h>
 #include <XGUI_SelectionMgr.h>
 #include <XGUI_Selection.h>
-#include <XGUI_PropertyPanel.h>
 #include <XGUI_OperationMgr.h>
 
 #include <ModuleBase_DoubleSpinBox.h>
@@ -285,7 +284,7 @@ void PartSet_WidgetPoint2D::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEv
   // the Ok button should be disabled in the property panel by moving the mouse point in the viewer
   // this leads that the user does not try to click Ok and it avoids an incorrect situation that the 
   // line is moved to the cursor to the Ok button
-  myWorkshop->propertyPanel()->setOkEnabled(false);
+  myWorkshop->operationMgr()->setApplyEnabled(false);
 
   gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView());
 
index b67ca1413cc802daa5a97e0bd20d731b7c635b97..c3cba967bb8490347938c04084fe4779876bc915 100644 (file)
@@ -94,7 +94,7 @@ void PartSet_WidgetPoint2dDistance::onMouseRelease(ModuleBase_IViewWindow* theWn
 void PartSet_WidgetPoint2dDistance::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
 {
   myWorkshop->operationMgr()->setLockValidating(true);
-  myWorkshop->propertyPanel()->setOkEnabled(false);
+  myWorkshop->operationMgr()->setApplyEnabled(false);
 
   gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView());
 
index a8f68277b5aa2266d32b6cb4f4d6c4b33730a9d8..859c0da92888aca8f62c4198b75b1cad1b00aefb 100644 (file)
@@ -140,11 +140,38 @@ void XGUI_OperationMgr::onValidateOperation()
     return;
   ModuleBase_Operation* anOperation = currentOperation();
   if(anOperation && (!myIsValidationLock)) {
-    bool isValid = anOperation->isValid();
-    emit operationValidated(isValid);
+    setApplyEnabled(anOperation->isValid());
   }
 }
 
+void XGUI_OperationMgr::setApplyEnabled(const bool theEnabled)
+{
+  myIsApplyEnabled = theEnabled;
+  emit applyEnableChanged(theEnabled);
+}
+
+bool XGUI_OperationMgr::isApplyEnabled() const
+{
+  return myIsApplyEnabled;
+}
+
+bool XGUI_OperationMgr::canStopOperation()
+{
+  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(),
+                                         tr("Abort operation"),
+                                         aMessage,
+                                         QMessageBox::Ok | QMessageBox::Cancel,
+                                         QMessageBox::Cancel);
+    return anAnswer == QMessageBox::Ok;
+  }
+  return true;
+}
+
 bool XGUI_OperationMgr::commitOperation()
 {
   if (hasOperation() && currentOperation()->isValid()) {
@@ -165,8 +192,11 @@ bool XGUI_OperationMgr::canStartOperation(QString theId)
   ModuleBase_Operation* aCurrentOp = currentOperation();
   if (aCurrentOp) {
     if (!aCurrentOp->isGranted(theId)) {
-      if (canAbortOperation()) {
-        aCurrentOp->abort();
+      if (canStopOperation()) {
+        if (myIsApplyEnabled)
+          aCurrentOp->commit();
+        else
+          aCurrentOp->abort();
       } else {
         aCanStart = false;
       }
@@ -185,28 +215,11 @@ void XGUI_OperationMgr::onCommitOperation()
 
 void XGUI_OperationMgr::onAbortOperation()
 {
-  if (hasOperation() && canAbortOperation()) {
+  if (hasOperation() && canStopOperation()) {
     currentOperation()->abort();
   }
 }
 
-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(),
-                                         tr("Abort operation"),
-                                         aMessage,
-                                         QMessageBox::Ok | QMessageBox::Cancel,
-                                         QMessageBox::Cancel);
-    return anAnswer == QMessageBox::Ok;
-  }
-  return true;
-}
-
 void XGUI_OperationMgr::onOperationStarted()
 {
   ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
index 1cf7dcefcbbd5fcbb6a5cc6588f24f313d39a979..f5683f81aa5f4b3300397ac42b5a8ea8d9078e30 100644 (file)
@@ -77,11 +77,6 @@ Q_OBJECT
   /// \param theId id of the operation which is going to start
   bool canStartOperation(QString theId);
 
-  bool canStopOperation();
-
-  /// Returns true if the operation can be aborted
-  bool canAbortOperation();
-
   /// Blocking/unblocking enabling of Ok button in property panel.
   /// It is used when operation can not be validated even all attributes are valid
   void setLockValidating(bool toLock) { myIsValidationLock = toLock; }
@@ -89,7 +84,15 @@ Q_OBJECT
   /// Returns state of validation locking
   bool isValidationLocked() const { return myIsValidationLock; }
 
- public slots:
+  /// Sets apply state to the value and emit signal about this state is changed
+  /// \param theEnabled the state value
+  void setApplyEnabled(const bool theEnabled);
+
+  /// Returns enable apply state 
+  /// \return theEnabled a boolean value
+  bool isApplyEnabled() const;
+
+  public slots:
   /// Slot that commits the current operation.
   void onCommitOperation();
   /// Slot that aborts the current operation.
@@ -114,8 +117,8 @@ signals:
   /// Emitted when current operation is aborted
   void operationAborted(ModuleBase_Operation* theOperation);
 
-  /// Signal is emitted after the validate methods calls.
-  void operationValidated(bool);
+  /// Signal is emitted after the apply enable state changed.
+  void applyEnableChanged(bool);
 
   /// Signal is emitted after the current operation is filled with existing preselection.
   void operationActivatedByPreselection();
@@ -125,6 +128,8 @@ signals:
 
 
  protected:
+  /// Returns true if the operation can be aborted
+  bool canStopOperation();
 
   /// Commits the current operatin if it is valid
   bool commitOperation();
@@ -156,6 +161,8 @@ signals:
 
   /// Lock/Unlock access to Ok button in property panel
   bool myIsValidationLock;
+  /// Lock/Unlock access to Ok button in property panel
+  bool myIsApplyEnabled;
 };
 
 #endif
index fc337bc6305a1a2e9cd2753613db5b6a427ef3f4..d5d213691af95176d94067e20b4d9bc414c87c57 100644 (file)
@@ -226,18 +226,6 @@ void XGUI_PropertyPanel::activateWidget(ModuleBase_ModelWidget* theWidget)
     emit noMoreWidgets();
 }
 
-void XGUI_PropertyPanel::setOkEnabled(bool theEnabled)
-{
-  QPushButton* anOkBtn = findChild<QPushButton*>(PROP_PANEL_OK);
-  anOkBtn->setEnabled(theEnabled);
-}
-
-bool XGUI_PropertyPanel::isOkEnabled() const
-{
-  QPushButton* anOkBtn = findChild<QPushButton*>(PROP_PANEL_OK);
-  return anOkBtn->isEnabled();
-}
-
 void XGUI_PropertyPanel::setCancelEnabled(bool theEnabled)
 {
   QPushButton* anCancelBtn = findChild<QPushButton*>(PROP_PANEL_CANCEL);
index 6e89ac0d660ac5b44257bc8066e774fa1d68c3d3..e632fe28d47dee3418d0a5aea74066cf7d7b261c 100644 (file)
@@ -70,13 +70,6 @@ Q_OBJECT
   /// \brief Enable/Disable stretch area in the panel
   void setStretchEnabled(bool isEnabled);
 
-  /// Set Enable/Disable state of Ok button
-  /// \param theEnabled Enable/Disable state of Ok button
-  virtual void setOkEnabled(bool theEnabled);
-
-  /// \return Enable/disable state of Ok button
-  virtual bool isOkEnabled() const;
-
   /// Set Enable/Disable state of Cancel button
   /// \param theEnabled Enable/Disable state of Cancel button
   virtual void setCancelEnabled(bool theEnabled);
index 77acb88d5fb0d6fc6937e72a2d42e3204e38f948..7b234a365de7ce5416e7f0a0d24af7a410d6e226 100644 (file)
@@ -1106,7 +1106,7 @@ void XGUI_Workshop::createDockWidgets()
   connect(aCancelBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onAbortOperation()));
   connect(myPropertyPanel, SIGNAL(keyReleased(QKeyEvent*)), myOperationMgr,
           SLOT(onKeyReleased(QKeyEvent*)));
-  connect(myOperationMgr, SIGNAL(operationValidated(bool)), myPropertyPanel,
+  connect(myOperationMgr, SIGNAL(applyEnableChanged(bool)), myPropertyPanel,
           SLOT(setAcceptEnabled(bool)));
 
 }