FreeCAD: staging 6cbbc39f

Author Committer Branch Timestamp Parent
Zheng, Lei Zheng, Lei staging 2019-06-28 09:45:27 staging efdb4658
Changeset App: transaction related API changes

Introduce a new concept of transaction ID. Each transaction must be
unique inside the document. Multiple transactions from different
documents can be grouped together with the same transaction ID.
This makes it possible to undo/redo single operation that contains
changes from multiple documents due to external linking.

Application:

* get/set/closeActiveTransaction() is used to setup potential
  transactions with a given name. The transaction is only created when
  there is actual changes. If objects from multiple documents are
  changed under the same active transaction, they will have the same
  trasnaction ID, and can be undo/redo togtether later.

* signalUndo/signalRedo, new signals triggered once after an undo/redo
  operation. Unlike signalUndo/RedoDocument, these signals will only be
  triggered once even if there may be multiple documents involved during
  undo/redo.

* signal(Before)CloseTransaction, new signals triggered before/after an
  actual transaction is created or aborted.

AutoTransaction:

* Helper class to enable automatic management of transactions. See class
  document for more details. This class will be used by Gui::Command
  in later patches to allow better automation of transactions in
  command.

Document:

* open/commit/abortTransaction() are now redirected to call
  Application::get/set/closeActiveTransaction() instead.

* _openTransaction() is added to do the real creation of transaction.

* _checkTransaction() is modified to create transaction on actual change
  of any property.

* getTransactionID() is used to find out the position of a transaction
  with a given ID. When triggering undo in external document, it may be
  necessary to perform multi-step undo/redo in order to match for the
  transaction ID.

Transaction/TransactionObject:

* Various changes for the new transaction ID concept.

* Support undo/redo add/remove dynamic property
mod - src/App/Application.cpp Diff File
mod - src/App/Application.h Diff File
mod - src/App/ApplicationPy.cpp Diff File
mod - src/App/Document.cpp Diff File
mod - src/App/Document.h Diff File
mod - src/App/DocumentPy.xml Diff File
mod - src/App/DocumentPyImp.cpp Diff File
mod - src/App/TransactionalObject.cpp Diff File
mod - src/App/TransactionalObject.h Diff File
mod - src/App/Transactions.cpp Diff File
mod - src/App/Transactions.h Diff File