Index: sources/gui/qml/main.qml =================================================================== diff -u -r7710fea4486a639caaa3c510add0eac0bcd4ddcc -r108450c58851ff7c48c4607494b8cdae59952908 --- sources/gui/qml/main.qml (.../main.qml) (revision 7710fea4486a639caaa3c510add0eac0bcd4ddcc) +++ sources/gui/qml/main.qml (.../main.qml) (revision 108450c58851ff7c48c4607494b8cdae59952908) @@ -5,11 +5,11 @@ * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * - * \file main.qml - * \author (last) Peter Lucia - * \date (last) 15-Oct-2020 - * \author (original) Behrouz NematiPour - * \date (original) 24-Sep-2019 + * \file main.qml + * \author (last) Behrouz NematiPour + * \date (last) 28-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 24-Sep-2019 * */ @@ -18,42 +18,101 @@ // Project // C++ imports -import Gui.View 0.1 -import Gui.Actions 0.1 +import Gui.View 0.1 +import Gui.Actions 0.1 -// TODO : When Testing data on Setting screen is removed -// This needs to be moved into the TreatmentFlows.qml -import VTreatmentBloodFlow 0.1 -import VTreatmentDialysateFlow 0.1 -import VTreatmentPressureOcclusion 0.1 -import VTreatmentUltrafiltration 0.1 -import VTreatmentTime 0.1 -import VAlarmStatus 0.1 -import VPowerOff 0.1 -import VHDOperationMode 0.1 +// View classes +import VHDAccelerometer 0.1 +import VHDSyringePump 0.1 -import VTreatmentAdjustmentDuration 0.1 -import VTreatmentAdjustmentFlows 0.1 +// POST +import VHDPOSTData 0.1 +import VDGPOSTData 0.1 -import VTreatmentCreate 0.1 -import VDGDrainPump 0.1 -import VDGHeaters 0.1 -import VDGLoadCellReadings 0.1 -import VDGOperationMode 0.1 -import VDGPressures 0.1 -import VDGROPump 0.1 -import VDGReservoir 0.1 -import VDGTemperatures 0.1 -import VDGValvesStates 0.1 -import VPriming 0.1 -import VTreatmentBegin 0.1 -import VTreatmentEnd 0.1 -import VTreatmentAdjustmentUltrafiltrationInit 0.1 +// Device +import VDevice 0.1 +// Settings +import VSettings 0.1 +import VAdjustmentVersions 0.1 +import VAdjustmentService 0.1 +import VDateTime 0.1 +import VNetworkModel 0.1 +import VAdjustmentAlarmVolume 0.1 +import VBluetooth 0.1 + +// States views +import VHDOperationMode 0.1 +import VPreTreatmentStates 0.1 +import VHDTreatmentStates 0.1 +import VPostTreatmentStates 0.1 +import VDisinfectStates 0.1 + +// Treatment - Common +import VTreatmentVitals 0.1 +// In-Treatment - Data +import VTreatmentBloodFlow 0.1 +import VTreatmentDialysateFlow 0.1 +import VTreatmentPressureOcclusion 0.1 +import VTreatmentUltrafiltration 0.1 +import VTreatmentTime 0.1 +import VTreatmentRinseback 0.1 +import VTreatmentRecirculate 0.1 +import VTreatmentBloodPrime 0.1 +import VTreatmentStop 0.1 +import VTreatmentRanges 0.1 +// Pre-Treatment +import VPreTreatmentAdjustmentInitTreatment 0.1 +import VDGFilterFlush 0.1 +import VPreTreatmentAdjustmentWaterSample 0.1 +import VPreTreatmentAdjustmentConsumablesConfirm 0.1 +import VPreTreatmentSelfTestNoCartridge 0.1 +import VPreTreatmentAdjustmentDisposablesConfirm 0.1 +import VPreTreatmentSelfTestDry 0.1 +import VPreTreatmentAdjustmentDisposablesPrime 0.1 +import VPreTreatmentDisposablesPrime 0.1 +import VPreTreatmentAdjustmentPatientConnectionBegin 0.1 +import VPreTreatmentAdjustmentUltrafiltrationInit 0.1 +import VPreTreatmentAdjustmentPatientConnectionConfirm 0.1 +import VPreTreatmentAdjustmentStartTreatment 0.1 +// --- +import VDGDrainPump 0.1 +import VDGHeaters 0.1 +import VDGLoadCellReadings 0.1 +import VDGOperationMode 0.1 +import VDGPressures 0.1 +import VDGROPump 0.1 +import VDGReservoir 0.1 +import VDGTemperatures 0.1 +import VDGValvesStates 0.1 +import VTreatmentCreate 0.1 +import VDGAccelerometer 0.1 +// In-Treatment - Adjustemnt +import VTreatmentAdjustmentDuration 0.1 +import VTreatmentAdjustmentFlows 0.1 +import VTreatmentAdjustmentUltrafiltrationState 0.1 +import VTreatmentAdjustmentUltrafiltrationEdit 0.1 +import VTreatmentAdjustmentUltrafiltrationConfirm 0.1 +import VTreatmentAdjustmentPressuresLimits 0.1 +import VTreatmentAdjustmentSaline 0.1 +import VTreatmentAdjustmentHeparin 0.1 +import VTreatmentAdjustmentRinseback 0.1 +import VTreatmentAdjustmentRecirculate 0.1 +import VTreatmentAdjustmentEnd 0.1 +// Post-Treatmnt +import VPostTreatmentAdjustmentPatientDisconnectionConfirm 0.1 +import VPostTreatmentAdjustmentDisposablesRemovalConfirm 0.1 +import VPostTreatmentAdjustmentTreatmentLog 0.1 +// Disinfection +import VDisinfectAdjustDisinfect 0.1 +import VDisinfectAdjustChemicalConfirm 0.1 +import VDisinfectDGData 0.1 + // Qml imports import "qrc:/globals" import "qrc:/pages" import "qrc:/pages/treatment" +import "qrc:/pages/settings" import "qrc:/components" import "qrc:/dialogs" @@ -64,161 +123,124 @@ width : Variables.applicationWidth height: Variables.applicationHeight - property alias powerOffDialog: _powerOffDialog + VHDPOSTData { id: vHDPOSTData } + VDGPOSTData { id: vDGPOSTData } - GuiView { id: _GuiView - onDidActionReceive: { - //console.debug(vAction, vData) - switch(vAction) { - case GuiActions.ID_ShuttingDown: - _autoHideInfo.showDialog( - qsTr("System is shutting down"), - 5000 // if any error happens and shutdown is not successful then after 5 seconds dialog hides. - ) - break; - } - } + VDevice { id: vDevice } + VSettings { id: vSettings } + VAdjustmentVersions { id: vAdjustmentVersions } + VAdjustmentService { id: vAdjustmentService } + VDateTime { id: vDateTime } + VNetworkModel { id: vNetwork } + VAdjustmentAlarmVolume { id: vAdjustmentAlarmVolume } + VBluetooth { id: vBluetooth } + + // ---- States + VHDOperationMode { id: vHDOperationMode } + VPreTreatmentStates { id: vPreTreatmentStates } + VHDTreatmentStates { id: vHDTreatmentStates } + VPostTreatmentStates { id: vPostTreatmentStates } + VDisinfectStates { id: vDisinfectStates } + + VTreatmentBloodFlow { id: vTreatmentBloodFlow } + VTreatmentVitals { id: vTreatmentVitals + interval : vTreatmentCreate.bloodPressureMeasureInterval } - // TODO : When Testing data on Setting screen is removed - // This needs to be moved into the Treatment______.qml - VAlarmStatus { id: vAlarmStatus } - VPowerOff { id: vPowerOff } - VHDOperationMode { id: vHDOperationMode } - VTreatmentBloodFlow { id: vTreatmentBloodFlow } - VTreatmentDialysateFlow { id: vTreatmentDialysateFlow } - VTreatmentPressureOcclusion { id: vTreatmentPressureOcclusion } - VTreatmentUltrafiltration { id: vTreatmentUltrafiltration } - VTreatmentTime { id: vTreatmentTime } + VTreatmentDialysateFlow { id: vTreatmentDialysateFlow } + VTreatmentPressureOcclusion { id: vTreatmentPressureOcclusion } + VTreatmentUltrafiltration { id: vTreatmentUltrafiltration } + VTreatmentTime { id: vTreatmentTime } + VTreatmentBloodPrime { id: vTreatmentBloodPrime } + VTreatmentRinseback { id: vTreatmentRinseback } + VTreatmentRecirculate { id: vTreatmentRecirculate } + VTreatmentStop { id: vTreatmentStop } + VHDAccelerometer { id: vHDAccelerometer } + VHDSyringePump { id: vHDSyringePump } + // ---- DG + VDGDrainPump { id: vDGDrainPump } + VDGHeaters { id: vDGHeaters } + VDGLoadCellReadings { id: vDGLoadCellReadings } + VDGOperationMode { id: vDGOperationMode } + VDGPressures { id: vDGPressures } + VDGROPump { id: vDGROPump } + VDGReservoir { id: vDGReservoir } + VDGTemperatures { id: vDGTemperatures } + VDGValvesStates { id: vDGValvesStates } + VDGAccelerometer { id: vDGAccelerometer } - VDGDrainPump { id: vDGDrainPump } - VDGHeaters { id: vDGHeaters } - VDGLoadCellReadings { id: vDGLoadCellReadings } - VDGOperationMode { id: vDGOperationMode } - VDGPressures { id: vDGPressures } - VDGROPump { id: vDGROPump } - VDGReservoir { id: vDGReservoir } - VDGTemperatures { id: vDGTemperatures } - VDGValvesStates { id: vDGValvesStates } + // --- Pre-Treatment Progress Data + VPreTreatmentAdjustmentInitTreatment { id: vPreTreatmentAdjustmentInitTreatment } + VDGFilterFlush { id: vDGFilterFlush } + VPreTreatmentAdjustmentWaterSample { id: vPreTreatmentAdjustmentWaterSample } + VPreTreatmentAdjustmentConsumablesConfirm { id: vPreTreatmentAdjustmentConsumablesConfirm } + VPreTreatmentSelfTestNoCartridge { id: vPreTreatmentSelfTestNoCartridge } + VPreTreatmentAdjustmentDisposablesConfirm { id: vPreTreatmentAdjustmentDisposablesConfirm } + VPreTreatmentSelfTestDry { id: vPreTreatmentSelfTestDry } + VPreTreatmentAdjustmentDisposablesPrime { id: vPreTreatmentAdjustmentDisposablesPrime } + VPreTreatmentDisposablesPrime { id: vPreTreatmentDisposablesPrime } + VPreTreatmentAdjustmentPatientConnectionBegin { id: vPreTreatmentAdjustmentPatientConnectionBegin } + VPreTreatmentAdjustmentUltrafiltrationInit { id: vPreTreatmentAdjustmentUltrafiltrationInit } + VPreTreatmentAdjustmentPatientConnectionConfirm { id: vPreTreatmentAdjustmentPatientConnectionConfirm } + VPreTreatmentAdjustmentStartTreatment { id: vPreTreatmentAdjustmentStartTreatment } - VTreatmentAdjustmentDuration { id: vTreatmentAdjustmentDuration } - VTreatmentAdjustmentFlows { id: vTreatmentAdjustmentFlows } - VTreatmentCreate { id: vTreatmentCreate } - VPriming { id: vPriming } - VTreatmentBegin { id: vTreatmentBegin } - VTreatmentEnd { id: vTreatmentEnd } - VTreatmentAdjustmentUltrafiltrationInit { id: vTreatmentAdjustmentUltrafiltrationInit } + // --- + VTreatmentAdjustmentDuration { id: vTreatmentAdjustmentDuration } + VTreatmentAdjustmentFlows { id: vTreatmentAdjustmentFlows } + VTreatmentCreate { id: vTreatmentCreate } + VTreatmentRanges { id: vTreatmentRanges } + VTreatmentAdjustmentSaline { id: vTreatmentAdjustmentSaline } + VTreatmentAdjustmentUltrafiltrationState { id: vTreatmentAdjustmentUltrafiltrationState } + VTreatmentAdjustmentUltrafiltrationEdit { id: vTreatmentAdjustmentUltrafiltrationEdit } + VTreatmentAdjustmentUltrafiltrationConfirm { id: vTreatmentAdjustmentUltrafiltrationConfirm } + VTreatmentAdjustmentPressuresLimits { id: vTreatmentAdjustmentPressuresLimits } + VTreatmentAdjustmentHeparin { id: vTreatmentAdjustmentHeparin } + VTreatmentAdjustmentRinseback { id: vTreatmentAdjustmentRinseback } + VTreatmentAdjustmentRecirculate { id: vTreatmentAdjustmentRecirculate } + VTreatmentAdjustmentEnd { id: vTreatmentAdjustmentEnd } + + // --- Post Treatment + VPostTreatmentAdjustmentPatientDisconnectionConfirm { id: vPostTreatmentAdjustmentPatientDisconnectionConfirm } + VPostTreatmentAdjustmentDisposablesRemovalConfirm { id: vPostTreatmentAdjustmentDisposablesRemovalConfirm } + VPostTreatmentAdjustmentTreatmentLog { id: vPostTreatmentAdjustmentTreatmentLog } + + // --- Disinfection + VDisinfectAdjustDisinfect { id: vDisinfectAdjustDisinfect } + VDisinfectAdjustChemicalConfirm { id: vDisinfectAdjustChemicalConfirm } + VDisinfectDGData { id: vDisinfectDGData } + + Background {} + + GuiView { id: _GuiView } + // ----- Follow the below Z order ----- // 1 - Screens // 1 - 1 - SettingsStack { id: _settingsStack } + SettingsStack { id: _settingsStack } // 1 - 2 - ManagerStack { id: _managerStack } + ManagerStack { id: _managerStack } // 1 - 3 - TreatmentStack { id: _treatmentStack } + MainStack { id: _mainStack } // 3 - Footer MainMenu { id: _mainMenu + hidden: true // it should be hidden by default since the landing screen changed to init and it does not have the main menu untill the POST passes. titles: [ qsTr("Treatment") , qsTr("Manager") , qsTr("Settings") ] Component.onCompleted: { - _treatmentStack.visible = true + _settingsStack.visible = false + _managerStack .visible = false + _mainStack .visible = true } + onItemPressed: { - _treatmentStack.visible = vIndex == 0; - _managerStack .visible = vIndex == 1; - _settingsStack .visible = vIndex == 2; + _mainStack .visible = vIndex == 0 + _managerStack .visible = vIndex == 1 + _settingsStack.visible = vIndex == 2 } } - // 4 - Modals - AutoHideInfo { id: _autoHideInfo } - PowerOff { id: _powerOffDialog - onAccepted: { - _GuiView.doActionTransmit(GuiActions.ID_PowerOff, GuiActions.Accepted) - } - onRejected: { - _GuiView.doActionTransmit(GuiActions.ID_PowerOff, GuiActions.Rejected) - } - } - - // Alarms - function alarmMinimize() { - _alarmDialog .visible = false - _alarmListDialog.visible = false - _alarmBar .visible = true - } - function alarmMaximize() { - _alarmDialog .visible = true - _alarmListDialog.visible = false - _alarmBar .visible = false - } - function alarmList() { - _alarmDialog .visible = false - _alarmListDialog.visible = true - _alarmBar .visible = false - } - function alarmHide() { - _alarmDialog .visible = false - _alarmListDialog.visible = false - _alarmBar .visible = false - } - - NotificationBar { id : _alarmBar - backgroundColor : _alarmDialog.backgroundColor - textColor : _alarmDialog.textColor - anchors.bottom : _mainMenu.top - text : vAlarmStatus.text; - isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced - timeout : vAlarmStatus.alarm_MuteTimeout - - onMuteClicked : vAlarmStatus.doSilence() - onListClicked : alarmList() - onMaximizeClicked : alarmMaximize() - onClicked : alarmMaximize() - } - - // TODO : Later need to create a base Notification dialog class - // and inherit NotificationDialog and AlarmListDialog from that - // Beter be the NotificationDialog defined as parent - // and two separate dialogs by the names of AlarmDialog , AlarmListDlialog creatd. - // Same for the Notification Bar - NotificationDialog { id : _alarmDialog - // this will change later to the actual message text - // and the instruction would be in the dialog content - titleText : "Alarm" - description : vAlarmStatus.text - alarmID : vAlarmStatus.alarm_AlarmID - isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced - timeout : vAlarmStatus.alarm_MuteTimeout - okVisible : vAlarmStatus.alarm_Flag_UserMustAck - resumeVisible : ! vAlarmStatus.alarm_Flag_noResume - rinsebackVisible : ! vAlarmStatus.alarm_Flag_noRinseback - endVisible : ! vAlarmStatus.alarm_Flag_noEndTreatment - - onMuteClicked : vAlarmStatus.doSilence () - onResumeClicked : vAlarmStatus.doUserActionResume () - onRinsebackClicked : vAlarmStatus.doUserActionRinseback() - onEndClicked : vAlarmStatus.doUserActionEnd () - onOkClicked : vAlarmStatus.doUserActionOk () - onMinimizeClicked : { - alarmMinimize() - // when user minimizes the alarm it can stay minimized until otherwize is set - // by the next alarm status received. - // see also the "Connections { target: vAlarmStatus" implementation - vAlarmStatus.alarm_KeepMinimized = true - // DEBUG: vAlarmStatus.doClearCondition() - } - } - - AlarmListDialog { id : _alarmListDialog - isSilenced : vAlarmStatus.alarm_Flag_alarmsSilenced - timeout : vAlarmStatus.alarm_MuteTimeout - onMuteClicked : vAlarmStatus.doSilence() - onMinimizeClicked : alarmMinimize() - } - // 9 - Others Text { // TEST : Application version should be moved into the information screen later. color : Colors.textMain @@ -235,77 +257,64 @@ font.pixelSize: 14 } - Rectangle { // TEST : SD-Card not present should be handled with better indication(s). - color : ! _GuiView.sdIsReady ? "red" : _GuiView.sdIsReadOnly ? "gray" : "green" + Text { // TEST : Ethernet IP + color : Colors.textMain anchors { top : parent.top - right : parent.right - topMargin : 5 - rightMargin : 5 + left : parent.left + leftMargin : 450 } - width : 25 - height: 25 - radius: width - Image { id: _imageMicrosd - anchors.fill: parent - source: "qrc:/images/iMicroSD" - } - visible: true // ! _GuiView.sdIsReady || _GuiView.sdIsReadOnly + horizontalAlignment : Text.Alignleft + verticalAlignment : Text.AlignBottom + + height : 15 + text : vNetwork.ethernetIP + font.pixelSize: 14 } - Connections { target: vPowerOff - onPoweroffTriggered: { - switch (vpoweroff) { - case GuiActions.Command: - _powerOffDialog.open() - break; + Text { // TEST : Current Date/Time + color : Colors.textMain + anchors { + top : parent.top + left : parent.left + leftMargin : 1000 + } + horizontalAlignment : Text.Alignleft + verticalAlignment : Text.AlignBottom - case GuiActions.Timeout: - _powerOffDialog.close() - break; + height : 15 + text : vDateTime.current + font.pixelSize: 14 + } - case GuiActions.Rejected: - _autoHideInfo.showDialog( - qsTr("Cannot shutdown during 'Treatment'"), // '%1').arg() - 2000 // notifies user and hides the dialog - ) - break; - } + SDItem { id: _sdItem + // TODO: disable this later. this is only for diagnostic purpose. + onDoubleClicked : { + _diagnosticsDialog.open() } } - Connections { target: vAlarmStatus - onAlarm_Flag_noResumeChanged : vAlarmStatus.alarm_KeepMinimized = false - onAlarm_Flag_noRinsebackChanged : vAlarmStatus.alarm_KeepMinimized = false - onAlarm_Flag_noEndTreatmentChanged : vAlarmStatus.alarm_KeepMinimized = false - onAlarm_Flag_UserMustAckChanged : vAlarmStatus.alarm_KeepMinimized = false - onAlarm_AlarmIDChanged : vAlarmStatus.alarm_KeepMinimized = false - onAlarm_Flag_alarmsSilencedChanged : vAlarmStatus.alarm_KeepMinimized = vAlarmStatus.alarm_Flag_alarmsSilenced - onAlarm_PriorityChanged: { - [ - _alarmDialog.titleBarBackground, - _alarmDialog.titleBarForeground, - _alarmDialog.backgroundColor , - _alarmDialog.textColor , - ] = Colors.alarmPriorityColors(vAlarmStatus.alarm_Priority) - } + // keyboard should always be before AlarmItem to not to covet it. + VirtualKeyboard { id: _keyboard } - onDidAlarmRaise: { - let silenceMinimize = false - if (vAlarmStatus.alarm_Flag_alarmsSilenced && silenceMinimize) { - // this is the response to the silence request - // so the dialog should be closed when the request accepted - // if not then if can stay minimized nothing happens - // if can't stay minimized then it has to be shown - alarmMinimize() - } - else { - if (! vAlarmStatus.alarm_KeepMinimized) { - alarmMaximize() - } - } - } + // AlarmItem should always be at the end so nothing covers it + AlarmItem { id: _alarmItem ; z: 997 } - onDidAlarmEmpty: alarmHide() + // PowerOff screen should still be avilable. Even if the Alarm happens the Power option should be available. + PowerItem { id: _powerItem ; z: 998 } + + // this dialog as an exception can cover the Alarm for debugging and testing. + DiagnosticsDialog { id: _diagnosticsDialog; z: 999 } + + // NotificationBar has to be anchored to the main menu and if it is moved into the AlarmItem + // then cannot be anchored. + NotificationBar { id: _alarmBar + anchors.bottom : _mainMenu.top + backgroundColor : _alarmItem.backgroundColor + textColor : _alarmItem.textColor + text : _alarmItem.text + isSilenced : _alarmItem.isSilenced + timeout : _alarmItem.timeout + backgroundFading : vHDOperationMode.fault } }