-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cyberdeck.drawio
465 lines (465 loc) · 54.6 KB
/
Cyberdeck.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
<mxfile host="app.diagrams.net" modified="2023-05-17T21:36:49.115Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0" etag="b9Ic6eK_S1UHMf7GQUgd" version="21.3.2" type="github" pages="3">
<diagram name="Arch_Draft_1" id="S_uM91Xfsd7DyZV0edvE">
<mxGraphModel dx="1217" dy="713" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="q55Y3YeiyzVGm_dKempc-44" value="" style="rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=14;strokeWidth=0.5;dashed=1;dashPattern=8 8;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="67.5" y="280" width="165" height="140" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-1" value="Cyberdeck App" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="344" y="260" width="140" height="120" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-2" value="Launches apps" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-1" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-3" value="Ends apps" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-1" vertex="1">
<mxGeometry y="52" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-4" value="Prints cyberdeck app info" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-1" vertex="1">
<mxGeometry y="78" width="140" height="42" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-5" value="PowerButton App" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="130" y="480" width="140" height="114" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-8" value="Turns off Pi with physical button<br><div>&nbsp;</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-5" vertex="1">
<mxGeometry y="26" width="140" height="44" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-33" value="Turns off Fan with physical button" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-5" vertex="1">
<mxGeometry y="70" width="140" height="44" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-9" value="Application" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="344" y="20" width="140" height="196" as="geometry">
<mxRectangle x="90" y="260" width="100" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-10" value="reads settings from json" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-9" vertex="1">
<mxGeometry y="26" width="140" height="34" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-11" value="writes settings to json" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-9" vertex="1">
<mxGeometry y="60" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-31" value="writes settings to json" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-9" vertex="1">
<mxGeometry y="86" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-12" value="<div>has signal handler</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-9" vertex="1">
<mxGeometry y="112" width="140" height="24" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-13" value="can signal processes" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-9" vertex="1">
<mxGeometry y="136" width="140" height="24" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-28" value="Has Python Script Handler" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-9" vertex="1">
<mxGeometry y="160" width="140" height="36" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-14" value="" style="endArrow=none;dashed=1;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-1" target="q55Y3YeiyzVGm_dKempc-9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="430" as="sourcePoint" />
<mxPoint x="414" y="190" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-15" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="430" as="sourcePoint" />
<mxPoint x="414" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-16" value="" style="endArrow=none;dashed=1;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-5" target="q55Y3YeiyzVGm_dKempc-9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="430" as="sourcePoint" />
<mxPoint x="410" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-22" value="Python Script Handler" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="80" y="112" width="140" height="148" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-23" value="Holds python script" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-22" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-24" value="Start python script" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-22" vertex="1">
<mxGeometry y="52" width="140" height="28" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-26" value="Signals python script" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-22" vertex="1">
<mxGeometry y="80" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-27" value="Sets variables of python script" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-22" vertex="1">
<mxGeometry y="110" width="140" height="38" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-30" value="Json Settings" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry x="630" y="20" width="80" height="100" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-32" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-9" target="q55Y3YeiyzVGm_dKempc-22" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="590" y="320" as="sourcePoint" />
<mxPoint x="640" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-34" value="LedMatrix App" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="560" y="480" width="140" height="70" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-35" value="Uses led matrix as display" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-34" vertex="1">
<mxGeometry y="26" width="140" height="44" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-37" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.521;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-4" target="q55Y3YeiyzVGm_dKempc-34" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="340" as="sourcePoint" />
<mxPoint x="530" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-38" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-34" target="q55Y3YeiyzVGm_dKempc-9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="630" y="530" as="sourcePoint" />
<mxPoint x="680" y="480" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-39" value="Python script" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;html=1;" parent="1" vertex="1">
<mxGeometry x="80" y="310" width="140" height="104" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-40" value="Item 1" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-39" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-41" value="Item 2" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-39" vertex="1">
<mxGeometry y="52" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-42" value="Item 3" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="q55Y3YeiyzVGm_dKempc-39" vertex="1">
<mxGeometry y="78" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-45" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="q55Y3YeiyzVGm_dKempc-22" target="q55Y3YeiyzVGm_dKempc-44" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="354" y="146" as="sourcePoint" />
<mxPoint x="230" y="178" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q55Y3YeiyzVGm_dKempc-46" value="Thread" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="70" y="280" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="CFJHJXMNog5xB2IH2oD0" name="UML_Draft_1">
<mxGraphModel dx="1217" dy="713" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="2000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="zCSSx3-7EyX81rC65PfA-1" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>Application</b></p><hr size="1"><p style="margin:0px;margin-left:4px;">- m_pPythonHandler: *PythonHandler</p><p style="margin:0px;margin-left:4px;">- m_pConfig: *Config<br></p><hr size="1"><p style="margin:0px;margin-left:4px;">+ Run(): void</p><p style="margin:0px;margin-left:4px;">+ End(): void</p><p style="margin:0px;margin-left:4px;">+ Start(): void<br></p><p style="margin:0px;margin-left:4px;">+ SignalApplication(const string&amp; name): bool</p><p style="margin:0px;margin-left:4px;">+ PythonHandler(): * const PythonHandler</p><p style="margin:0px;margin-left:4px;">+ Config(): * const Config<br></p><p style="margin:0px;margin-left:4px;">- SignalHandler(): void</p><p style="margin:0px;margin-left:4px;">- SetAppConfigItems() = 0: void<br></p><p style="margin:0px;margin-left:4px;"># Config(): * Config<br></p><hr>&nbsp;main(int argc, char** argv): void<br><p style="margin:0px;margin-left:4px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="290" y="100" width="290" height="240" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-4" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>CyberdeckApp: Application<br></b></p><hr size="1"><p style="margin:0px;margin-left:4px;">+ m_CyberdeckApplications: unordered_map&lt;string, appInfo&gt;<br></p><hr size="1"><p style="margin:0px;margin-left:4px;">+ PrintHelp(): void</p><p style="margin:0px;margin-left:4px;">+ PrintInfo(): void</p><p style="margin:0px;margin-left:4px;">+ LaunchApps(): bool</p><p style="margin:0px;margin-left:4px;">+ LaunchApp(const string&amp; name): bool</p><p style="margin:0px;margin-left:4px;">+ EndApps(): bool</p><p style="margin:0px;margin-left:4px;">+ EndApp(const string&amp; name): bool</p><p style="margin:0px;margin-left:4px;">- SetAppConfigItems(): void</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="260" y="410" width="245" height="190" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-6" value="<p style="margin:0px;margin-top:6px;text-align:center;"><b>AppInfo</b></p><hr><p style="margin:0px;margin-left:8px;">+ IsActive: bool<br></p>" style="align=left;overflow=fill;html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="520" y="490" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-7" value="" style="shape=component;jettyWidth=8;jettyHeight=4;" parent="X2i6eIDA0BgOuL5v0aOz-6" vertex="1">
<mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
<mxPoint x="-24" y="4" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-8" value="PowerButton: Application" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="80" y="410" width="160" height="86" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-9" value="+" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-8" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-10" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="X2i6eIDA0BgOuL5v0aOz-8" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-11" value="- SetAppConfigItems(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-8" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-12" value="" style="endArrow=none;dashed=1;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="X2i6eIDA0BgOuL5v0aOz-8" target="zCSSx3-7EyX81rC65PfA-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="140" y="340" as="sourcePoint" />
<mxPoint x="430" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-16" value="LedMatrix: Application" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="720" y="410" width="160" height="86" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-17" value="+ " style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-16" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-18" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="X2i6eIDA0BgOuL5v0aOz-16" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-19" value="- SetAppConfigItems(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-16" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-20" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="zCSSx3-7EyX81rC65PfA-1" target="X2i6eIDA0BgOuL5v0aOz-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="640" y="340" as="sourcePoint" />
<mxPoint x="690" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-21" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="X2i6eIDA0BgOuL5v0aOz-4" target="zCSSx3-7EyX81rC65PfA-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="470" y="340" as="sourcePoint" />
<mxPoint x="470" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-22" value="PythonHandler" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="930" y="320" width="370" height="200" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-23" value="<div>- m_Name: string</div><div>- m_pPythonScript: unique_ptr&lt;PythonScript&gt;<br></div><div>- m_Thread: thread<br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-22" vertex="1">
<mxGeometry y="26" width="370" height="54" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-24" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="X2i6eIDA0BgOuL5v0aOz-22" vertex="1">
<mxGeometry y="80" width="370" height="8" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-25" value="<div>+ PythonHandler(const string&amp; name): PythonHandler</div><div>+ StartScript(): void</div><div>+ EndScript(): void</div><div>+ SignalScript(int&nbsp; sig): void<br></div><div><br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-22" vertex="1">
<mxGeometry y="88" width="370" height="112" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-32" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;container=1;" parent="1" vertex="1">
<mxGeometry x="1330" y="425" width="230" height="160" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-27" value="PythonScript" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-32" vertex="1">
<mxGeometry x="22.691538461538585" y="23.88080459770117" width="184.62" height="91.26436781609196" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-28" value="- m_ScriptHandle: *HANDLE" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-27" vertex="1">
<mxGeometry y="26" width="184.62" height="34" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-29" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="X2i6eIDA0BgOuL5v0aOz-27" vertex="1">
<mxGeometry y="60" width="184.62" height="7.35632183908046" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-30" value="+ Run(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-27" vertex="1">
<mxGeometry y="67.35632183908046" width="184.62" height="23.908045977011493" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-34" value="Thread" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="X2i6eIDA0BgOuL5v0aOz-32" vertex="1">
<mxGeometry x="10" y="-5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-38" value="SetAppConfigItems is used to specify the json keys and layout for each specific app, by simply adding the key to the config item (https://json.nlohmann.me/api/basic_json/#examples)" style="shape=note;strokeWidth=2;fontSize=14;size=20;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#666600;" parent="1" vertex="1">
<mxGeometry x="10" y="200" width="220" height="140" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-41" value="Config" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="930" y="585" width="190" height="120" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-42" value="- m_Json: json" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-41" vertex="1">
<mxGeometry y="26" width="190" height="26" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-43" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="X2i6eIDA0BgOuL5v0aOz-41" vertex="1">
<mxGeometry y="52" width="190" height="8" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-44" value="<div>+ GetJson(): const * json</div><div>+ GetJson(): *json</div><div>+ LoadFile(): bool</div><div><br></div><div><br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="X2i6eIDA0BgOuL5v0aOz-41" vertex="1">
<mxGeometry y="60" width="190" height="60" as="geometry" />
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-46" value="" style="edgeStyle=segmentEdgeStyle;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="zCSSx3-7EyX81rC65PfA-1" target="X2i6eIDA0BgOuL5v0aOz-41" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="750" y="640" as="sourcePoint" />
<mxPoint x="800" y="590" as="targetPoint" />
<Array as="points">
<mxPoint x="640" y="160" />
<mxPoint x="640" y="340" />
<mxPoint x="910" y="340" />
<mxPoint x="910" y="560" />
<mxPoint x="1025" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-47" value="" style="edgeStyle=segmentEdgeStyle;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=1.004;exitY=0.18;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="zCSSx3-7EyX81rC65PfA-1" target="X2i6eIDA0BgOuL5v0aOz-22" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="780" y="210" as="sourcePoint" />
<mxPoint x="830" y="160" as="targetPoint" />
<Array as="points">
<mxPoint x="670" y="143" />
<mxPoint x="670" y="290" />
<mxPoint x="1115" y="290" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-48" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="X2i6eIDA0BgOuL5v0aOz-23" target="X2i6eIDA0BgOuL5v0aOz-27" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1360" y="410" as="sourcePoint" />
<mxPoint x="1410" y="360" as="targetPoint" />
<Array as="points">
<mxPoint x="1370" y="370" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-49" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=1.004;exitY=0.701;exitDx=0;exitDy=0;exitPerimeter=0;dashed=1;" parent="1" source="X2i6eIDA0BgOuL5v0aOz-23" target="X2i6eIDA0BgOuL5v0aOz-34" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1350" y="334" as="sourcePoint" />
<mxPoint x="1495" y="410" as="targetPoint" />
<Array as="points">
<mxPoint x="1390" y="384" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="X2i6eIDA0BgOuL5v0aOz-50" value="" style="edgeStyle=segmentEdgeStyle;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="X2i6eIDA0BgOuL5v0aOz-4" target="X2i6eIDA0BgOuL5v0aOz-6" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="460" as="sourcePoint" />
<mxPoint x="610" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="Y6OEttpl3avurAEQQeT3" name="UML_Draft_2">
<mxGraphModel dx="3217" dy="713" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="2000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="P5k6exfduH83FtMq4Gyp-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="P5k6exfduH83FtMq4Gyp-1" target="P5k6exfduH83FtMq4Gyp-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" source="P5k6exfduH83FtMq4Gyp-1" target="F6ZRDP8oeWjW6RFUue4V-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-1" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>CyberdeckApp</b></p><hr size="1"><p style="margin:0px;margin-left:4px;">- m_pProcessHandlers: unordered_map&lt;string, unique_ptr&lt;ProcessHandler&gt;<br></p><p style="margin:0px;margin-left:4px;">- m_pConfig: shared_ptr&lt;Config&gt;<br></p><hr size="1"><p style="margin:0px;margin-left:4px;">+ Run(): void</p><p style="margin:0px;margin-left:4px;">+ End(): void</p><p style="margin:0px;margin-left:4px;">+ Start(): void<br></p><p style="margin:0px;margin-left:4px;">+ SignalProcess(const string&amp; name): bool</p><p style="margin:0px;margin-left:4px;">+ Config(): * const Config<br></p><p style="margin:0px;margin-left:4px;">- SignalHandler(): void</p><p style="margin:0px;margin-left:4px;">- CreateProcesses(): void<br></p><hr>&nbsp;main(int argc, char** argv): void<br><p style="margin:0px;margin-left:4px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="190" y="70" width="290" height="240" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-2" value="ProcessHandler" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="780" y="230" width="370" height="240" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-3" value="<div># m_Name: string</div><div># m_Thread: thread</div><div># m_pConfig: shared_ptr&lt;Config&gt;</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-2" vertex="1">
<mxGeometry y="26" width="370" height="54" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-4" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="P5k6exfduH83FtMq4Gyp-2" vertex="1">
<mxGeometry y="80" width="370" height="8" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-5" value="<div>+ ProcessHandler(const string&amp; name, shared_ptr&lt;Config&gt; pConfig): ProcessHandler</div><div>+ IsProcessActive(): bool;</div><div>+ Start(): void</div><div>+ End(): void<br></div><div>- CreateActiveFile(): void</div><div># StartProcess(): void = 0<br></div><div># EndProcess(): void = 0</div><div># ApplyConfigItems(): void = 0<br></div><div><br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-2" vertex="1">
<mxGeometry y="88" width="370" height="152" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-11" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;container=1;" parent="1" vertex="1">
<mxGeometry x="1430" y="600" width="230" height="160" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-12" value="PythonScript" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-11" vertex="1">
<mxGeometry x="22.691538461538585" y="23.88080459770117" width="184.62" height="57.26436781609195" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-14" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="P5k6exfduH83FtMq4Gyp-12" vertex="1">
<mxGeometry y="26" width="184.62" height="7.35632183908046" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-15" value="+ Run(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-12" vertex="1">
<mxGeometry y="33.35632183908046" width="184.62" height="23.908045977011493" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-16" value="Thread" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="P5k6exfduH83FtMq4Gyp-11" vertex="1">
<mxGeometry x="10" y="-5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-17" value="PythonHandler::ProcessHandler" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1050" y="490" width="370" height="140" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-18" value="<div>- m_pPythonScript: unique_ptr&lt;PythonScript&gt;</div><div><br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-17" vertex="1">
<mxGeometry y="26" width="370" height="24" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-19" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="P5k6exfduH83FtMq4Gyp-17" vertex="1">
<mxGeometry y="50" width="370" height="8" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-45" value="<div>+ StartProcess(): void override</div><div>+ EndProcess(): void override</div><div>- ApplyConfigItems(): void override<br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-17" vertex="1">
<mxGeometry y="58" width="370" height="82" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1.009;entryY=0.307;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;" parent="1" source="P5k6exfduH83FtMq4Gyp-22" target="P5k6exfduH83FtMq4Gyp-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-22" value="Config" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="540" y="180" width="190" height="220" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-23" value="<div>- m_Json: json</div><div>- m_Callbacks: vector&lt;pair&lt;string, function&gt;</div><div>- m_MonitorThread: thread<br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-22" vertex="1">
<mxGeometry y="26" width="190" height="64" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-24" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="P5k6exfduH83FtMq4Gyp-22" vertex="1">
<mxGeometry y="90" width="190" height="8" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-25" value="<div>+ GetJson(): const * json</div><div>+ GetJson(): *json</div><div>+ LoadFile(): bool</div><div>+ AddCallback(const pair&lt;string, function&gt;&amp; callback): void</div><div>+ MonitorFile(): void<br></div><div>- ConfigChanged(): void<br></div><div><br></div><div><br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="P5k6exfduH83FtMq4Gyp-22" vertex="1">
<mxGeometry y="98" width="190" height="122" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;dashed=1;" parent="1" source="P5k6exfduH83FtMq4Gyp-5" target="P5k6exfduH83FtMq4Gyp-17" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="P5k6exfduH83FtMq4Gyp-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="P5k6exfduH83FtMq4Gyp-18" target="P5k6exfduH83FtMq4Gyp-12" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="F6ZRDP8oeWjW6RFUue4V-3" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;container=1;strokeColor=#ff0000;" parent="1" vertex="1">
<mxGeometry x="111" y="520" width="450" height="60" as="geometry" />
</mxCell>
<mxCell id="F6ZRDP8oeWjW6RFUue4V-1" value="<div>PowerButtonProcess</div>" style="html=1;whiteSpace=wrap;strokeColor=#ff0000;" parent="F6ZRDP8oeWjW6RFUue4V-3" vertex="1">
<mxGeometry x="45" y="7" width="140" height="46" as="geometry" />
</mxCell>
<mxCell id="F6ZRDP8oeWjW6RFUue4V-2" value="LedMatrixProcess" style="html=1;whiteSpace=wrap;strokeColor=#ff0000;" parent="F6ZRDP8oeWjW6RFUue4V-3" vertex="1">
<mxGeometry x="285" y="7" width="140" height="46" as="geometry" />
</mxCell>
<mxCell id="Z2fJP3K-Zvr-JmSBq26_-1" value="<div>By starting a process, an empty .ProcessName file is made. The file is removed when ending the process. The running process on the different thread can then check whether it should be running.</div><div><br></div><div>When the running script ends, the thread resolves itself, the thread should be joined in End()<br></div>" style="shape=note;strokeWidth=2;fontSize=14;size=20;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#666600;" parent="1" vertex="1">
<mxGeometry x="800" y="490" width="230" height="230" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-1" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;container=1;strokeColor=#ff0000;" parent="1" vertex="1">
<mxGeometry x="111" y="630" width="230" height="160" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-2" value="PowerButtonPython" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=#ff0000;" parent="pMg7S4MkKOhf7tt3_51B-1" vertex="1">
<mxGeometry x="22.691538461538585" y="23.88080459770117" width="184.62" height="91.26436781609196" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-3" value="- m_ScriptHandle: *HANDLE" style="text;strokeColor=#ff0000;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="pMg7S4MkKOhf7tt3_51B-2" vertex="1">
<mxGeometry y="26" width="184.62" height="34" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-4" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=#ff0000;" parent="pMg7S4MkKOhf7tt3_51B-2" vertex="1">
<mxGeometry y="60" width="184.62" height="7.35632183908046" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-5" value="+ Run(): void" style="text;strokeColor=#ff0000;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="pMg7S4MkKOhf7tt3_51B-2" vertex="1">
<mxGeometry y="67.35632183908046" width="184.62" height="23.908045977011493" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-6" value="Thread" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pMg7S4MkKOhf7tt3_51B-1" vertex="1">
<mxGeometry x="10" y="-5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-7" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;container=1;strokeColor=#ff0000;" parent="1" vertex="1">
<mxGeometry x="351" y="630" width="230" height="160" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-8" value="LedMatrixPython" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=#ff0000;" parent="pMg7S4MkKOhf7tt3_51B-7" vertex="1">
<mxGeometry x="22.691538461538585" y="23.88080459770117" width="184.62" height="91.26436781609196" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-9" value="- m_ScriptHandle: *HANDLE" style="text;strokeColor=#ff0000;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="pMg7S4MkKOhf7tt3_51B-8" vertex="1">
<mxGeometry y="26" width="184.62" height="34" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-10" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=#ff0000;" parent="pMg7S4MkKOhf7tt3_51B-8" vertex="1">
<mxGeometry y="60" width="184.62" height="7.35632183908046" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-11" value="+ Run(): void" style="text;strokeColor=#ff0000;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="pMg7S4MkKOhf7tt3_51B-8" vertex="1">
<mxGeometry y="67.35632183908046" width="184.62" height="23.908045977011493" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-12" value="Thread" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pMg7S4MkKOhf7tt3_51B-7" vertex="1">
<mxGeometry x="10" y="-5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#ff0000;" parent="1" source="F6ZRDP8oeWjW6RFUue4V-1" target="pMg7S4MkKOhf7tt3_51B-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#f8cecc;strokeColor=#ff0000;" parent="1" source="F6ZRDP8oeWjW6RFUue4V-2" target="pMg7S4MkKOhf7tt3_51B-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-19" value="<div>.PowerButton</div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry y="580" width="80" height="100" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-20" value=".LedMatrix" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry y="710" width="80" height="100" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-21" value="CyberdeckConfig" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry y="460" width="80" height="100" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-22" value="dispatch" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;exitX=-0.003;exitY=0.612;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1">
<mxGeometry width="80" relative="1" as="geometry">
<mxPoint x="539.4300000000003" y="350.664" as="sourcePoint" />
<mxPoint x="460" y="388" as="targetPoint" />
<Array as="points">
<mxPoint x="500" y="358" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-23" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;container=1;" parent="1" vertex="1">
<mxGeometry x="401" y="390" width="124" height="80" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-24" value="MonitorFile(const char* pFileName): void" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" parent="pMg7S4MkKOhf7tt3_51B-23" vertex="1">
<mxGeometry x="7" y="20" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-25" value="Thread" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="pMg7S4MkKOhf7tt3_51B-23" vertex="1">
<mxGeometry width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-26" value="dispatch" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;exitX=1.001;exitY=0.146;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="P5k6exfduH83FtMq4Gyp-45" target="P5k6exfduH83FtMq4Gyp-16" edge="1">
<mxGeometry width="80" relative="1" as="geometry">
<mxPoint x="1310" y="660" as="sourcePoint" />
<mxPoint x="1470" y="600" as="targetPoint" />
<Array as="points">
<mxPoint x="1470" y="570" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="pMg7S4MkKOhf7tt3_51B-27" value="Monitoring for file changed events is done with inotify" style="shape=note;strokeWidth=2;fontSize=14;size=20;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#666600;" parent="1" vertex="1">
<mxGeometry x="540" y="410" width="170" height="50" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>