Index: denali.pro =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- denali.pro (.../denali.pro) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ denali.pro (.../denali.pro) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -97,6 +97,7 @@ sources/model/hd/data/MTreatmentSalineData.h \ sources/model/hd/data/MTreatmentHeparinData.h \ sources/model/hd/data/MTreatmentRinsebackData.h \ + sources/model/hd/data/MTreatmentRecirculateData.h \ sources/model/hd/data/MTreatmentBloodPrimeData.h \ sources/model/hd/data/MPrimingData.h \ \ # ---------- Models - DG - Data @@ -157,6 +158,7 @@ sources/view/hd/data/VTreatmentSalineData.h \ sources/view/hd/data/VTreatmentHeparinData.h \ sources/view/hd/data/VTreatmentRinsebackData.h \ + sources/view/hd/data/VTreatmentRecirculateData.h \ sources/view/hd/data/VTreatmentBloodPrimeData.h \ sources/view/hd/data/VHDTreatmentStatesData.h \ \ # ---------- Views - DG - Data @@ -230,6 +232,7 @@ sources/model/hd/data/MTreatmentSalineData.cpp \ sources/model/hd/data/MTreatmentHeparinData.cpp \ sources/model/hd/data/MTreatmentRinsebackData.cpp \ + sources/model/hd/data/MTreatmentRecirculateData.cpp \ sources/model/hd/data/MTreatmentBloodPrimeData.cpp \ sources/model/hd/data/MPrimingData.cpp \ \ # ---------- Models - DG - Data @@ -288,6 +291,7 @@ sources/view/hd/data/VTreatmentSalineData.cpp \ sources/view/hd/data/VTreatmentHeparinData.cpp \ sources/view/hd/data/VTreatmentRinsebackData.cpp \ + sources/view/hd/data/VTreatmentRecirculateData.cpp \ sources/view/hd/data/VTreatmentBloodPrimeData.cpp \ sources/view/hd/data/VHDTreatmentStatesData.cpp \ \ # ---------- Views - DG - Data Index: denali.pro.user =================================================================== diff -u -r28a383251ad37c669202c0a717ff90b8fc21a442 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- denali.pro.user (.../denali.pro.user) (revision 28a383251ad37c669202c0a717ff90b8fc21a442) +++ denali.pro.user (.../denali.pro.user) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -1,6 +1,6 @@ - + EnvironmentId Index: denali.qrc =================================================================== diff -u -r28a383251ad37c669202c0a717ff90b8fc21a442 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- denali.qrc (.../denali.qrc) (revision 28a383251ad37c669202c0a717ff90b8fc21a442) +++ denali.qrc (.../denali.qrc) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -146,12 +146,20 @@ sources/gui/qml/pages/postTreatment/PostTreatmentBloodPrime.qml - sources/gui/qml/pages/postTreatment/PostTreatmentRinseback.qml - sources/gui/qml/pages/postTreatment/PostTreatmentRecirculate.qml - sources/gui/qml/pages/postTreatment/PostTreatmentComplete.qml - sources/gui/qml/pages/postTreatment/PostTreatmentRinsebackComplete.qml - sources/gui/qml/pages/postTreatment/PostTreatmentRinsebackInit.qml - sources/gui/qml/pages/postTreatment/PostTreatmentAdditional.qml - sources/gui/qml/pages/postTreatment/PostTreatmentReconnect.qml + + sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackInit.qml + sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinseback.qml + sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackComplete.qml + sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentAdditional.qml + + + sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentRecirculate.qml + sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentReconnect.qml + + + sources/gui/qml/pages/postTreatment/end/PostTreatmentEnd.qml + sources/gui/qml/pages/postTreatment/end/PostTreatmentEndPause.qml + + Index: sources/canbus/MessageGlobals.h =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -56,7 +56,8 @@ {Gui::GuiActionType::ID_PressureOcclusion , 5 * 4 }, // 5 parameters each 4bytes {Gui::GuiActionType::ID_Saline , 3 * 4 }, // 3 parameters each 4bytes {Gui::GuiActionType::ID_Heparin , 1 * 4 }, // 1 parameters each 4bytes - {Gui::GuiActionType::ID_Rinseback , 3 * 4 }, // 3 parameters each 4bytes + {Gui::GuiActionType::ID_Rinseback , 5 * 4 }, // 3 parameters each 4bytes + {Gui::GuiActionType::ID_Recirculate , 2 * 4 }, // 3 parameters each 4bytes {Gui::GuiActionType::ID_BloodPrime , 2 * 4 }, // 2 parameters each 4bytes // ---- @@ -91,7 +92,7 @@ // ---- {Gui::GuiActionType::ID_TreatmentRanges , 6 * 4 }, // 6 parameters each 4bytes - {Gui::GuiActionType::ID_TreatmentStates , 6 * 4 }, // 6 parameters each 4bytes + {Gui::GuiActionType::ID_TreatmentStates , 9 * 4 }, // 9 parameters each 4bytes // ---- {Gui::GuiActionType::ID_AdjustBloodDialysateReq , 2 * 4 }, // 2 parameters each 4bytes Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -324,6 +324,7 @@ case Gui::GuiActionType::ID_Saline : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Saline ); break; case Gui::GuiActionType::ID_Heparin : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Heparin ); break; case Gui::GuiActionType::ID_Rinseback : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Rinseback ); break; + case Gui::GuiActionType::ID_Recirculate : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Recirculate ); break; case Gui::GuiActionType::ID_BloodPrime : ok = notify(vMessage, vData, Gui::GuiActionType::ID_BloodPrime ); break; // ----- Events Index: sources/gui/GuiGlobals.cpp =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -39,6 +39,7 @@ #include "VTreatmentSalineData.h" #include "VTreatmentHeparinData.h" #include "VTreatmentRinsebackData.h" +#include "VTreatmentRecirculateData.h" #include "VTreatmentBloodPrimeData.h" #include "VHDTreatmentStatesData.h" Index: sources/gui/GuiGlobals.h =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -89,6 +89,7 @@ ID_Saline = 0x2F00, // 47 ID_Heparin = 0x4D00, // 77 ID_Rinseback = 0x5600, // 86 + ID_Recirculate = 0x5A00, // 90 ID_BloodPrime = 0x5900, // 89 // Alarm Messages @@ -208,7 +209,14 @@ // Recirculate Q_ENUM(Treatment_Recirc_States) Q_ENUM(Requested_Treatment_Recirc_User_Actions) + // Blood Prime + Q_ENUM(Blood_Prime_States) + // Treatment End + Q_ENUM(Treatment_End_States) + Q_ENUM(Requested_Treatment_End_User_Actions) + // Treatment Stop + #include "DGDefs.h" Q_ENUM(DG_Op_Modes) }; @@ -244,7 +252,17 @@ // Recirculate typedef GuiActions::Treatment_Recirc_States GuiRecirculateStates; typedef GuiActions::Requested_Treatment_Recirc_User_Actions GuiRecirculateCommands; + // Blood Prime + typedef GuiActions::Blood_Prime_States GuiBloodPrimeStates; +// typedef GuiActions::Requested_Blood_Prime_User_Actions GuiBloodPrimeCommands; // No user Action defined + // Treatment End + typedef GuiActions::Treatment_End_States GuiTreatmentEndStates; + typedef GuiActions::Requested_Treatment_End_User_Actions GuiTreatmentEndCommands; + // Treatment Stop + typedef GuiActions::Treatment_Stop_States GuiTreatmentStopStates; +// typedef GuiActions::Requested_Treatment_Stop_User_Actions GuiTreatmentStopCommands; // No user Action defined + void registerTypes(); void registerQmlTypes(); Index: sources/gui/qml/components/StackItem.qml =================================================================== diff -u -r76f632ce5a9039ae662d9a52286079b772f8ae7f -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/qml/components/StackItem.qml (.../StackItem.qml) (revision 76f632ce5a9039ae662d9a52286079b772f8ae7f) +++ sources/gui/qml/components/StackItem.qml (.../StackItem.qml) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -36,7 +36,7 @@ } } - function back(vScreen) { + function page(vScreen) { if (stackView.find(function(screen) { return screen === vScreen; })) { Index: sources/gui/qml/dialogs/NotificationDialog.qml =================================================================== diff -u -r741b1c70f851810f2c265cdd38dfa158b7ee0c37 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision 741b1c70f851810f2c265cdd38dfa158b7ee0c37) +++ sources/gui/qml/dialogs/NotificationDialog.qml (.../NotificationDialog.qml) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -152,7 +152,7 @@ TouchRect { id : _endTouchRect visible : endVisible button.onPressed: endClicked() - text.text : qsTr("END") + text.text : qsTr("END TREATMENT") width : _buttonGroup.buttonsWidth borderColor : Colors.white } Index: sources/gui/qml/main.qml =================================================================== diff -u -r28a383251ad37c669202c0a717ff90b8fc21a442 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/qml/main.qml (.../main.qml) (revision 28a383251ad37c669202c0a717ff90b8fc21a442) +++ sources/gui/qml/main.qml (.../main.qml) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -60,6 +60,7 @@ import VTreatmentAdjustmentHeparin 0.1 import VTreatmentRinseback 0.1 import VTreatmentAdjustmentRinseback 0.1 +import VTreatmentRecirculate 0.1 import VTreatmentAdjustmentRecirculate 0.1 import VTreatmentBloodPrime 0.1 @@ -133,6 +134,7 @@ VTreatmentAdjustmentHeparin { id: vTreatmentAdjustmentHeparin } VTreatmentBloodPrime { id: vTreatmentBloodPrime } VTreatmentRinseback { id: vTreatmentRinseback } + VTreatmentRecirculate { id: vTreatmentRecirculate } VTreatmentAdjustmentRinseback { id: vTreatmentAdjustmentRinseback } VTreatmentAdjustmentRecirculate { id: vTreatmentAdjustmentRecirculate } Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentAdditional.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentComplete.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentRecirculate.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentReconnect.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentRinseback.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentRinsebackComplete.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 07e0c7bd409782cab96a4ae761ee3f819bdb8639 refers to a dead (removed) revision in file `sources/gui/qml/pages/postTreatment/PostTreatmentRinsebackInit.qml'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/gui/qml/pages/postTreatment/end/PostTreatmentEnd.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/end/PostTreatmentEnd.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/end/PostTreatmentEnd.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,111 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentEnd.qml + * \author (last) Behrouz NematiPour + * \date (last) 10-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 03-Feb-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment end screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentEnd" + + property alias reasonText : _notification.text + + signal rinsebackClicked() + + QtObject { id: _private + property int sectionSpace : 30 + property int sectionWidth : _root.width * 2/3 - sectionSpace * 1.5 + property int sectionHeight: _root.width * 1/3 - sectionSpace * 1.5 + } + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: Colors.white + text: qsTr("TREATMENT COMPLETE") // two space in between + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: _timeout // not sure if this screen has a timeout + visible : false + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + secondsVisible : false + seconds : 0 + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionWidth + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors.centerIn: parent + Text { id: _visualAID + anchors.centerIn: parent + color: Colors.white + text: qsTr("Visual AID\nplaceholder") + font.pixelSize: Fonts.fontPixelButton + } + } + + Row { id: _buttonGroup + property int buttonsWidth : 300 + spacing: 75 + + anchors { + bottom : parent.bottom + horizontalCenter: parent.horizontalCenter + rightMargin : spacing + leftMargin : spacing + bottomMargin : spacing + } + + TouchRect { id : _startRinsebackTouchRect + visible : true + text.text : qsTr("START RINSEBACK") + width : _buttonGroup.buttonsWidth + color : borderColor + onClicked : rinsebackClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/postTreatment/end/PostTreatmentEndPause.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/end/PostTreatmentEndPause.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/end/PostTreatmentEndPause.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,112 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentEndPause.qml + * \author (last) Behrouz NematiPour + * \date (last) 10-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 10-Jan-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment end pause screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentEndPause" + + property alias reasonText : _notification.text + + signal buttonClicked() + + QtObject { id: _private + property int sectionSpace : 30 + property int sectionWidth : _root.width * 2/3 - sectionSpace * 1.5 + property int sectionHeight: _root.width * 1/3 - sectionSpace * 1.5 + } + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: Colors.white + text: qsTr("TREATMENT COMPLETE PAUSED") // two space in between + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : false + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + secondsVisible : false + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + seconds : 0 * 60 + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionWidth + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors.centerIn: parent + Text { id: _visualAID + anchors.centerIn: parent + color: Colors.white + text: qsTr("Visual AID\nplaceholder") + font.pixelSize: Fonts.fontPixelButton + } + } + + Row { id: _buttonGroup + property int buttonsWidth : 300 + spacing: 75 + + anchors { + bottom : parent.bottom + horizontalCenter: parent.horizontalCenter + rightMargin : spacing + leftMargin : spacing + bottomMargin : spacing + } + + TouchRect { id : _buttonTouchRect + visible : false + text.text : qsTr("") + width : _buttonGroup.buttonsWidth + onClicked : buttonClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentRecirculate.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentRecirculate.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentRecirculate.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,121 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentRecirculate.qml + * \author (last) Behrouz NematiPour + * \date (last) 09-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 30-Jan-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment recirculate screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentRecirculate" + + property alias reasonText : _notification.text + + signal reconnectClicked () + signal treatmentEndClicked () + + QtObject { id: _private + property int sectionSpace : 30 + property int sectionWidth : _root.width * 2/3 - sectionSpace * 1.5 + property int sectionHeight: _root.width * 1/3 - sectionSpace * 1.5 + } + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: Colors.white + text: qsTr("Recirculate") + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : vTreatmentRecirculate.timeoutTotal + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + secondsVisible : false + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + seconds : vTreatmentRecirculate.timeoutCountDown * 60 + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionWidth + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors.centerIn: parent + Text { id: _visualAID + anchors.centerIn: parent + color: Colors.white + text: qsTr("Visual AID\nplaceholder") + font.pixelSize: Fonts.fontPixelButton + } + } + + Row { id: _buttonGroup + property int buttonsWidth : 300 + spacing: 75 + + anchors { + bottom : parent.bottom + horizontalCenter: parent.horizontalCenter + rightMargin : spacing + leftMargin : spacing + bottomMargin : spacing + } + + TouchRect { id : _backTreatmentTouchRect + visible : true + text.text : qsTr("RECONNECT") + width : _buttonGroup.buttonsWidth + color : borderColor + onClicked : reconnectClicked() + } + + TouchRect { id : _endTreatmentTouchRect + visible : true + text.text : qsTr("END TREATMENT") + width : _buttonGroup.buttonsWidth + onClicked : treatmentEndClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentReconnect.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentReconnect.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/recirculate/PostTreatmentReconnect.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,158 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentReconnect.qml + * \author (last) Behrouz NematiPour + * \date (last) 09-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 09-Feb-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment recirculate reconnect screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentReconnect" + + property alias reasonText : _notification.text + + signal recirculateBackClicked () + signal confirmClicked () + + QtObject { id: _private + property int sectionSpace : 30 + property int sectionWidth : _root.width * 2/3 - sectionSpace * 1.5 + property int sectionHeight: _root.width * 1/3 - sectionSpace * 1.5 + } + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: Colors.white + text: qsTr("Reconnect") + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : vTreatmentRecirculate.timeoutTotal + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + secondsVisible : false + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + seconds : vTreatmentRecirculate.timeoutCountDown * 60 + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionWidth + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius : 10 + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: _private.sectionSpace + } + Column { + spacing : 10 + anchors.fill: parent + anchors.margins: _private.sectionSpace + Text { id: _titleSteps + anchors.left: parent.left + color: Colors.white + text: qsTr("Please Follow The Steps") + font.pixelSize: Fonts.fontPixelButton + } + + Text { id: _steps + anchors.left : parent.left + anchors.leftMargin : _private.sectionSpace + color : Colors.white + text : qsTr("First Step\nSecond Step\nThird Step\n") + font.pixelSize: Fonts.fontPixelButton + } + } + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionHeight + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: _private.sectionSpace + } + Text { id: _visualAID + anchors.centerIn: parent + color: Colors.white + text: qsTr("Visual AID\nplaceholder") + font.pixelSize: Fonts.fontPixelButton + } + } + + Row { id: _buttonGroup + property int buttonsWidth : 300 + spacing: 75 + + anchors { + bottom : parent.bottom + horizontalCenter: parent.horizontalCenter + rightMargin : spacing + leftMargin : spacing + bottomMargin : spacing + } + + TouchRect { id : _backTreatmentTouchRect + visible : true // true if only treatment is not already complete + text.text : qsTr("BACK TO RECIRCULATE") + width : _buttonGroup.buttonsWidth + onClicked : recirculateBackClicked() + } + + TouchRect { id : _endTreatmentTouchRect + visible : true // true if only treatment is not already complete + text.text : qsTr("CONFIRM") + width : _buttonGroup.buttonsWidth + color : borderColor + onClicked : confirmClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentAdditional.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentAdditional.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentAdditional.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,84 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentAdditional.qml + * \author (last) Behrouz NematiPour + * \date (last) 09-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 09-Feb-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment additional rinseback screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentAdditional" + + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: "white" + text: qsTr("Additional Rinseback") + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : vTreatmentRinseback.timeoutTotal + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + secondsVisible : false + seconds : vTreatmentRinseback.timeoutCountDown * 60 + } + + ProgressCircle { id: _circle + diameter: 335 + anchors.centerIn: parent + + minimum : 0 + maximum : vTreatmentRinseback.target + value : vTreatmentRinseback.current + + Text { id: _textVolume + anchors.centerIn: parent + color: "white" + text: vTreatmentRinseback.current.toFixed(0) + " " + qsTr(Variables.unitTextFluid) + font.pixelSize: 76 + font.weight: Font.ExtraLight + + } + + Text { id: _labelRate + anchors { + top: parent.bottom + topMargin: 20 + horizontalCenter: parent.horizontalCenter + } + color: "white" + text: vTreatmentRinseback.rate.toFixed(0) + " " + qsTr(Variables.unitTextFlowRate) + font.pixelSize: 23 + } + } +} Index: sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinseback.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinseback.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinseback.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,177 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentRinseback.qml + * \author (last) Behrouz NematiPour + * \date (last) 29-Jan-2021 + * \author (original) Behrouz NematiPour + * \date (original) 29-Jan-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment rinseback screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentRinseback" + + property alias reasonText : _notification.text + + signal pauseClicked () + signal resumeClicked () + signal endClicked () + + signal accelerateClicked () + signal deccelerateClicked () + + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: "white" + text: qsTr("Rinseback") + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : false // has been removed for now // vTreatmentRinseback.timeoutTotal + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + secondsVisible : false + seconds : vTreatmentRinseback.timeoutCountDown * 60 + } + + ImageText { id: _imageEnd + visible: ! vHDTreatmentStates.rbAdditional + anchors { + right : _root.right + top : _root.top + rightMargin : 45 + topMargin : 45 + } + diameter : Variables.rinsebackIconDiameterDefault + source : "qrc:/images/iRedCrossWCircle" + text : qsTr("End") + fontSize : Fonts.fontPixelRinsebackAdjustmentButton + onClicked : endClicked() + } + + ProgressCircle { id: _circle + diameter: 335 + anchors { + horizontalCenter: parent.horizontalCenter + top : parent.top + topMargin : vHDTreatmentStates.rbAdditional ? + _root.height/2 - height/2 : // move the progress circle in the center of the screen + 170 + } + + minimum : 0 + maximum : vTreatmentRinseback.target + value : vTreatmentRinseback.current + + Text { id: _textVolume + anchors.centerIn: parent + color: "white" + text: vTreatmentRinseback.current.toFixed(0) + " " + qsTr(Variables.unitTextFluid) + font.pixelSize: 76 + font.weight: Font.ExtraLight + + } + + Text { id: _labelRate + anchors { + top: parent.bottom + topMargin: 20 + horizontalCenter: parent.horizontalCenter + } + color: "white" + text: vTreatmentRinseback.rate.toFixed(0) + " " + qsTr(Variables.unitTextFlowRate) + font.pixelSize: 23 + } + } + + Row { id: _buttonRow + spacing: 175 + anchors { + horizontalCenter: _root.horizontalCenter + bottom : _root.bottom + bottomMargin : Variables.notificationHeight + 55 // + the texts height + } + + ImageText { id: _imageDecelerate + visible : vHDTreatmentStates.rbRun || vHDTreatmentStates.rbPaused + enabled : vHDTreatmentStates.rbRun + anchors.bottom : _buttonRow.bottom + diameter : Variables.rinsebackIconDiameterDefault + source : "qrc:/images/iDecelerate" + text : qsTr("Decelerate") + fontSize : Fonts.fontPixelRinsebackAdjustmentButton + onClicked : deccelerateClicked() + } + + ImageText { id: _imageResume + visible : vHDTreatmentStates.rbPaused + anchors.bottom : _buttonRow.bottom + diameter : Variables.rinsebackIconDiameterResumePause + source : "qrc:/images/iResume" + text : qsTr("Resume") + fontSize : Fonts.fontPixelRinsebackAdjustmentButton + onClicked : resumeClicked() + } + + ImageText { id: _imagePause + visible : vHDTreatmentStates.rbRun // not sure if it's possible || vHDTreatmentStates.rbAdditional + anchors.bottom : _buttonRow.bottom + diameter : Variables.rinsebackIconDiameterResumePause + source : "qrc:/images/iPauseLightBlue" + text : qsTr("Pause") + fontSize : Fonts.fontPixelRinsebackAdjustmentButton + onClicked : pauseClicked() + } + + ImageText { id: _imageAccelerate + visible : vHDTreatmentStates.rbRun || vHDTreatmentStates.rbPaused + enabled : vHDTreatmentStates.rbRun + anchors.bottom : _buttonRow.bottom + diameter : Variables.rinsebackIconDiameterDefault + source : "qrc:/images/iAccelerate" + text : qsTr("Accelerate") + fontSize : Fonts.fontPixelRinsebackAdjustmentButton + onClicked : accelerateClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackComplete.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackComplete.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackComplete.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,166 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentRinsebackComplete.qml + * \author (last) Behrouz NematiPour + * \date (last) 09-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 03-Feb-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment rinseback complete screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentRinsebackComplete" + + property alias reasonText : _notification.text + + signal additionalClicked () + signal confirmClicked () + signal treatmentEndClicked () + + QtObject { id: _private + property int sectionSpace : 30 + property int sectionWidth : _root.width * 2/3 - sectionSpace * 1.5 + property int sectionHeight: _root.width * 1/3 - sectionSpace * 1.5 + } + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: Colors.white + text: qsTr("Rinseback Complete") + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : vTreatmentRinseback.timeoutTotal + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + secondsVisible : false + seconds : vTreatmentRinseback.timeoutCountDown * 60 + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionWidth + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: _private.sectionSpace + } + Column { + spacing : 10 + anchors.fill: parent + anchors.margins: _private.sectionSpace + Text { id: _titleSteps + anchors.left: parent.left + color: Colors.white + text: qsTr("Please Disconnet") + font.pixelSize: Fonts.fontPixelButton + } + + Text { id: _steps + anchors.left: parent.left + anchors.leftMargin: _private.sectionSpace + color: Colors.white + text: qsTr("First Step\nSecond Step\nThird Step\n") + font.pixelSize: Fonts.fontPixelButton + } + } + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionHeight + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: _private.sectionSpace + } + Text { id: _visualAID + anchors.centerIn: parent + color: Colors.white + text: qsTr("Visual AID\nplaceholder") + font.pixelSize: Fonts.fontPixelButton + } + } + + Row { id: _buttonGroup + property int buttonsWidth : 300 + spacing: 75 + + anchors { + bottom : parent.bottom + horizontalCenter: parent.horizontalCenter + rightMargin : spacing + leftMargin : spacing + bottomMargin : spacing + } + + TouchRect { id : _backTreatmentTouchRect + visible : true + text.text : qsTr("ADDITIONAL") + width : _buttonGroup.buttonsWidth + onClicked : additionalClicked() + } + + TouchRect { id : _beginRinsebackTouchRect + visible : true + text.text : qsTr("CONFIRM") + width : _buttonGroup.buttonsWidth + color : borderColor + onClicked : confirmClicked() + } + + TouchRect { id : _endTreatmentTouchRect + visible : true // TODO: true if only treatment is not already complete + text.text : qsTr("END TREATMENT") + width : _buttonGroup.buttonsWidth + onClicked : treatmentEndClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackInit.qml =================================================================== diff -u --- sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackInit.qml (revision 0) +++ sources/gui/qml/pages/postTreatment/rinseback/PostTreatmentRinsebackInit.qml (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,166 @@ +/*! + * + * Copyright (c) 2019-2020 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 PostTreatmentRinsebackInit.qml + * \author (last) Behrouz NematiPour + * \date (last) 09-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 09-Feb-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief the post treatment rinseback setup screen + */ +ScreenItem { id: _root + objectName: "_PostTreatmentRinsebackInit" + + property alias reasonText : _notification.text + + signal treatmentBackClicked () + signal rinsebackClicked () + signal treatmentEndClicked () + + QtObject { id: _private + property int sectionSpace : 30 + property int sectionWidth : _root.width * 2/3 - sectionSpace * 1.5 + property int sectionHeight: _root.width * 1/3 - sectionSpace * 1.5 + } + Text { id: _title + anchors { + top: parent.top + topMargin: 65 + horizontalCenter: parent.horizontalCenter + } + color: Colors.white + text: qsTr("Rinseback Setup") + font.pixelSize: Fonts.fontPixelTitle + } + + TimeText { id: timeout + visible : vTreatmentRinseback.timeoutTotal + anchors { + horizontalCenter: parent.horizontalCenter + top : _title.bottom + topMargin : 15 + } + textPixelSize : 30 + textWeight : Font.Normal + // the TimeText component works with hour and minute mainly + // so changing the seconds to minuts was easier than changing the component + secondsVisible : false + seconds : vTreatmentRinseback.timeoutCountDown * 60 + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionWidth + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: _private.sectionSpace + } + Column { + spacing : 10 + anchors.fill: parent + anchors.margins: _private.sectionSpace + Text { id: _titleSteps + anchors.left: parent.left + color: Colors.white + text: qsTr("Please Follow The Steps") + font.pixelSize: Fonts.fontPixelButton + } + + Text { id: _steps + anchors.left: parent.left + anchors.leftMargin: _private.sectionSpace + color: Colors.white + text: qsTr("First Step\nSecond Step\nThird Step\n") + font.pixelSize: Fonts.fontPixelButton + } + } + } + + Rectangle { + color : Colors.backgroundDialog + width : _private.sectionHeight + height : _private.sectionHeight + border.width: 2 + border.color: Colors.borderDisableButton + radius: 10 + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: _private.sectionSpace + } + Text { id: _visualAID + anchors.centerIn: parent + color: Colors.white + text: qsTr("Visual AID\nplaceholder") + font.pixelSize: Fonts.fontPixelButton + } + } + + Row { id: _buttonGroup + property int buttonsWidth : 300 + spacing: 75 + + anchors { + bottom : parent.bottom + horizontalCenter: parent.horizontalCenter + rightMargin : spacing + leftMargin : spacing + bottomMargin : spacing + } + + TouchRect { id : _backTreatmentTouchRect + visible : true // true if only treatment is not already complete + text.text : qsTr("BACK TO TREATMENT") + width : _buttonGroup.buttonsWidth + onClicked : treatmentBackClicked() + } + + TouchRect { id : _beginRinsebackTouchRect + visible : true + text.text : qsTr("START RINSEBACK") + width : _buttonGroup.buttonsWidth + color : borderColor + onClicked : rinsebackClicked() + } + + TouchRect { id : _endTreatmentTouchRect + visible : true // true if only treatment is not already complete + text.text : qsTr("END TREATMENT") + width : _buttonGroup.buttonsWidth + onClicked : treatmentEndClicked() + } + } + + NotificationBar { id: _notification + iconVisible: false + } + + onVisibleChanged: { + _notification.text = "" + if (visible) { + _mainMenu .hidden = true + _treatmentMenu.hidden = true + } + } +} Index: sources/gui/qml/pages/treatment/TreatmentStack.qml =================================================================== diff -u -r28a383251ad37c669202c0a717ff90b8fc21a442 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision 28a383251ad37c669202c0a717ff90b8fc21a442) +++ sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -22,6 +22,9 @@ import "qrc:/pages/treatment/adjustments" import "qrc:/pages/pretreatment/create" import "qrc:/pages/posttreatment" +import "qrc:/pages/posttreatment/rinseback" +import "qrc:/pages/posttreatment/recirculate" +import "qrc:/pages/posttreatment/end" /*! * \brief TreatmentStack is the screen @@ -205,7 +208,7 @@ PostTreatmentBloodPrime { id: _postTreatmentBloodPrime } // Rinseback PostTreatmentRinsebackInit { id: _postTreatmentRinsebackInit - onStartClicked : vTreatmentAdjustmentRinseback.doStart () //82.0 + onRinsebackClicked : vTreatmentAdjustmentRinseback.doStart () //82.0 onTreatmentEndClicked : vTreatmentAdjustmentRinseback.doTreatmentEnd () //82.8 onTreatmentBackClicked : vTreatmentAdjustmentRinseback.doTreatmentBack () //82.9 } @@ -218,8 +221,8 @@ } PostTreatmentRinsebackComplete { id: _postTreatmentRinsebackComplete onAdditionalClicked : vTreatmentAdjustmentRinseback.doAdditional () //82.6 - onTreatmentEndClicked : vTreatmentAdjustmentRinseback.doConfirm () //82.7 - onConfirmClicked : vTreatmentAdjustmentRinseback.doTreatmentEnd () //82.8 + onConfirmClicked : vTreatmentAdjustmentRinseback.doConfirm () //82.7 + onTreatmentEndClicked : vTreatmentAdjustmentRinseback.doTreatmentEnd () //82.8 } PostTreatmentAdditional { id: _postTreatmentAdditional } // Recirculate @@ -233,7 +236,10 @@ } // Treatment Complete - PostTreatmentComplete { id: _postTreatmentComplete } + PostTreatmentEnd { id: _postTreatmentEnd + onRinsebackClicked: { console.debug(" ----- ", "PostTreatmentEnd", "onRinsebackClicked")} //87.0 + } + PostTreatmentEndPaused { id: _postTreatmentEndPaused } // ---------- Manages Responses ---------- Connections { target: vTreatmentAdjustmentRinseback @@ -353,25 +359,35 @@ // also with what ever order they have been push with the reverse/correct animation will be poped or pushed. Connections { target: vHDTreatmentStates // Blood Prime - onTxBloodPrimeChanged : { if ( vtxBloodPrime ) { back( _postTreatmentBloodPrime )}} + onTxBloodPrimeChanged : { if ( vtxBloodPrime ) { page( _postTreatmentBloodPrime )}} + onBpRampChanged : { if ( vbpRamp ) { /* No action defined yet */ }} // in-Treatmet - onTxDialysisRunningChanged : { if ( vtxDialysisRunning ) { back( _treatmentStart )}} - onTxStopChanged : { /* only will be used to update the in-treatment screen */ } - onTxDialysisEndChanged : { if ( vtxDialysisEnd ) { back( _postTreatmentComplete )}} + onTxDialysisChanged : { if ( vtxDialysis ) { page( _treatmentStart )}} - // shall push the rinseback stack which we don't have it yet. + // shall push the rinseback stack which hasn't been implemented yet. // Rinseback - onTxRinsebackChanged : { if ( vtxRinseback ) { back( _postTreatmentRinsebackInit )}} - onRbInitChanged : { if ( vrbInit ) { back( _postTreatmentRinsebackInit )}} - onRbRunChanged : { if ( vrbRun ) { back( _postTreatmentRinseback )}} - onRbPausedChanged : { if ( vrbPaused ) { back( _postTreatmentRinseback )}} - onRbStopChanged : { if ( vrbStop ) { back( _postTreatmentRinsebackComplete )}} - onRbAdditionalChanged : { if ( vrbAdditional ) { back( _postTreatmentAdditional )}} + onTxRinsebackChanged : { if ( vtxRinseback ) { page( _postTreatmentRinsebackInit )}} + onRbInitChanged : { if ( vrbInit ) { page( _postTreatmentRinsebackInit )}} + onRbRunChanged : { if ( vrbRun ) { page( _postTreatmentRinseback )}} + onRbPausedChanged : { if ( vrbPaused ) { page( _postTreatmentRinseback )}} + onRbStopChanged : { if ( vrbStop ) { page( _postTreatmentRinsebackComplete )}} + onRbAdditionalChanged : { if ( vrbAdditional ) { page( _postTreatmentAdditional )}} + // shall push the recirculate stack which hasn't been implemented yet. // Recirculate - onTxRecirculateChanged : { if ( vtxRecirculate ) { back( _postTreatmentRecirculate )}} - onRcStartedChanged : { if ( vrcStarted ) { back( _postTreatmentRecirculate )}} - onRcStoppedChanged : { if ( vrcStopped ) { back( _postTreatmentReconnect )}} + onTxRecirculateChanged : { if ( vtxRecirculate ) { page( _postTreatmentRecirculate )}} + onRcStartedChanged : { if ( vrcStarted ) { page( _postTreatmentRecirculate )}} + onRcStoppedChanged : { if ( vrcStopped ) { page( _postTreatmentReconnect )}} + + // Treatment End + onTxEndChanged : { if ( vtxEnd ) { page( _postTreatmentEnd )}} + onTeWaitRinsebackChanged: { if ( vteWaitRinseback ) { page( _postTreatmentEnd )}} + onTePausedChanged : { if ( vtePaused ) { page( _postTreatmentEndPaused )}} + + // Treatment Stop + onTxStopChanged : { if ( vtxStop ) { page( _treatmentStart )}} + onTsRecirculateChanged : { if ( vtsRecirculate ) { /* No action defined yet */ }} + onTsRecirculateNoChanged: { if ( vtsRecirculateNo ) { /* No action defined yet */ }} } } Index: sources/gui/qml/pages/treatment/sections/TreatmentHeparin.qml =================================================================== diff -u -r3345651cca9723989785801ee25001dc3e4f28a1 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/qml/pages/treatment/sections/TreatmentHeparin.qml (.../TreatmentHeparin.qml) (revision 3345651cca9723989785801ee25001dc3e4f28a1) +++ sources/gui/qml/pages/treatment/sections/TreatmentHeparin.qml (.../TreatmentHeparin.qml) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -34,7 +34,7 @@ readonly property bool isCompleted : vHDTreatmentStates.hpCompleted readonly property bool isEmpty : vHDTreatmentStates.hpEmpty - readonly property bool isTxRunning : vHDTreatmentStates.txDialysisRunning + readonly property bool isTxRunning : vHDTreatmentStates.txDialysis QtObject { id: _private readonly property string textHeparin : qsTr("HEPARIN DELIVERY") Index: sources/gui/qml/pages/treatment/sections/TreatmentTime.qml =================================================================== diff -u -r3345651cca9723989785801ee25001dc3e4f28a1 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/gui/qml/pages/treatment/sections/TreatmentTime.qml (.../TreatmentTime.qml) (revision 3345651cca9723989785801ee25001dc3e4f28a1) +++ sources/gui/qml/pages/treatment/sections/TreatmentTime.qml (.../TreatmentTime.qml) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -32,7 +32,7 @@ property int progressValue : vTreatmentTime.time_Elapsed property int timeTextValue : vTreatmentTime.time_Remaining - property bool isRunning : vHDTreatmentStates.txDialysisRunning + property bool isRunning : vHDTreatmentStates.txDialysis signal clicked() Index: sources/model/MModel.h =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/model/MModel.h (.../MModel.h) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ sources/model/MModel.h (.../MModel.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -32,6 +32,7 @@ #include "MTreatmentSalineData.h" #include "MTreatmentHeparinData.h" #include "MTreatmentRinsebackData.h" +#include "MTreatmentRecirculateData.h" #include "MTreatmentBloodPrimeData.h" #include "MDGDrainPumpData.h" @@ -197,6 +198,7 @@ REGISTER_METATYPE( TreatmentSalineData ) \ REGISTER_METATYPE( TreatmentHeparinData ) \ REGISTER_METATYPE( TreatmentRinsebackData ) \ + REGISTER_METATYPE( TreatmentRecirculateData ) \ REGISTER_METATYPE( TreatmentBloodPrimeData ) \ REGISTER_METATYPE( HDOperationModeData ) \ \ @@ -286,6 +288,7 @@ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentSalineData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentHeparinData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentRinsebackData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentRecirculateData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentBloodPrimeData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, HDOperationModeData ) \ \ @@ -379,6 +382,7 @@ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentSalineData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentHeparinData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentRinsebackData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentRecirculateData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentBloodPrimeData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( HDOperationModeData ) \ \ @@ -504,6 +508,7 @@ ACTION_RECEIVE_SIGNAL( TreatmentSalineData ) \ ACTION_RECEIVE_SIGNAL( TreatmentHeparinData ) \ ACTION_RECEIVE_SIGNAL( TreatmentRinsebackData ) \ + ACTION_RECEIVE_SIGNAL( TreatmentRecirculateData ) \ ACTION_RECEIVE_SIGNAL( TreatmentBloodPrimeData ) \ ACTION_RECEIVE_SIGNAL( HDOperationModeData ) \ \ Index: sources/model/hd/data/MTreatmentRecirculateData.cpp =================================================================== diff -u --- sources/model/hd/data/MTreatmentRecirculateData.cpp (revision 0) +++ sources/model/hd/data/MTreatmentRecirculateData.cpp (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,45 @@ +/*! + * + * Copyright (c) 2019-2020 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 MTreatmentRecirculateData.cpp + * \author (last) Behrouz NematiPour + * \date (last) 10-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 10-Feb-2021 + * + */ +#include "MTreatmentRecirculateData.h" + +using namespace Model; + +QVariantList MTreatmentRecirculate::parameters() const { + return { + _data.mTimeoutTotal .value, + _data.mTimeoutCountDown.value, + }; +} + +bool MTreatmentRecirculate::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if (GetValue(vByteArray, index, _data.mTimeoutTotal )) + if (GetValue(vByteArray, index, _data.mTimeoutCountDown)) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +/*! + * \brief MTreatmentRecirculate::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MTreatmentRecirculate::Data MTreatmentRecirculate::data() const { + Data data; + data.mTimeoutTotal = _data.mTimeoutTotal .value; + data.mTimeoutCountDown = _data.mTimeoutCountDown.value; + return data; +} Index: sources/model/hd/data/MTreatmentRecirculateData.h =================================================================== diff -u --- sources/model/hd/data/MTreatmentRecirculateData.h (revision 0) +++ sources/model/hd/data/MTreatmentRecirculateData.h (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,85 @@ +/*! + * + * Copyright (c) 2019-2020 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 MTreatmentRecirculateData.h + * \author (last) Behrouz NematiPour + * \date (last) 10-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 10-Feb-2021 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MTreatmentRecirculate class + * \details The treatment Recirculate bolus data model + * + * | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + * |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + * |0x5A00| 0x020 | 6 | 1 Hz | N | HD | UI | Recirculate Progress Data | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mTimeoutTotal | + * | #2:(U32) | \ref Data::mTimeoutCountDown| + * + * \sa Data + * \sa MAdjustRecirculateReq : Recirculate Request + * \sa MAdjustRecirculateResponse : Recirculate Response + * + *

