Index: SDDs/Rinseback.png =================================================================== diff -u -raf5b62a60696dadcd5429d1edcbd7a99d04d5233 -r00c9163719184ed49175687b5a4b443f17a062c5 Binary files differ Index: SDDs/Rinseback.puml =================================================================== diff -u -raf5b62a60696dadcd5429d1edcbd7a99d04d5233 -r00c9163719184ed49175687b5a4b443f17a062c5 --- SDDs/Rinseback.puml (.../Rinseback.puml) (revision af5b62a60696dadcd5429d1edcbd7a99d04d5233) +++ SDDs/Rinseback.puml (.../Rinseback.puml) (revision 00c9163719184ed49175687b5a4b443f17a062c5) @@ -22,26 +22,76 @@ '[x \n ,X The rest of the parameters do not matter.] == Rinseback Screen Open == - TD -> SW: MSG: [x3C: Dat 4, X, X, X, X, 1]\nTreatment State + TD -> SW: MSG: [x3C: Dat #10] Treatment State\n\ + \t(U32) treatmentSubMode=4\n\ + \t(U32) bldPrimeState=X\n\ + \t(U32) dialysisState=X\n\ + \t(U32) isoUFState=X\n\ + \t(U32) txStopState=X\n\ + \t(U32) rinsebackState=X\n\ + \t(U32) txRecircState=X\n\ + \t(U32) txEndState=X\n\ + \t(U32) txSalBolusState=X\n\ + \t(U32) txHepState=X SW -> UI: CMD: Treatment State - Rinsback Run UI -> US: ACT: Rinseback Screen - == Rinseback Progess == - TD -> SW: MSG: [x8F: Dat targetVol, deliveredVol, flowRate, timeout, countdown, isCompleted]\nRinseback Progress + == Rinseback Progress == + TD -> SW: MSG: [x8F: Dat #6] Rinseback Progress\n\ + \t(F32) targetRinsebackVolumeMl\n\ + \t(F32) deliveredRinsebackVolumeMl\n\ + \t(U32) rinsebackFlowRateMlMin\n\ + \t(U32) timeout\n\ + \t(U32) countdown\n\ + \t(BOOL) isCompleted SW -> UI: CMD: Rinseback Progress Data UI -> US: ACT: Display Rinseback Progress == Rinseback Command Request/Response == US -> UI: TCH: Rinseback Screen Interation UI -> SW: ACT: Rinseback Command - SW -> TD: MSG: [x90: Req cmd]\nRinseback Command Request + SW -> TD: MSG: [x90: Req #1] Rinseback Command Request (Pause/Resume/Stop/etc)\n\ + \t(U32) cmd alt accepted - TD -> SW: MSG: [x91: Rsp 1, X]\nRinseback Command Response + TD -> SW: MSG: [x91: Rsp #2] Rinseback Command Response\n\ + \t(BOOL) accepted=1\n\ + \t(U32) rejReason=X SW -> UI: CMD: Rinseback Command Adjustment Triggered UI -> US: ACT: Update Rinseback Screen - else rejected - TD -> SW: MSG: [x91: Rsp 0, rejectionReason]\nRinseback Command Response + else #Pink rejected + TD -> SW: MSG: [x91: Rsp #2] Rinseback Command Response\n\ + \t(BOOL) accepted=0\n\ + \t(U32) rejReason SW -> UI: CMD: Rinseback Command Adjustment Triggered UI -> US: ACT: Display Rejection Reason end + + == Rinseback Command Request/Response == + US -> UI: TCH: Rinseback Screen Interation + UI -> SW: ACT: Rinseback Command + SW -> TD: MSG: [x90: Req #1] Rinseback Command Request\n\ + \t(U32) cmd=\n\ + \t\t[ CONFIRM_START |\n\ + \t\tINCREASE_RATE |\n\ + \t\tDECREASE_RATE |\n\ + \t\tPAUSE |\n\ + \t\tRESUME |\n\ + \t\tEND |\n\ + \t\tADDITIONAL |\n\ + \t\tCONFIRM_DISCONNECT |\n\ + \t\tEND_TREATMENT |\n\ + \t\tBACK_TO_TREATMENT ] + alt accepted + TD -> SW: MSG: [x91: Rsp #2] Rinseback Command Response\n\ + \t(BOOL) accepted=1\n\ + \t(U32) rejReason=X + SW -> UI: CMD: Rinseback Command Adjustment Triggered + UI -> US: ACT: Update Rinseback Screen + else #Pink rejected + TD -> SW: MSG: [x91: Rsp #2] Rinseback Command Response\n\ + \t(BOOL) accepted=0\n\ + \t(U32) rejReason + SW -> UI: CMD: Rinseback Command Adjustment Triggered + UI -> US: ACT: Display Rejection Reason + end @enduml Fisheye: Tag 00c9163719184ed49175687b5a4b443f17a062c5 refers to a dead (removed) revision in file `sources/view/hd/data/VTreatmentRanges.cpp'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 00c9163719184ed49175687b5a4b443f17a062c5 refers to a dead (removed) revision in file `sources/view/hd/data/VTreatmentRanges.h'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/view/td/data/VTreatmentRanges.cpp =================================================================== diff -u --- sources/view/td/data/VTreatmentRanges.cpp (revision 0) +++ sources/view/td/data/VTreatmentRanges.cpp (revision 00c9163719184ed49175687b5a4b443f17a062c5) @@ -0,0 +1,235 @@ +/*! + * + * Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VTreatmentRanges.cpp + * \author (last) Behrouz NematiPour + * \date (last) 06-Aug-2023 + * \author (original) Behrouz NematiPour + * \date (original) 26-Aug-2020 + * + */ +#include "VTreatmentRanges.h" +#include "VTreatmentCreate.h" + +// Project +#include "ApplicationController.h" +#include "GuiController.h" +#include "StorageGlobals.h" + +VIEW_DEF_CLASS(VTreatmentRanges) + +void VTreatmentRanges::initConnections() { + ACTION_VIEW_CONNECTION(TreatmentRangesData); + ACTION_VIEW_CONNECTION(SettingsData); + + // since we do not have access to this object because it is created in QML. + // Connection to the GuiController made here + // It should be defined in the class which wants to connect to signal. + // VTreatmentRanges -> GUIController -> ApplicationController to handle + connect(this , SIGNAL(didTreatmentRangesDone(bool)), + &_GuiController, SLOT( doTreatmentRangesDone(bool))); + +} + +void View::VTreatmentRanges::onActionReceive(const TreatmentRangesData &vData) +{ + treatmentRanges_Duration_Min ( vData.mDuration_Min ); + treatmentRanges_Duration_Max ( vData.mDuration_Max ); + treatmentRanges_Ultrafiltration_Volume_Min ( vData.mUltrafiltration_Volume_Min / 1000 ); // mL => L + treatmentRanges_Ultrafiltration_Volume_Max ( vData.mUltrafiltration_Volume_Max / 1000 ); // mL => L + + quint32 mDialysateFlowRateRes = dialysateFlowRateRes(); + treatmentRanges_Dialysate_Flow_Min ( vData.mDialysate_Flow_Min - ( mDialysateFlowRateRes ? vData.mDialysate_Flow_Min % mDialysateFlowRateRes : 0 ) ); + treatmentRanges_Dialysate_Flow_Max ( vData.mDialysate_Flow_Max - ( mDialysateFlowRateRes ? vData.mDialysate_Flow_Min % mDialysateFlowRateRes : 0 ) ); +} + +/** + * \brief VTreatmentRanges::doSaveAcidConcentrate + * \param vOption - QString new option to save to config file + * \details Save Acid Concentrate entered by user to config + */ +void View::VTreatmentRanges::doSaveAcidConcentrate (const QString &vOption) +{ + // check if unique + if ( _acidConcentrateOptions.contains(vOption) ) { acidConcentrateAccepted(false); return; } + + if ( ! _acidConcentrate.isEmpty() ) { _acidConcentrateOptions.removeOne(_acidConcentrate); } + + _acidConcentrateOptions.append(vOption); + acidConcentrate(vOption); + + // update + emit acidConcentrateOptionsChanged(_acidConcentrateOptions); + acidConcentrateAccepted(true); +} + +/** + * \brief VTreatmentRanges::doClearAcidConcentrate + * \param vSet - Bool to only clear options list if combobox is active + * \details Clear any custum Acid Concentrate entered by user + */ +void View::VTreatmentRanges::doClearAcidConcentrate (const bool vSet) +{ + if ( ! vSet ) { return; } + + if ( ! _acidConcentrate.isEmpty() ) { _acidConcentrateOptions.removeOne(_acidConcentrate); } + acidConcentrate(""); + + // update + emit acidConcentrateOptionsChanged(_acidConcentrateOptions); +} + +/** + * \brief VTreatmentRanges::doPopulateAcidConcentrate + * \details Check Acid Concentrate selection when popup is displayed and update notifcation + */ +void View::VTreatmentRanges::doPopulateAcidConcentrate (const int &vSet, const int &vIndex) +{ + enum AcidConcentrates { + ePotassium , + eCalcium , + eMagnesium , + }; + + if ( ! vSet ) { return; } + + QString mAcidConcentrate =_acidConcentrateOptions[vIndex]; + QStringList values = mAcidConcentrate.split(QRegExp("[^0-9.]"), Qt::SkipEmptyParts); + potassium (values.value(AcidConcentrates::ePotassium) .toFloat()); + calcium (values.value(AcidConcentrates::eCalcium) .toFloat()); + didPopulateAcidConcentrate(); +} + +/*! + * \brief VTreatmentCreate::onSettingsDone + * \details fills the items below, read from the settings file, when the reading is notified done by ApplicationController. + * acidConcentrateOptions + * bicarbonateConcentrateOptions + * dialyzerTypeOptions + * heparinTypeOptions + * + */ +void View::VTreatmentRanges::onActionReceive(const SettingsData &) +{ + QString mCategory = Storage::Settings_Category_DataList; + + bool isConfigsOk = true; // assume configurations are valid + + FROMVARIANT_WITHRETURN ( bloodFlowRateDef , "Blood Flow Rate Ranges" , "Blood_Flow_Rate_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( bloodFlowRateMin , "Blood Flow Rate Ranges" , "Blood_Flow_Rate_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( bloodFlowRateMax , "Blood Flow Rate Ranges" , "Blood_Flow_Rate_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( bloodFlowRateRes , "Blood Flow Rate Ranges" , "Blood_Flow_Rate_Res" , UInt , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( dialysateFlowRateDef , "Dialysate Flow Rate Ranges" , "Dialysate_Flow_Rate_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateFlowRateMin , "Dialysate Flow Rate Ranges" , "Dialysate_Flow_Rate_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateFlowRateMax , "Dialysate Flow Rate Ranges" , "Dialysate_Flow_Rate_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateFlowRateRes , "Dialysate Flow Rate Ranges" , "Dialysate_Flow_Rate_Res" , UInt , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( treatmentDurationDef , "Treatment Duration Ranges" , "Treatment_Duration_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( treatmentDurationMin , "Treatment Duration Ranges" , "Treatment_Duration_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( treatmentDurationMax , "Treatment Duration Ranges" , "Treatment_Duration_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( treatmentDurationRes , "Treatment Duration Ranges" , "Treatment_Duration_Res" , UInt , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( heparinDispensingRateDef , "Heparin Dispensing Rate Ranges" , "Heparin_Dispensing_Rate_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( heparinDispensingRateMin , "Heparin Dispensing Rate Ranges" , "Heparin_Dispensing_Rate_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( heparinDispensingRateMax , "Heparin Dispensing Rate Ranges" , "Heparin_Dispensing_Rate_Max" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( heparinDispensingRateRes , "Heparin Dispensing Rate Ranges" , "Heparin_Dispensing_Rate_Res" , Float , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( heparinBolusVolumeDef , "Heparin Bolus Volume Ranges" , "Heparin_Bolus_Volume_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( heparinBolusVolumeMin , "Heparin Bolus Volume Ranges" , "Heparin_Bolus_Volume_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( heparinBolusVolumeMax , "Heparin Bolus Volume Ranges" , "Heparin_Bolus_Volume_Max" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( heparinBolusVolumeRes , "Heparin Bolus Volume Ranges" , "Heparin_Bolus_Volume_Res" , Float , isConfigsOk ); + + // heparinStopTime: Def, Max, Res intentionally omitted (see config/configurations/Parameters/DataList.conf) + FROMVARIANT_WITHRETURN ( heparinStopTimeMin , "Heparin Stop Time Ranges" , "Heparin_Stop_Time_Min" , UInt , isConfigsOk ); +// These were removed to ensure the check on the Heparin stop time matches the Treatment Duration. +// FROMVARIANT_WITHRETURN ( heparinStopTimeMax , "Heparin Stop Time Ranges" , "Heparin_Stop_Time_Max" , UInt , isConfigsOk ); +// FROMVARIANT_WITHRETURN ( heparinStopTimeRes , "Heparin Stop Time Ranges" , "Heparin_Stop_Time_Res" , UInt , isConfigsOk ); +// FROMVARIANT_WITHRETURN ( heparinStopTimeDef , "Heparin Stop Time Ranges" , "Heparin_Stop_Time_Def" , UInt , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( acidConcentratePotassiumDef , "Acid Concentrate Ranges" , "Acid_Concentrate_Potassium_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( acidConcentratePotassiumMin , "Acid Concentrate Ranges" , "Acid_Concentrate_Potassium_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( acidConcentratePotassiumMax , "Acid Concentrate Ranges" , "Acid_Concentrate_Potassium_Max" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( acidConcentratePotassiumRes , "Acid Concentrate Ranges" , "Acid_Concentrate_Potassium_Res" , Float , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( acidConcentrateCalciumDef , "Acid Concentrate Ranges" , "Acid_Concentrate_Calcium_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( acidConcentrateCalciumMin , "Acid Concentrate Ranges" , "Acid_Concentrate_Calcium_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( acidConcentrateCalciumMax , "Acid Concentrate Ranges" , "Acid_Concentrate_Calcium_Max" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( acidConcentrateCalciumRes , "Acid Concentrate Ranges" , "Acid_Concentrate_Calcium_Res" , Float , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( salineBolusVolumeDef , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( salineBolusVolumeMin , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( salineBolusVolumeMax , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( salineBolusVolumeRes , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Res" , UInt , isConfigsOk ); + + heparinTypeOptions ( _Settings.keys(mCategory , "Heparin Type Options" )); + acidConcentrateOptions ( _Settings.keys(mCategory , "Acid Concentrate Options" )); + bicarbonateConcentrateOptions ( _Settings.keys(mCategory , "Bicarbonate Concentrate Options" )); + dialyzerTypeOptions ( _Settings.keys(mCategory , "Dialyzer Type Options" )); + bloodPressureMeasureInterval ( _Settings.keys(mCategory , "Vitals Measurement Interval Options" )); + + isConfigsOk = isConfigsOk && !_heparinTypeOptions .isEmpty(); + isConfigsOk = isConfigsOk && !_acidConcentrateOptions .isEmpty(); + isConfigsOk = isConfigsOk && !_bicarbonateConcentrateOptions.isEmpty(); + isConfigsOk = isConfigsOk && !_dialyzerTypeOptions .isEmpty(); + isConfigsOk = isConfigsOk && !_bloodPressureMeasureInterval .isEmpty(); + + FROMVARIANT_WITHRETURN ( dialysateTempDef , "Dialysate Temperature" , "Dialysate_Temperature_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateTempMin , "Dialysate Temperature" , "Dialysate_Temperature_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateTempMax , "Dialysate Temperature" , "Dialysate_Temperature_Max" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateTempRes , "Dialysate Temperature" , "Dialysate_Temperature_Res" , Float , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( trancembrncPressureLimitWindowDef , "Trancememberance Pressure Ranges" , "Trancememberance_Adjust_Window_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( trancembrncPressureLimitWindowMin , "Trancememberance Pressure Ranges" , "Trancememberance_Adjust_Window_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( trancembrncPressureLimitWindowMax , "Trancememberance Pressure Ranges" , "Trancememberance_Adjust_Window_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( trancembrncPressureLimitWindowRes , "Trancememberance Pressure Ranges" , "Trancememberance_Adjust_Window_Res" , Int , isConfigsOk ); + + // trancembrncPressureMonitor: Def intentionally omitted (see config/configurations/Parameters/DataList.conf) + FROMVARIANT_WITHRETURN ( trancembrncPressureMonitorMin , "Trancememberance Pressure Ranges" , "Trancememberance_Monitor_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( trancembrncPressureMonitorMax , "Trancememberance Pressure Ranges" , "Trancememberance_Monitor_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( trancembrncPressureMonitorRes , "Trancememberance Pressure Ranges" , "Trancememberance_Monitor_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( arterialPressureLimitWindowDef , "Arterial Blood Pressure Ranges" , "Arterial_Adjust_Window_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( arterialPressureLimitWindowMin , "Arterial Blood Pressure Ranges" , "Arterial_Adjust_Window_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( arterialPressureLimitWindowMax , "Arterial Blood Pressure Ranges" , "Arterial_Adjust_Window_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( arterialPressureLimitWindowRes , "Arterial Blood Pressure Ranges" , "Arterial_Adjust_Window_Res" , Int , isConfigsOk ); + + // arterialPressureMonitor: Def intentionally omitted (see config/configurations/Parameters/DataList.conf) + FROMVARIANT_WITHRETURN ( arterialPressureMonitorMin , "Arterial Blood Pressure Ranges" , "Arterial_Monitor_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( arterialPressureMonitorMax , "Arterial Blood Pressure Ranges" , "Arterial_Monitor_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( arterialPressureMonitorRes , "Arterial Blood Pressure Ranges" , "Arterial_Monitor_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( venousPressureLimitWindowDef , "Venous Blood Pressure Ranges" , "Venous_Adjust_Window_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureLimitWindowMin , "Venous Blood Pressure Ranges" , "Venous_Adjust_Window_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureLimitWindowMax , "Venous Blood Pressure Ranges" , "Venous_Adjust_Window_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureLimitWindowRes , "Venous Blood Pressure Ranges" , "Venous_Adjust_Window_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( venousPressureLimitAsymtrcDef , "Venous Blood Pressure Ranges" , "Venous_Adjust_Asymmetric_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureLimitAsymtrcMin , "Venous Blood Pressure Ranges" , "Venous_Adjust_Asymmetric_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureLimitAsymtrcMax , "Venous Blood Pressure Ranges" , "Venous_Adjust_Asymmetric_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureLimitAsymtrcRes , "Venous Blood Pressure Ranges" , "Venous_Adjust_Asymmetric_Res" , Int , isConfigsOk ); + + // venousPressureMonitor: Def intentionally omitted (see config/configurations/Parameters/DataList.conf) + FROMVARIANT_WITHRETURN ( venousPressureMonitorMin , "Venous Blood Pressure Ranges" , "Venous_Monitor_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureMonitorMax , "Venous Blood Pressure Ranges" , "Venous_Monitor_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( venousPressureMonitorRes , "Venous Blood Pressure Ranges" , "Venous_Monitor_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( rinsebackFlowRateDef , "Rinseback Flow Rate Ranges" , "Rinseback_Flow_Rate_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackFlowRateMin , "Rinseback Flow Rate Ranges" , "Rinseback_Flow_Rate_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackFlowRateMax , "Rinseback Flow Rate Ranges" , "Rinseback_Flow_Rate_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackFlowRateRes , "Rinseback Flow Rate Ranges" , "Rinseback_Flow_Rate_Res" , UInt , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( rinsebackVolumeDef , "Rinseback Volume Ranges" , "Rinseback_Volume_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeMin , "Rinseback Volume Ranges" , "Rinseback_Volume_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeMax , "Rinseback Volume Ranges" , "Rinseback_Volume_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeRes , "Rinseback Volume Ranges" , "Rinseback_Volume_Res" , UInt , isConfigsOk ); + + // ultrafiltrationVolume: Def, Min, Max intentionally omitted (see config/configurations/Parameters/DataList.conf) + FROMVARIANT_WITHRETURN ( ultrafiltrationVolumeRes , "Ultrafiltration Volume Ranges" , "Ultrafiltration_Volume_Res" , Float , isConfigsOk ); + + emit didTreatmentRangesDone( isConfigsOk ); +} Index: sources/view/td/data/VTreatmentRanges.h =================================================================== diff -u --- sources/view/td/data/VTreatmentRanges.h (revision 0) +++ sources/view/td/data/VTreatmentRanges.h (revision 00c9163719184ed49175687b5a4b443f17a062c5) @@ -0,0 +1,99 @@ +/*! + * + * Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VTreatmentRanges.h + * \author (last) Behrouz NematiPour + * \date (last) 06-Aug-2023 + * \author (original) Behrouz NematiPour + * \date (original) 26-Aug-2020 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VView.h" +#include "MTreatmentRangesData.h" +#include "MSettings.h" +// namespace +namespace View { + +/*! + * \brief The VTreatmentRanges class + * \details View for Model's data representation. + * + * \sa Model::MTreatmentRanges + * + */ +class VTreatmentRanges : public QObject +{ + Q_OBJECT + + // Real-time properties received from TD from TreatmentRangesData + READONLY( quint32 , treatmentRanges_Duration_Min , 0) + READONLY( quint32 , treatmentRanges_Duration_Max , 0) + READONLY( float , treatmentRanges_Ultrafiltration_Volume_Min , 0) + READONLY( float , treatmentRanges_Ultrafiltration_Volume_Max , 0) + READONLY( quint32 , treatmentRanges_Dialysate_Flow_Min , 0) + READONLY( quint32 , treatmentRanges_Dialysate_Flow_Max , 0) + + // constant properties coming from the settings + RANGESET( quint32 , bloodFlowRate , 0) + RANGESET( quint32 , dialysateFlowRate , 0) + RANGESET( quint32 , treatmentDuration , 0) + RANGESET( float , heparinDispensingRate , 0) + RANGESET( float , heparinBolusVolume , 0) + RANGESET( quint32 , heparinStopTime , 0) + RANGESET( quint32 , salineBolusVolume , 0) + RANGESET( float , acidConcentratePotassium , 0) + RANGESET( float , acidConcentrateCalcium , 0) + VALUESET( float , potassium , 0) + VALUESET( float , calcium , 0) + + READONLY( QStringList , heparinTypeOptions ,{}) + READONLY( QStringList , acidConcentrateOptions ,{}) + READONLY( QStringList , bicarbonateConcentrateOptions ,{}) + READONLY( QStringList , dialyzerTypeOptions ,{}) + READONLY( QStringList , bloodPressureMeasureInterval ,{}) + + PROPERTY( QString , acidConcentrate ,"") + TRIGGER ( bool , acidConcentrateAccepted , false) + + RANGESET( float , dialysateTemp , 0) + RANGESET( qint32 , trancembrncPressureLimitWindow , 0) + RANGESET( qint32 , arterialPressureLimitWindow , 0) + RANGESET( qint32 , venousPressureLimitWindow , 0) + RANGESET( qint32 , venousPressureLimitAsymtrc , 0) + RANGESET( quint32 , rinsebackFlowRate , 0) + RANGESET( quint32 , rinsebackVolume , 0) + + // monitoring ranges + RANGESET( qint32 , trancembrncPressureMonitor , 0) + RANGESET( qint32 , arterialPressureMonitor , 0) + RANGESET( qint32 , venousPressureMonitor , 0) + + // ultrafiltration + RANGESET( float , ultrafiltrationVolume , 0) + + VIEW_DEC_CLASS(VTreatmentRanges ) + VIEW_DEC_SLOT(TreatmentRangesData ) + VIEW_DEC_SLOT(SettingsData ) + +signals: + void didTreatmentRangesDone (bool vPass ); + void didPopulateAcidConcentrate ( ); + +public slots: + void doSaveAcidConcentrate (const QString &vOption ); + void doClearAcidConcentrate (const bool vSet ); + void doPopulateAcidConcentrate (const int &vSet , + const int &vIndex ); +}; +}