]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix for Issue #375: abort of nested operation problem
authormpv <mpv@opencascade.com>
Thu, 22 Jan 2015 14:11:09 +0000 (17:11 +0300)
committermpv <mpv@opencascade.com>
Thu, 22 Jan 2015 14:11:09 +0000 (17:11 +0300)
src/Model/Model_Document.cpp
src/Model/Model_Document.h

index fb6ebf8e46e9605955054ab3b3d86ed55851fd5e..f1f10b103763dca05342c19888f0d014678b9146 100644 (file)
@@ -370,7 +370,7 @@ void Model_Document::abortOperation()
 {
   if (!myNestedNum.empty() && !myDoc->HasOpenCommand()) {  // abort all what was done in nested
     compactNested();
-    undo();
+    undoInternal(false);
     myDoc->ClearRedos();
     myRedos.clear();
   } else { // abort the current
@@ -418,7 +418,7 @@ bool Model_Document::canUndo()
   return false;
 }
 
-void Model_Document::undo()
+void Model_Document::undoInternal(const bool theWithSubs)
 {
   int aNumTransactions = *myTransactions.rbegin();
   myTransactions.pop_back();
@@ -429,12 +429,19 @@ void Model_Document::undo()
   for(int a = 0; a < aNumTransactions; a++)
     myDoc->Undo();
 
-  synchronizeFeatures(true, true);
-  // undo for all subs
-  const std::set<std::string> aSubs = subDocuments(true);
-  std::set<std::string>::iterator aSubIter = aSubs.begin();
-  for (; aSubIter != aSubs.end(); aSubIter++)
-    subDoc(*aSubIter)->undo();
+  if (theWithSubs) {
+    synchronizeFeatures(true, true);
+    // undo for all subs
+    const std::set<std::string> aSubs = subDocuments(true);
+    std::set<std::string>::iterator aSubIter = aSubs.begin();
+    for (; aSubIter != aSubs.end(); aSubIter++)
+      subDoc(*aSubIter)->undo();
+  }
+}
+
+void Model_Document::undo()
+{
+  undoInternal(true);
 }
 
 bool Model_Document::canRedo()
index 2c9dd21234ad3e434df3609493045b5396fabba9..56490a15c337b60a825b729215da58567411df97 100644 (file)
@@ -189,6 +189,9 @@ class Model_Document : public ModelAPI_Document
   //! Returns all sub documents
   const std::set<std::string> subDocuments(const bool theActivatedOnly) const;
 
+  //! The implementation of undo: with or without recoursive calls in the sub-documents
+  void undoInternal(const bool theWithSubs);
+
   friend class Model_Application;
   friend class Model_Session;
   friend class Model_Update;