1 /*!
2 * @file BagDecision.qml
3 * @author Agiliad
4 * @brief This file contains functionality related to Sending Bag Decision.
5 * @date Jun, 11 2018
6 *
7 */
8
9 import QtQuick 2.7
10 import QMLEnums 1.0
11 import VREnums 1.0
12
13 Item {
14 property var commandenum
15 property alias tipInitialDecisionTimeralias: tipInitialDecisionTimer
16 property alias tipAnalysisTimeralias : tipAnalysisTimer
17 property var confirmationMsgPopup
18
19 Item
20 {
21 id: msgboxdecision
22 property var flag;
23 function messageDialogOnAccepted()
24 {
25 if(userDecisiontimeoutDialogTimer.running)
26 {
27 userDecisiontimeoutDialogTimer.stop()
28 }
29 console.info("Anurag::Anurag BagDecision messageDialogOnAccepted")
30 //msgboxexecuteuserdecision(flag);
31 //WorkstationVolumeRenderer.applyDecisionNextBag();
32 idlescreenobject.updateInactivityTimeoutInterval(false)
33 }
34 function messageDialogOnRejected()
35 {
36 msgboxexecuteuserdecision(flag+1);
37 }
38 }
39
40 function msgboxexecuteuserdecision(desision)
41 {
42 switch(desision)
43 {
44 case Enums.RELEASE_STOP_THE_CHECK_ACCEPT:
45 osrworkspacemodel.releaseStoptheCheckvisible = false
46 stopTheCheck(false)
47 executeDecision(commandenum)
48 break;
49 case Enums.RELEASE_STOP_THE_CHECK_REJECT:
50 osrworkspacemodel.releaseStoptheCheckvisible = false
51 stopTheCheck(true)
52 break;
53 case Enums.TRAY_PICKUP_ACCEPT:
54 osrworkspacemodel.isBagRendering = false;
55
WorkstationVolumeRenderer.vtkSettingsChanged(Enums.TEPC_NOTIFY_READY_FOR_PUSH_TRANS
FER);
56 sendVtkDecision(commandenum)
57 break;
58 case Enums.TRAY_PICKUP_REJECT:
59 osrworkspacemodel.isBagRendering = false;
60 sendVtkDecision(commandenum)
61 break;
62 case Enums.DECISION_TIMEOUT_ACCEPT:
63 if (!WorkstationVolumeRenderer.isTIPBag()
64 && ((viewobject.currentView === Enums.BAGSCREENING_SCREEN)
65 || (viewobject.currentView === Enums.TRAINING_BAG_SCREEN)))
66 {
67 var res =
WorkstationVolumeRenderer.validateUserDecisionForNonTIPBag(commandenum);
68 if(!res)
69 {
70 stopTheCheckRelease();
71 }
72 }
73 else
74 {
75 stopTheCheckRelease();
76 }
77 break;
78 case Enums.DECISION_TIMEOUT_REJECT:
79 break;
80 case Enums.TIP_DECISION_ACCEPT:
81 case Enums.TIP_DECISION_REJECT:
82 tipAnalysisTimer.stop();
83 executeDecision(commandenum);
84 break;
85 case Enums.NON_TIP_DECISION_ACCEPT:
86 case Enums.NON_TIP_DECISION_REJECT:
87 stopTheCheckRelease();
88 break;
89
90 case Enums.USER_CLEAR_DECISION_MSG_ACCEPT:
91 case Enums.USER_CLEAR_DECISION_MSG_REJECT:
92 stopTheCheckRelease();
93 break;
94
95 case Enums.USER_SUSPECT_DECISION_MSG_ACCEPT:
96 case Enums.USER_SUSPECT_DECISION_MSG_REJECT:
97 var reslt =
WorkstationVolumeRenderer.validateUserDecisionForNonTIPBag(commandenum);
98 if (!reslt)
99 {
100 stopTheCheckRelease();
101 }
102 break;
103
104 case Enums.USER_TIMEOUT_DECISION_MSG_ACCEPT:
105 case Enums.USER_TIMEOUT_DECISION_MSG_REJECT:
106 // Do the general timeout processing after feedback dialog dismissed
107 handleGeneralBagTimeoutProcessing(commandenum);
108 break;
109 }
110 }
111
112 function stopTheCheck(flag)
113 {
114 if(flag !== osrworkspacemodel.stopthecheckstatus)
115 {
116 osrworkspacemodel.stopthecheckstatus = flag;
117 osrworkspacemodel.runAnimation = flag;
118 WorkstationVolumeRenderer.setObviousThreatFlag(flag);
119 console.info("Send Stop-the-Check" + flag);
120 }
121 }
122
123 function stopTheCheckRelease()
124 {
125 if(osrworkspacemodel.stopthecheckstatus)
126 {
127 osrworkspacemodel.releaseStoptheCheckvisible = true
128 msgboxdecision.flag = Enums.RELEASE_STOP_THE_CHECK_ACCEPT;
129 createAndShowMessageBox(qsTr("Please confirm ") +
workstationConfig.getTranslatedText(workstationConfig.getHighThreatUpperText())
130 + " " +
workstationConfig.getTranslatedText(workstationConfig.getHi
ghThreatLowerText())
131 + qsTr(" for this bag?"),
132 Enums.OK | Enums.CANCEL, true, true, msgboxdecision)
133 }
134 else
135 {
136 executeDecision(commandenum);
137 }
138 }
139
140 function checkforTrayPickupAndSendDecision(tempdecision, tdgitm)
141 {
142
143 if(workstationConfig.isBagPickupEnabled()
144 && (viewobject.getWorkstationNameEnum() === Enums.OSR_WORKSTATION)
145 && (viewobject.currentView === Enums.BAGSCREENING_SCREEN)
146 && (tempdecision === Enums.TEPC_SUSPECT_BAG || tempdecision ===
Enums.TEPC_TIMEOUT_BAG)
147 && !WorkstationVolumeRenderer.isTIPBag())
148 {
149 msgboxdecision.flag = Enums.TRAY_PICKUP_ACCEPT;
150 createAndShowMessageBox(qsTr("Please press the OK button when the tray has been
picked up for hand search."),
151 Enums.OK, true, false, tdgitm);
152 }
153 else
154 {
155 osrworkspacemodel.isBagRendering = false;
156 sendVtkDecision(tempdecision);
157 }
158 }
159
160 function sendBagDecision(commandEnum, trainingDecisionInfo)
161 {
162 WorkstationVolumeRenderer.setBagDecisionTime();
163
164 tipInitialDecisionTimer.stop();
165 commandenum = commandEnum
166 osrworkspacemodel.bagDecisionProgressbarValue = 0.0;
167 osrworkspacemodel.bagDecisionTimeRemainingVisible = false
168 osrworkspacemodel.userdecisiontimer.stop();
169
170 if (WorkstationVolumeRenderer.isTIPBag()
171 && (viewobject.currentView === Enums.BAGSCREENING_SCREEN))
172 {
173 osrworkspacemodel.stopthecheckstatus = false;
174 osrworkspacemodel.runAnimation = false;
175 WorkstationVolumeRenderer.showTipThreat(commandenum);
176 }
177 else
178 {
179 if (commandEnum === Enums.TEPC_TIMEOUT_BAG)
180 {
181 if((confirmationMsgPopup !== undefined) && (confirmationMsgPopup !== null))
182 {
183 confirmationMsgPopup.close()
184 }
185 if (viewobject.currentView === Enums.TRAINING_BAG_SCREEN &&
186 trainingDecisionInfo !== undefined && trainingDecisionInfo.isValid)
187 {
188 // Training Simulator decision feedback for timeout case.
189 msgboxdecision.flag = Enums.USER_TIMEOUT_DECISION_MSG_ACCEPT;
190 createAndShowMessageBox(trainingDecisionInfo.message, Enums.OK, true, false,
191 msgboxdecision, 0, 0,
trainingDecisionInfo.messageColor,
192 trainingDecisionInfo.messageBgColor,
trainingDecisionInfo.title,
193 undefined, trainingDecisionInfo.dialogBgColor);
194 }
195 else
196 {
197 handleGeneralBagTimeoutProcessing(commandEnum);
198 }
199 }
200 else if ((commandEnum === Enums.TEPC_SUSPECT_BAG)
201 && ((viewobject.currentView === Enums.BAGSCREENING_SCREEN)
202 || (viewobject.currentView === Enums.TRAINING_BAG_SCREEN)))
203
204 {
205 if (viewobject.currentView === Enums.TRAINING_BAG_SCREEN &&
206 trainingDecisionInfo !== undefined && trainingDecisionInfo.isValid)
207 {
208 msgboxdecision.flag = Enums.USER_SUSPECT_DECISION_MSG_ACCEPT;
209 createAndShowMessageBox(trainingDecisionInfo.message, Enums.OK, true, false,
210 msgboxdecision, 0, 0,
trainingDecisionInfo.messageColor,
211 trainingDecisionInfo.messageBgColor,
trainingDecisionInfo.title,
212 undefined, trainingDecisionInfo.dialogBgColor);
213 }
214 else
215 {
216 var res =
WorkstationVolumeRenderer.validateUserDecisionForNonTIPBag(commandEnum);
217 if (!res)
218 {
219 stopTheCheckRelease();
220 }
221 }
222 }
223 else
224 {
225 if ((commandEnum === Enums.TEPC_CLEAR_BAG) && (viewobject.currentView ===
Enums.TRAINING_BAG_SCREEN &&
226 (trainingDecisionInfo !==
undefined &&
trainingDecisionInfo.isValid)))
227 {
228 msgboxdecision.flag = Enums.USER_CLEAR_DECISION_MSG_ACCEPT;
229 createAndShowMessageBox(trainingDecisionInfo.message, Enums.OK, true, false,
230 msgboxdecision, 0, 0,
trainingDecisionInfo.messageColor,
231 trainingDecisionInfo.messageBgColor,
trainingDecisionInfo.title,
232 undefined, trainingDecisionInfo.dialogBgColor);
233 }
234 else
235 {
236 stopTheCheckRelease();
237 }
238 }
239 }
240 }
241
242 function handleGeneralBagTimeoutProcessing(commandEnum)
243 {
244 if(workstationConfig.showDialogForUserDecisionTimeout() > 0)
245 {
246 msgboxdecision.flag = Enums.DECISION_TIMEOUT_ACCEPT
247 userDecisiontimeoutDialogTimer.userDecisionTimeoutMsgId =
createAndShowMessageBox(workstationConfig.getUserDecisionTimeoutText(),
248
Enums.OK,true,false, msgboxdecision)
249 userDecisiontimeoutDialogTimer.interval =
workstationConfig.showDialogForUserDecisionTimeout()
250 msgboxexecuteuserdecision(msgboxdecision.flag);
251 if(userDecisiontimeoutDialogTimer.interval > 0)
252 {
253 userDecisiontimeoutDialogTimer.start()
254 console.info("Anurag::Anurag BagDecision UserDecisionTimeout Started")
255 }
256 else
257 {
258 userDecisiontimeoutDialogTimer.stop()
259 }
260 }
261 else
262 {
263 var res = WorkstationVolumeRenderer.validateUserDecisionForNonTIPBag(commandEnum);
264 if (!res)
265 {
266 stopTheCheckRelease();
267 }
268 }
269 }
270
271 function sendVtkDecision(decision)
272 {
273 console.log("Anurag::Anurag BagDecision Send Vtk Decision called");
274 WorkstationVolumeRenderer.vtkSettingsChanged(decision);
275 }
276
277 function executeDecision(decision)
278 {
279 if ((osrworkspacemodel.pickboxModeDraw)||
280 (osrworkspacemodel.pickboxModeAccept))
281 {
282 WorkstationVolumeRenderer.vtkSettingsChanged(Enums.TEPC_PICKBOX_ACCEPT_ANOMALY);
283 }
284
285 viewobject.showHideOperatorThreatOptions(false);
286 osrworkspacemodel.updateScreeningPanelEnability(false);
287
288 if(WorkstationVolumeRenderer.getCurrentVRViewmode() === VREnums.VIEW_AS_SLAB)
289 {
290 osrworkspacemodel.slabModel.funcSetSelectedSlabViewType(VREnums.BAG_VIEW);
291 }
292 else
293 {
294 osrworkspacemodel.threeDimModel.funcSetSelected3DViewType(VREnums.VIEW_AS_SURFACE)
295 }
296
297 if (osrworkspacemodel.userdecisiontimer.running)
298 {
299 osrworkspacemodel.userdecisiontimer.stop();
300 osrworkspacemodel.bagDecisionProgressbarValue = 0.0;
301 osrworkspacemodel.totalIntervalPassed = 0;
302 osrworkspacemodel.bagDecisionTimeRemaining =
workstationConfig.getBagDecisionTimeout()/1000
303 osrworkspacemodel.bagDecisionTimeTemp =
workstationConfig.getBagDecisionTimeout()/1000
304
305 }
306
307 osrworkspacemodel.threatOnlyMode = false;
308 osrworkspacemodel.threatColorizationEnable = false;
309 osrworkspacemodel.showAllThreat = false;
310 osrworkspacemodel.setDefaultVal();
311 osrworkspacemodel.reloadPresetButtonClicked();
312 osrworkspacemodel.setVariableDensitySliderValue(0);
313 osrworkspacemodel.resetMeasurementBoxButtons();
314
315 checkforTrayPickupAndSendDecision(commandenum, msgboxdecision);
316
317 if ((osrworkspacemodel.getScreen() === Enums.RERUNSELECTION_BAG_SCREEN)
318 || (osrworkspacemodel.getScreen() === Enums.TRAINING_BAG_SCREEN))
319 {
320 if (commandenum !== Enums.TEPC_NEXT_BAG && commandenum !== Enums.TEPC_STOP_BAG)
321 {
322 viewobject.notifyOperatorDecision("",commandenum,
WorkstationVolumeRenderer.getOperatorDecisiontime(),WorkstationVolumeRenderer.get
BagRenderedtime());
323
324 WorkstationVolumeRenderer.vtkSettingsChanged(Enums.TEPC_NEXT_BAG);
325 }
326 if (commandenum === Enums.TEPC_STOP_BAG)
327 {
328 viewobject.notifyOperatorDecision("",commandenum,
WorkstationVolumeRenderer.getOperatorDecisiontime(),WorkstationVolumeRenderer.get
BagRenderedtime());
329
330 }
331
332 }
333 }
334
335 Timer
336 {
337 id: tipAnalysisTimer
338 interval: workstationConfig.getTipAnalysisTimeout()
339 repeat: false;
340 property var msgDlgId;
341 onTriggered:
342 {
343 //On Message box close event execute decision function gets call
344 msgDlgId.close();
345 }
346 }
347 Timer
348 {
349 id: tipInitialDecisionTimer
350 interval: workstationConfig.getTipInitialDecisionTimeout()
351 repeat: false;
352 onTriggered:
353 {
354 sendBagDecision(Enums.TEPC_TIMEOUT_BAG)
355 }
356 }
357
358 Timer
359 {
360 id: userDecisiontimeoutDialogTimer
361 interval: workstationConfig.showDialogForUserDecisionTimeout()
362 repeat: false;
363 property var userDecisionTimeoutMsgId;
364 onTriggered:
365 {
366 //On Message box close event execute decision function gets call
367 if(userDecisionTimeoutMsgId !== undefined)
368 {
369 userDecisionTimeoutMsgId.close();
370 }
371 }
372 }
373 Connections {
374 target: WorkstationVolumeRenderer
375 onShowTIPResult:
376 {
377 var bgColor;
378 var textColor;
379 if (result === Enums.TIP_HIT)
380 {
381 msgboxdecision.flag = Enums.TIP_DECISION_ACCEPT;
382 bgColor = tipConfigModel.tipHitBgColor;
383 textColor = tipConfigModel.tipHittextColor;
384 }
385 else if (result === Enums.TIP_MISS)
386 {
387 msgboxdecision.flag = Enums.TIP_DECISION_ACCEPT;
388 bgColor = tipConfigModel.tipMissBgColor;
389 textColor = tipConfigModel.tipMisstextColor;
390 }
391 else if (result === Enums.TIP_NONE)
392 {
393 msgboxdecision.flag = Enums.NON_TIP_DECISION_ACCEPT;
394 bgColor = tipConfigModel.tipNonTIPBgColor;
395 textColor = tipConfigModel.tipNonTIPtextColor;
396 }
397
398 tipAnalysisTimer.msgDlgId = createAndShowMessageBox(message, Enums.OK, true,
false, msgboxdecision,
399 0,
osrworkspacemodel.interactiveIm
agePanelPos +
osrworkspacemodel.titleBarHeigh
t + 60,
400 textColor, bgColor);
401 if(msgboxdecision.flag === Enums.TIP_DECISION_ACCEPT)
402 {
403 tipAnalysisTimer.interval = workstationConfig.getTipAnalysisTimeout()
404 if (tipAnalysisTimer.interval > 0)
405 {
406 tipAnalysisTimer.start();
407 }
408 else
409 {
410 tipAnalysisTimer.stop();
411 }
412 }
413 }
414 }
415 }
416