From b52f67f740db0c30668e9e2989ee5c3f80f6e196 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 21 Dec 2012 14:51:44 +0100 Subject: [PATCH] 0000917: Task watcher doesn't update on object creation/destruction --- src/App/Application.cpp | 11 +++++++++++ src/App/Application.h | 6 ++++++ src/App/Document.cpp | 6 ++++++ src/App/Document.h | 4 ++++ src/Gui/TaskView/TaskView.cpp | 17 +++++++++++++++++ src/Gui/TaskView/TaskView.h | 4 ++++ 6 files changed, 48 insertions(+) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index b8ca0f770..a0f5a0685 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -284,6 +284,8 @@ Document* Application::newDocument(const char * Name, const char * UserName) _pActiveDoc->signalChangedObject.connect(boost::bind(&App::Application::slotChangedObject, this, _1, _2)); _pActiveDoc->signalRenamedObject.connect(boost::bind(&App::Application::slotRenamedObject, this, _1)); _pActiveDoc->signalActivatedObject.connect(boost::bind(&App::Application::slotActivatedObject, this, _1)); + _pActiveDoc->signalUndo.connect(boost::bind(&App::Application::slotUndoDocument, this, _1)); + _pActiveDoc->signalRedo.connect(boost::bind(&App::Application::slotRedoDocument, this, _1)); // make sure that the active document is set in case no GUI is up { @@ -827,6 +829,15 @@ void Application::slotActivatedObject(const App::DocumentObject&O) this->signalActivatedObject(O); } +void Application::slotUndoDocument(const App::Document& d) +{ + this->signalUndoDocument(d); +} + +void Application::slotRedoDocument(const App::Document& d) +{ + this->signalRedoDocument(d); +} //************************************************************************** // Init, Destruct and singleton diff --git a/src/App/Application.h b/src/App/Application.h index 00099e0ee..1e44ee776 100644 --- a/src/App/Application.h +++ b/src/App/Application.h @@ -116,6 +116,10 @@ public: boost::signal signalStartRestoreDocument; /// signal on restoring Document boost::signal signalFinishRestoreDocument; + /// signal on undo in document + boost::signal signalUndoDocument; + /// signal on redo in document + boost::signal signalRedoDocument; //@} @@ -240,6 +244,8 @@ protected: void slotChangedObject(const App::DocumentObject&, const App::Property& Prop); void slotRenamedObject(const App::DocumentObject&); void slotActivatedObject(const App::DocumentObject&); + void slotUndoDocument(const App::Document&); + void slotRedoDocument(const App::Document&); //@} private: diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 5a0b15383..8862341e7 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -239,6 +239,9 @@ bool Document::undo(void) delete mUndoTransactions.back(); mUndoTransactions.pop_back(); + + signalUndo(*this); + return true; } return false; @@ -263,6 +266,9 @@ bool Document::redo(void) delete mRedoTransactions.back(); mRedoTransactions.pop_back(); + + signalRedo(*this); + return true; } return false; diff --git a/src/App/Document.h b/src/App/Document.h index a5eec2ddf..ce662b588 100644 --- a/src/App/Document.h +++ b/src/App/Document.h @@ -92,6 +92,10 @@ public: boost::signal signalRenamedObject; /// signal on activated Object boost::signal signalActivatedObject; + /// signal on undo + boost::signal signalUndo; + /// signal on redo + boost::signal signalRedo; /** signal on load/save document * this signal is given when the document gets streamed. * you can use this hook to write additional information in diff --git a/src/Gui/TaskView/TaskView.cpp b/src/Gui/TaskView/TaskView.cpp index e9551fb5f..d5f647809 100644 --- a/src/Gui/TaskView/TaskView.cpp +++ b/src/Gui/TaskView/TaskView.cpp @@ -204,6 +204,12 @@ TaskView::TaskView(QWidget *parent) connectApplicationDeleteDocument = App::GetApplication().signalDeletedDocument.connect (boost::bind(&Gui::TaskView::TaskView::slotDeletedDocument, this)); + connectApplicationUndoDocument = + App::GetApplication().signalUndoDocument.connect + (boost::bind(&Gui::TaskView::TaskView::slotUndoDocument, this, _1)); + connectApplicationRedoDocument = + App::GetApplication().signalRedoDocument.connect + (boost::bind(&Gui::TaskView::TaskView::slotRedoDocument, this, _1)); } TaskView::~TaskView() @@ -259,6 +265,17 @@ void TaskView::slotDeletedDocument() updateWatcher(); } +void TaskView::slotUndoDocument(const App::Document&) +{ + if (!ActiveDialog) + updateWatcher(); +} + +void TaskView::slotRedoDocument(const App::Document&) +{ + if (!ActiveDialog) + updateWatcher(); +} /// @cond DOXERR void TaskView::OnChange(Gui::SelectionSingleton::SubjectType &rCaller, diff --git a/src/Gui/TaskView/TaskView.h b/src/Gui/TaskView/TaskView.h index 6d0d2c6c3..9b388d5a2 100644 --- a/src/Gui/TaskView/TaskView.h +++ b/src/Gui/TaskView/TaskView.h @@ -127,6 +127,8 @@ protected: void slotActiveDocument(const App::Document&); void slotDeletedDocument(); + void slotUndoDocument(const App::Document&); + void slotRedoDocument(const App::Document&); std::vector ActiveWatcher; @@ -136,6 +138,8 @@ protected: Connection connectApplicationActiveDocument; Connection connectApplicationDeleteDocument; + Connection connectApplicationUndoDocument; + Connection connectApplicationRedoDocument; }; } //namespace TaskView