From da5270131c907823b7a7173de9f2793cf12d5305 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Tue, 9 Jun 2015 17:18:21 +0200 Subject: [PATCH] Gui New Feature: Gui::Document support for App::Document undo and redo signals ========================================================================== It defines new slots connected to App::Document's signalUndo/signalRedo, which triggers Gui::Document's signalUndoDocument and signalRedoDocument signals. setModified is not executed upon redo/undo, as this is already done on modification of the properties if properties were modified, and if there were not, no setModified is needed anyway. --- src/Gui/Document.cpp | 25 +++++++++++++++++++++++++ src/Gui/Document.h | 7 ++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index a77f04aef..a6bf27956 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -96,6 +96,8 @@ struct DocumentP Connection connectFinishLoadDocument; Connection connectExportObjects; Connection connectImportObjects; + Connection connectUndoDocument; + Connection connectRedoDocument; }; } // namespace Gui @@ -142,6 +144,11 @@ Document::Document(App::Document* pcDocument,Application * app) (boost::bind(&Gui::Document::exportObjects, this, _1, _2)); d->connectImportObjects = pcDocument->signalImportViewObjects.connect (boost::bind(&Gui::Document::importObjects, this, _1, _2, _3)); + + d->connectUndoDocument = pcDocument->signalUndo.connect + (boost::bind(&Gui::Document::slotUndoDocument, this, _1)); + d->connectRedoDocument = pcDocument->signalRedo.connect + (boost::bind(&Gui::Document::slotRedoDocument, this, _1)); // pointer to the python class // NOTE: As this Python object doesn't get returned to the interpreter we @@ -171,6 +178,8 @@ Document::~Document() d->connectFinishLoadDocument.disconnect(); d->connectExportObjects.disconnect(); d->connectImportObjects.disconnect(); + d->connectUndoDocument.disconnect(); + d->connectRedoDocument.disconnect(); // e.g. if document gets closed from within a Python command d->_isClosing = true; @@ -535,6 +544,22 @@ void Document::slotActivatedObject(const App::DocumentObject& Obj) } } +void Document::slotUndoDocument(const App::Document& doc) +{ + if (d->_pcDocument != &doc) + return; + + signalUndoDocument(*this); +} + +void Document::slotRedoDocument(const App::Document& doc) +{ + if (d->_pcDocument != &doc) + return; + + signalRedoDocument(*this); +} + void Document::setModified(bool b) { d->_isModified = b; diff --git a/src/Gui/Document.h b/src/Gui/Document.h index 3e985c498..936c4fe43 100644 --- a/src/Gui/Document.h +++ b/src/Gui/Document.h @@ -77,6 +77,8 @@ protected: void slotActivatedObject(const App::DocumentObject&); void slotStartRestoreDocument(const App::Document&); void slotFinishRestoreDocument(const App::Document&); + void slotUndoDocument(const App::Document&); + void slotRedoDocument(const App::Document&); //@} public: @@ -105,7 +107,10 @@ public: /// signal on changed Object, the 2nd argument is the highlite mode to use mutable boost::signal signalExpandObject; - + /// signal on undo Document + mutable boost::signal signalUndoDocument; + /// signal on redo Document + mutable boost::signal signalRedoDocument; //@} /** @name I/O of the document */