Mercurial > hg > orthanc-stone
diff Framework/Toolbox/OrthancSlicesLoader.h @ 247:3d523c9a8f0d am
trying to use boost::signals2 even more.
author | am@osimis.io |
---|---|
date | Mon, 02 Jul 2018 12:32:02 +0200 |
parents | 7a031ac16b2d |
children |
line wrap: on
line diff
--- a/Framework/Toolbox/OrthancSlicesLoader.h Tue Jun 26 13:55:17 2018 +0200 +++ b/Framework/Toolbox/OrthancSlicesLoader.h Mon Jul 02 12:32:02 2018 +0200 @@ -26,16 +26,31 @@ #include "../StoneEnumerations.h" #include <boost/shared_ptr.hpp> +#include <boost/signals2.hpp> namespace OrthancStone { - class OrthancSlicesLoader : public boost::noncopyable + class OrthancSlicesLoader : public IWebService::IWebServiceObserver { public: - class ICallback : public boost::noncopyable + class IObserver : public boost::noncopyable { public: - virtual ~ICallback() + typedef boost::signals2::signal<void (const OrthancSlicesLoader& loader)> SignalGeometryReadyType; + typedef boost::signals2::signal<void (const OrthancSlicesLoader& loader)> SignalGeometryErrorType; + typedef boost::signals2::signal<void (const OrthancSlicesLoader& loader, + unsigned int sliceIndex, + const Slice& slice, + std::auto_ptr<Orthanc::ImageAccessor>& image, + SliceImageQuality effectiveQuality)> SignalSliceImageReadyType; + typedef boost::signals2::signal<void (const OrthancSlicesLoader& loader, + unsigned int sliceIndex, + const Slice& slice, + SliceImageQuality quality)> SignalSliceImageErrorType; + + + public: + virtual ~IObserver() { } @@ -54,7 +69,13 @@ const Slice& slice, SliceImageQuality quality) = 0; }; - + + private: + IObserver::SignalGeometryReadyType SignalGeometryReady; + IObserver::SignalGeometryErrorType SignalGeometryError; + IObserver::SignalSliceImageReadyType SignalSliceImageReady; + IObserver::SignalSliceImageErrorType SignalSliceImageError; + private: enum State { @@ -74,11 +95,12 @@ }; class Operation; - class WebCallback; + //class WebCallback; - boost::shared_ptr<WebCallback> webCallback_; // This is a PImpl pattern + //boost::shared_ptr<WebCallback> webCallback_; // This is a PImpl pattern - ICallback& userCallback_; + //ICallback& userCallback_; + boost::shared_ptr<OrthancSlicesLoader::IObserver> observer_; IWebService& orthanc_; State state_; SlicesSorter slices_; @@ -112,24 +134,24 @@ const void* answer, size_t size); - void ScheduleSliceImagePng(const Slice& slice, + void ScheduleSliceImagePng(boost::shared_ptr<boost::noncopyable> tracker, const Slice& slice, size_t index); - void ScheduleSliceImageJpeg(const Slice& slice, + void ScheduleSliceImageJpeg(boost::shared_ptr<boost::noncopyable> tracker, const Slice& slice, size_t index, SliceImageQuality quality); void SortAndFinalizeSlices(); public: - OrthancSlicesLoader(ICallback& callback, + OrthancSlicesLoader(boost::shared_ptr<OrthancSlicesLoader::IObserver> observer, IWebService& orthanc); - void ScheduleLoadSeries(const std::string& seriesId); + void ScheduleLoadSeries(boost::shared_ptr<boost::noncopyable> tracker, const std::string& seriesId); - void ScheduleLoadInstance(const std::string& instanceId); + void ScheduleLoadInstance(boost::shared_ptr<boost::noncopyable> tracker, const std::string& instanceId); - void ScheduleLoadFrame(const std::string& instanceId, + void ScheduleLoadFrame(boost::shared_ptr<boost::noncopyable> tracker, const std::string& instanceId, unsigned int frame); bool IsGeometryReady() const; @@ -141,7 +163,17 @@ bool LookupSlice(size_t& index, const CoordinateSystem3D& plane) const; - void ScheduleLoadSliceImage(size_t index, + void ScheduleLoadSliceImage(boost::shared_ptr<boost::noncopyable> tracker, size_t index, SliceImageQuality requestedQuality); + + + void OnRequestSuccess(const std::string& uri, + const void* answer, + size_t answerSize, + Orthanc::IDynamicObject* payload); + + void OnRequestError(const std::string& uri, + Orthanc::IDynamicObject* payload); + }; }