# HG changeset patch # User am@osimis.io # Date 1531844892 -7200 # Node ID 77fdab5b5d6e95a7009606f1464cb2da7bd8d9ef # Parent 58ad26032bd641644da54853d7f9c7b13992ab91 cleanup + todos diff -r 58ad26032bd6 -r 77fdab5b5d6e Framework/Layers/LayerSourceBase.cpp --- 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 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)); diff -r 58ad26032bd6 -r 77fdab5b5d6e Framework/SmartLoader.cpp --- 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 layerSource (new OrthancFrameLayerSource(IObserver::broker_, webService_)); layerSource->SetImageQuality(imageQuality_); layerSource->RegisterObserver(*this); diff -r 58ad26032bd6 -r 77fdab5b5d6e Framework/Toolbox/OrthancSlicesLoader.h --- 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_; // 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_;