Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/ViewportController.cpp @ 858:e3c56d4f863f
GuiAdapter : mouse event routing in SDL + split the undo stack from the
ViewportController for multi-canvas apps + adapted the samples to this change
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 24 Jun 2019 10:31:04 +0200 |
parents | 2b245953b44b |
children | a29c13497557 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/ViewportController.cpp Wed Jun 19 14:12:28 2019 +0200 +++ b/Framework/Scene2DViewport/ViewportController.cpp Mon Jun 24 10:31:04 2019 +0200 @@ -19,6 +19,8 @@ **/ #include "ViewportController.h" + +#include "UndoStack.h" #include "MeasureCommands.h" #include "../StoneException.h" @@ -27,14 +29,49 @@ namespace OrthancStone { - ViewportController::ViewportController(MessageBroker& broker) + ViewportController::ViewportController(boost::weak_ptr<UndoStack> undoStackW, MessageBroker& broker) : IObservable(broker) - , numAppliedCommands_(0) + , undoStackW_(undoStackW) , canvasToSceneFactor_(0.0) { scene_ = boost::make_shared<Scene2D>(); } + boost::shared_ptr<UndoStack> ViewportController::GetUndoStack() + { + return undoStackW_.lock(); + } + + boost::shared_ptr<const UndoStack> ViewportController::GetUndoStack() const + { + return undoStackW_.lock(); + } + + void ViewportController::PushCommand(boost::shared_ptr<TrackerCommand> command) + { + GetUndoStack()->PushCommand(command); + } + + void ViewportController::Undo() + { + GetUndoStack()->Undo(); + } + + void ViewportController::Redo() + { + GetUndoStack()->Redo(); + } + + bool ViewportController::CanUndo() const + { + return GetUndoStack()->CanUndo(); + } + + bool ViewportController::CanRedo() const + { + return GetUndoStack()->CanRedo(); + } + boost::shared_ptr<const Scene2D> ViewportController::GetScene() const { return scene_; @@ -91,42 +128,6 @@ BroadcastMessage(SceneTransformChanged(*this)); } - void ViewportController::PushCommand(boost::shared_ptr<TrackerCommand> command) - { - commandStack_.erase( - commandStack_.begin() + numAppliedCommands_, - commandStack_.end()); - - ORTHANC_ASSERT(std::find(commandStack_.begin(), commandStack_.end(), command) - == commandStack_.end(), "Duplicate command"); - commandStack_.push_back(command); - numAppliedCommands_++; - } - - void ViewportController::Undo() - { - ORTHANC_ASSERT(CanUndo(), ""); - commandStack_[numAppliedCommands_-1]->Undo(); - numAppliedCommands_--; - } - - void ViewportController::Redo() - { - ORTHANC_ASSERT(CanRedo(), ""); - commandStack_[numAppliedCommands_]->Redo(); - numAppliedCommands_++; - } - - bool ViewportController::CanUndo() const - { - return numAppliedCommands_ > 0; - } - - bool ViewportController::CanRedo() const - { - return numAppliedCommands_ < commandStack_.size(); - } - void ViewportController::AddMeasureTool(boost::shared_ptr<MeasureTool> measureTool) { ORTHANC_ASSERT(std::find(measureTools_.begin(), measureTools_.end(), measureTool)