]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix for issue #409 : skip the current operation in the undo list
authormpv <mpv@opencascade.com>
Fri, 27 Feb 2015 08:34:58 +0000 (11:34 +0300)
committermpv <mpv@opencascade.com>
Fri, 27 Feb 2015 08:34:58 +0000 (11:34 +0300)
src/Model/Model_Document.cpp
src/Model/Model_Document.h
src/ModelAPI/ModelAPI_Events.h

index be3489d7bc7687c097a6da5954c4f33fee43f5ba..32ae6102648ffdb3c727c403ae78acb019d19c2b 100644 (file)
@@ -405,7 +405,7 @@ void Model_Document::abortOperation()
     subDoc(*aSubIter)->abortOperation();
 }
 
-bool Model_Document::isOperation()
+bool Model_Document::isOperation() const
 {
   // operation is opened for all documents: no need to check subs
   return myDoc->HasOpenCommand() == Standard_True ;
@@ -495,12 +495,15 @@ void Model_Document::redo()
 std::list<std::string> Model_Document::undoList() const
 {
   std::list<std::string> aResult;
+  // the number of skipped current operations (on undo they will be aborted)
+  int aSkipCurrent = isOperation() ? 1 : 0;
   std::list<Transaction>::const_reverse_iterator aTrIter = myTransactions.crbegin();
   int aNumUndo = myTransactions.size();
   if (!myNestedNum.empty())
     aNumUndo = *myNestedNum.rbegin();
   for( ; aNumUndo > 0; aTrIter++, aNumUndo--) {
-    aResult.push_back(aTrIter->myId);
+    if (aSkipCurrent == 0) aResult.push_back(aTrIter->myId);
+    else aSkipCurrent--;
   }
   return aResult;
 }
index 62bd3ad40710380d92ebddb4c99ac84c967808b4..bffcc81bcf5012b1f32ceec10658c328d3f52394 100644 (file)
@@ -61,7 +61,7 @@ class Model_Document : public ModelAPI_Document
   //! Aborts the operation 
   MODEL_EXPORT virtual void abortOperation();
   //! Returns true if operation has been started, but not yet finished or aborted
-  MODEL_EXPORT virtual bool isOperation();
+  MODEL_EXPORT virtual bool isOperation() const;
   //! Returns true if document was modified (since creation/opening)
   MODEL_EXPORT virtual bool isModified();
 
index f7293bb6dd5c8a270d94a3c890dc346ba1ec8939..96395a997f9407c668521c29ba3624a79c7dfa43 100644 (file)
@@ -141,25 +141,25 @@ public:
 };
 
 /// Message that document (Part, PartSet) was created
-class MODELAPI_EXPORT ModelAPI_DocumentCreatedMessage : public Events_Message
+class ModelAPI_DocumentCreatedMessage : public Events_Message
 {
   DocumentPtr myDocument;
 
  public:
   /// Creates an empty message
-  ModelAPI_DocumentCreatedMessage(const Events_ID theID, const void* theSender = 0);
+  MODELAPI_EXPORT ModelAPI_DocumentCreatedMessage(const Events_ID theID, const void* theSender = 0);
   /// The virtual destructor
-  virtual ~ModelAPI_DocumentCreatedMessage();
+  MODELAPI_EXPORT virtual ~ModelAPI_DocumentCreatedMessage();
 
-  static Events_ID eventId()
+  MODELAPI_EXPORT static Events_ID eventId()
   {
     static const char * MY_DOCUMENT_CREATED_EVENT_ID("DocumentCreated");
     return Events_Loop::eventByName(MY_DOCUMENT_CREATED_EVENT_ID);
   }
 
 
-  DocumentPtr document() const;
-  void setDocument(DocumentPtr theDocument);
+  MODELAPI_EXPORT DocumentPtr document() const;
+  MODELAPI_EXPORT void setDocument(DocumentPtr theDocument);
 };
 
 #endif