Mercurial > hg > orthanc-stone
comparison Applications/Samples/SimpleViewerApplication.h @ 279:8f5d7495076d am-2
SimpleViewer sample working in SDL, Qt and WASM
author | am@osimis.io |
---|---|
date | Mon, 27 Aug 2018 15:40:13 +0200 |
parents | dc1beee33134 |
children | 300d8b8c48b3 |
comparison
equal
deleted
inserted
replaced
278:8a86695fcbc3 | 279:8f5d7495076d |
---|---|
57 double y, | 57 double y, |
58 IStatusBar* statusBar) | 58 IStatusBar* statusBar) |
59 { | 59 { |
60 if (button == MouseButton_Left) | 60 if (button == MouseButton_Left) |
61 { | 61 { |
62 statusBar->SetMessage("trying to drag the thumbnail from " + widget.GetName()); | 62 statusBar->SetMessage("selected thumbnail " + widget.GetName()); |
63 std::string seriesId = widget.GetName().substr(strlen("thumbnail-series-")); | |
64 application_.SelectSeriesInMainViewport(seriesId); | |
63 } | 65 } |
64 return NULL; | 66 return NULL; |
65 } | 67 } |
66 virtual void MouseOver(CairoContext& context, | 68 virtual void MouseOver(CairoContext& context, |
67 WorldSceneWidget& widget, | 69 WorldSceneWidget& widget, |
154 switch (key) | 156 switch (key) |
155 { | 157 { |
156 case 's': | 158 case 's': |
157 widget.SetDefaultView(); | 159 widget.SetDefaultView(); |
158 break; | 160 break; |
159 case 'n': | |
160 application_.NextImage(widget); | |
161 break; | |
162 | 161 |
163 default: | 162 default: |
164 break; | 163 break; |
165 } | 164 } |
166 } | 165 } |
171 std::unique_ptr<ThumbnailInteractor> thumbnailInteractor_; | 170 std::unique_ptr<ThumbnailInteractor> thumbnailInteractor_; |
172 LayoutWidget* mainLayout_; | 171 LayoutWidget* mainLayout_; |
173 LayoutWidget* thumbnailsLayout_; | 172 LayoutWidget* thumbnailsLayout_; |
174 LayerWidget* mainWidget_; | 173 LayerWidget* mainWidget_; |
175 std::vector<LayerWidget*> thumbnails_; | 174 std::vector<LayerWidget*> thumbnails_; |
176 std::vector<std::string> instances_; | 175 std::map<std::string, std::vector<std::string>> instancesIdsPerSeriesId_; |
177 | 176 |
178 unsigned int currentInstanceIndex_; | 177 unsigned int currentInstanceIndex_; |
179 OrthancStone::WidgetViewport* wasmViewport1_; | 178 OrthancStone::WidgetViewport* wasmViewport1_; |
180 OrthancStone::WidgetViewport* wasmViewport2_; | 179 OrthancStone::WidgetViewport* wasmViewport2_; |
181 | 180 |
290 | 289 |
291 void OnSeriesReceived(const Json::Value& response) | 290 void OnSeriesReceived(const Json::Value& response) |
292 { | 291 { |
293 if (response.isObject() && response["Instances"].isArray() && response["Instances"].size() > 0) | 292 if (response.isObject() && response["Instances"].isArray() && response["Instances"].size() > 0) |
294 { | 293 { |
295 LoadThumbnailForSeries(response["ID"].asString(), response["Instances"][0].asString()); | 294 // keep track of all instances IDs |
295 const std::string& seriesId = response["ID"].asString(); | |
296 instancesIdsPerSeriesId_[seriesId] = std::vector<std::string>(); | |
297 for (size_t i = 0; i < response["Instances"].size(); i++) | |
298 { | |
299 const std::string& instanceId = response["Instances"][static_cast<int>(i)].asString(); | |
300 instancesIdsPerSeriesId_[seriesId].push_back(instanceId); | |
301 } | |
302 | |
303 // load the first instance in the thumbnail | |
304 LoadThumbnailForSeries(seriesId, instancesIdsPerSeriesId_[seriesId][0]); | |
305 | |
306 // if this is the first thumbnail loaded, load the first instance in the mainWidget | |
307 if (mainWidget_->GetLayerCount() == 0) | |
308 { | |
309 mainWidget_->AddLayer(smartLoader_->GetFrame(instancesIdsPerSeriesId_[seriesId][0], 0)); | |
310 } | |
296 } | 311 } |
297 } | 312 } |
298 | 313 |
299 void LoadThumbnailForSeries(const std::string& seriesId, const std::string& instanceId) | 314 void LoadThumbnailForSeries(const std::string& seriesId, const std::string& instanceId) |
300 { | 315 { |
302 LayerWidget* thumbnailWidget = new LayerWidget(broker_, "thumbnail-series-" + seriesId); | 317 LayerWidget* thumbnailWidget = new LayerWidget(broker_, "thumbnail-series-" + seriesId); |
303 thumbnails_.push_back(thumbnailWidget); | 318 thumbnails_.push_back(thumbnailWidget); |
304 thumbnailsLayout_->AddWidget(thumbnailWidget); | 319 thumbnailsLayout_->AddWidget(thumbnailWidget); |
305 thumbnailWidget->RegisterObserver(*this); | 320 thumbnailWidget->RegisterObserver(*this); |
306 thumbnailWidget->AddLayer(smartLoader_->GetFrame(instanceId, 0)); | 321 thumbnailWidget->AddLayer(smartLoader_->GetFrame(instanceId, 0)); |
307 //thumbnailWidget->SetInteractor(*thumbnailInteractor_); | 322 thumbnailWidget->SetInteractor(*thumbnailInteractor_); |
308 } | 323 } |
309 | 324 |
310 void SelectStudy(const std::string& studyId) | 325 void SelectStudy(const std::string& studyId) |
311 { | 326 { |
312 orthancApiClient_->ScheduleGetStudy(*this, studyId); | 327 orthancApiClient_->ScheduleGetStudy(*this, studyId); |
338 AttachWidgetToWasmViewport("canvas", thumbnailsLayout_); | 353 AttachWidgetToWasmViewport("canvas", thumbnailsLayout_); |
339 AttachWidgetToWasmViewport("canvas2", mainWidget_); | 354 AttachWidgetToWasmViewport("canvas2", mainWidget_); |
340 } | 355 } |
341 #endif | 356 #endif |
342 | 357 |
343 void NextImage(WorldSceneWidget& widget) { | 358 void SelectSeriesInMainViewport(const std::string& seriesId) |
344 assert(context_); | 359 { |
345 statusBar_->SetMessage("displaying next image"); | 360 mainWidget_->ReplaceLayer(0, smartLoader_->GetFrame(instancesIdsPerSeriesId_[seriesId][0], 0)); |
346 | |
347 currentInstanceIndex_ = (currentInstanceIndex_ + 1) % instances_.size(); | |
348 | |
349 mainWidget_->ReplaceLayer(0, smartLoader_->GetFrame(instances_[currentInstanceIndex_], 0)); | |
350 | |
351 } | 361 } |
352 }; | 362 }; |
353 | 363 |
354 | 364 |
355 } | 365 } |