comparison Applications/Samples/SimpleViewerApplication.h @ 287:2038d76bf13f am-2

interaction with HTML/JS
author am@osimis.io
date Thu, 30 Aug 2018 11:36:36 +0200
parents 3c190e2bb3af
children 8c8da145fefa
comparison
equal deleted inserted replaced
286:6b3d91857b96 287:2038d76bf13f
29 #include "../../Framework/Widgets/LayerWidget.h" 29 #include "../../Framework/Widgets/LayerWidget.h"
30 #include "../../Framework/Widgets/LayoutWidget.h" 30 #include "../../Framework/Widgets/LayoutWidget.h"
31 #include "../../Framework/Messages/IObserver.h" 31 #include "../../Framework/Messages/IObserver.h"
32 #include "../../Framework/SmartLoader.h" 32 #include "../../Framework/SmartLoader.h"
33 33
34 #if ORTHANC_ENABLE_WASM==1
35 #include "../../Platforms/Wasm/IStoneApplicationToWebApplicationAdapter.h"
36 #include "../../Platforms/Wasm/Defaults.h"
37 #endif
34 #include <Core/Logging.h> 38 #include <Core/Logging.h>
35 39
36 namespace OrthancStone 40 namespace OrthancStone
37 { 41 {
38 namespace Samples 42 namespace Samples
39 { 43 {
40 class SimpleViewerApplication : 44 class SimpleViewerApplication :
41 public SampleApplicationBase, 45 public SampleApplicationBase,
46 #if ORTHANC_ENABLE_WASM==1
47 public IStoneApplicationToWebApplicationAdapter,
48 #endif
42 public IObserver 49 public IObserver
43 { 50 {
44 private: 51 private:
45 class ThumbnailInteractor : public IWorldSceneInteractor 52 class ThumbnailInteractor : public IWorldSceneInteractor
46 { 53 {
176 LayoutWidget* mainLayout_; 183 LayoutWidget* mainLayout_;
177 LayoutWidget* thumbnailsLayout_; 184 LayoutWidget* thumbnailsLayout_;
178 LayerWidget* mainWidget_; 185 LayerWidget* mainWidget_;
179 std::vector<LayerWidget*> thumbnails_; 186 std::vector<LayerWidget*> thumbnails_;
180 std::map<std::string, std::vector<std::string>> instancesIdsPerSeriesId_; 187 std::map<std::string, std::vector<std::string>> instancesIdsPerSeriesId_;
188 std::map<std::string, Json::Value> seriesTags_;
181 189
182 unsigned int currentInstanceIndex_; 190 unsigned int currentInstanceIndex_;
183 OrthancStone::WidgetViewport* wasmViewport1_; 191 OrthancStone::WidgetViewport* wasmViewport1_;
184 OrthancStone::WidgetViewport* wasmViewport2_; 192 OrthancStone::WidgetViewport* wasmViewport2_;
185 193
295 { 303 {
296 if (response.isObject() && response["Instances"].isArray() && response["Instances"].size() > 0) 304 if (response.isObject() && response["Instances"].isArray() && response["Instances"].size() > 0)
297 { 305 {
298 // keep track of all instances IDs 306 // keep track of all instances IDs
299 const std::string& seriesId = response["ID"].asString(); 307 const std::string& seriesId = response["ID"].asString();
308 seriesTags_[seriesId] = response;
300 instancesIdsPerSeriesId_[seriesId] = std::vector<std::string>(); 309 instancesIdsPerSeriesId_[seriesId] = std::vector<std::string>();
301 for (size_t i = 0; i < response["Instances"].size(); i++) 310 for (size_t i = 0; i < response["Instances"].size(); i++)
302 { 311 {
303 const std::string& instanceId = response["Instances"][static_cast<int>(i)].asString(); 312 const std::string& instanceId = response["Instances"][static_cast<int>(i)].asString();
304 instancesIdsPerSeriesId_[seriesId].push_back(instanceId); 313 instancesIdsPerSeriesId_[seriesId].push_back(instanceId);
349 default: 358 default:
350 VLOG("unhandled message type" << message.GetType()); 359 VLOG("unhandled message type" << message.GetType());
351 } 360 }
352 } 361 }
353 362
363 void SelectSeriesInMainViewport(const std::string& seriesId)
364 {
365 mainWidget_->ReplaceLayer(0, smartLoader_->GetFrame(instancesIdsPerSeriesId_[seriesId][0], 0));
354 #if ORTHANC_ENABLE_WASM==1 366 #if ORTHANC_ENABLE_WASM==1
355 virtual void InitializeWasm() { 367 NotifyStatusUpdateFromCppToWeb("series-description=" + seriesTags_[seriesId]["MainDicomTags"]["SeriesDescription"].asString());
356
357 AttachWidgetToWasmViewport("canvas", thumbnailsLayout_);
358 AttachWidgetToWasmViewport("canvas2", mainWidget_);
359 }
360 #endif 368 #endif
361
362
363
364 void SelectSeriesInMainViewport(const std::string& seriesId)
365 {
366 mainWidget_->ReplaceLayer(0, smartLoader_->GetFrame(instancesIdsPerSeriesId_[seriesId][0], 0));
367 } 369 }
368 370
369 virtual void OnPushButton1Clicked() {} 371 virtual void OnPushButton1Clicked() {}
370 virtual void OnPushButton2Clicked() {} 372 virtual void OnPushButton2Clicked() {}
371 virtual void OnTool1Clicked() { currentTool_ = Tools_LineMeasure;} 373 virtual void OnTool1Clicked() { currentTool_ = Tools_LineMeasure;}
379 tool1 = "line"; 381 tool1 = "line";
380 tool2 = "circle"; 382 tool2 = "circle";
381 pushButton1 = "action1"; 383 pushButton1 = "action1";
382 pushButton2 = "action2"; 384 pushButton2 = "action2";
383 } 385 }
386
387 #if ORTHANC_ENABLE_WASM==1
388 virtual void HandleMessageFromWeb(std::string& output, const std::string& input) {
389 if (input == "select-tool:line-measure")
390 {
391 currentTool_ = Tools_LineMeasure;
392 NotifyStatusUpdateFromCppToWeb("currentTool=line-measure");
393 }
394 else if (input == "select-tool:circle-measure")
395 {
396 currentTool_ = Tools_CircleMeasure;
397 NotifyStatusUpdateFromCppToWeb("currentTool=circle-measure");
398 }
399
400 output = "ok";
401 }
402
403 virtual void NotifyStatusUpdateFromCppToWeb(const std::string& statusUpdateMessage) {
404 UpdateStoneApplicationStatusFromCpp(statusUpdateMessage.c_str());
405 }
406
407 virtual void InitializeWasm() {
408
409 AttachWidgetToWasmViewport("canvas", thumbnailsLayout_);
410 AttachWidgetToWasmViewport("canvas2", mainWidget_);
411 }
412 #endif
384 }; 413 };
385 414
386 415
387 } 416 }
388 } 417 }