From b1953ec4e3a93e63b323e69ac0a1a2d76350094e Mon Sep 17 00:00:00 2001 From: codereader Date: Sat, 1 Jul 2017 18:20:39 +0200 Subject: [PATCH] TraversableNodeSet migrated to use UndoSystem signals --- libs/scene/TraversableNodeSet.cpp | 15 +++++++-------- libs/scene/TraversableNodeSet.h | 14 +++++++++----- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/libs/scene/TraversableNodeSet.cpp b/libs/scene/TraversableNodeSet.cpp index 7f29785e68..80fa78da0b 100644 --- a/libs/scene/TraversableNodeSet.cpp +++ b/libs/scene/TraversableNodeSet.cpp @@ -263,20 +263,19 @@ void TraversableNodeSet::importState(const IUndoMementoPtr& state) if (!_undoInsertBuffer.empty()) { // Register to get notified when the undo operation is complete - GlobalUndoSystem().addObserver(this); + _undoHandler = GlobalUndoSystem().signal_postUndo().connect( + sigc::mem_fun(this, &TraversableNodeSet::onUndoRedoOperationFinished)); + _redoHandler = GlobalUndoSystem().signal_postRedo().connect( + sigc::mem_fun(this, &TraversableNodeSet::onUndoRedoOperationFinished)); } } -void TraversableNodeSet::postUndo() +void TraversableNodeSet::onUndoRedoOperationFinished() { - processInsertBuffer(); - GlobalUndoSystem().removeObserver(this); -} + _undoHandler.disconnect(); + _redoHandler.disconnect(); -void TraversableNodeSet::postRedo() -{ processInsertBuffer(); - GlobalUndoSystem().removeObserver(this); } void TraversableNodeSet::processInsertBuffer() diff --git a/libs/scene/TraversableNodeSet.h b/libs/scene/TraversableNodeSet.h index 40b2f2a04f..f76c9a000c 100644 --- a/libs/scene/TraversableNodeSet.h +++ b/libs/scene/TraversableNodeSet.h @@ -4,6 +4,8 @@ #include "iundo.h" #include #include +#include +#include class IMapFileChangeTracker; @@ -24,7 +26,7 @@ class Node; class TraversableNodeSet : public IUndoable, public boost::noncopyable, - public UndoSystem::Observer + public sigc::trackable { public: typedef std::list NodeList; @@ -40,6 +42,9 @@ class TraversableNodeSet : // A list collecting nodes for insertion in postUndo/postRedo NodeList _undoInsertBuffer; + sigc::connection _undoHandler; + sigc::connection _redoHandler; + public: // Default constructor, creates an empty set TraversableNodeSet(Node& owner); @@ -91,13 +96,12 @@ class TraversableNodeSet : IUndoMementoPtr exportState() const; void importState(const IUndoMementoPtr& state); - // UndoSystem::Observer implementation - void postUndo(); - void postRedo(); - void setRenderSystem(const RenderSystemPtr& renderSystem); private: + // UndoSystem event handler + void onUndoRedoOperationFinished(); + // Sends the current state to the undosystem void undoSave();