+
+ // after redo of all sub-documents to avoid updates on not-modified data (issue 370)
+ synchronizeFeatures(true, true, isRoot());
+}
+
+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--) {
+ if (aSkipCurrent == 0) aResult.push_back(aTrIter->myId);
+ else aSkipCurrent--;
+ }
+ return aResult;
+}
+
+std::list<std::string> Model_Document::redoList() const
+{
+ std::list<std::string> aResult;
+ std::list<Transaction>::const_reverse_iterator aTrIter = myRedos.crbegin();
+ for( ; aTrIter != myRedos.crend(); aTrIter++) {
+ aResult.push_back(aTrIter->myId);
+ }
+ return aResult;
+}
+
+void Model_Document::operationId(const std::string& theId)
+{
+ myTransactions.rbegin()->myId = theId;