diff Applications/Samples/SingleFrameEditorApplication.h @ 336:c7fdc8bac581 am-2

creating GrayscaleBitmapStack
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Oct 2018 19:29:14 +0200
parents c34784e5f299
children c4d4213f095c
line wrap: on
line diff
--- a/Applications/Samples/SingleFrameEditorApplication.h	Thu Oct 18 10:54:46 2018 +0200
+++ b/Applications/Samples/SingleFrameEditorApplication.h	Thu Oct 18 19:29:14 2018 +0200
@@ -24,12 +24,41 @@
 #include "SampleApplicationBase.h"
 
 #include "../../Framework/Layers/OrthancFrameLayerSource.h"
-#include "../../Framework/Widgets/LayerWidget.h"
 
 #include <Core/Logging.h>
 
 namespace OrthancStone
 {
+
+  class GrayscaleBitmapStack :
+    public WorldSceneWidget,
+    public IObservable
+  {
+  public:
+    typedef OriginMessage<MessageType_Widget_GeometryChanged, GrayscaleBitmapStack> GeometryChangedMessage;
+    typedef OriginMessage<MessageType_Widget_ContentChanged, GrayscaleBitmapStack> ContentChangedMessage;
+
+  protected:
+    virtual Extent2D GetSceneExtent()
+    {
+    }
+
+    virtual bool RenderScene(CairoContext& context,
+                             const ViewportGeometry& view)
+    {
+    }
+
+  public:
+    GrayscaleBitmapStack(MessageBroker& broker,
+                         const std::string& name) :
+      WorldSceneWidget(name),
+      IObservable(broker)
+    {
+    }
+  
+  };
+
+  
   namespace Samples
   {
     class SingleFrameEditorApplication :
@@ -94,12 +123,9 @@
         {
           if (statusBar != NULL)
           {
-            Vector p = dynamic_cast<LayerWidget&>(widget).GetSlice().MapSliceToWorldCoordinates(x, y);
-            
             char buf[64];
-            sprintf(buf, "X = %.02f Y = %.02f Z = %.02f (in cm)",
-                    p[0] / 10.0, p[1] / 10.0, p[2] / 10.0);
-            //statusBar->SetMessage(buf);
+            sprintf(buf, "X = %.02f Y = %.02f (in cm)", x / 10.0, y / 10.0);
+            statusBar->SetMessage(buf);
           }
         }
 
@@ -151,9 +177,8 @@
         }
       };
 
-      void OnGeometryChanged(const LayerWidget::GeometryChangedMessage& message)
+      void OnGeometryChanged(const GrayscaleBitmapStack::GeometryChangedMessage& message)
       {
-        mainWidget_->SetSlice(source_->GetSlice(slice_).GetGeometry());
         mainWidget_->FitContent();
       }
       
@@ -205,13 +230,12 @@
         int frame = parameters["frame"].as<unsigned int>();
 
         orthancApiClient_.reset(new OrthancApiClient(IObserver::broker_, context_->GetWebService()));
-        mainWidget_ = new LayerWidget(broker_, "main-widget");
+        mainWidget_ = new GrayscaleBitmapStack(broker_, "main-widget");
 
-        std::auto_ptr<OrthancFrameLayerSource> layer(new OrthancFrameLayerSource(broker_, *orthancApiClient_));
-        source_ = layer.get();
-        layer->LoadFrame(instance, frame);
-        mainWidget_->RegisterObserverCallback(new Callable<SingleFrameEditorApplication, LayerWidget::GeometryChangedMessage>(*this, &SingleFrameEditorApplication::OnGeometryChanged));
-        mainWidget_->AddLayer(layer.release());
+        dynamic_cast<GrayscaleBitmapStack*>(mainWidget_)->RegisterObserverCallback(
+          new Callable<SingleFrameEditorApplication,
+          GrayscaleBitmapStack::GeometryChangedMessage>
+          (*this, &SingleFrameEditorApplication::OnGeometryChanged));
 
         mainWidget_->SetTransmitMouseOver(true);