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 }