Logging info

+ * | || + * | || + * | typeText | Datum | + * | unitText | HD | + * | infoText | RecirculateData | + * + */ +class MTreatmentRecirculate : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mTimeoutTotal ; + Types::U32 mTimeoutCountDown; + } _data; + +public: + + Type_Enum typeText() const override { return Type_Enum::eDatum ; } + Unit_Enum unitText() const override { return Unit_Enum::eHD ; } + QString infoText() const override { return QString("RecirculateData") ; } + + struct Data { + quint32 mTimeoutTotal = 0; ///< Total Timeout of Recirculate delivery + quint32 mTimeoutCountDown = 0; ///< Current Timeout count down of Recirculate delivery + }; + +public: + MTreatmentRecirculate () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MTreatmentRecirculate::Data TreatmentRecirculateData; Index: sources/model/hd/data/MTreatmentRinsebackData.cpp =================================================================== diff -u -rfd25d67f37410037f22be9c6e958b100e3790de9 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/model/hd/data/MTreatmentRinsebackData.cpp (.../MTreatmentRinsebackData.cpp) (revision fd25d67f37410037f22be9c6e958b100e3790de9) +++ sources/model/hd/data/MTreatmentRinsebackData.cpp (.../MTreatmentRinsebackData.cpp) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -18,21 +18,27 @@ QVariantList MTreatmentRinseback::parameters() const { return { - _data.mTarget .value, - _data.mCurrent.value, - _data.mRate .value, + _data.mTarget .value, + _data.mCurrent .value, + _data.mRate .value, + _data.mTimeoutTotal .value, + _data.mTimeoutCountDown.value, }; } bool MTreatmentRinseback::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - if (GetValue(vByteArray, index, _data.mTarget )) - if (GetValue(vByteArray, index, _data.mCurrent)) - if (GetValue(vByteArray, index, _data.mRate )) + if (GetValue(vByteArray, index, _data.mTarget )) + if (GetValue(vByteArray, index, _data.mCurrent )) + if (GetValue(vByteArray, index, _data.mRate )) + if (GetValue(vByteArray, index, _data.mTimeoutTotal )) + if (GetValue(vByteArray, index, _data.mTimeoutCountDown)) return true ; else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } } /*! @@ -42,8 +48,10 @@ */ MTreatmentRinseback::Data MTreatmentRinseback::data() const { Data data; - data.mTarget = _data.mTarget .value; - data.mCurrent = _data.mCurrent.value; - data.mRate = _data.mRate .value; + data.mTarget = _data.mTarget .value; + data.mCurrent = _data.mCurrent .value; + data.mRate = _data.mRate .value; + data.mTimeoutTotal = _data.mTimeoutTotal .value; + data.mTimeoutCountDown = _data.mTimeoutCountDown.value; return data; } Index: sources/model/hd/data/MTreatmentRinsebackData.h =================================================================== diff -u -rfd25d67f37410037f22be9c6e958b100e3790de9 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/model/hd/data/MTreatmentRinsebackData.h (.../MTreatmentRinsebackData.h) (revision fd25d67f37410037f22be9c6e958b100e3790de9) +++ sources/model/hd/data/MTreatmentRinsebackData.h (.../MTreatmentRinsebackData.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -36,9 +36,11 @@ * * | Payload || * | || - * | #1:(F32) | \ref Data::mTarget | - * | #2:(F32) | \ref Data::mCurrent | - * | #3:(U32) | \ref Data::mRate | + * | #1:(F32) | \ref Data::mTarget | + * | #2:(F32) | \ref Data::mCurrent | + * | #3:(U32) | \ref Data::mRate | + * | #4:(U32) | \ref Data::mTimeoutTotal | + * | #5:(U32) | \ref Data::mTimeoutCountDown| * * \sa Data * \sa MAdjustRinsebackReq : Rinseback Request @@ -60,9 +62,11 @@ QVariantList parameters() const override; struct { - Types::F32 mTarget ; - Types::F32 mCurrent; - Types::U32 mRate ; + Types::F32 mTarget ; + Types::F32 mCurrent ; + Types::U32 mRate ; + Types::U32 mTimeoutTotal ; + Types::U32 mTimeoutCountDown; } _data; public: @@ -72,9 +76,11 @@ QString infoText() const override { return QString("RinsebackData") ; } struct Data { - float mTarget = 0; ///< Target volume of rinseback delivery - float mCurrent = 0; ///< Current volume of rinseback delivery - quint32 mRate = 0; ///< Current flow rate of rinseback delivery + float mTarget = 0; ///< Target volume of rinseback delivery + float mCurrent = 0; ///< Current volume of rinseback delivery + quint32 mRate = 0; ///< Current flow rate of rinseback delivery + quint32 mTimeoutTotal = 0; ///< Total Timeout of rinseback delivery + quint32 mTimeoutCountDown = 0; ///< Current Timeout count down of rinseback delivery }; public: Index: sources/model/hd/data/MTreatmentStatesData.cpp =================================================================== diff -u -r58014dae52ee6357e88b9b03bcad457ddcb432e8 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/model/hd/data/MTreatmentStatesData.cpp (.../MTreatmentStatesData.cpp) (revision 58014dae52ee6357e88b9b03bcad457ddcb432e8) +++ sources/model/hd/data/MTreatmentStatesData.cpp (.../MTreatmentStatesData.cpp) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -18,30 +18,39 @@ QVariantList MTreatmentStates::parameters() const { return { - _data.mSubMode .value, - _data.mUFState .value, - _data.mSalineState .value, - _data.mHeparinState .value, - _data.mRinsebackState .value, - _data.mRecirculateState .value, + _data.mSubMode .value, + _data.mUFState .value, + _data.mSalineState .value, + _data.mHeparinState .value, + _data.mRinsebackState .value, + _data.mRecirculateState .value, + _data.mBloodPrimeState .value, + _data.mTreatmentEndState .value, + _data.mTreatmentStopState .value, }; } bool MTreatmentStates::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - if (GetValue(vByteArray, index, _data.mSubMode )) - if (GetValue(vByteArray, index, _data.mUFState )) - if (GetValue(vByteArray, index, _data.mSalineState )) - if (GetValue(vByteArray, index, _data.mHeparinState )) - if (GetValue(vByteArray, index, _data.mRinsebackState )) - if (GetValue(vByteArray, index, _data.mRecirculateState )) + if (GetValue(vByteArray, index, _data.mSubMode )) + if (GetValue(vByteArray, index, _data.mUFState )) + if (GetValue(vByteArray, index, _data.mSalineState )) + if (GetValue(vByteArray, index, _data.mHeparinState )) + if (GetValue(vByteArray, index, _data.mRinsebackState )) + if (GetValue(vByteArray, index, _data.mRecirculateState )) + if (GetValue(vByteArray, index, _data.mBloodPrimeState )) + if (GetValue(vByteArray, index, _data.mTreatmentEndState )) + if (GetValue(vByteArray, index, _data.mTreatmentStopState )) return true ; else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } } /*! @@ -51,11 +60,14 @@ */ MTreatmentStates::Data MTreatmentStates::data() const { Data data; - data.mSubMode = _data.mSubMode .value; - data.mUFState = _data.mUFState .value; - data.mSalineState = _data.mSalineState .value; - data.mHeparinState = _data.mHeparinState .value; - data.mRinsebackState = _data.mRinsebackState .value; - data.mRecirculateState = _data.mRecirculateState.value; + data.mSubMode = _data.mSubMode .value; + data.mUFState = _data.mUFState .value; + data.mSalineState = _data.mSalineState .value; + data.mHeparinState = _data.mHeparinState .value; + data.mRinsebackState = _data.mRinsebackState .value; + data.mRecirculateState = _data.mRecirculateState .value; + data.mBloodPrimeState = _data.mBloodPrimeState .value; + data.mTreatmentEndState = _data.mTreatmentEndState .value; + data.mTreatmentStopState = _data.mTreatmentStopState .value; return data; } Index: sources/model/hd/data/MTreatmentStatesData.h =================================================================== diff -u -r58014dae52ee6357e88b9b03bcad457ddcb432e8 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/model/hd/data/MTreatmentStatesData.h (.../MTreatmentStatesData.h) (revision 58014dae52ee6357e88b9b03bcad457ddcb432e8) +++ sources/model/hd/data/MTreatmentStatesData.h (.../MTreatmentStatesData.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -38,12 +38,15 @@ * * | Payload || * | || - * | #1:(U32) | \ref Data::mSubMode | - * | #2:(U32) | \ref Data::mUFState | - * | #3:(U32) | \ref Data::mSalineState | - * | #4:(U32) | \ref Data::mHeparinState | - * | #5:(U32) | \ref Data::mRinsebackState | - * | #6:(U32) | \ref Data::mRecirculateState | + * | #1:(U32) | \ref Data::mSubMode | + * | #2:(U32) | \ref Data::mUFState | + * | #3:(U32) | \ref Data::mSalineState | + * | #4:(U32) | \ref Data::mHeparinState | + * | #5:(U32) | \ref Data::mRinsebackState | + * | #6:(U32) | \ref Data::mRecirculateState | + * | #6:(U32) | \ref Data::mBloodPrimeState | + * | #6:(U32) | \ref Data::mTreatmentEndState | + * | #6:(U32) | \ref Data::mTreatmentStopState | * * \sa Data * \sa Treatment_States @@ -52,6 +55,9 @@ * \sa Heparin_Bolus_States * \sa Rinseback_States * \sa Treatment_Recirc_States + * \sa Blood_Prime_States + * \sa Treatment_Stop_States + * \sa Treatment_End_States * *

Logging info

* | || @@ -69,12 +75,15 @@ QVariantList parameters() const override; struct { - Types::U32 mSubMode ; - Types::U32 mUFState ; - Types::U32 mSalineState ; - Types::U32 mHeparinState ; - Types::U32 mRinsebackState ; - Types::U32 mRecirculateState; + Types::U32 mSubMode ; + Types::U32 mUFState ; + Types::U32 mSalineState ; + Types::U32 mHeparinState ; + Types::U32 mRinsebackState ; + Types::U32 mRecirculateState ; + Types::U32 mBloodPrimeState ; + Types::U32 mTreatmentEndState ; + Types::U32 mTreatmentStopState ; } _data; public: @@ -84,12 +93,15 @@ QString infoText () const override { return QString("TreatmentStates"); } struct Data { - quint32 mSubMode = 0; ///< Sub-Mode State - Treatment_States - quint32 mUFState = 0; ///< UF State - UF_States - quint32 mSalineState = 0; ///< Saline State - Saline_Bolus_States - quint32 mHeparinState = 0; ///< Heparin State - Heparin_Bolus_States - quint32 mRinsebackState = 0; ///< Rinseback State - Rinseback_States - quint32 mRecirculateState = 0; ///< Recirculate State - Treatment_Recirc_States + quint32 mSubMode = 0; ///< Sub-Mode State - Treatment_States + quint32 mUFState = 0; ///< UF State - UF_States + quint32 mSalineState = 0; ///< Saline State - Saline_Bolus_States + quint32 mHeparinState = 0; ///< Heparin State - Heparin_Bolus_States + quint32 mRinsebackState = 0; ///< Rinseback State - Rinseback_States + quint32 mRecirculateState = 0; ///< Recirculate State - Treatment_Recirc_States + quint32 mBloodPrimeState = 0; ///< BloodPrime State - Blood_Prime_States + quint32 mTreatmentEndState = 0; ///< TreatmentEnd State - Treatment_Stop_States + quint32 mTreatmentStopState = 0; ///< TreatmentStop State - Treatment_End_States }; MTreatmentStates() { } Index: sources/view/VView.h =================================================================== diff -u -r2d37388a2b6651ea4002d6720e933315e0ba7fa3 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/view/VView.h (.../VView.h) (revision 2d37388a2b6651ea4002d6720e933315e0ba7fa3) +++ sources/view/VView.h (.../VView.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -114,6 +114,7 @@ REGISTER_TYPE( VTreatmentSaline ) \ REGISTER_TYPE( VTreatmentHeparin ) \ REGISTER_TYPE( VTreatmentRinseback ) \ + REGISTER_TYPE( VTreatmentRecirculate ) \ REGISTER_TYPE( VTreatmentBloodPrime ) \ REGISTER_TYPE( VHDOperationMode ) \ REGISTER_TYPE( VHDTreatmentStates ) \ Index: sources/view/hd/data/VHDTreatmentStatesData.cpp =================================================================== diff -u -r28a383251ad37c669202c0a717ff90b8fc21a442 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/view/hd/data/VHDTreatmentStatesData.cpp (.../VHDTreatmentStatesData.cpp) (revision 28a383251ad37c669202c0a717ff90b8fc21a442) +++ sources/view/hd/data/VHDTreatmentStatesData.cpp (.../VHDTreatmentStatesData.cpp) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -75,13 +75,9 @@ // Treatment states // Treatment states - Basics txStart ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_START_STATE ); - txBloodPrime ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_BLOOD_PRIME_STATE ); - txStop ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_STOP_STATE ); - txEnd ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_END_STATE ); // Treatment states - Dialysis - txDialysisRunning ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_DIALYSIS_STATE ); - txDialysisEnd ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_DIALYSIS_END_STATE ); + txDialysis ( vData.mSubMode == GuiTreatmentStates ::TREATMENT_DIALYSIS_STATE ); // NOTE: For Rinseback and Recirculate // 1 - it seems we may never need the txRinseback @@ -96,23 +92,46 @@ // Treatment states - Rinse back // Rinseback states - bool mRinseback = vData.mSubMode == GuiTreatmentStates ::TREATMENT_RINSEBACK_STATE ; + bool mRinseback = vData.mSubMode == GuiTreatmentStates ::TREATMENT_RINSEBACK_STATE ; if ( mRinseback ) { - rbInit ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_STOP_INIT_STATE ); - rbRun ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_RUN_STATE ); - rbPaused ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_PAUSED_STATE ); - rbStop ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_STOP_STATE ); - rbAdditional ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_RUN_ADDITIONAL_STATE ); + rbInit ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_STOP_INIT_STATE ); + rbRun ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_RUN_STATE ); + rbPaused ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_PAUSED_STATE ); + rbStop ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_STOP_STATE ); + rbAdditional ( vData.mRinsebackState == GuiRinsebackStates ::RINSEBACK_RUN_ADDITIONAL_STATE ); } txRinseback ( mRinseback ); // it's the main rinseback even so moved last to have all the sub-rinseback-states updated prior to. // Recirculate states - bool mRecirculate = vData.mSubMode == GuiTreatmentStates ::TREATMENT_RECIRC_STATE ; + bool mRecirculate = vData.mSubMode == GuiTreatmentStates ::TREATMENT_RECIRC_STATE ; if ( mRecirculate ) { - rcStarted ( vData.mRecirculateState == GuiRecirculateStates ::TREATMENT_RECIRC_RECIRC_STATE ); - rcStopped ( vData.mRecirculateState == GuiRecirculateStates ::TREATMENT_RECIRC_STOPPED_STATE ); + rcStarted ( vData.mRecirculateState == GuiRecirculateStates ::TREATMENT_RECIRC_RECIRC_STATE ); + rcStopped ( vData.mRecirculateState == GuiRecirculateStates ::TREATMENT_RECIRC_STOPPED_STATE ); } txRecirculate ( mRecirculate ); // it's the main recirculate even so moved last to have all the sub-recirculate-states updated prior to. + + // Blood Prime states + bool mBloodPrime = vData.mSubMode == GuiTreatmentStates ::TREATMENT_BLOOD_PRIME_STATE ; + if ( mBloodPrime ) { + bpRamp ( vData.mBloodPrimeState == GuiBloodPrimeStates ::BLOOD_PRIME_RAMP_STATE ); + } + txBloodPrime ( mBloodPrime ); + + // Treatment End states + bool mTreatmentEnd = vData.mSubMode == GuiTreatmentStates ::TREATMENT_END_STATE ; + if ( mTreatmentEnd ) { + teWaitRinseback ( vData.mTreatmentEndState == GuiTreatmentEndStates ::TREATMENT_END_WAIT_FOR_RINSEBACK_STATE ); + tePaused ( vData.mTreatmentEndState == GuiTreatmentEndStates ::TREATMENT_END_PAUSED_STATE ); + } + txEnd ( mTreatmentEnd ); + + // Treatment Stop states + bool mTreatmentStop = vData.mSubMode == GuiTreatmentStates ::TREATMENT_STOP_STATE ; + if ( mTreatmentStop ) { + tsRecirculate ( vData.mTreatmentStopState == GuiTreatmentStopStates ::TREATMENT_STOP_RECIRC_STATE ); + tsRecirculateNo ( vData.mTreatmentStopState == GuiTreatmentStopStates ::TREATMENT_STOP_NO_RECIRC_STATE ); + } + txStop ( mTreatmentStop ); } /*! Index: sources/view/hd/data/VHDTreatmentStatesData.h =================================================================== diff -u -r28a383251ad37c669202c0a717ff90b8fc21a442 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/view/hd/data/VHDTreatmentStatesData.h (.../VHDTreatmentStatesData.h) (revision 28a383251ad37c669202c0a717ff90b8fc21a442) +++ sources/view/hd/data/VHDTreatmentStatesData.h (.../VHDTreatmentStatesData.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -47,71 +47,74 @@ PROPERTY( quint32, salineState , 0) // coco end - // these properties are mutually exclusive + // these groups of properties are mutually exclusive // and if one becomes true the other ones become false at the same time // so on each change we were going to have multiple signal emits. // but since it is not happening more often Property is used. // otherwise it should be implemented as a single signal with these properties as parameters.\n // also start UF_START_STATE should not be used often // because it's only useful in FW implementation and it immediately changes to another state. + + // ---- Treatment states + // ---- Treatment states - Basics + // coco begin validated: Manually tested + // not used yet since the Treatment Start/stop/end has not been implemented yet. + PROPERTY( bool , txStart , false) ///< TREATMENT_START_STATE = 0 # Start treatment - initialize treatment and go to blood prime state + PROPERTY( bool , txBloodPrime , false) ///< TREATMENT_BLOOD_PRIME_STATE = 1 # Prime blood-side of dialyzer with gradual ramp for 1 min. while dialyzer is bypassed. No dialysis or UF taking place. No treatment time. + PROPERTY( bool , txDialysis , false) ///< TREATMENT_DIALYSIS_STATE = 2 # Perform dialysis. Deliver Heparin as prescribed. Deliver UF as prescribed. Handle saline boluses as requested + PROPERTY( bool , txStop , false) ///< TREATMENT_STOP_STATE = 3 # Treatment stopped. All pumps off. Dializer bypassed + PROPERTY( bool , txRinseback , false) ///< TREATMENT_RINSEBACK_STATE = 4 # Perform rinseback with saline. Dialyzer bypassed. Dialysate recirculating + PROPERTY( bool , txRecirculate , false) ///< TREATMENT_RECIRC_STATE = 5 # Recirculate saline and dialysate while patient disconnected. Blood lines open and shunted. Dialyzer is bypassed + PROPERTY( bool , txEnd , false) ///< TREATMENT_END_STATE = 6 # Dialysis has ended. Blood pump slowed. Dialyzer is bypassed. Dialysate is recirculated. User can rinseback + // coco end + // ---- Ultrafiltration states // coco begin validated: Manually tested // not useful for UI more FW state entry // kept for consistency - PROPERTY( bool , ufStart , false) ///< UF_START_STATE Start state of the ultrafiltration state machine + PROPERTY( bool , ufStart , false) ///< UF_START_STATE = 0 # Start state of the ultrafiltration state machine // coco end - PROPERTY( bool , ufPaused , false) ///< UF_PAUSED_STATE Paused state of the ultrafiltration state machine - PROPERTY( bool , ufRunning , false) ///< UF_RUNNING_STATE Running state of the ultrafiltration state machine - PROPERTY( bool , ufOff , true ) ///< UF_OFF_STATE Completed/off state of the ultrafiltration state machine (default state) - PROPERTY( bool , ufCompleted , false) ///< UF_COMPLETED_STATE Completed state of ultrafiltration state machine + PROPERTY( bool , ufPaused , false) ///< UF_PAUSED_STATE = 1 # Paused state of the ultrafiltration state machine + PROPERTY( bool , ufRunning , false) ///< UF_RUNNING_STATE = 2 # Running state of the ultrafiltration state machine + PROPERTY( bool , ufOff , true ) ///< UF_OFF_STATE = 3 # Completed/off state of the ultrafiltration state machine + PROPERTY( bool , ufCompleted , false) ///< UF_COMPLETED_STATE = 4 # Completed state of ultrafiltration state machine // ---- Saline Bolus states - PROPERTY( bool , sbIdle , true ) ///< SALINE_BOLUS_STATE_IDLE No saline bolus delivery is in progress (default state) - PROPERTY( bool , sbWaitPump , false) ///< SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP Wait for pumps to stop before starting bolus - PROPERTY( bool , sbRunning , false) ///< SALINE_BOLUS_STATE_IN_PROGRESS A saline bolus delivery is in progress - PROPERTY( bool , sbMaxReached , false) ///< SALINE_BOLUS_STATE_MAX_DELIVERED Maximum saline bolus volume reached - no more saline bolus deliveries allowed + PROPERTY( bool , sbIdle , true ) ///< SALINE_BOLUS_STATE_IDLE = 0 # No saline bolus delivery is in progress + PROPERTY( bool , sbWaitPump , false) ///< SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP = 1 # Wait for pumps to stop before starting bolus + PROPERTY( bool , sbRunning , false) ///< SALINE_BOLUS_STATE_IN_PROGRESS = 2 # A saline bolus delivery is in progress + PROPERTY( bool , sbMaxReached , false) ///< SALINE_BOLUS_STATE_MAX_DELIVERED = 3 # Maximum saline bolus volume reached - no more saline bolus deliveries allowed // ---- Heparin states - PROPERTY( bool , hpOff , true ) ///< No heparin delivery is in progress - PROPERTY( bool , hpPaused , false) ///< Heparin delivery paused - PROPERTY( bool , hpInitial_bolus , false) ///< Initial heparin bolus delivery in progress - PROPERTY( bool , hpDispensing , false) ///< Gradual heparin dispensing in progress - PROPERTY( bool , hpCompleted , false) ///< Heparin delivery stopped due to the set stop time before treatment end - PROPERTY( bool , hpEmpty , false) ///< Heparin Syringe empty + PROPERTY( bool , hpOff , true ) ///< HEPARIN_STATE_OFF = 0 # No heparin delivery is in progress + PROPERTY( bool , hpPaused , false) ///< HEPARIN_STATE_PAUSED = 1 # Heparin delivery paused + PROPERTY( bool , hpInitial_bolus , false) ///< HEPARIN_STATE_INITIAL_BOLUS = 2 # Initial heparin bolus delivery in progress + PROPERTY( bool , hpDispensing , false) ///< HEPARIN_STATE_DISPENSING = 3 # Gradual heparin dispensing in progress + PROPERTY( bool , hpCompleted , false) ///< HEPARIN_STATE_COMPLETED = 4 # Heparin delivery stopped due to the set stop time before treatment end + PROPERTY( bool , hpEmpty , false) ///< HEPARIN_STATE_EMPTY = 5 # Heparin Syringe empty - // ---- Treatment states - // ---- Treatment states - Basics - // coco begin validated: Manually tested - // not used yet since the Treatment Start/stop/end has not been implemented yet. - PROPERTY( bool , txStart , false) ///< TREATMENT_START_STATE Start treatment, prime blood side with gradual ramp for 1 min. while Dialyzer is bypassed. No dialysis or UF taking place - PROPERTY( bool , txBloodPrime , false) ///< TREATMENT_BLOOD_PRIME_STATE Prime blood-side of dialyzer with gradual ramp for 1 min. while dialyzer is bypassed. No dialysis or UF taking place. No treatment time. - PROPERTY( bool , txStop , false) ///< TREATMENT_STOP_STATE Treatment stopped. All pumps off. Dialyzer bypassed - PROPERTY( bool , txEnd , false) ///< TREATMENT_END_STATE Treatment has ended. All pumps off. Dialyzer is bypassed. Blood lines are closed. User to disconnect - // coco end + // Rinseback States + PROPERTY( bool , rbInit , true ) ///< RINSEBACK_STOP_INIT_STATE = 0 # Start state (stopped) of the rinseback sub-mode state machine + PROPERTY( bool , rbRun , false) ///< RINSEBACK_RUN_STATE = 1 # Rinseback running state of the rinseback sub-mode state machine + PROPERTY( bool , rbPaused , false) ///< RINSEBACK_PAUSED_STATE = 2 # Rinseback paused state of the rinseback sub-mode state machine + PROPERTY( bool , rbStop , false) ///< RINSEBACK_STOP_STATE = 3 # Rinseback stopped (done) state of the rinseback sub-mode state machine + PROPERTY( bool , rbAdditional , false) ///< RINSEBACK_RUN_ADDITIONAL_STATE = 4 # Additional rinseback volume (10 mL) state of the rinseback sub-mode state machine - // ---- Treatment states - Dialysis - PROPERTY( bool , txDialysisRunning , false) ///< TREATMENT_DIALYSIS_STATE Perform dialysis. Deliver Heparin as prescribed. Deliver UF as prescribed. Handle saline boluses as requested - // coco begin validated: Manually tested - // not used yet since the Treatment Start/stop/end has not been implemented yet. - PROPERTY( bool , txDialysisEnd , false) ///< TREATMENT_DIALYSIS_END_STATE Dialysis has ended. Blood pump slowed. Dialyzer is bypassed. Dialysate is recirculated. User can rinseback - // coco end - // ---- Treatment states - Rinse back - PROPERTY( bool , txRinseback , false) ///< TREATMENT_RINSEBACK_STATE Perform rinseback with saline. Dialyzer bypassed. Dialysate recirculating + // Recirculate states + PROPERTY( bool , rcStarted , true ) ///< TREATMENT_RECIRC_RECIRC_STATE = 0 # Re-circulate state of the treatment re-circulate sub-mode state machine + PROPERTY( bool , rcStopped , false) ///< TREATMENT_RECIRC_STOPPED_STATE = 1 # Stopped state of the treatment re-circulate sub-mode state machine - // Rinseback States - PROPERTY( bool , rbInit , false) ///< Start state (stopped) of the rinseback sub-mode state machine - PROPERTY( bool , rbRun , false) ///< Rinseback running state of the rinseback sub-mode state machine - PROPERTY( bool , rbPaused , false) ///< Rinseback paused state of the rinseback sub-mode state machine - PROPERTY( bool , rbStop , false) ///< Rinseback stopped (done) state of the rinseback sub-mode state machine - PROPERTY( bool , rbAdditional , false) ///< Additional rinseback volume (10 mL) state of the rinseback sub-mode state machine + // Blood Prime + PROPERTY( bool , bpRamp , true ) ///< BLOOD_PRIME_RAMP_STATE = 0 # Ramp state of the blood prime sub-mode state machine - // ---- Treatment states - Recirculate - PROPERTY( bool , txRecirculate , false) ///< TREATMENT_RECIRC_STATE Recirculate saline and dialysate while patient disconnected. Blood lines open and shunted. Dialyzer is bypassed + // Treatment End + PROPERTY( bool , teWaitRinseback , true ) ///< TREATMENT_END_WAIT_FOR_RINSEBACK_STATE = 0 # Wait for rinseback state of the treatment end sub-mode state machine + PROPERTY( bool , tePaused , false) ///< TREATMENT_END_PAUSED_STATE = 1 # Paused state of the treatment end sub-mode state machine - // Recirculate states - PROPERTY( bool , rcStarted , false) ///< Re-circulate state of the treatment re-circulate sub-mode state machine - PROPERTY( bool , rcStopped , false) ///< Stopped state of the treatment re-circulate sub-mode state machine + // Treatment Stop + PROPERTY( bool , tsRecirculate , true ) ///< TREATMENT_STOP_RECIRC_STATE = 0 # Dialysate re-circulation state of the treatment stop sub-mode state machine + PROPERTY( bool , tsRecirculateNo , false) ///< TREATMENT_STOP_NO_RECIRC_STATE = 1 # No dialysate re-circulation state of the treatment stop sub-mode state machine // class definition Index: sources/view/hd/data/VTreatmentRecirculateData.cpp =================================================================== diff -u --- sources/view/hd/data/VTreatmentRecirculateData.cpp (revision 0) +++ sources/view/hd/data/VTreatmentRecirculateData.cpp (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,26 @@ +/*! + * + * Copyright (c) 2019-2020 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 VTreatmentRecirculateData.cpp + * \author (last) Behrouz NematiPour + * \date (last) 10-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 10-Feb-2021 + * + */ +#include "VTreatmentRecirculateData.h" + +// Project +#include "GuiController.h" + +VIEW_DEF(VTreatmentRecirculate, TreatmentRecirculateData) + +void VTreatmentRecirculate::onActionReceive(const TreatmentRecirculateData &vData) +{ + timeoutTotal ( vData.mTimeoutTotal ); + timeoutCountDown( vData.mTimeoutCountDown ); +} Index: sources/view/hd/data/VTreatmentRecirculateData.h =================================================================== diff -u --- sources/view/hd/data/VTreatmentRecirculateData.h (revision 0) +++ sources/view/hd/data/VTreatmentRecirculateData.h (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -0,0 +1,44 @@ +/*! + * + * Copyright (c) 2019-2020 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 VTreatmentRecirculateData.h + * \author (last) Behrouz NematiPour + * \date (last) 10-Feb-2021 + * \author (original) Behrouz NematiPour + * \date (original) 10-Feb-2021 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : don't remove +#include "MModel.h" +#include "VView.h" + +// namespace +namespace View { + +/*! + * \brief The VTreatmentRecirculate class + * \details View for Model's data representation. + * + * \sa Model::MTreatmentRecirculate + * + */ +class VTreatmentRecirculate : public QObject +{ + Q_OBJECT + + PROPERTY( quint32 , timeoutTotal , 0) + PROPERTY( quint32 , timeoutCountDown, 0) + + VIEW_DEC(VTreatmentRecirculate, TreatmentRecirculateData) +}; +} Index: sources/view/hd/data/VTreatmentRinsebackData.cpp =================================================================== diff -u -rfd25d67f37410037f22be9c6e958b100e3790de9 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/view/hd/data/VTreatmentRinsebackData.cpp (.../VTreatmentRinsebackData.cpp) (revision fd25d67f37410037f22be9c6e958b100e3790de9) +++ sources/view/hd/data/VTreatmentRinsebackData.cpp (.../VTreatmentRinsebackData.cpp) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -7,7 +7,7 @@ * * \file VTreatmentRinsebackData.cpp * \author (last) Behrouz NematiPour - * \date (last) 08-Feb-2021 + * \date (last) 10-Feb-2021 * \author (original) Behrouz NematiPour * \date (original) 20-Nov-2020 * @@ -21,7 +21,9 @@ void VTreatmentRinseback::onActionReceive(const TreatmentRinsebackData &vData) { - target (vData.mTarget ); - current(vData.mCurrent); - rate (vData.mRate ); + target ( vData.mTarget ); + current ( vData.mCurrent ); + rate ( vData.mRate ); + timeoutTotal ( vData.mTimeoutTotal ); + timeoutCountDown( vData.mTimeoutCountDown ); } Index: sources/view/hd/data/VTreatmentRinsebackData.h =================================================================== diff -u -rfd25d67f37410037f22be9c6e958b100e3790de9 -r07e0c7bd409782cab96a4ae761ee3f819bdb8639 --- sources/view/hd/data/VTreatmentRinsebackData.h (.../VTreatmentRinsebackData.h) (revision fd25d67f37410037f22be9c6e958b100e3790de9) +++ sources/view/hd/data/VTreatmentRinsebackData.h (.../VTreatmentRinsebackData.h) (revision 07e0c7bd409782cab96a4ae761ee3f819bdb8639) @@ -7,7 +7,7 @@ * * \file VTreatmentRinsebackData.h * \author (last) Behrouz NematiPour - * \date (last) 08-Feb-2021 + * \date (last) 10-Feb-2021 * \author (original) Behrouz NematiPour * \date (original) 20-Nov-2020 * @@ -36,9 +36,11 @@ { Q_OBJECT - PROPERTY( float , target , 0) - PROPERTY( float , current , 0) - PROPERTY( quint32 , rate , 0) + PROPERTY( float , target , 0) + PROPERTY( float , current , 0) + PROPERTY( quint32 , rate , 0) + PROPERTY( quint32 , timeoutTotal , 0) + PROPERTY( quint32 , timeoutCountDown, 0) VIEW_DEC(VTreatmentRinseback, TreatmentRinsebackData) };