]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Abort previous operation by Edit of Parameter. Scenario: Create a parameter, start...
authornds <nds@opencascade.com>
Mon, 12 Oct 2015 08:28:26 +0000 (11:28 +0300)
committernds <nds@opencascade.com>
Mon, 12 Oct 2015 08:28:56 +0000 (11:28 +0300)
src/XGUI/XGUI_OperationMgr.cpp
src/XGUI/XGUI_OperationMgr.h

index 2d36b457593a9600dcfa37c0dbca6689b9216178..361547bbfad2fbb9bb492dbd8c7c8903127729e2 100644 (file)
@@ -260,7 +260,7 @@ bool XGUI_OperationMgr::isParentOperationValid() const
 bool XGUI_OperationMgr::canStopOperation(ModuleBase_Operation* theOperation)
 {
   //in case of nested (sketch) operation no confirmation needed
-  if (isGrantedOperation(theOperation))
+  if (isGrantedOperation(theOperation->id()))
     return true;
   if (theOperation && theOperation->isModified()) {
     QString aMessage = tr("%1 operation will be aborted.").arg(theOperation->id());
@@ -288,7 +288,7 @@ void XGUI_OperationMgr::resumeOperation(ModuleBase_Operation* theOperation)
   theOperation->resume();
 }
 
-bool XGUI_OperationMgr::isGrantedOperation(ModuleBase_Operation* theOperation)
+bool XGUI_OperationMgr::isGrantedOperation(const QString& theId)
 {
   bool isGranted = false;
 
@@ -297,14 +297,14 @@ bool XGUI_OperationMgr::isGrantedOperation(ModuleBase_Operation* theOperation)
   ModuleBase_Operation* aPreviousOperation = 0;
   while (anIt.hasPrevious()) {
     ModuleBase_Operation* anOp = anIt.previous();
-    if (anOp == theOperation) {
+    if (anOp->id() == theId) {
       if (anIt.hasPrevious())
         aPreviousOperation = anIt.previous();
       break;
     }
   }
   if (aPreviousOperation)
-    isGranted = aPreviousOperation->isGranted(theOperation->id());
+    isGranted = aPreviousOperation->isGranted(theId);
 
   return isGranted;
 }
@@ -315,8 +315,20 @@ bool XGUI_OperationMgr::canStartOperation(const QString& theId, const bool isAdd
   ModuleBase_Operation* aCurrentOp = currentOperation();
   if (aCurrentOp) {
     bool aGranted = aCurrentOp->isGranted(theId) || isAdditionallyGranted;
-    if (!aGranted) {
-      if (canStopOperation(aCurrentOp)) {
+    // the started operation is granted for the current one,
+    // e.g. current - Sketch, started - Line
+    if (aGranted) {
+      aCanStart = true;
+    }
+    else {
+      if (!isGrantedOperation(theId)) {
+        // the operation is not granted in the current list of operations
+        // e.g. Edit Parameter when Sketch, Line in Sketch is active.
+        aCanStart = abortAllOperations();
+      }
+      else if (canStopOperation(aCurrentOp)) {
+        // the started operation is granted in the parrent operation,
+        // e.g. current - Line in Sketch, started Circle 
         if (myIsApplyEnabled && aCurrentOp->isModified())
           aCurrentOp->commit();
         else
index 5ea3af47cfd2b36fc3013142bbb1ad614f02a901..f6c25a87b439909f5e753dc154c41ac4d78ed4ab 100644 (file)
@@ -170,9 +170,9 @@ protected: // TEMPORARY
   /// Returns whether the parameter operation is granted in relation to the previous operation
   /// in a stack of started operations. It is used in canStopOperation to avoid warning message
   /// when granted operation is aborted, e.g. SketchLine in Sketch
-  /// \param theOperation the started operation
+  /// \param theId id of the operation which is checked
   /// \return boolean result
-  bool isGrantedOperation(ModuleBase_Operation* theOperation);
+  bool isGrantedOperation(const QString& theId);
 
  public slots:
   /// SLOT, that is called by the key in the property panel is clicked.