Index: leahi.pro =================================================================== diff -u -r99d10909ee4ee821cd4ab6dc323c3798d9090b39 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- leahi.pro (.../leahi.pro) (revision 99d10909ee4ee821cd4ab6dc323c3798d9090b39) +++ leahi.pro (.../leahi.pro) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -158,6 +158,7 @@ sources/model/td/adjustment/settings/MAdjustTDSerialNumberResponse.h \ sources/model/td/adjustment/settings/MAdjustTDVersionsRequest.h \ sources/model/td/adjustment/settings/MAdjustTDVersionsResponse.h \ + sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.h \ sources/model/td/data/MTDAirBubbleData.h \ sources/model/td/data/MTDAirPumpData.h \ sources/model/td/data/MTDAirTrapData.h \ @@ -174,6 +175,7 @@ sources/model/td/data/treatment/MTreatmentStatesData.h \ sources/model/td/data/treatment/MTreatmentTimeData.h \ sources/model/td/data/treatment/MTreatmentUltrafiltrationData.h \ + sources/model/td/data/treatment/MTreatmentVitalsData.h \ sources/storage/Settings.h \ sources/storage/TreatmentLog.h \ sources/bluetooth/BluetoothInterface.h \ @@ -206,6 +208,7 @@ sources/view/td/data/VTDOpModeData.h \ \ # ---------- Views - TD - Adjustment - In-Treatment sources/view/td/adjustment/treatment/VTreatmentAdjustmentSaline.h \ + sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.h \ \ # ---------- Models - TD - Adjustment - In-Treatment sources/model/td/adjustment/treatment/MTreatmentAdjustSalineResponse.h \ \ # ---------- Models - confirm @@ -466,6 +469,7 @@ sources/model/td/adjustment/settings/MAdjustTDSerialNumberResponse.cpp \ sources/model/td/adjustment/settings/MAdjustTDVersionsRequest.cpp \ sources/model/td/adjustment/settings/MAdjustTDVersionsResponse.cpp \ + sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.cpp \ sources/model/td/data/MTDAirBubbleData.cpp \ sources/model/td/data/MTDAirPumpData.cpp \ sources/model/td/data/MTDAirTrapData.cpp \ @@ -482,6 +486,7 @@ sources/model/td/data/treatment/MTreatmentStatesData.cpp \ sources/model/td/data/treatment/MTreatmentTimeData.cpp \ sources/model/td/data/treatment/MTreatmentUltrafiltrationData.cpp \ + sources/model/td/data/treatment/MTreatmentVitalsData.cpp \ sources/model/ui/data/MUIBloodPressureData.cpp \ sources/storage/Settings.cpp \ sources/storage/TreatmentLog.cpp \ @@ -632,6 +637,7 @@ sources/view/td/data/VTDOpModeData.cpp \ \ # ---------- Views - TD - Adjustment - In-Treatment sources/view/td/adjustment/treatment/VTreatmentAdjustmentSaline.cpp \ + sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.cpp \ \ # ---------- Views - CONFIRM sources/view/confirm/VConfirm.cpp \ \ # ---------- Views - POST Index: leahi.qrc =================================================================== diff -u -re1ecb77ba0ff9619b7363f14e1ed3c3e110c4057 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- leahi.qrc (.../leahi.qrc) (revision e1ecb77ba0ff9619b7363f14e1ed3c3e110c4057) +++ leahi.qrc (.../leahi.qrc) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -54,7 +54,6 @@ resources/images/diality-splash.png resources/images/ArrowRight.png resources/images/ArrowLeft.png - resources/images/logo d Dark Transparent.png resources/images/Close.png resources/images/bell-on.png resources/images/bell-off.png @@ -99,6 +98,8 @@ resources/images/Information.png resources/images/Storage.png resources/images/help.png + resources/images/Popup_gradient.png + resources/images/backspace.png sources/gui/qml/components/MainMenu.qml @@ -141,7 +142,6 @@ sources/gui/qml/components/UltrafiltrationButton.qml sources/gui/qml/components/ImageWave.qml sources/gui/qml/components/ImageClock.qml - sources/gui/qml/components/ImageLogoDDarkTransparent.qml sources/gui/qml/components/ConfirmTreatmentTableEntry.qml sources/gui/qml/components/DebugDataColumn.qml sources/gui/qml/components/RangeSlider.qml @@ -155,7 +155,6 @@ sources/gui/qml/components/FooterStatic.qml sources/gui/qml/components/TimeEntry.qml sources/gui/qml/components/Label.qml - sources/gui/qml/components/EntryDialog.qml sources/gui/qml/components/SliderArrows.qml sources/gui/qml/components/QRCode.qml sources/gui/qml/components/ContentArea.qml @@ -164,6 +163,7 @@ sources/gui/qml/components/HeaderBar.qml sources/gui/qml/components/HeaderBarPopup.qml sources/gui/qml/components/AlarmButtonRow.qml + sources/gui/qml/components/NumPad.qml sources/gui/qml/compounds/PressureRangeSlider.qml @@ -271,6 +271,7 @@ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationConfirm.qml sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentPressuresLimits.qml + sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml sources/gui/qml/pages/endtreatment/EndTreatmentRinsebackStack.qml Index: sources/canbus/MessageDispatcher.cpp =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -355,6 +355,17 @@ } /** + * \details This method transmits the Vitals Adjustment Denali message. + * \param vData - Data model contains treatment Vitals adjustment state. + * \return void + */ +void MessageDispatcher::onAdjustment(const AdjustVitalsRequestData &) +{ + QVariantList mData; + onActionTransmit(GuiActionType::ID_AdjustVitalsReq, mData); +} + +/** * \details This method transmits the Heparin Adjustment Denali message. * \param vData - Data model contains treatment Heparin adjustment state. * \return void Index: sources/canbus/MessageDispatcher.h =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/canbus/MessageDispatcher.h (.../MessageDispatcher.h) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/canbus/MessageDispatcher.h (.../MessageDispatcher.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -135,6 +135,7 @@ GuiActionType::ID_AdjustUltrafiltrationEditReq , GuiActionType::ID_AdjustUltrafiltrationConfirmReq , GuiActionType::ID_AdjustSalineReq , + GuiActionType::ID_AdjustVitalsReq , GuiActionType::ID_AdjustHeparinReq , GuiActionType::ID_AdjustPressuresLimitsReq , // End-Treatment Index: sources/canbus/MessageGlobals.h =================================================================== diff -u -r47b25a76644ca44b81b5a4a728346f8e72e1dc3b -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision 47b25a76644ca44b81b5a4a728346f8e72e1dc3b) +++ sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -77,6 +77,7 @@ {Gui::GuiActionType::ID_DialysateOutletFlow , 13 * 4 }, //13 parameters each 4bytes {Gui::GuiActionType::ID_PressureOcclusion , 12 * 4 }, //12 parameters each 4bytes {Gui::GuiActionType::ID_Saline , 4 * 4 }, // 4 parameters each 4bytes + {Gui::GuiActionType::ID_Vitals , 3 * 4 }, // 3 parameters each 4bytes {Gui::GuiActionType::ID_Ultrafiltration , 4 * 4 }, // 4 parameters each 4bytes {Gui::GuiActionType::ID_Heparin , 2 * 4 }, // 2 parameters each 4bytes {Gui::GuiActionType::ID_Rinseback , 6 * 4 }, // 6 parameters each 4bytes @@ -208,6 +209,10 @@ {Gui::GuiActionType::ID_AdjustSalineRsp , 3 * 4 }, // 3 parameters each 4bytes // ---- + {Gui::GuiActionType::ID_AdjustVitalsReq , 0 * 4 }, // 0 parameter each 4bytes + {Gui::GuiActionType::ID_AdjustVitalsRsp , 2 * 4 }, // 2 parameters each 4bytes + + // ---- {Gui::GuiActionType::ID_AdjustHeparinReq , 1 * 4 }, // 1 parameter each 4bytes {Gui::GuiActionType::ID_AdjustHeparinRsp , 2 * 4 }, // 3 parameters each 4bytes Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -r3c07dc803109f716937b692cb4a67a5324bb9ca3 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 3c07dc803109f716937b692cb4a67a5324bb9ca3) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -250,6 +250,7 @@ case Gui::GuiActionType::ID_AdjustBloodDialysateReq : INTERPRET_TRANSMIT_MESSAGE(AdjustBloodDialysateRequestData ); break; case Gui::GuiActionType::ID_AdjustPressuresLimitsReq : INTERPRET_TRANSMIT_MESSAGE(AdjustPressuresLimitsRequestData ); break; case Gui::GuiActionType::ID_AdjustSalineReq : INTERPRET_TRANSMIT_MESSAGE(AdjustSalineRequestData ); break; + case Gui::GuiActionType::ID_AdjustVitalsReq : INTERPRET_TRANSMIT_MESSAGE(AdjustVitalsRequestData ); break; case Gui::GuiActionType::ID_AdjustHeparinReq : INTERPRET_TRANSMIT_MESSAGE(AdjustHeparinRequestData ); break; // in-treatment - ultrafiltration case Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq : INTERPRET_TRANSMIT_MESSAGE(AdjustUltrafiltrationStateRequestData ); break; @@ -513,6 +514,7 @@ case Gui::GuiActionType::ID_DialysateOutletFlow : ok = notify(vMessage, vData, Gui::GuiActionType::ID_DialysateOutletFlow ); break; case Gui::GuiActionType::ID_PressureOcclusion : ok = notify(vMessage, vData, Gui::GuiActionType::ID_PressureOcclusion ); break; case Gui::GuiActionType::ID_Saline : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Saline ); break; + case Gui::GuiActionType::ID_Vitals : ok = notify(vMessage, vData, Gui::GuiActionType::ID_Vitals ); 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; @@ -525,6 +527,7 @@ case Gui::GuiActionType::ID_AdjustBloodDialysateRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustBloodDialysateRsp ); break; case Gui::GuiActionType::ID_AdjustPressuresLimitsRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustPressuresLimitsRsp ); break; case Gui::GuiActionType::ID_AdjustSalineRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustSalineRsp ); break; + case Gui::GuiActionType::ID_AdjustVitalsRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustVitalsRsp ); break; case Gui::GuiActionType::ID_AdjustUltrafiltrationStateRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustUltrafiltrationStateRsp ); break; case Gui::GuiActionType::ID_AdjustHeparinRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustHeparinRsp ); break; case Gui::GuiActionType::ID_AdjustRinsebackRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustRinsebackRsp ); break; Index: sources/gui/GuiGlobals.cpp =================================================================== diff -u -r3c07dc803109f716937b692cb4a67a5324bb9ca3 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 3c07dc803109f716937b692cb4a67a5324bb9ca3) +++ sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -124,6 +124,7 @@ #include "VTreatmentAdjustmentUltrafiltrationEdit.h" #include "VTreatmentAdjustmentUltrafiltrationConfirm.h" #include "VTreatmentAdjustmentSaline.h" +#include "VTreatmentAdjustmentVitals.h" #include "VTreatmentAdjustmentHeparin.h" #include "VTreatmentAdjustmentRinseback.h" #include "VTreatmentAdjustmentRecirculate.h" Index: sources/gui/GuiGlobals.h =================================================================== diff -u -r99d10909ee4ee821cd4ab6dc323c3798d9090b39 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 99d10909ee4ee821cd4ab6dc323c3798d9090b39) +++ sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -140,6 +140,7 @@ ID_Recirculate = 0x5A00, // 90 ID_BloodPrime = 0x5900, // 89 ID_TreatmentStop = 0x4900, // 73 + ID_Vitals = 0x9900, // TESTING -- UPDATE WITH ACTUAL // Alarm Messages ID_AlarmStatus = 0x0100, // 01 //// ----- @LEAHIZED @@ -237,6 +238,9 @@ ID_AdjustSalineReq = 0x5E00, // 94 ID_AdjustSalineRsp = 0x5F00, // 95 + ID_AdjustVitalsReq = 0x4321, // TESTING -- UPDATE WITH ACTUAL + ID_AdjustVitalsRsp = 0x1234, // TESTING -- UPDATE WITH ACTUAL + ID_AdjustHeparinReq = 0x4B00, // 75 ID_AdjustHeparinRsp = 0x4C00, // 76 Fisheye: Tag c1d0546e2d1a51ff919b2172ce647003359f0853 refers to a dead (removed) revision in file `sources/gui/qml/components/EntryDialog.qml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag c1d0546e2d1a51ff919b2172ce647003359f0853 refers to a dead (removed) revision in file `sources/gui/qml/components/ImageLogoDDarkTransparent.qml'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/gui/qml/components/ModalDialog.qml =================================================================== diff -u -rdeaef8b5bdfe9be7293e63fb6ac256a9ce3cd3f4 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/components/ModalDialog.qml (.../ModalDialog.qml) (revision deaef8b5bdfe9be7293e63fb6ac256a9ce3cd3f4) +++ sources/gui/qml/components/ModalDialog.qml (.../ModalDialog.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -21,6 +21,7 @@ // Project // Qml imports import "qrc:/globals" +import "qrc:/components" /*! * \brief The parent item for modal dialogs @@ -37,6 +38,8 @@ property alias notificationText : _notification.text property alias notification : _notification property bool showDropShadow : false + property alias numPad : _numPad + property bool   showGradient        : false width : Variables.dialogWidth height : Variables.dialogHeight @@ -60,20 +63,37 @@ } background: Rectangle { id: _backgroundRect - color : Colors.backgroundDialog - radius: Variables.dialogRadius + color : Colors.backgroundDialog + radius : Variables.dialogRadius - layer.enabled: showDropShadow + layer.enabled : showDropShadow layer.effect: DropShadow { id: _dropShadow horizontalOffset: 4 verticalOffset : 4 radius : 12 samples : 32 - color : "#4DFFF8E1" + color : Colors.dropShadowDialogColor source : _backgroundRect anchors.fill : _backgroundRect } + + Image { id: _backgroundImage + anchors.fill: parent + source : "qrc:/images/iPopupGradient" + fillMode : Image.PreserveAspectCrop + visible : _root.showGradient + + layer.enabled : true + layer.effect: OpacityMask { + maskSource: Rectangle { + width : _backgroundImage.width + height : _backgroundImage.height + radius : _root.radius + antialiasing : true + } + } + } } onVisibleChanged: { @@ -82,6 +102,15 @@ } } + NumPad { id: _numPad + x: Math.round((_root.width - _numPad.width) / 2) + y: Math.round((Variables.applicationHeight -_root.y - _numPad.height - Variables.mainMenuHeight * 2)) + + onCancel: { + _numPad.hide() + } + } + NumberAnimation { id: _autoHideAnimation running: false target: _root Index: sources/gui/qml/components/NumPad.qml =================================================================== diff -u --- sources/gui/qml/components/NumPad.qml (revision 0) +++ sources/gui/qml/components/NumPad.qml (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,236 @@ +/*! + * + * Copyright (c) 2020-2025 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 NumPad.qml + * \author (last) Nico Ramirez + * \date (last) 28-Aug-2025 + * \author (original) Nico Ramirez + * \date (original) 28-Aug-2025 + * + */ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtGraphicalEffects 1.12 + +import "qrc:/components" +import "qrc:/globals" + +Rectangle { id: _root + property var settingValue : undefined + property alias unit : _unitText.text + property alias range : _range.text + property alias title : _title.text + + property alias displayValue : _valueLabel.text + property int precision : 0 + property var getter : null + property var setter : null + property var validator : null + readonly property bool isValueValid : validator ? validator(valueInt) : true + readonly property var valueInt : isNaN(parseInt(_valueLabel.text)) ? undefined : parseInt(_valueLabel.text) + readonly property string backSpace : "qrc:/images/iBackspace" + + signal cancel() + + x: Math.round((Variables.applicationWidth - _root.width) / 2) + y: Math.round((Variables.applicationHeight - _root.height)) + + function open(entry, title, min, max, unit) { + reset() + _root.settingValue = Qt.binding(function () { return entry.text }) + _root.title = title + _root.unit = unit + _root.range = min.isEmpty && + max.isEmpty ? "" : ("%1 %2 - %3") .arg(qsTr("Range:")) + .arg(min) + .arg(max) + _root.getter = entry.text + _root.setter = function (value) { entry.text = value } + _root.validator = function (value) { { return value >= min && value <= max } } + _keyboard.setVisible(false) + show() + } + + function show() { if ( ! _root.visible ) { _root.visible = true } } + + function hide() { if ( _root.visible ) { _root.visible = false } } + + function reset() { + _numPadGrid.replaceValueText = true + _root.getter = null + _root.setter = null + _root.displayValue = "" + } + + onVisibleChanged : if ( ! _root.visible ) { reset() } + onDisplayValueChanged : if ( _root.setter ) { _root.setter( _valueLabel.text ) } + onSettingValueChanged : _valueLabel.text = _root.settingValue !== undefined ? _root.settingValue : "" + width : 450 + height : 500 + visible : false + radius : 9 + color : Colors.transparent + + layer.enabled : true + layer.effect : DropShadow { id: _dropShadow + horizontalOffset: 4 + verticalOffset : 4 + radius : 12 + samples : 32 + color : Colors.dropShadowDialogColor + source : _root + anchors.fill : _root + } + + Image { id: _backgroundImage + anchors.fill: parent + source : "qrc:/images/iPopupGradient" + fillMode : Image.PreserveAspectCrop + + layer.enabled : true + layer.effect: OpacityMask { + maskSource: Rectangle { + width : _backgroundImage.width + height : _backgroundImage.height + radius : _root.radius + antialiasing : true + } + } + } + + CloseButton { id : _closeButton + anchors { + top : parent.top + left : parent.left + margins : 10 + } + + onClicked: { + cancel() + reset() + } + } + + Text { id: _title + anchors { + top : _root.top + topMargin : 5 + horizontalCenter: _root.horizontalCenter + + } + font { + pixelSize : 26 + weight : Font.Medium + } + color : "white" + } + + Rectangle { id: _numRect + anchors { + top : _root.top + topMargin : Variables.defaultMargin * 4 + horizontalCenter: _root.horizontalCenter + } + width : 300 + height : 75 + radius : 10 + color : "#324867" + + Text { id: _valueLabel + anchors.centerIn: parent + font { + pixelSize : 65 + weight : Font.DemiBold + } + color : isValueValid ? "white" : "gray" + text : "" + } + } + + Text { id: _unitText + anchors { + horizontalCenter: parent.horizontalCenter + top : _numRect.bottom + topMargin : 10 + } + font.pixelSize : 18 + color : "white" + } + + Text { id: _range + anchors { + bottom : _numRect.top + bottomMargin : 10 + horizontalCenter: parent.horizontalCenter + } + font.pixelSize : 20 + color : "#E0CDA9" + } + + Grid { id: _numPadGrid + anchors { + left : _root.left + right : _root.right + bottom : _root.bottom + margins : _numRect.visible ? 20 : 70 + } + columns : 3 + columnSpacing : 2 + rows : 4 + rowSpacing : 2 + height : 275 + + property bool replaceValueText: true + property int cellWidth : _numPadGrid.width / columns + property int cellHeight : _numPadGrid.height / rows + + Repeater { + model: [ "7", "8", "9", + "4", "5", "6", + "1", "2", "3", + ".", "0", backSpace ] + + delegate: Button { id: _keyButton + width : _numPadGrid.cellWidth + height : _numPadGrid.cellHeight + palette.buttonText : enabled ? "white" : "dimgrey" + text : modelData === backSpace ? "" : modelData + icon.source : modelData === backSpace ? modelData : "" + icon.width : 40 + icon.height : 40 + enabled : modelData === "." ? precision > 0 : true + + font { + pixelSize : 30 + bold : true + } + background: Rectangle { id: _keyBackground + color : _keyButton.pressed ? Colors.backgroundButtonSelectDark : + modelData === backSpace ? Qt.darker ("#263B57", 1.05) : + "#263B57" + } + + onPressed: { + if (modelData === backSpace ) { + _numPadGrid.replaceValueText = false + _valueLabel.text = _valueLabel.text.substr(0, _valueLabel.text.length - 1) + } + else { + if (_numPadGrid.replaceValueText) { + _valueLabel.text = _keyButton.text + _numPadGrid.replaceValueText = false + } + else if (_valueLabel.text.length < 3) { + _valueLabel.text += _keyButton.text + } + } + } + } + } + } +} Index: sources/gui/qml/components/TextEntry.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/components/TextEntry.qml (.../TextEntry.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/components/TextEntry.qml (.../TextEntry.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -36,6 +36,7 @@ property alias text : _input.text property bool hasCursor : true property alias lengthMax : _input.maximumLength + property bool useQtNumPad : true readonly property alias isValid : _input.acceptableInput @@ -62,7 +63,10 @@ if ( _root.hasCursor ) { _input.selectAll() } - _keyboard.setVisible(true) + + if (useQtNumPad) { + _keyboard.setVisible(true) + } } } Index: sources/gui/qml/compounds/BPHREntry.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/compounds/BPHREntry.qml (.../BPHREntry.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/compounds/BPHREntry.qml (.../BPHREntry.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -46,40 +46,45 @@ && _heartRate .isValid && _private.isBloodPressureCompareValid - signal clicked() - width : _container.width height : _container.height function setFocus(vShowKeyboard) { if(vShowKeyboard) { firstInput.textInput.forceActiveFocus() - _keyboard.setVisible(true) + _keyboard.setVisible(false) + numPad.show() } } QtObject { id: _private property bool isBloodPressureCompareValid : (parseInt(_bloodPressureDiastolic.text) <= parseInt(_bloodPressureSystolic.text)) } - anchors.horizontalCenter: parent.horizontalCenter - y : Qt.inputMethod.visible && _keyboard.visible ? _root.topMarginContent : ( ( _root.contentRectHeight - _container.height ) / 2 ) - Behavior on y { NumberAnimation { duration: Variables.keybardAnimationDuration } } + anchors.fill: parent Row { id: _container spacing: 50 anchors.centerIn: parent - Column { spacing : 25 + Column { + spacing : 25 leftPadding : _root.titleIndent - Row { spacing : 10 + Row { + spacing : 10 TextEntry { id : _bloodPressureSystolic text : Variables.notSetVariable(vTreatmentVitals.systolic, 0) label.text : qsTr("Blood Pressure") label.width : _root.labelWidth validator : IntValidator { bottom: vTreatmentVitals.systolicMin; top : vTreatmentVitals.systolicMax } - onClicked : _root.clicked() nextInput : _bloodPressureDiastolic textInput.color: (textInput.acceptableInput && _private.isBloodPressureCompareValid) ? Colors.textMain : Colors.red + useQtNumPad : false + + onClicked : numPad.open ( _bloodPressureSystolic, + qsTr("Systolic"), + vTreatmentVitals.systolicMin, + vTreatmentVitals.systolicMax, + Variables.unitTextBloodPressure) } Label { text : "/" @@ -89,25 +94,40 @@ text : Variables.notSetVariable(vTreatmentVitals.diastolic, 0) label.width : 0 validator : IntValidator { bottom: vTreatmentVitals.diastolicMin; top : vTreatmentVitals.diastolicMax } - onClicked : _root.clicked() nextInput : _heartRate textInput.color: (textInput.acceptableInput && _private.isBloodPressureCompareValid) ? Colors.textMain : Colors.red + useQtNumPad : false + + onClicked : numPad.open ( _bloodPressureDiastolic, + qsTr("Diastolic"), + vTreatmentVitals.diastolicMin, + _bloodPressureSystolic.textInput.acceptableInput && + _bloodPressureSystolic.text < vTreatmentVitals.diastolicMax ? _bloodPressureSystolic.text : + vTreatmentVitals.diastolicMax, + Variables.unitTextBloodPressure) } Label { - text : qsTr("mmHg") + text : Variables.unitTextBloodPressure width : unitWidth } } - Row { spacing : 10 + Row { + spacing : 10 TextEntry { id : _heartRate text : Variables.notSetVariable(vTreatmentVitals.heartRate, 0) label.text : qsTr("Heart Rate") label.width : _root.labelWidth - onClicked : _root.clicked() validator : IntValidator { bottom: vTreatmentVitals.heartRateMin; top : vTreatmentVitals.heartRateMax } + useQtNumPad : false + + onClicked : numPad.open ( _heartRate, + qsTr("Heart Rate"), + vTreatmentVitals.heartRateMin, + vTreatmentVitals.heartRateMax, + Variables.unitTextHeartBeat) } Label { - text : qsTr("BPM") + text : Variables.unitTextHeartBeat width : unitWidth } } Index: sources/gui/qml/globals/Colors.qml =================================================================== diff -u -rb04fa0fce565a52305f2153f2cb6c5858453ab15 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision b04fa0fce565a52305f2153f2cb6c5858453ab15) +++ sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -132,6 +132,7 @@ readonly property color alarmTopBarNoneFg : white readonly property color createTrProfileID : "#ffbb44" + readonly property color dropShadowDialogColor : "#4DFFF8E1" readonly property color createTreatmentActive : "#3d8eef" readonly property color createTreatmentInactive : backgroundRangeRect Index: sources/gui/qml/main.qml =================================================================== diff -u -re1ecb77ba0ff9619b7363f14e1ed3c3e110c4057 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/main.qml (.../main.qml) (revision e1ecb77ba0ff9619b7363f14e1ed3c3e110c4057) +++ sources/gui/qml/main.qml (.../main.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -115,6 +115,7 @@ import VTreatmentAdjustmentUltrafiltrationConfirm 0.1 import VTreatmentAdjustmentPressuresLimits 0.1 import VTreatmentAdjustmentSaline 0.1 +import VTreatmentAdjustmentVitals 0.1 import VTreatmentAdjustmentHeparin 0.1 import VTreatmentAdjustmentRinseback 0.1 import VTreatmentAdjustmentRecirculate 0.1 @@ -179,7 +180,7 @@ VTreatmentBloodFlow { id: vTreatmentBloodFlow } VTreatmentVitals { id: vTreatmentVitals - interval : vTreatmentCreate.bloodPressureMeasureInterval +// interval : vTreatmentCreate.bloodPressureMeasureInterval // TESTING FOR 1 MIN TIMER -- REVERT FOR CR enableDialog: vTDOpMode.inTreatment && vTDTreatmentStates.txTreatment // As long as UI is in In-Tx BP/HR is updated and the dialog will pop up on interval. onEnableDialogChanged : { @@ -254,6 +255,7 @@ VTreatmentRanges { id: vTreatmentRanges } VTreatmentAdjustmentSaline { id: vTreatmentAdjustmentSaline } + VTreatmentAdjustmentVitals { id: vTreatmentAdjustmentVitals } VTreatmentAdjustmentUltrafiltrationState { id: vTreatmentAdjustmentUltrafiltrationState } VTreatmentAdjustmentUltrafiltrationEdit { id: vTreatmentAdjustmentUltrafiltrationEdit } VTreatmentAdjustmentUltrafiltrationConfirm { id: vTreatmentAdjustmentUltrafiltrationConfirm } Index: sources/gui/qml/pages/treatment/TreatmentHome.qml =================================================================== diff -u -rf8e37a0cbb537edceebee7a7c5f2676f497d1e26 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/pages/treatment/TreatmentHome.qml (.../TreatmentHome.qml) (revision f8e37a0cbb537edceebee7a7c5f2676f497d1e26) +++ sources/gui/qml/pages/treatment/TreatmentHome.qml (.../TreatmentHome.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -39,13 +39,10 @@ signal sectionPressuresClicked() signal sectionTimeClicked() signal sectionUltrafiltrationClicked() - signal logVitalTime() readonly property int cellWidth : (_root.width / 7) - 10 // = screen width / # columns readonly property int cellHeight: (Variables.screenContentHeight / 2) - Variables.notificationHeight // = screen height / # rows - headerbar - onLogVitalTime: _treatmentVitals.updateVitalTime() - Column { id: _column objectName: "column" @@ -90,8 +87,9 @@ color : "gray" anchors { top : parent.top - topMargin : Variables.defaultMargin * 4 + topMargin : Variables.defaultMargin * 3.5 right : parent.right + rightMargin : Variables.defaultMargin } horizontalAlignment : Text.AlignHCenter verticalAlignment : Text.AlignVCenter Index: sources/gui/qml/pages/treatment/TreatmentStack.qml =================================================================== diff -u -rea51c0546c7061d225e7b9d8b754554c65f0d1b1 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision ea51c0546c7061d225e7b9d8b754554c65f0d1b1) +++ sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -34,7 +34,7 @@ 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 + _treatmentAdjustmentVitals .close() _treatmentAdjustmentPressuresLimits .close() _treatmentAdjustmentDuration .close() _treatmentUltrafiltrationItem .close() @@ -80,7 +80,7 @@ _treatmentAdjustmentFlow.open() } function onSectionVitalsClicked ( vValue ) { - _vitalEntry.open() + _treatmentAdjustmentVitals.open() } function onSectionPressuresClicked ( vValue ) { _treatmentAdjustmentPressuresLimits.open() @@ -123,50 +123,8 @@ } } - EntryDialog { id: _vitalEntry - function update(vSystolic, vDiastolic ,vHeartRate) { - _bphrEntry.systolic = vSystolic ? vSystolic : "" - _bphrEntry.diastolic = vDiastolic ? vDiastolic : "" - _bphrEntry.heartRate = vHeartRate ? vHeartRate : "" - } + TreatmentAdjustmentVitals { id: _treatmentAdjustmentVitals } - titleText : qsTr("VITALS") - confirmEnabled : _bphrEntry.isValid - onConfirmClicked : { - _vitalEntry.close() - vTreatmentVitals.doConfirm( - _bphrEntry.systolic , - _bphrEntry.diastolic , - _bphrEntry.heartRate - ) - _treatmentHome.logVitalTime() - } - - onCloseClicked : { - vTreatmentVitals.doSkip() // only for logging - } - - 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() - } - - BPHREntry { id : _bphrEntry - contentRectHeight : _vitalEntry.contentRect.height - } - - Connections { target: vTreatmentVitals - function onDidTrigger ( vSystolic, vDiastolic, vHeartRate ) { - if ( vTreatmentVitals.enableDialog ) { - _vitalEntry.update ( vSystolic, vDiastolic, vHeartRate ) - _vitalEntry.open () - } - } - } - } - // ---------- Manages Responses ---------- Connections { target: vTreatmentAdjustmentDuration function onAdjustmentTriggered ( vValue ) { Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentBase.qml =================================================================== diff -u -rf8e37a0cbb537edceebee7a7c5f2676f497d1e26 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentBase.qml (.../TreatmentAdjustmentBase.qml) (revision f8e37a0cbb537edceebee7a7c5f2676f497d1e26) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentBase.qml (.../TreatmentAdjustmentBase.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -27,14 +27,16 @@ * For all adjustment screens in treatment */ ModalDialog { id: _root - contentItem.objectName: "TreatmentAdjustmentBase" //SquishQt testability + contentItem.objectName : "TreatmentAdjustmentBase" //SquishQt testability + showGradient : true property string titleText: "" property bool closeVisible: true property bool confirmVisible: true property bool backVisible: false property alias information: _information + property bool confirmEnabled: true signal closeClicked() signal confirmClicked() @@ -50,6 +52,8 @@ Rectangle { id : _headerRect ConfirmButton { id : _confirmButton visible: _root.confirmVisible + enabled: _root.confirmEnabled + onClicked : confirmClicked() } BackButton { id : _backButton Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml =================================================================== diff -u --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml (revision 0) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentVitals.qml (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,72 @@ +/*! + * + * Copyright (c) 2020-2025 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 TreatmentAdjustmentVitals.qml + * \author (last) Nico Ramirez + * \date (last) 28-Aug-2025 + * \author (original) Nico Ramirez + * \date (original) 28-Aug-2025 + * + */ + +// Qt +import QtQuick 2.12 + +// Project + +// Qml imports +import "qrc:/globals" +import "qrc:/components" +import "qrc:/compounds" + +TreatmentAdjustmentBase { id: _root + contentItem.objectName: "TreatmentAdjustmentVitals" + + titleText : qsTr("VITALS") + confirmEnabled : _bphrEntry.isValid + height : 400 + width : 750 + y : 125 + + function update(vSystolic, vDiastolic ,vHeartRate) { + _bphrEntry.systolic = vSystolic ? vSystolic : "" + _bphrEntry.diastolic = vDiastolic ? vDiastolic : "" + _bphrEntry.heartRate = vHeartRate ? vHeartRate : "" + } + + onOpened: vTreatmentVitals.doTimerStop() + + onClosed: vTreatmentVitals.doTimerStart() + + onConfirmClicked: { + numPad.hide() + _root.close() + vTreatmentVitals.doConfirm( + _bphrEntry.systolic , + _bphrEntry.diastolic , + _bphrEntry.heartRate + ) + } + + onCloseClicked: { + numPad.hide() + vTreatmentVitals.doSkip() + } + + BPHREntry { id : _bphrEntry + contentRectHeight : 350 + } + + Connections { target: vTreatmentVitals + function onDidTrigger ( vSystolic, vDiastolic, vHeartRate ) { + if ( vTreatmentVitals.enableDialog ) { + _root.update ( vSystolic, vDiastolic, vHeartRate ) + _root.open () + } + } + } +} Index: sources/gui/qml/pages/treatment/sections/TreatmentVitals.qml =================================================================== diff -u -r7caa737179a8c31825ae6445f593ac7ff5f95080 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/gui/qml/pages/treatment/sections/TreatmentVitals.qml (.../TreatmentVitals.qml) (revision 7caa737179a8c31825ae6445f593ac7ff5f95080) +++ sources/gui/qml/pages/treatment/sections/TreatmentVitals.qml (.../TreatmentVitals.qml) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -39,7 +39,7 @@ height : 40 width : contentItem.width topTextFont.pixelSize : Fonts.fontPixelVitals - topTextFont.weight : Font.Bold + topTextFont.weight : Font.Medium topText : Variables.notSetVariable(vTreatmentVitals.systolic, 2) + bloodSDSeparator + Variables.notSetVariable(vTreatmentVitals.diastolic, 2) bottomText : Variables.unitTextBloodPressure bottomTextFont.pixelSize: 20 @@ -51,7 +51,7 @@ height : 45 width : contentItem.width topTextFont.pixelSize : Fonts.fontPixelVitals - topTextFont.weight : Font.Bold + topTextFont.weight : Font.Medium topText : Variables.notSetVariable(vTreatmentVitals.heartRate, 2) bottomText : Variables.unitTextHeartBeat bottomTextFont.pixelSize: 20 @@ -62,18 +62,14 @@ Text { id: _lastRecorded height : 30 width : contentItem.width - text : qsTr("Last Recorded: " ) - font.pixelSize : 18 + font.pixelSize : 16 font.weight : Font.Normal verticalAlignment : Text.AlignBottom color : Colors.textMain + text : qsTr("Last Recorded: %1").arg(vTreatmentVitals.lastRead) } } - function updateVitalTime() { - _lastRecorded.text = qsTr("Last Recorded: " ) + vDateTime.time - } - // TODO // notification.text: qsTr("Interval:" ) // + " " + (vTreatmentVitals.interval ? (vTreatmentVitals.interval + qsTr("min")) : qsTr("OFF")) Index: sources/model/MModel.h =================================================================== diff -u -r3c07dc803109f716937b692cb4a67a5324bb9ca3 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/model/MModel.h (.../MModel.h) (revision 3c07dc803109f716937b692cb4a67a5324bb9ca3) +++ sources/model/MModel.h (.../MModel.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -52,6 +52,7 @@ #include "MTreatmentPressureOcclusionData.h" #include "MTreatmentRangesData.h" #include "MTreatmentSalineData.h" +#include "MTreatmentVitalsData.h" #include "MTreatmentHeparinData.h" #include "MTreatmentRinsebackData.h" #include "MTreatmentRecirculateData.h" @@ -139,6 +140,7 @@ #include "MTreatmentAdjustUltrafiltrationEditResponse.h" #include "MTreatmentAdjustUltrafiltrationConfirmResponse.h" #include "MTreatmentAdjustSalineResponse.h" +#include "MTreatmentAdjustVitalsResponse.h" #include "MTreatmentAdjustHeparinResponse.h" #include "MTreatmentAdjustRinsebackResponse.h" #include "MTreatmentAdjustRecirculateResponse.h" @@ -337,6 +339,7 @@ REGISTER_METATYPE( PowerOffData ) \ REGISTER_METATYPE( TreatmentRangesData ) \ REGISTER_METATYPE( TreatmentSalineData ) \ + REGISTER_METATYPE( TreatmentVitalsData ) \ REGISTER_METATYPE( TreatmentHeparinData ) \ REGISTER_METATYPE( TreatmentRinsebackData ) \ REGISTER_METATYPE( TreatmentRecirculateData ) \ @@ -427,6 +430,7 @@ REGISTER_METATYPE( AdjustUltrafiltrationEditRequestData ) \ REGISTER_METATYPE( AdjustUltrafiltrationConfirmRequestData ) \ REGISTER_METATYPE( AdjustSalineRequestData ) \ + REGISTER_METATYPE( AdjustVitalsRequestData ) \ REGISTER_METATYPE( AdjustHeparinRequestData ) \ REGISTER_METATYPE( AdjustRinsebackRequestData ) \ REGISTER_METATYPE( AdjustRecirculateRequestData ) \ @@ -466,6 +470,7 @@ REGISTER_METATYPE( AdjustUltrafiltrationEditResponseData ) \ REGISTER_METATYPE( AdjustUltrafiltrationConfirmResponseData ) \ REGISTER_METATYPE( AdjustSalineResponseData ) \ + REGISTER_METATYPE( AdjustVitalsResponseData ) \ REGISTER_METATYPE( AdjustHeparinResponseData ) \ REGISTER_METATYPE( AdjustRinsebackResponseData ) \ REGISTER_METATYPE( AdjustRecirculateResponseData ) \ @@ -532,6 +537,7 @@ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, PowerOffData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentRangesData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentSalineData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentVitalsData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentHeparinData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentRinsebackData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentRecirculateData ) \ @@ -611,6 +617,7 @@ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustUltrafiltrationEditResponseData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustUltrafiltrationConfirmResponseData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustSalineResponseData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustVitalsResponseData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustHeparinResponseData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustRinsebackResponseData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustRecirculateResponseData ) \ @@ -649,6 +656,7 @@ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustUltrafiltrationConfirmRequestData ) \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustParametersConfirmRequestData ) \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustSalineRequestData ) \ + ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustVitalsRequestData ) \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustHeparinRequestData ) \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustRinsebackRequestData ) \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustRecirculateRequestData ) \ @@ -739,6 +747,7 @@ ACTION_RECEIVE_BRIDGE_DEFINITION( PowerOffData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentRangesData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentSalineData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentVitalsData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentHeparinData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentRinsebackData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentRecirculateData ) \ @@ -818,6 +827,7 @@ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustUltrafiltrationEditResponseData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustUltrafiltrationConfirmResponseData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustSalineResponseData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustVitalsResponseData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustHeparinResponseData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustRinsebackResponseData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustRecirculateResponseData ) \ @@ -879,6 +889,7 @@ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustUltrafiltrationEditRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustUltrafiltrationConfirmRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustSalineRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustVitalsRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustHeparinRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustRinsebackRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustRecirculateRequestData ) \ @@ -939,6 +950,7 @@ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustUltrafiltrationEditRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustUltrafiltrationConfirmRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustSalineRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustVitalsRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustHeparinRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustRinsebackRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustRecirculateRequestData ) \ @@ -1000,6 +1012,7 @@ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustUltrafiltrationConfirmRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustPressuresLimitsRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustSalineRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustVitalsRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustHeparinRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustRinsebackRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustRecirculateRequestData ) \ @@ -1050,6 +1063,7 @@ ACTION_RECEIVE_SIGNAL( PowerOffData ) \ ACTION_RECEIVE_SIGNAL( TreatmentRangesData ) \ ACTION_RECEIVE_SIGNAL( TreatmentSalineData ) \ + ACTION_RECEIVE_SIGNAL( TreatmentVitalsData ) \ ACTION_RECEIVE_SIGNAL( TreatmentHeparinData ) \ ACTION_RECEIVE_SIGNAL( TreatmentRinsebackData ) \ ACTION_RECEIVE_SIGNAL( TreatmentRecirculateData ) \ @@ -1130,6 +1144,7 @@ ACTION_RECEIVE_SIGNAL( AdjustUltrafiltrationEditResponseData ) \ ACTION_RECEIVE_SIGNAL( AdjustUltrafiltrationConfirmResponseData ) \ ACTION_RECEIVE_SIGNAL( AdjustSalineResponseData ) \ + ACTION_RECEIVE_SIGNAL( AdjustVitalsResponseData ) \ ACTION_RECEIVE_SIGNAL( AdjustHeparinResponseData ) \ ACTION_RECEIVE_SIGNAL( AdjustRinsebackResponseData ) \ ACTION_RECEIVE_SIGNAL( AdjustRecirculateResponseData ) \ Index: sources/model/hd/adjustment/treatment/MTreatmentAdjustRequests.h =================================================================== diff -u -r80d234c6e7374b9f4f7867ffbe2c52f5c1aae4a2 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/model/hd/adjustment/treatment/MTreatmentAdjustRequests.h (.../MTreatmentAdjustRequests.h) (revision 80d234c6e7374b9f4f7867ffbe2c52f5c1aae4a2) +++ sources/model/hd/adjustment/treatment/MTreatmentAdjustRequests.h (.../MTreatmentAdjustRequests.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -250,6 +250,31 @@ }; /*! + * \brief The MAdjustVitalsReq class + * \details The model to request the Vitals state + * + * | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:-----:|:----:|:---:|:---:|:----:|:--------------------:| + * |0xXX00| 0x100 | 9 | Req | Y | UI | TD | Vitals Request | + * + * | Payload || + * | || + * | None || + * + * \sa State + * \sa MTreatmentVitals: Vitals Data + * \sa MAdjustVitalsResponse : Vitals Response + * + */ +class MAdjustVitalsReq : public MModel { +public: + static QString toString(const QVariantList &vParameters) { + return MModel::toString("AdjustVitals", vParameters); + } +}; + + +/*! * \brief The MAdjustHeparinReq class * \details The model to request the Heparin state * @@ -454,6 +479,7 @@ typedef Model:: MAdjustUltrafiltrationEditReq AdjustUltrafiltrationEditRequestData; typedef Model::MAdjustUltrafiltrationConfirmReq AdjustUltrafiltrationConfirmRequestData; typedef Model:: MAdjustSalineReq AdjustSalineRequestData; +typedef Model:: MAdjustVitalsReq AdjustVitalsRequestData; typedef Model:: MAdjustHeparinReq AdjustHeparinRequestData; typedef Model:: MAdjustRinsebackReq AdjustRinsebackRequestData; typedef Model:: MAdjustRecirculateReq AdjustRecirculateRequestData; Index: sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.cpp =================================================================== diff -u --- sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.cpp (revision 0) +++ sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.cpp (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,50 @@ +/*! + * + * Copyright (c) 2021-2025 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 MTreatmentAdjustVitalsResponse.cpp + * \author (last) Nico Ramirez + * \date (last) 3-Sep-2025 + * \author (original) Nico Ramirez + * \date (original) 3-Sep-2025 + * + */ + +#include "MTreatmentAdjustVitalsResponse.h" + +using namespace Model; + +QVariantList MAdjustVitalsResponse::parameters() const { + return { + _data.mAccepted.value, + _data.mReason .value, + }; +} + +bool MAdjustVitalsResponse::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mAccepted )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mReason )) goto lError; + + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MAdjustVitalsResponse::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +AdjustVitalsResponseData MAdjustVitalsResponse::data() const { + Data data; + data.mAccepted = _data.mAccepted.value; + data.mReason = _data.mReason .value; + return data; +} Index: sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.h =================================================================== diff -u --- sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.h (revision 0) +++ sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.h (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,77 @@ +/*! + * + * Copyright (c) 2021-2025 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 MTreatmentAdjustVitalsResponse.h + * \author (last) Nico Ramirez + * \date (last) 3-Sep-2025 + * \author (original) Nico Ramirez + * \date (original) 3-Sep-2025 + * + */ +#pragma once + +// Project +#include "MAbstract.h" +#include "types.h" + +namespace Model { + +/*! + * \brief The MAdjustSalineResponse class + * \details The Saline Bolus adjustment response model + * + * | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:-----:|:----:|:---:|:---:|:----:|:---------------------:| + * |0xXX00| 0x020 | 6 | Rsp | Y | TD | UI | Vitals Response | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mAccepted | + * | #2:(U32) | \ref Data::mReason | + * | #3:(U32) | \ref Data::mTarget | + * + * \sa Data + * \sa MAdjustVitalsReq: Vitals Request + * \sa MTreatmentVitals: Vitals Data + * + *

