]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Abort operation correction, Cases are: 1. Deselect feature button in ToolBar, 2....
authornds <nds@opencascade.com>
Mon, 24 Aug 2015 09:05:33 +0000 (12:05 +0300)
committernds <nds@opencascade.com>
Mon, 24 Aug 2015 12:51:10 +0000 (15:51 +0300)
src/PartSet/PartSet_Module.cpp
src/XGUI/XGUI_Workshop.cpp

index 03b29dd75a50a4cc255b261bb270f8bd7b171b29..992e821cb038e34b4b7d526b1590afd91273d137 100755 (executable)
@@ -659,24 +659,20 @@ bool PartSet_Module::deleteObjects()
 
 void PartSet_Module::onFeatureTriggered()
 {
-  SessionPtr aMgr = ModelAPI_Session::get();
-  // 1. check whether the delete should be processed in the module
-  ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
-  bool isNestedOp = PartSet_SketcherMgr::isNestedCreateOperation(anOperation);
-  if (isNestedOp) {
-    // in case if in the viewer nothing is displayed, the create operation should not be
-    // comitted even if all values of the feature are initialized
-    if (!mySketchMgr->canDisplayCurrentCreatedFeature()) {
-      QAction* aCmd = dynamic_cast<QAction*>(sender());
-      //Do nothing on uncheck
-      if (aCmd->isCheckable() && !aCmd->isChecked())
-        return;
-
-      // the action information should be saved before the operation is aborted
-      // because this abort leads to update command status, which unchecks this action
-      anOperation->abort();
-
-      launchOperation(aCmd->data().toString());
+  QAction* aCmd = dynamic_cast<QAction*>(sender());
+  if (aCmd->isCheckable() && aCmd->isChecked()) {
+    // 1. check whether the delete should be processed in the module
+    ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
+    bool isNestedOp = PartSet_SketcherMgr::isNestedCreateOperation(anOperation);
+    if (isNestedOp) {
+      // in case if in the viewer nothing is displayed, the create operation should not be
+      // comitted even if all values of the feature are initialized
+      if (!mySketchMgr->canDisplayCurrentCreatedFeature()) {
+        // the action information should be saved before the operation is aborted
+        // because this abort leads to update command status, which unchecks this action
+        anOperation->abort();
+        launchOperation(aCmd->data().toString());
+      }
     }
   }
   ModuleBase_IModule::onFeatureTriggered();
index f7c5cfe3b05b04875409feef59ade07a4b90f610..391ed7cdd4c49cd2c9d99141f6d2ef931195ab8d 100644 (file)
@@ -653,12 +653,13 @@ bool XGUI_Workshop::onSaveAs()
 void XGUI_Workshop::onUndo(int theTimes)
 {
   objectBrowser()->treeView()->setCurrentIndex(QModelIndex());
-  if (operationMgr()->canStopOperation())
-    operationMgr()->abortOperation(operationMgr()->currentOperation());
-  else
-    return;
-
   SessionPtr aMgr = ModelAPI_Session::get();
+  if (aMgr->isOperation()) {
+    /// this is important for nested operrations
+    /// when sketch opeation is active, this condition is false and 
+    /// the sketch operation is not aborted
+    operationMgr()->onAbortOperation();
+  }
   for (int i = 0; i < theTimes; ++i) {
     aMgr->undo();
   }
@@ -669,11 +670,6 @@ void XGUI_Workshop::onUndo(int theTimes)
 //******************************************************
 void XGUI_Workshop::onRedo(int theTimes)
 {
-  if (operationMgr()->canStopOperation())
-    operationMgr()->abortOperation(operationMgr()->currentOperation());
-  else
-    return;
-
   // the viewer update should be blocked in order to avoid the features blinking. For the created
   // feature a results are created, the flush of the created signal caused the viewer redisplay for
   // each created result. After a redisplay signal is flushed. So, the viewer update is blocked until
@@ -682,6 +678,12 @@ void XGUI_Workshop::onRedo(int theTimes)
 
   objectBrowser()->treeView()->setCurrentIndex(QModelIndex());
   SessionPtr aMgr = ModelAPI_Session::get();
+  if (aMgr->isOperation()) {
+    /// this is important for nested operrations
+    /// when sketch opeation is active, this condition is false and 
+    /// the sketch operation is not aborted
+    operationMgr()->onAbortOperation();
+  }
   for (int i = 0; i < theTimes; ++i) {
     aMgr->redo();
   }