comparison Framework/Deprecated/SmartLoader.cpp @ 1059:e713f1a99861 broker

replacing MessageBroker by weak_ptr
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 11 Oct 2019 17:08:34 +0200
parents be9c1530d40a
children b537002f83a9
comparison
equal deleted inserted replaced
1058:a36c47487a70 1059:e713f1a99861
120 120
121 121
122 SmartLoader::SmartLoader(OrthancStone::MessageBroker& broker, 122 SmartLoader::SmartLoader(OrthancStone::MessageBroker& broker,
123 OrthancApiClient& orthancApiClient) : 123 OrthancApiClient& orthancApiClient) :
124 IObservable(broker), 124 IObservable(broker),
125 IObserver(broker),
126 imageQuality_(SliceImageQuality_FullPam), 125 imageQuality_(SliceImageQuality_FullPam),
127 orthancApiClient_(orthancApiClient) 126 orthancApiClient_(orthancApiClient)
128 { 127 {
129 } 128 }
130 129
149 layerSource.reset(cachedSlices_[sliceKeyId]->Clone()); 148 layerSource.reset(cachedSlices_[sliceKeyId]->Clone());
150 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get()); 149 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get());
151 } 150 }
152 else 151 else
153 { 152 {
154 layerSource.reset(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_)); 153 layerSource.reset(new DicomSeriesVolumeSlicer(IObservable::GetBroker(), orthancApiClient_));
155 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); 154 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_);
156 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady)); 155 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(shared_from_this(), &SmartLoader::OnLayerGeometryReady));
157 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady)); 156 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(shared_from_this(), &SmartLoader::OnFrameReady));
158 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady)); 157 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(shared_from_this(), &SmartLoader::OnLayerReady));
159 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); 158 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame);
160 } 159 }
161 160
162 // make sure that the widget registers the events before we trigger them 161 // make sure that the widget registers the events before we trigger them
163 if (sliceViewer.GetLayerCount() == layerIndex) 162 if (sliceViewer.GetLayerCount() == layerIndex)
188 // TODO: check if it is already in the cache 187 // TODO: check if it is already in the cache
189 188
190 189
191 190
192 // create the slice in the cache with "empty" data 191 // create the slice in the cache with "empty" data
193 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::GetBroker())); 192 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker()));
194 cachedSlice->slice_.reset(new Slice(instanceId, frame)); 193 cachedSlice->slice_.reset(new Slice(instanceId, frame));
195 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad; 194 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad;
196 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame); 195 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame);
197 196
198 LOG(WARNING) << "Will preload: " << sliceKeyId; 197 LOG(WARNING) << "Will preload: " << sliceKeyId;
199 198
200 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); 199 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice);
201 200
202 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_)); 201 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObservable::GetBroker(), orthancApiClient_));
203 202
204 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); 203 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_);
205 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady)); 204 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(shared_from_this(), &SmartLoader::OnLayerGeometryReady));
206 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady)); 205 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(shared_from_this(), &SmartLoader::OnFrameReady));
207 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady)); 206 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(shared_from_this(), &SmartLoader::OnLayerReady));
208 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); 207 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame);
209 208
210 // keep a ref to the VolumeSlicer until the slice is fully loaded and saved to cache 209 // keep a ref to the VolumeSlicer until the slice is fully loaded and saved to cache
211 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release()); 210 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release());
212 } 211 }
233 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + 232 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" +
234 boost::lexical_cast<std::string>(slice.GetFrame())); 233 boost::lexical_cast<std::string>(slice.GetFrame()));
235 234
236 LOG(WARNING) << "Geometry ready: " << sliceKeyId; 235 LOG(WARNING) << "Geometry ready: " << sliceKeyId;
237 236
238 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::GetBroker())); 237 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker()));
239 cachedSlice->slice_.reset(slice.Clone()); 238 cachedSlice->slice_.reset(slice.Clone());
240 cachedSlice->effectiveQuality_ = source.GetImageQuality(); 239 cachedSlice->effectiveQuality_ = source.GetImageQuality();
241 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded; 240 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded;
242 241
243 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); 242 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice);
254 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + 253 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" +
255 boost::lexical_cast<std::string>(slice.GetFrame())); 254 boost::lexical_cast<std::string>(slice.GetFrame()));
256 255
257 LOG(WARNING) << "Image ready: " << sliceKeyId; 256 LOG(WARNING) << "Image ready: " << sliceKeyId;
258 257
259 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::GetBroker())); 258 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker()));
260 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame())); 259 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame()));
261 cachedSlice->effectiveQuality_ = message.GetImageQuality(); 260 cachedSlice->effectiveQuality_ = message.GetImageQuality();
262 cachedSlice->slice_.reset(message.GetSlice().Clone()); 261 cachedSlice->slice_.reset(message.GetSlice().Clone());
263 cachedSlice->status_ = CachedSliceStatus_ImageLoaded; 262 cachedSlice->status_ = CachedSliceStatus_ImageLoaded;
264 263