Logging info

+ * | || + * | || + * | typeText | Event | + * | unitText | TD | + * | infoText | AdjustVitals | + * + */ +class MAdjustVitalsResponse : public MAbstract { + + QVariantList parameters() const override; + + struct { + Types::U32 mAccepted; + Types::U32 mReason ; + } _data; + +public: + + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("AdjustVitals") ; } + + struct Data { + bool mAccepted = 0; /*!< Accepted value of type quint32 extracted out */ + quint32 mReason = 0; /*!< Reason value of type quint32 extracted out */ + }; + + MAdjustVitalsResponse() {}; + + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} +typedef Model::MAdjustVitalsResponse::Data AdjustVitalsResponseData; + Index: sources/model/td/data/treatment/MTreatmentVitalsData.cpp =================================================================== diff -u --- sources/model/td/data/treatment/MTreatmentVitalsData.cpp (revision 0) +++ sources/model/td/data/treatment/MTreatmentVitalsData.cpp (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,53 @@ +/*! + * + * Copyright (c) 2021-2025 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 MTreatmentVitalsData.h + * \author (last) Nico Ramirez + * \date (last) 3-Sep-2025 + * \author (original) Nico Ramirez + * \date (original) 3-Sep-2025 + * + */ + +#include "MTreatmentVitalsData.h" + +using namespace Model; + +QVariantList MTreatmentVitals::parameters() const { + return { + _data.mSystolic .value, + _data.mDiastolic .value, + _data.mHeartRate .value, + }; +} + +bool MTreatmentVitals::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mSystolic )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDiastolic )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeartRate )) goto lError; + + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MTreatmentVitals::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MTreatmentVitals::Data MTreatmentVitals::data() const { + Data data; + data.mSystolic = _data.mSystolic .value; + data.mDiastolic = _data.mDiastolic .value; + data.mHeartRate = _data.mHeartRate .value; + return data; +} Index: sources/model/td/data/treatment/MTreatmentVitalsData.h =================================================================== diff -u --- sources/model/td/data/treatment/MTreatmentVitalsData.h (revision 0) +++ sources/model/td/data/treatment/MTreatmentVitalsData.h (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,80 @@ +/*! + * + * Copyright (c) 2021-2025 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 MTreatmentVitalsData.h + * \author (last) Nico Ramirez + * \date (last) 3-Sep-2025 + * \author (original) Nico Ramirez + * \date (original) 3-Sep-2025 + * + */ + +#pragma once +// Project +#include "MAbstract.h" +#include "types.h" + +namespace Model { + +/*! + * \brief The MTreatmentVitalsData class + * \details The Saline Bolus adjustment response model + * + * | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:-----:|:----:|:---:|:---:|:----:|:---------------------:| + * |0xXX00| 0x100 | 7 | 1 Hz | N | TD | All | Saline Bolus Response | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mSystolic | + * | #2:(U32) | \ref Data::mDiastolic | + * | #3:(U32) | \ref Data::mHearRate | + * + * \sa Data + * \sa MAdjustVitalsReq: Vitals Request + * \sa MAdjustVitalsResponse: Vitals Response + * + *

Logging info

+ * | || + * | || + * | typeText | Event | + * | unitText | TD | + * | infoText | Vitals | + * + */ + +class MTreatmentVitals : public MAbstract { + QVariantList parameters() const override; + + struct { + Types::U32 mSystolic ; + Types::U32 mDiastolic ; + Types::U32 mHeartRate ; + } _data; + +public: + + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("Vitals") ; } + + struct Data { + quint32 mSystolic = 0; /*!< mSystolic value of type quint32 extracted out */ + quint32 mDiastolic = 0; /*!< mDiastolic value of type quint32 extracted out */ + quint32 mHeartRate = 0; /*!< mHeartRate value of type quint32 extracted out */ + }; + + MTreatmentVitals () {} + + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MTreatmentVitals::Data TreatmentVitalsData; + Index: sources/view/VView.h =================================================================== diff -u -r3c07dc803109f716937b692cb4a67a5324bb9ca3 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/view/VView.h (.../VView.h) (revision 3c07dc803109f716937b692cb4a67a5324bb9ca3) +++ sources/view/VView.h (.../VView.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -217,6 +217,7 @@ REGISTER_TYPE( VTreatmentAdjustmentUltrafiltrationEdit ) \ REGISTER_TYPE( VTreatmentAdjustmentUltrafiltrationConfirm ) \ REGISTER_TYPE( VTreatmentAdjustmentSaline ) \ + REGISTER_TYPE( VTreatmentAdjustmentVitals ) \ REGISTER_TYPE( VTreatmentAdjustmentHeparin ) \ REGISTER_TYPE( VTreatmentAdjustmentRinseback ) \ REGISTER_TYPE( VTreatmentAdjustmentRecirculate ) \ Index: sources/view/hd/adjustment/common/VCommonAdjustmentVitals.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/view/hd/adjustment/common/VCommonAdjustmentVitals.cpp (.../VCommonAdjustmentVitals.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/view/hd/adjustment/common/VCommonAdjustmentVitals.cpp (.../VCommonAdjustmentVitals.cpp) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -20,7 +20,7 @@ // Project #include "GuiController.h" #include "TreatmentLog.h" -#include "BluetoothInterface.h" +//#include "BluetoothInterface.h" VIEW_DEF_CLASS_ADJUSTMENT(VTreatmentVitals) @@ -29,33 +29,54 @@ * \details All the class signal/slot connections are defined here. */ void View::VTreatmentVitals::initConnections() { - ACTION_RECEIVE_BRIDGE_CONNECTION(_BluetoothInterface, UIBloodPressureData); +// ACTION_RECEIVE_BRIDGE_CONNECTION(_BluetoothInterface, UIBloodPressureData); +// ACTION_VIEW_CONNECTION(AdjustVitalsResponseData); +// ADJUST_VIEW_CONNECTION(AdjustVitalsRequestData ); connect(this, SIGNAL( intervalChanged (const quint8 &)), this, SLOT(onIntervalChanged ( ))); } +void View::VTreatmentVitals::onActionReceive(const TreatmentVitalsData &vData) +// void View::VTreatmentVitals::onActionReceive(const AdjustVitalsResponseData &vData) +{ + update_rt (vData.mSystolic, vData.mDiastolic, vData.mHeartRate); +// update (vData.mSystolic, vData.mDiastolic, vData.mHeartRate); + emit didTrigger(vData.mSystolic, vData.mDiastolic, vData.mHeartRate); + + qDebug() << tr("**************8Vital received,%1,%2,%3") + .arg(vData.mSystolic ) + .arg(vData.mDiastolic) + .arg(vData.mHeartRate); + + LOG_APPED_UI(tr("Vital received,%1,%2,%3") + .arg(vData.mSystolic ) + .arg(vData.mDiastolic) + .arg(vData.mHeartRate)); +} + + /*! * \brief View::VTreatmentVitals::onActionReceive * \details The data handler which gets the data form GuiControl and GuiController will get the data from BtCuff controller. * \param vData - Vital values * \note the accepted and reason in this case should be the BtCuff status which may not necessarily comes front BtCuff itself, * and the intermediate controller like the GuiController or the BtCuffController can report from BtCuff behalf if it is connected or not responsive. */ -void View::VTreatmentVitals::onActionReceive(const UIBloodPressureData &vData) -{ - // Not used yet. - // adjustment_Accepted ( vData.mAccepted ); - // adjustment_Reason ( vData.mReason ); +//void View::VTreatmentVitals::onActionReceive(const UIBloodPressureData &vData) +//{ +// // Not used yet. +// // adjustment_Accepted ( vData.mAccepted ); +// // adjustment_Reason ( vData.mReason ); - update_rt (vData.mSystolic, vData.mDiastolic, vData.mPulseRate); - emit didTrigger(vData.mSystolic, vData.mDiastolic, vData.mPulseRate); - // if the vitals is disabled it means Gui is probably in an incorrect state and is unable to handle the vital information. - LOG_APPED_UI(tr("Vital received,%1,%2,%3") - .arg(vData.mSystolic ) - .arg(vData.mDiastolic) - .arg(vData.mPulseRate)); -} +// update_rt (vData.mSystolic, vData.mDiastolic, vData.mPulseRate); +// emit didTrigger(vData.mSystolic, vData.mDiastolic, vData.mPulseRate); +// // if the vitals is disabled it means Gui is probably in an incorrect state and is unable to handle the vital information. +// LOG_APPED_UI(tr("Vital received,%1,%2,%3") +// .arg(vData.mSystolic ) +// .arg(vData.mDiastolic) +// .arg(vData.mPulseRate)); +//} /*! * \brief View::VTreatmentVitals::doConfirm @@ -174,19 +195,23 @@ if ( ! _timerId ) return; // No timer started or failed starting if ( ! _interval ) return; // if interval is 0/OFF return - // DEBUG: qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; + /* DEBUG:*/ qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; _counter_sec++; min_left(_counter_min ); sec_left(60 - _counter_sec); - countdown(QString("%1:%2").arg(_min_left,2,10,QChar('0')).arg(_sec_left,2,10,QChar('0'))); + countdown(QStringLiteral("%1:%2").arg(_min_left,2,10,QChar('0')).arg(_sec_left,2,10,QChar('0'))); if ( _counter_sec % 60 ) return; // only check every minute if ( ! _counter_min ) { timerStop(); - emit didTrigger(); + AdjustVitalsRequestData mData; + emit didAdjustment(mData); + qDebug() << "****didAdjustment --- AdjustVitalsRequestData" ; + +// emit didTrigger(); } else { _counter_min--; @@ -196,7 +221,7 @@ void View::VTreatmentVitals::onIntervalChanged() { - // DEBUG: qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; + /* DEBUG: */qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; if ( _interval ) timerReset(); else timerStop (); // Timer stop is resetting timer too. } @@ -210,7 +235,7 @@ { if ( _timerId ) killTimer(_timerId); // this typically should not happen. if ( ! _interval ) return; // if interval is 0/OFF return - // DEBUG: qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; + /* DEBUG:*/ qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; timerReset(); _timerId = startTimer(1000); // 1 sec interval which will used as 1 min in timerEvent (easier to debug) } @@ -226,7 +251,7 @@ _counter_min = 0; } _counter_sec = 0; - // DEBUG: qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; + /* DEBUG: */qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; } /*! @@ -236,7 +261,7 @@ void View::VTreatmentVitals::timerStop() { if ( ! _timerId ) return; // No timer started or failed starting - // DEBUG: qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; + /*DEBUG:*/ qDebug() << __FUNCTION__ << _counter_sec << _counter_min << _interval << _timerId; killTimer(_timerId); _timerId = 0; timerReset(); Index: sources/view/hd/adjustment/common/VCommonAdjustmentVitals.h =================================================================== diff -u -ra58f91b077c8131bea3dbde0fc338adb113fc9f3 -rc1d0546e2d1a51ff919b2172ce647003359f0853 --- sources/view/hd/adjustment/common/VCommonAdjustmentVitals.h (.../VCommonAdjustmentVitals.h) (revision a58f91b077c8131bea3dbde0fc338adb113fc9f3) +++ sources/view/hd/adjustment/common/VCommonAdjustmentVitals.h (.../VCommonAdjustmentVitals.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -18,8 +18,11 @@ // Project #include "main.h" // Doxygen : do not remove +//#include "MTreatmentAdjustVitalsResponse.h" +//#include "MUIBloodPressureData.h" +#include "MTreatmentVitalsData.h" + #include "VAdjustmentResponseBase.h" -#include "MUIBloodPressureData.h" namespace View { @@ -56,7 +59,7 @@ // timer PROPERTY( bool , enableDialog , 0) // enable the vital Dialog being triggered (pre-treatment is screen not a dialog) - PROPERTY( quint8 , interval , 0) // show the vital screen in min + PROPERTY( quint8 , interval , 1) // show the vital screen in min // timestamp PROPERTY( quint64 , epoch , 0) @@ -76,7 +79,9 @@ PROPERTY( quint8 , min_left , 0) PROPERTY( quint8 , sec_left , 0) - VIEW_DEC_CLASS_ADJUSTMENT(VTreatmentVitals, UIBloodPressureData) +// VIEW_DEC_CLASS_ADJUSTMENT(VTreatmentVitals, UIBloodPressureData) +// VIEW_DEC_CLASS_ADJUSTMENT(VTreatmentVitals, AdjustVitalsResponseData) + VIEW_DEC(VTreatmentVitals, TreatmentVitalsData) void update (quint16 vSystolic, quint16 vDiastolic, quint16 vHeartRate); void update_rt (quint16 vSystolic, quint16 vDiastolic, quint16 vHeartRate); @@ -110,6 +115,14 @@ * \details the signal to trigger the Gui to notify the user for the vitals measurement */ void didTrigger(quint16 vSystolic = 0, quint16 vDiastolic = 0, quint16 vHeartRate = 0); + + /*! + * \brief didAdjustment + * \details the notification signal to request vitals + * \param vData - data model for the duration adjustment request + */ + void didAdjustment(const AdjustVitalsRequestData &vData); + }; } Index: sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.cpp =================================================================== diff -u --- sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.cpp (revision 0) +++ sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.cpp (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,37 @@ +/*! + * + * Copyright (c) 2021-2025 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 VTreatmentAdjustmentVitals.h + * \author (last) Nico Ramirez + * \date (last) 3-Sep-2025 + * \author (original) Nico Ramirez + * \date (original) 3-Sep-2025 + * + */ + + +#include "VTreatmentAdjustmentVitals.h" + +// Project +#include "GuiController.h" + +VIEW_DEF_CLASS_ADJUSTMENT(VTreatmentAdjustmentVitals) + +void VTreatmentAdjustmentVitals::initConnections() { + ACTION_VIEW_CONNECTION(AdjustVitalsResponseData); + ADJUST_VIEW_CONNECTION(AdjustVitalsRequestData ); +} + +void VTreatmentAdjustmentVitals::onActionReceive(const AdjustVitalsResponseData &vData) +{ + adjustment_Accepted ( vData.mAccepted ); + adjustment_Reason ( vData.mReason ); + + // *** has to be the last to let the information to be set and then emit the signal *** + // *** otherwise will use the previous values before being set. *** + adjustment ( true ); +} Index: sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.h =================================================================== diff -u --- sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.h (revision 0) +++ sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.h (revision c1d0546e2d1a51ff919b2172ce647003359f0853) @@ -0,0 +1,52 @@ +/*! + * + * Copyright (c) 2021-2025 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 VTreatmentAdjustmentVitals.h + * \author (last) Nico Ramirez + * \date (last) 3-Sep-2025 + * \author (original) Nico Ramirez + * \date (original) 3-Sep-2025 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VAdjustmentResponseBase.h" +#include "MTreatmentAdjustVitalsResponse.h" + +namespace View { + +/*! + * \brief The VTreatmentAdjustmentVitals class + * \details View for Model's Data representation. + * + * \sa Model::MAdjustVitalsResponse + * + */ +class VTreatmentAdjustmentVitals : public VAdjustmentResponseBase +{ + Q_OBJECT + + AdjustVitalsRequestData _data; + + TRIGGER( bool , adjustment , 0 ) + + VIEW_DEC_CLASS_ADJUSTMENT(VTreatmentAdjustmentVitals, AdjustVitalsResponseData) + +signals: + /*! + * \brief didAdjustment + * \details the notification signal to adjust the vitals + * \param vData - data model for the duration adjustment request + */ + void didAdjustment(const AdjustVitalsRequestData &vData); +}; +}