comparison Framework/Toolbox/OrthancSlicesLoader.h @ 252:40b21c1f8b8d am-2

more usage of IObservable/IObserver
author am@osimis.io
date Tue, 03 Jul 2018 10:26:56 +0200
parents 192e6e349e69
children 9afafb192180
comparison
equal deleted inserted replaced
251:192e6e349e69 252:40b21c1f8b8d
30 namespace OrthancStone 30 namespace OrthancStone
31 { 31 {
32 class OrthancSlicesLoader : public boost::noncopyable 32 class OrthancSlicesLoader : public boost::noncopyable
33 { 33 {
34 public: 34 public:
35 class ICallback : public boost::noncopyable 35 struct SliceImageReadyMessage : public IMessage
36 {
37 unsigned int sliceIndex_;
38 const Slice& slice_;
39 std::auto_ptr<Orthanc::ImageAccessor>& image_;
40 SliceImageQuality effectiveQuality_;
41
42 SliceImageReadyMessage(unsigned int sliceIndex,
43 const Slice& slice,
44 std::auto_ptr<Orthanc::ImageAccessor>& image,
45 SliceImageQuality effectiveQuality)
46 : IMessage(MessageType_SliceImageReady),
47 sliceIndex_(sliceIndex),
48 slice_(slice),
49 image_(image),
50 effectiveQuality_(effectiveQuality)
51 {
52 }
53 };
54
55 struct SliceImageErrorMessage : public IMessage
56 {
57 const Slice& slice_;
58 unsigned int sliceIndex_;
59 SliceImageQuality effectiveQuality_;
60
61 SliceImageErrorMessage(unsigned int sliceIndex,
62 const Slice& slice,
63 SliceImageQuality effectiveQuality)
64 : IMessage(MessageType_SliceImageError),
65 slice_(slice),
66 sliceIndex_(sliceIndex),
67 effectiveQuality_(effectiveQuality)
68 {
69 }
70 };
71
72 public:
73 class ISliceLoaderObserver : public IObserver
36 { 74 {
37 public: 75 public:
38 virtual ~ICallback() 76
77 ISliceLoaderObserver(MessageBroker& broker)
78 : IObserver(broker)
39 { 79 {
40 } 80 }
41 81
42 virtual void NotifyGeometryReady(const OrthancSlicesLoader& loader) = 0; 82 virtual ~ISliceLoaderObserver()
83 {
84 }
43 85
44 virtual void NotifyGeometryError(const OrthancSlicesLoader& loader) = 0; 86 virtual void HandleMessage(IObservable& from, const IMessage& message);
45 87
46 virtual void NotifySliceImageReady(const OrthancSlicesLoader& loader, 88 virtual void OnSliceGeometryReady(const OrthancSlicesLoader& loader) = 0;
89
90 virtual void OnSliceGeometryError(const OrthancSlicesLoader& loader) = 0;
91
92 virtual void OnSliceImageReady(const OrthancSlicesLoader& loader,
47 unsigned int sliceIndex, 93 unsigned int sliceIndex,
48 const Slice& slice, 94 const Slice& slice,
49 std::auto_ptr<Orthanc::ImageAccessor>& image, 95 std::auto_ptr<Orthanc::ImageAccessor>& image,
50 SliceImageQuality effectiveQuality) = 0; 96 SliceImageQuality effectiveQuality) = 0;
51 97
52 virtual void NotifySliceImageError(const OrthancSlicesLoader& loader, 98 virtual void OnSliceImageError(const OrthancSlicesLoader& loader,
53 unsigned int sliceIndex, 99 unsigned int sliceIndex,
54 const Slice& slice, 100 const Slice& slice,
55 SliceImageQuality quality) = 0; 101 SliceImageQuality quality) = 0;
56 }; 102 };
57 103
76 class Operation; 122 class Operation;
77 class WebCallback; 123 class WebCallback;
78 124
79 boost::shared_ptr<WebCallback> webCallback_; // This is a PImpl pattern 125 boost::shared_ptr<WebCallback> webCallback_; // This is a PImpl pattern
80 126
81 ICallback& userCallback_; 127 ISliceLoaderObserver& userCallback_;
82 IWebService& orthanc_; 128 IWebService& orthanc_;
83 State state_; 129 State state_;
84 SlicesSorter slices_; 130 SlicesSorter slices_;
85 131
86 void NotifySliceImageSuccess(const Operation& operation, 132 void NotifySliceImageSuccess(const Operation& operation,
121 167
122 void SortAndFinalizeSlices(); 168 void SortAndFinalizeSlices();
123 169
124 public: 170 public:
125 OrthancSlicesLoader(MessageBroker& broker, 171 OrthancSlicesLoader(MessageBroker& broker,
126 ICallback& callback, 172 ISliceLoaderObserver& callback,
127 IWebService& orthanc); 173 IWebService& orthanc);
128 174
129 void ScheduleLoadSeries(const std::string& seriesId); 175 void ScheduleLoadSeries(const std::string& seriesId);
130 176
131 void ScheduleLoadInstance(const std::string& instanceId); 177 void ScheduleLoadInstance(const std::string& instanceId);