annotate Framework/SmartLoader.cpp @ 318:3a4ca166fafa am-2

ImageAccessor refactoring + implemented Image Cache in SmartLoader
author am@osimis.io
date Mon, 08 Oct 2018 17:10:08 +0200
parents b66d13708f40
children a902a07769d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
260
am@osimis.io
parents:
diff changeset
1 /**
am@osimis.io
parents:
diff changeset
2 * Stone of Orthanc
am@osimis.io
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
am@osimis.io
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
am@osimis.io
parents:
diff changeset
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium
am@osimis.io
parents:
diff changeset
6 *
am@osimis.io
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
am@osimis.io
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
am@osimis.io
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
am@osimis.io
parents:
diff changeset
10 * the License, or (at your option) any later version.
am@osimis.io
parents:
diff changeset
11 *
am@osimis.io
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
am@osimis.io
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
am@osimis.io
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
am@osimis.io
parents:
diff changeset
15 * Affero General Public License for more details.
am@osimis.io
parents:
diff changeset
16 *
am@osimis.io
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
am@osimis.io
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
am@osimis.io
parents:
diff changeset
19 **/
am@osimis.io
parents:
diff changeset
20
am@osimis.io
parents:
diff changeset
21
am@osimis.io
parents:
diff changeset
22 #include "SmartLoader.h"
am@osimis.io
parents:
diff changeset
23 #include "Layers/OrthancFrameLayerSource.h"
300
b4abaeb783b1 messaging refactoring almost complete: works fine in native
am@osimis.io
parents: 299
diff changeset
24 #include "Messages/MessageForwarder.h"
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
25 #include "Core/Images/Image.h"
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
26 #include "Framework/Widgets/LayerWidget.h"
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
27 #include "Framework/StoneException.h"
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
28 #include "Framework/Layers/FrameRenderer.h"
260
am@osimis.io
parents:
diff changeset
29
am@osimis.io
parents:
diff changeset
30 namespace OrthancStone
am@osimis.io
parents:
diff changeset
31 {
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
32 enum CachedSliceStatus
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
33 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
34 CachedSliceStatus_Loading,
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
35 CachedSliceStatus_Loaded
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
36 };
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
37
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
38 class SmartLoader::CachedSlice : public LayerSourceBase
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
39 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
40 public:
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
41 unsigned int sliceIndex_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
42 std::auto_ptr<Slice> slice_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
43 boost::shared_ptr<Orthanc::ImageAccessor> image_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
44 SliceImageQuality effectiveQuality_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
45 CachedSliceStatus status_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
46
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
47 public:
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
48
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
49 CachedSlice(MessageBroker& broker)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
50 : LayerSourceBase(broker)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
51 {}
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
52
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
53 virtual bool GetExtent(std::vector<Vector>& points,
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
54 const CoordinateSystem3D& viewportSlice)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
55 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
56 // TODO: viewportSlice is not used !!!!
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
57 slice_->GetExtent(points);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
58 return true;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
59 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
60
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
61 virtual void ScheduleLayerCreation(const CoordinateSystem3D& viewportSlice)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
62 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
63 // TODO: viewportSlice is not used !!!!
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
64
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
65 // it has already been loaded -> trigger the "layer ready" message immediately
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
66 bool isFull = (effectiveQuality_ == SliceImageQuality_FullPng || effectiveQuality_ == SliceImageQuality_FullPam);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
67 std::auto_ptr<Orthanc::ImageAccessor> accessor(new Orthanc::ImageAccessor());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
68 image_->GetReadOnlyAccessor(*accessor);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
69 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(accessor.release(), *slice_, isFull),
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
70 slice_->GetGeometry(), false);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
71 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
72
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
73 CachedSlice* Clone() const
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
74 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
75 CachedSlice* output = new CachedSlice(broker_);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
76 output->sliceIndex_ = sliceIndex_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
77 output->slice_.reset(slice_->Clone());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
78 output->image_ = image_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
79 output->effectiveQuality_ = effectiveQuality_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
80 output->status_ = status_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
81
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
82 return output;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
83 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
84
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
85 };
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
86
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
87
317
b66d13708f40 cleanup
am@osimis.io
parents: 300
diff changeset
88 SmartLoader::SmartLoader(MessageBroker& broker, OrthancApiClient& orthancApiClient) :
260
am@osimis.io
parents:
diff changeset
89 IObservable(broker),
am@osimis.io
parents:
diff changeset
90 IObserver(broker),
am@osimis.io
parents:
diff changeset
91 imageQuality_(SliceImageQuality_FullPam),
317
b66d13708f40 cleanup
am@osimis.io
parents: 300
diff changeset
92 orthancApiClient_(orthancApiClient)
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
93 {
260
am@osimis.io
parents:
diff changeset
94 }
am@osimis.io
parents:
diff changeset
95
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
96 void SmartLoader::SetFrameInWidget(LayerWidget& layerWidget, size_t layerIndex, const std::string& instanceId, unsigned int frame)
260
am@osimis.io
parents:
diff changeset
97 {
262
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
98 // TODO: check if this frame has already been loaded or is already being loaded.
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
99 // - if already loaded: create a "clone" that will emit the GeometryReady/ImageReady messages "immediately"
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
100 // (it can not be immediate because Observers needs to register first and this is done after this method returns)
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
101 // - if currently loading, we need to return an object that will observe the existing LayerSource and forward
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
102 // the messages to its observables
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
103 // in both cases, we must be carefull about objects lifecycle !!!
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
104
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
105 std::auto_ptr<ILayerSource> layerSource;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
106
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
107 if (cachedSlices_.find(instanceId) != cachedSlices_.end() && cachedSlices_[instanceId]->status_ == CachedSliceStatus_Loaded)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
108 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
109 layerSource.reset(cachedSlices_[instanceId]->Clone());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
110 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
111 else
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
112 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
113 layerSource.reset(new OrthancFrameLayerSource(IObserver::broker_, orthancApiClient_));
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
114 dynamic_cast<OrthancFrameLayerSource*>(layerSource.get())->SetImageQuality(imageQuality_);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
115 layerSource->RegisterObserverCallback(new Callable<SmartLoader, ILayerSource::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady));
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
116 layerSource->RegisterObserverCallback(new Callable<SmartLoader, ILayerSource::ImageReadyMessage>(*this, &SmartLoader::OnImageReady));
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
117 layerSource->RegisterObserverCallback(new Callable<SmartLoader, ILayerSource::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady));
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
118 dynamic_cast<OrthancFrameLayerSource*>(layerSource.get())->LoadFrame(instanceId, frame);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
119 }
260
am@osimis.io
parents:
diff changeset
120
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
121 // make sure that the widget registers the events before we trigger them
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
122 if (layerWidget.GetLayerCount() == layerIndex)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
123 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
124 layerWidget.AddLayer(layerSource.release());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
125 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
126 else if (layerWidget.GetLayerCount() > layerIndex)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
127 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
128 layerWidget.ReplaceLayer(layerIndex, layerSource.release());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
129 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
130 else
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
131 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
132 throw StoneException(ErrorCode_CanOnlyAddOneLayerAtATime);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
133 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
134
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
135 SmartLoader::CachedSlice* cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
136 if (cachedSlice != NULL)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
137 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
138 cachedSlice->NotifyGeometryReady();
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
139 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
140
260
am@osimis.io
parents:
diff changeset
141 }
am@osimis.io
parents:
diff changeset
142
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
143
270
2d64f4d39610 backup (work in progress)
am@osimis.io
parents: 268
diff changeset
144 void SmartLoader::LoadStudyList()
2d64f4d39610 backup (work in progress)
am@osimis.io
parents: 268
diff changeset
145 {
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
146 // orthancApiClient_.ScheduleGetJsonRequest("/studies");
270
2d64f4d39610 backup (work in progress)
am@osimis.io
parents: 268
diff changeset
147 }
260
am@osimis.io
parents:
diff changeset
148
266
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
149 void PreloadStudy(const std::string studyId)
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
150 {
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
151 /* TODO */
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
152 }
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
153
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
154 void PreloadSeries(const std::string seriesId)
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
155 {
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
156 /* TODO */
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
157 }
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
158
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
159
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
160 void SmartLoader::OnLayerGeometryReady(const ILayerSource::GeometryReadyMessage& message)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
161 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
162 OrthancFrameLayerSource& source = dynamic_cast<OrthancFrameLayerSource&>(message.origin_);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
163 // save the slice
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
164 const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount()
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
165 std::string instanceId = slice.GetOrthancInstanceId();
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
166
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
167 CachedSlice* cachedSlice = new CachedSlice(IObserver::broker_);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
168 cachedSlice->slice_.reset(slice.Clone());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
169 cachedSlice->effectiveQuality_ = source.GetImageQuality();
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
170 cachedSlice->status_ = CachedSliceStatus_Loading;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
171
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
172 cachedSlices_[instanceId] = boost::shared_ptr<CachedSlice>(cachedSlice);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
173
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
174 // re-emit original Layer message to observers
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
175 EmitMessage(message);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
176 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
177
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
178 void SmartLoader::OnImageReady(const ILayerSource::ImageReadyMessage& message)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
179 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
180 OrthancFrameLayerSource& source = dynamic_cast<OrthancFrameLayerSource&>(message.origin_);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
181
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
182 // save the slice
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
183 const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount() ?
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
184 std::string instanceId = slice.GetOrthancInstanceId();
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
185
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
186 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::broker_));
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
187 cachedSlice->image_ = message.image_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
188 cachedSlice->effectiveQuality_ = message.imageQuality_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
189 cachedSlice->slice_.reset(message.slice_.Clone());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
190 cachedSlice->status_ = CachedSliceStatus_Loaded;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
191
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
192 cachedSlices_[instanceId] = cachedSlice;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
193
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
194 // re-emit original Layer message to observers
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
195 EmitMessage(message);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
196 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
197
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
198 void SmartLoader::OnLayerReady(const ILayerSource::LayerReadyMessage& message)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
199 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
200 // re-emit original Layer message to observers
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
201 EmitMessage(message);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
202 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
203
260
am@osimis.io
parents:
diff changeset
204 }