diff Framework/Layers/OrthancFrameLayerSource.cpp @ 266:c9cf95b49a86 am-2

removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
author am@osimis.io
date Tue, 21 Aug 2018 18:14:22 +0200
parents 9afafb192180
children 89d02de83c03
line wrap: on
line diff
--- a/Framework/Layers/OrthancFrameLayerSource.cpp	Tue Aug 21 16:48:25 2018 +0200
+++ b/Framework/Layers/OrthancFrameLayerSource.cpp	Tue Aug 21 18:14:22 2018 +0200
@@ -31,49 +31,55 @@
 
 namespace OrthancStone
 {
-  void OrthancFrameLayerSource::OnSliceGeometryReady(const OrthancSlicesLoader& loader)
+  void OrthancFrameLayerSource::HandleMessage(const IObservable& from, const IMessage& message)
   {
-    if (loader.GetSliceCount() > 0)
+    switch (message.GetType())
     {
-      LayerSourceBase::NotifyGeometryReady();
-    }
-    else
+    case MessageType_SliceGeometryReady:
     {
-      LayerSourceBase::NotifyGeometryError();
-    }
-  }
-
-  void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader& loader)
-  {
-    LayerSourceBase::NotifyGeometryError();
-  }
+      const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from);
+      if (loader.GetSliceCount() > 0)
+      {
+        LayerSourceBase::NotifyGeometryReady();
+      }
+      else
+      {
+        LayerSourceBase::NotifyGeometryError();
+      }
 
-  void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader& loader,
-                                                      unsigned int sliceIndex,
-                                                      const Slice& slice,
-                                                      std::auto_ptr<Orthanc::ImageAccessor>& image,
-                                                      SliceImageQuality quality)
-  {
-    bool isFull = (quality == SliceImageQuality_FullPng || quality == SliceImageQuality_FullPam);
-    LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(image.release(), slice, isFull),
-                                      slice.GetGeometry(), false);
-  }
+    }; break;
+    case MessageType_SliceGeometryError:
+    {
+      const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from);
+      LayerSourceBase::NotifyGeometryError();
+    }; break;
+    case MessageType_SliceImageReady:
+    {
+      const OrthancSlicesLoader::SliceImageReadyMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageReadyMessage&>(message);
+      bool isFull = (msg.effectiveQuality_ == SliceImageQuality_FullPng || msg.effectiveQuality_ == SliceImageQuality_FullPam);
+      LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(msg.image_.release(), msg.slice_, isFull),
+                                        msg.slice_.GetGeometry(), false);
 
-  void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader& loader,
-                                                      unsigned int sliceIndex,
-                                                      const Slice& slice,
-                                                      SliceImageQuality quality)
-  {
-    LayerSourceBase::NotifyLayerReady(NULL, slice.GetGeometry(), true);
+    }; break;
+    case MessageType_SliceImageError:
+    {
+      const OrthancSlicesLoader::SliceImageErrorMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageErrorMessage&>(message);
+      LayerSourceBase::NotifyLayerReady(NULL, msg.slice_.GetGeometry(), true);
+    }; break;
+    default:
+      VLOG("unhandled message type" << message.GetType());
+    }
   }
 
 
   OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) :
     LayerSourceBase(broker),
-    OrthancSlicesLoader::ISliceLoaderObserver(broker),
-    loader_(broker, *this, orthanc),
+    IObserver(broker),
+    //OrthancSlicesLoader::ISliceLoaderObserver(broker),
+    loader_(broker, orthanc),
     quality_(SliceImageQuality_FullPng)
   {
+    loader_.RegisterObserver(*this);
   }