diff Framework/Scene2DViewport/ViewportController.cpp @ 727:853e30d17cae

merge
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 21 May 2019 11:45:06 +0200
parents 28b9e3a54200
children c0fcb2757b0a 712ff6ff3c19
line wrap: on
line diff
--- a/Framework/Scene2DViewport/ViewportController.cpp	Tue May 21 11:43:25 2019 +0200
+++ b/Framework/Scene2DViewport/ViewportController.cpp	Tue May 21 11:45:06 2019 +0200
@@ -19,6 +19,7 @@
  **/
 
 #include "ViewportController.h"
+#include "MeasureCommands.h"
 
 #include <Framework/StoneException.h>
 
@@ -30,6 +31,7 @@
 {
   ViewportController::ViewportController(MessageBroker& broker)
     : IObservable(broker)
+    , numAppliedCommands_(0)
   {
     scene_ = boost::make_shared<Scene2D>();
   }
@@ -44,6 +46,19 @@
     throw StoneException(ErrorCode_NotImplemented);
   }
 
+  std::vector<MeasureToolPtr> ViewportController::HitTestMeasureTools(
+    ScenePoint2D p)
+  {
+    std::vector<MeasureToolPtr> ret;
+    
+
+    //for (size_t i = 0; i < measureTools_.size(); ++i)
+    //{
+
+    //}
+    return ret;
+  }
+
   const OrthancStone::AffineTransform2D& ViewportController::GetCanvasToSceneTransform() const
   {
     return scene_->GetCanvasToSceneTransform();
@@ -61,5 +76,62 @@
     BroadcastMessage(SceneTransformChanged(*this));
   }
 
+  void ViewportController::FitContent(
+    unsigned int canvasWidth, unsigned int canvasHeight)
+  {
+    scene_->FitContent(canvasWidth, canvasHeight);
+    BroadcastMessage(SceneTransformChanged(*this));
+  }
+
+  void ViewportController::PushCommand(TrackerCommandPtr 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(MeasureToolPtr measureTool)
+  {
+    ORTHANC_ASSERT(std::find(measureTools_.begin(), measureTools_.end(), measureTool)
+      == measureTools_.end(), "Duplicate measure tool");
+    measureTools_.push_back(measureTool);
+  }
+
+  void ViewportController::RemoveMeasureTool(MeasureToolPtr measureTool)
+  {
+    ORTHANC_ASSERT(std::find(measureTools_.begin(), measureTools_.end(), measureTool)
+      != measureTools_.end(), "Measure tool not found");
+    measureTools_.push_back(measureTool);
+  }
+
 }