changeset 262:77fdab5b5d6e am-2

cleanup + todos
author am@osimis.io
date Tue, 17 Jul 2018 18:28:12 +0200
parents 58ad26032bd6
children 6b98ac45aaee
files Framework/Layers/LayerSourceBase.cpp Framework/SmartLoader.cpp Framework/Toolbox/OrthancSlicesLoader.h
diffstat 3 files changed, 18 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/Framework/Layers/LayerSourceBase.cpp	Tue Jul 17 14:44:26 2018 +0200
+++ b/Framework/Layers/LayerSourceBase.cpp	Tue Jul 17 18:28:12 2018 +0200
@@ -25,33 +25,6 @@
 
 namespace OrthancStone
 {
-//  namespace
-//  {
-//    class LayerReadyFunctor : public boost::noncopyable
-//    {
-//    private:
-//      std::auto_ptr<ILayerRenderer>  layer_;
-//      const CoordinateSystem3D&      slice_;
-//      bool                           isError_;
-      
-//    public:
-//      LayerReadyFunctor(ILayerRenderer* layer,
-//                        const CoordinateSystem3D& slice,
-//                        bool isError) :
-//        layer_(layer),
-//        slice_(slice),
-//        isError_(isError)
-//      {
-//      }
-
-//      void operator() (ILayerSource::IObserver& observer,
-//                       const ILayerSource& source)
-//      {
-//        observer.NotifyLayerReady(layer_, source, slice_, isError_);
-//      }
-//    };
-//  }
-
   void LayerSourceBase::NotifyGeometryReady()
   {
     EmitMessage(IMessage(MessageType_GeometryReady));
--- a/Framework/SmartLoader.cpp	Tue Jul 17 14:44:26 2018 +0200
+++ b/Framework/SmartLoader.cpp	Tue Jul 17 18:28:12 2018 +0200
@@ -33,12 +33,29 @@
 
   void SmartLoader::HandleMessage(IObservable& from, const IMessage& message)
   {
+    switch (message.GetType()) {
+    case MessageType_SliceGeometryReady:
+      // TODO keep track of objects that have been loaded already
+      break;
+    case MessageType_SliceImageReady:
+      // TODO keep track of objects that have been loaded already
+      break;
+    default:
+      VLOG("unhandled message type" << message.GetType());
+    }
+
     // forward messages to its own observers
     IObservable::broker_.EmitMessage(from, IObservable::observers_, message);
   }
 
   ILayerSource* SmartLoader::GetFrame(const std::string& instanceId, unsigned int frame)
   {
+    // TODO: check if this frame has already been loaded or is already being loaded.
+    // - if already loaded: create a "clone" that will emit the GeometryReady/ImageReady messages "immediately"
+    //   (it can not be immediate because Observers needs to register first and this is done after this method returns)
+    // - if currently loading, we need to return an object that will observe the existing LayerSource and forward
+    //   the messages to its observables
+    // in both cases, we must be carefull about objects lifecycle !!!
     std::auto_ptr<OrthancFrameLayerSource> layerSource (new OrthancFrameLayerSource(IObserver::broker_, webService_));
     layerSource->SetImageQuality(imageQuality_);
     layerSource->RegisterObserver(*this);
--- a/Framework/Toolbox/OrthancSlicesLoader.h	Tue Jul 17 14:44:26 2018 +0200
+++ b/Framework/Toolbox/OrthancSlicesLoader.h	Tue Jul 17 18:28:12 2018 +0200
@@ -125,7 +125,7 @@
 
     boost::shared_ptr<WebCallback>  webCallback_;  // This is a PImpl pattern
 
-    ISliceLoaderObserver&    userCallback_;
+    ISliceLoaderObserver&    userCallback_; // TODO: instead of passing a userCallback, use the generic messages
     IWebService&  orthanc_;
     State         state_;
     SlicesSorter  slices_;