Index: sources/gui/qml/pages/treatment/TreatmentStack.qml =================================================================== diff -u -r56e378f7504701b9e9a9dccaf205aef2fd52c58e -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 --- sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision 56e378f7504701b9e9a9dccaf205aef2fd52c58e) +++ sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) @@ -1,31 +1,28 @@ /*! * - * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. * \copyright * 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 TreatmentStack.qml - * \author (last) Behrouz NematiPour - * \date (last) 18-Aug-2020 - * \author (original) Behrouz NematiPour - * \date (original) 27-Jan-2020 + * \file TreatmentStack.qml + * \author (last) Vy + * \date (last) 14-Jun-2023 + * \author (original) Behrouz NematiPour + * \date (original) 27-Jan-2020 * */ // Qt import QtQuick 2.12 +//import QtCharts 2.3 -// Project -import Gui.Actions 0.1 -import VTreatmentRanges 0.1 -import VTreatmentAdjustmentSaline 0.1 -import VHDTreatmentStates 0.1 - // Qml imports import "qrc:/globals" import "qrc:/components" +import "qrc:/compounds" import "qrc:/pages/treatment/adjustments" + /*! * \brief TreatmentStack is the screen * which contains the main stack for all the Trearment screens @@ -35,181 +32,196 @@ StackItem { id : _root objectName: "TreatmentStack" - stackView.initialItem : _treatmentHome - - // Views - VTreatmentRanges { id: vTreatmentRanges } - VTreatmentAdjustmentSaline { id: vTreatmentAdjustmentSaline } - VHDTreatmentStates { id: vHDTreatmentStates - property bool ufPaused : ufState === GuiActions.UF_PAUSED_STATE - property bool txPaused : subMode === GuiActions.TREATMENT_DIALYSIS_STATE + onVisibleChanged : { // this should never happen by design, but in tests it can easily happen and will block the screen touch. + _treatmentAdjustmentFlow .close() + _vitalEntry .close( true ) // vQuit == true + _treatmentAdjustmentPressuresLimits .close() + _treatmentAdjustmentDuration .close() + _treatmentUltrafiltrationItem .close() } + stackView.initialItem : null + + // ultrafiltration state information bar properties + readonly property bool isUFPaused : vHDTreatmentStates.ufPaused + readonly property bool isUFRunning : vHDTreatmentStates.ufRunning + readonly property string ufInfoImageSource : isUFPaused ? "qrc:/images/iPauseGray" : "" + readonly property string ufInfoText : isUFPaused ? qsTr("Ultrafiltration Paused" ) : "" + readonly property string ufInfoTextColor : isUFPaused ? "gray" : "" + + readonly property bool isSBInProgress : ( vHDTreatmentStates.sbRunning || vHDTreatmentStates.sbWaitPump ) + + readonly property bool isDialogOpened : _treatmentAdjustmentFlow .visible + || _treatmentAdjustmentPressuresLimits .visible + || _treatmentAdjustmentDuration .visible + || _treatmentUltrafiltrationItem .visible // Components - MainMenu { id: _treatmentMenu - y : -Variables.mainMenuHeight + MainMenu { id: _treatmentMenu + y : Variables.mainMenuHeight * -1 position : MainMenu.Position.Top hidden : true - titles : [ qsTr("Back") , qsTr("Treatment") , qsTr("Trending") , qsTr("Settings") ] + titles : [ qsTr("Treatment") , qsTr("Trending") , qsTr("Settings") ] + visibleItems : [ true , false , false ] spacing : 20 leftPdding : 20 - partitionWidth : 100 // Todo Important : max width should be the width for all + rightPdding : 50 + partitionWidth : 100 // Todo Important : max width should be the width for all bottons hasRightText : true hasLogo : true + /* ----- TEST: Under the test code, for the plotting of the items ----- + onCurrentIndexChanged: { + console.debug(currentIndex) + if (currentIndex == 1) push(_treatmentTrending) + if (currentIndex == 0) pop() + } + */ } - TreatmentHome { id: _treatmentHome - onTreatmentStarted : push( _treatmentStart ) - onTreatmentCreated : push( _treatmentCreate) - } + TreatmentBloodPrime { id: _treatmentBloodPrime } + TreatmentUltrafiltrationItem{ id: _treatmentUltrafiltrationItem } + TreatmentHome { id: _treatmentHome } - TreatmentStart { id: _treatmentStart - onBackClicked : pop () - onSectionFlowClicked : { + Connections { target: _treatmentHome + function onSectionFlowClicked ( vValue ) { _treatmentAdjustmentFlow.open() } - onSectionTimeClicked : { - _treatmentAdjustmentDuration.durationValue = vTreatmentTime.time_Total / 60 // minutes => hours + function onSectionVitalsClicked ( vValue ) { + _vitalEntry.open() + } + function onSectionPressuresClicked ( vValue ) { + _treatmentAdjustmentPressuresLimits.open() + } + function onSectionTimeClicked ( vValue ) { + //DEBUG: console.log("time total minutes: " + vTreatmentTime.time_Total / 60 ) + _treatmentAdjustmentDuration.setDurationValue(vTreatmentTime.time_Total / 60) // minutes => hours _treatmentAdjustmentDuration.open() } - onSectionUltrafiltrationClicked: { - if ( - vTreatmentAdjustmentUltrafiltrationState.isPaused || // comes from the treatment adjustment - vHDTreatmentStates.ufPaused // comes from the broadcast Treatment States salineState field - ) { - _treatmentAdjustmentUltrafiltrationPaused.open() - } else { - _treatmentAdjustmentUltrafiltrationStart .open() - } + function onSectionUltrafiltrationClicked ( vValue ) { + _treatmentUltrafiltrationItem.open() } } - TreatmentCreate { id: _treatmentCreate - onBackClicked : pop() - } + ScreenItem { id: _treatmentTrending } //// Treatment Adjustment Dialogs - TreatmentAdjustmentFlow { id: _treatmentAdjustmentFlow - onCloseClicked : close() - onConfirmClicked : vTreatmentAdjustmentFlows.doAdjustment(bloodFlowRateValue, dialysateFlowRateValue) + TreatmentAdjustmentFlow { id: _treatmentAdjustmentFlow } + TreatmentAdjustmentPressuresLimits { id: _treatmentAdjustmentPressuresLimits } + + Connections { target: _treatmentAdjustmentFlow + function onConfirmClicked ( vValue ) { vTreatmentAdjustmentFlows.doAdjustment( + _treatmentAdjustmentFlow.bloodFlowRateValue , + _treatmentAdjustmentFlow.dialysateFlowRateValue ) + } } - TreatmentAdjustmentDuration { id: _treatmentAdjustmentDuration - onCloseClicked : close() - onConfirmClicked : vTreatmentAdjustmentDuration.doAdjustment(durationValue) + Connections { target: _treatmentAdjustmentPressuresLimits + function onConfirmClicked ( vValue ) { vTreatmentAdjustmentPressuresLimits.doAdjustment( + _treatmentAdjustmentPressuresLimits.arterialPressureLimitWindow , + _treatmentAdjustmentPressuresLimits.venousPressureLimitWindow , + _treatmentAdjustmentPressuresLimits.venousPressureLimitAsymtrc ) + } } - TreatmentAdjustmentUltrafiltrationStart { id: _treatmentAdjustmentUltrafiltrationStart - onCloseClicked : close() - onPauseClicked : { - // send pause to HD and wait. - // if accepted close() - // not accepted show error in notification - vTreatmentAdjustmentUltrafiltrationState.doPause() + TreatmentAdjustmentDuration { id: _treatmentAdjustmentDuration } + Connections { target: _treatmentAdjustmentDuration + function onConfirmClicked ( vValue ) { vTreatmentAdjustmentDuration.doAdjustment( + _treatmentAdjustmentDuration.durationValue ) } } - TreatmentAdjustmentUltrafiltrationPaused { id: _treatmentAdjustmentUltrafiltrationPaused - onCloseClicked : close() - onEditClicked : { - close() - _treatmentAdjustmentUltrafiltrationEdit.reset() // reset the slider to minimum value position - _treatmentAdjustmentUltrafiltrationEdit.open() + EntryDialog { id: _vitalEntry + function update(vSystolic, vDiastolic ,vHeartRate) { + _bphrEntry.systolic = vSystolic ? vSystolic : "" + _bphrEntry.diastolic = vDiastolic ? vDiastolic : "" + _bphrEntry.heartRate = vHeartRate ? vHeartRate : "" } - onResumeClicked : { - // send resume to HD and wait. - // if accepted close() - // not accepted show error in notification - vTreatmentAdjustmentUltrafiltrationState.doResume() + + titleText : qsTr("VITALS") + confirmEnabled : _bphrEntry.isValid + onConfirmClicked : { + _vitalEntry.close() + vTreatmentVitals.doConfirm( + _bphrEntry.systolic , + _bphrEntry.diastolic , + _bphrEntry.heartRate + ) } - } - TreatmentAdjustmentUltrafiltrationEdit { id: _treatmentAdjustmentUltrafiltrationEdit - onBackClicked : { - close() - _treatmentAdjustmentUltrafiltrationPaused.open() + onCloseClicked : { + vTreatmentVitals.doSkip() // only for logging } - onNextClicked : { - // send Volume to HD and wait. - // if accepted close() - // not accepted show error in notification - vTreatmentAdjustmentUltrafiltrationEdit.doAdjustment(vVolume) + + onOpened : vTreatmentVitals.doTimerStop() // Can't be moved to C++, and has to be handled here because it can manually being opened by the user + + onClosed : { + if ( ! vQuit ) + vTreatmentVitals.doTimerStart() } - } - TreatmentAdjustmentUltrafiltrationConfirm { id: _treatmentAdjustmentUltrafiltrationConfirm - onBackClicked : { - close() - _treatmentAdjustmentUltrafiltrationEdit.open () + BPHREntry { id : _bphrEntry + contentRectHeight : _vitalEntry.contentRect.height } - onConfirmRateClicked : { - vTreatmentAdjustmentUltrafiltrationConfirm.doOptionRate(vVolume) + + Connections { target: vTreatmentVitals + function onDidTrigger ( vSystolic, vDiastolic, vHeartRate ) { + if ( vTreatmentVitals.enableDialog ) { + _vitalEntry.update ( vSystolic, vDiastolic, vHeartRate ) + _vitalEntry.open () + } + } } - onConfirmDurationClicked: { - vTreatmentAdjustmentUltrafiltrationConfirm.doOptionDuration(vVolume) - } } // ---------- Manages Responses ---------- Connections { target: vTreatmentAdjustmentDuration - onAdjustmentTriggered : { + function onAdjustmentTriggered ( vValue ) { if ( vTreatmentAdjustmentDuration.adjustment_Accepted ) { vTreatmentUltrafiltration.maximum = vTreatmentAdjustmentDuration.ultrafiltration _treatmentAdjustmentDuration.accept() } else { - _treatmentAdjustmentDuration.durationValue = vTreatmentAdjustmentDuration.duration; + _treatmentAdjustmentDuration.setDurationValue(vTreatmentAdjustmentDuration.duration); _treatmentAdjustmentDuration.notification.text = vTreatmentAdjustmentDuration.text(); } } } - Connections { target: vTreatmentAdjustmentUltrafiltrationState - onAdjustmentTriggered : { - if ( vTreatmentAdjustmentUltrafiltrationState.adjustment_Accepted ) { - if ( vTreatmentAdjustmentUltrafiltrationState.isPaused ) { - _treatmentAdjustmentUltrafiltrationStart .close() - _treatmentAdjustmentUltrafiltrationPaused.open () - } else { - _treatmentAdjustmentUltrafiltrationPaused.close() - } - } else { - if ( vTreatmentAdjustmentUltrafiltrationState.isPaused ) { - _treatmentAdjustmentUltrafiltrationPaused.notification.text = vTreatmentAdjustmentUltrafiltrationState.text() - } else { - _treatmentAdjustmentUltrafiltrationStart .notification.text = vTreatmentAdjustmentUltrafiltrationState.text() - } + Connections { target: vTreatmentAdjustmentPressuresLimits + function onAdjustmentTriggered ( vValue ) { + // values have to be update even when rejected HD is reverting back the values. + // if accepted will be updated for later [may need refresh later] + _treatmentAdjustmentPressuresLimits.arterialPressureLimitWindow = vTreatmentAdjustmentPressuresLimits.arterialPressureLimitWindow + _treatmentAdjustmentPressuresLimits.venousPressureLimitWindow = vTreatmentAdjustmentPressuresLimits.venousPressureLimitWindow + _treatmentAdjustmentPressuresLimits.venousPressureLimitAsymtrc = vTreatmentAdjustmentPressuresLimits.venousPressureLimitAsymtrc + + if (vTreatmentAdjustmentPressuresLimits.adjustment_Accepted) { + _treatmentAdjustmentPressuresLimits.close() } + else { + _treatmentAdjustmentPressuresLimits.notification.text = vTreatmentAdjustmentPressuresLimits.text() + } } } - Connections { target: vTreatmentAdjustmentUltrafiltrationEdit - onAdjustmentTriggered : { - if (vTreatmentAdjustmentUltrafiltrationEdit.adjustment_Accepted) { - _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationVolume = vTreatmentAdjustmentUltrafiltrationEdit.volume - _treatmentAdjustmentUltrafiltrationConfirm.treatmentDuration = vTreatmentAdjustmentUltrafiltrationEdit.duration - _treatmentAdjustmentUltrafiltrationConfirm.treatmentDurationDiff = vTreatmentAdjustmentUltrafiltrationEdit.durationDiff - _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRate = vTreatmentAdjustmentUltrafiltrationEdit.rate - _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRateDiff = vTreatmentAdjustmentUltrafiltrationEdit.rateDiff - _treatmentAdjustmentUltrafiltrationConfirm.ultrafiltrationRateOld = vTreatmentAdjustmentUltrafiltrationEdit.rateOld + Connections { target: vHDOperationMode + // The initail screen should be the Blood Prime, since that one is the earlier state in the list. + // also since it is being used in two stacks In-Treatment and also in End-Treatmet is has been defined in the MainStack. + function onInTreatmentChanged ( vValue ) { page( _treatmentBloodPrime , vValue )} + } - _treatmentAdjustmentUltrafiltrationEdit .close() - _treatmentAdjustmentUltrafiltrationConfirm.reset() - _treatmentAdjustmentUltrafiltrationConfirm.open () - } else { - _treatmentAdjustmentUltrafiltrationEdit.notification.text = vTreatmentAdjustmentUltrafiltrationEdit.text() + Connections { target: _treatmentBloodPrime + function onVisibleChanged ( vValue ) { + if (_treatmentBloodPrime.visible) { + _treatmentMenu.hidden = true } } } - Connections { target: vTreatmentAdjustmentUltrafiltrationConfirm - onAdjustmentTriggered : { - if (vTreatmentAdjustmentUltrafiltrationConfirm.adjustment_Accepted) { - // HD resumes the ultrafiltration and no need to recall the doPause just update the state - vTreatmentAdjustmentUltrafiltrationState.isPaused = false - vTreatmentUltrafiltration.maximum = vTreatmentAdjustmentUltrafiltrationConfirm.volume - _treatmentAdjustmentUltrafiltrationConfirm.close() - } else { - _treatmentAdjustmentUltrafiltrationConfirm.notification.text = vTreatmentAdjustmentUltrafiltrationConfirm.text() - } - } + Connections { target: vHDTreatmentStates + // in-Treatmet + function onTxBloodPrimeChanged ( vValue ) { page( _treatmentBloodPrime , vValue )} + function onTxDialysisChanged ( vValue ) { page( _treatmentHome , vValue )} } + + Connections { target: _mainHome + function onStartTreatment ( vValue ) { page( _treatmentHome )} + } }