222
|
1 #pragma once
|
|
2
|
223
|
3 #include <emscripten/emscripten.h>
|
|
4
|
222
|
5 #include <Framework/dev.h>
|
|
6 #include <Framework/Viewport/WidgetViewport.h>
|
|
7 #include <Framework/Widgets/LayerWidget.h>
|
|
8 #include <Framework/Widgets/LayoutWidget.h>
|
288
|
9 #include <Applications/IStoneApplication.h>
|
307
|
10 #include <Platforms/Wasm/WasmPlatformApplicationAdapter.h>
|
222
|
11
|
233
|
12 typedef OrthancStone::WidgetViewport* ViewportHandle; // the objects exchanged between JS and C++
|
227
|
13
|
222
|
14 #ifdef __cplusplus
|
|
15 extern "C" {
|
|
16 #endif
|
|
17
|
223
|
18 // JS methods accessible from C++
|
229
|
19 extern void ScheduleWebViewportRedrawFromCpp(ViewportHandle cppViewportHandle);
|
287
|
20 extern void UpdateStoneApplicationStatusFromCpp(const char* statusUpdateMessage);
|
222
|
21
|
223
|
22 // C++ methods accessible from JS
|
229
|
23 extern void EMSCRIPTEN_KEEPALIVE CreateWasmApplication(ViewportHandle cppViewportHandle);
|
254
|
24 extern void EMSCRIPTEN_KEEPALIVE SetStartupParameter(const char* keyc, const char* value);
|
|
25
|
223
|
26
|
222
|
27 #ifdef __cplusplus
|
|
28 }
|
|
29 #endif
|
|
30
|
307
|
31 // these methods must be implemented in the custom app "mainWasm.cpp"
|
288
|
32 extern OrthancStone::IStoneApplication* CreateUserApplication(OrthancStone::MessageBroker& broker);
|
307
|
33 extern OrthancStone::WasmPlatformApplicationAdapter* CreateWasmApplicationAdapter(OrthancStone::MessageBroker& broker, OrthancStone::IStoneApplication* application);
|
222
|
34
|
|
35 namespace OrthancStone {
|
|
36
|
287
|
37 // default Observer to trigger Viewport redraw when something changes in the Viewport
|
278
|
38 class ViewportContentChangedObserver :
|
222
|
39 public OrthancStone::IViewport::IObserver
|
|
40 {
|
|
41 private:
|
|
42 // Flag to avoid flooding JavaScript with redundant Redraw requests
|
|
43 bool isScheduled_;
|
|
44
|
|
45 public:
|
278
|
46 ViewportContentChangedObserver() :
|
222
|
47 isScheduled_(false)
|
|
48 {
|
|
49 }
|
|
50
|
|
51 void Reset()
|
|
52 {
|
|
53 isScheduled_ = false;
|
|
54 }
|
|
55
|
278
|
56 virtual void OnViewportContentChanged(const OrthancStone::IViewport &viewport)
|
222
|
57 {
|
|
58 if (!isScheduled_)
|
|
59 {
|
229
|
60 ScheduleWebViewportRedrawFromCpp((ViewportHandle)&viewport); // loosing constness when transmitted to Web
|
222
|
61 isScheduled_ = true;
|
|
62 }
|
|
63 }
|
|
64 };
|
|
65
|
223
|
66 // default status bar to log messages on the console/stdout
|
222
|
67 class StatusBar : public OrthancStone::IStatusBar
|
|
68 {
|
|
69 public:
|
|
70 virtual void ClearMessage()
|
|
71 {
|
|
72 }
|
|
73
|
|
74 virtual void SetMessage(const std::string& message)
|
|
75 {
|
|
76 printf("%s\n", message.c_str());
|
|
77 }
|
|
78 };
|
|
79 } |