""" The ui loader class """ # Python import os import can import struct # Qt from PySide2 import QtWidgets from PySide2.QtCore import Slot # parent from engine.dynamicloader import DynamicLoader # plugin specific # dialin from leahi_dialin.ui.td_messaging import TD_Messaging from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols import CAN from leahi_dialin.utils import conversions class Loader(DynamicLoader): """ The ui loader class """ def __init__(self): self.td_interface = TD_Messaging() self.can_interface = self.td_interface.can_interface super().__init__(os.path.dirname(__file__)) if self.can_interface is not None: channel_id = CAN.DenaliChannels.ui_to_td_ch_id create_tx_request_message_id = MsgIds.MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW.value self.can_interface.register_receiving_publication_function(channel_id, create_tx_request_message_id, self.handle_create_tx_request) load_request_message_id = MsgIds.MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST.value self.can_interface.register_receiving_publication_function(channel_id, load_request_message_id, self.handle_load_request) start_tx_request_message_id = MsgIds.MSG_ID_UI_ADJUST_START_TREATMENT_REQUEST.value self.can_interface.register_receiving_publication_function(channel_id, start_tx_request_message_id, self.handle_start_tx_request) validate_request_message_id = MsgIds.MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE.value self.can_interface.register_receiving_publication_function(channel_id, validate_request_message_id, self.handle_validate_request) def _init_loader(self): """ finds and creates widgets :return: none """ self.btnCreate_tx = self.find_widget(QtWidgets.QPushButton, 'btnCreate' ) self.btnCreateReset = self.find_widget(QtWidgets.QToolButton, 'btnCreateReset' ) self.btnValidate = self.find_widget(QtWidgets.QPushButton, 'btnValidate' ) self.btnValidateReset = self.find_widget(QtWidgets.QToolButton, 'btnValidateReset' ) self.btnAutoLoad = self.find_widget(QtWidgets.QPushButton, 'btnAutoLoadSend' ) self.btnAutoLoadReset = self.find_widget(QtWidgets.QToolButton, 'btnAutoLoadReset' ) self.btnStartTxReset = self.find_widget(QtWidgets.QToolButton, 'btnStartTxReset' ) self.spnCreateRxRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnCreateRxRejectReason' ) self.spnAutoLoadRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnLoadReasonSpinBox' ) self.spnStartTxRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnStartTreatmentRejectReason' ) self.lbAutoLoad = self.find_widget(QtWidgets.QLabel , 'lbAutoLoad' ) self.lbStartTreatment = self.find_widget(QtWidgets.QLabel , 'lbStartTreatment' ) self.lbCreateTx = self.find_widget(QtWidgets.QLabel , 'lbCreateTx' ) self.spnTreatmentModalitRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnTreatmentModalityRejectReason' ) self.spnHDFTreatmentModeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHDFTreatmentModeRejectReason' ) self.spnBloodFlowRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnBloodFlowRateRejectReason' ) self.spnDialysateFlowRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDialysateFlowRateRejectReason' ) self.spnTreatmentDurationRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnTreatmentDurationRejectReason' ) self.spnHeparinStopTimeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinStopTimeRejectReason' ) self.spnHeparinTypeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinTypeRejectReason' ) self.spnDryBicarbConcentrateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDryBicarbConcentrateRejectReason' ) self.spnSodiumRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnSodiumRejectReason' ) self.spnBicarbonateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnBicarbonateRejectReason' ) self.spnDialyzerTypeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDialyzerTypeRejectReason' ) self.spnSalineBolusVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnSalineBolusVolumeRejectReason' ) self.spnBloodPressureMeasureIntervalRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnBloodPressureMeasureIntervalRejectReason' ) self.spnPrimeDiscardVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnPrimeDiscardVolumeRejectReason' ) self.spnRinsebackVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnRinsebackVolumeRejectReason' ) self.spnHepatitisBStatusRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHepatitisBStatusRejectReason' ) self.spnSubstitutionFluidRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnSubstitutionFluidRejectReason' ) self.spnHeparinBolusVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinBolusVolumeRejectReason' ) self.spnHeparinDispensingRateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnHeparinDispensingRateRejectReason' ) self.spnDialysateTempRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnDialysateTempRejectReason' ) self.spnAcidConcentrateRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnAcidConcentrateRejectReason' ) self.spnUFVolumeRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnUFVolumeRejectReason' ) self.spnPreWeightRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnPreWeightRejectReason' ) self.spnEstimatedTargetWeightRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnEstimatedTargetWeightRejectReason' ) self.spnAcidConcentrateIndextRejectReason = self.find_widget(QtWidgets.QSpinBox , 'spnAcidConcentrateIndextRejectReason' ) self.lbTreatmentModality = self.find_widget(QtWidgets.QLabel , 'lbTreatmentModalityValue' ) self.lbHDFTreatmentMode = self.find_widget(QtWidgets.QLabel , 'lbHDFTreatmentModeValue' ) self.lbBloodFlowRate = self.find_widget(QtWidgets.QLabel , 'lbBloodFlowRateValue' ) self.lbDialysateFlowRate = self.find_widget(QtWidgets.QLabel , 'lbDialysateFlowRateValue' ) self.lbTreatmentDuration = self.find_widget(QtWidgets.QLabel , 'lbTreatmentDurationValue' ) self.lbHeparinStopTime = self.find_widget(QtWidgets.QLabel , 'lbHeparinStopTimeValue' ) self.lbHeparinType = self.find_widget(QtWidgets.QLabel , 'lbHeparinTypeValue' ) self.lbDryBicarbConcentrate = self.find_widget(QtWidgets.QLabel , 'lbDryBicarbConcentrateValue' ) self.lbSodium = self.find_widget(QtWidgets.QLabel , 'lbSodiumValue' ) self.lbBicarbonate = self.find_widget(QtWidgets.QLabel , 'lbBicarbonateValue' ) self.lbDialyzerType = self.find_widget(QtWidgets.QLabel , 'lbDialyzerTypeValue' ) self.lbSalineBolusVolume = self.find_widget(QtWidgets.QLabel , 'lbSalineBolusVolumeValue' ) self.lbBloodPressureMeasureInterval = self.find_widget(QtWidgets.QLabel , 'lbBloodPressureMeasureIntervalValue' ) self.lbPrimeDiscardVolume = self.find_widget(QtWidgets.QLabel , 'lbPrimeDiscardVolumeValue' ) self.lbRinsebackVolume = self.find_widget(QtWidgets.QLabel , 'lbRinsebackVolumeValue' ) self.lbHepatitisBStatus = self.find_widget(QtWidgets.QLabel , 'lbHepatitisBStatusValue' ) self.lbSubstitutionFluid = self.find_widget(QtWidgets.QLabel , 'lbSubstitutionFluidValue' ) self.lbHeparinBolusVolume = self.find_widget(QtWidgets.QLabel , 'lbHeparinBolusVolumeValue' ) self.lbHeparinDispensingRate = self.find_widget(QtWidgets.QLabel , 'lbHeparinDispensingRateValue' ) self.lbDialysateTemp = self.find_widget(QtWidgets.QLabel , 'lbDialysateTempValue' ) self.lbAcidConcentrate = self.find_widget(QtWidgets.QLabel , 'lbAcidConcentrateValue' ) self.lbUFVolue = self.find_widget(QtWidgets.QLabel , 'lbUFVolueValue' ) self.lbPreWeight = self.find_widget(QtWidgets.QLabel , 'lbPreWeightValue' ) self.lbEstimatedTargetWeight = self.find_widget(QtWidgets.QLabel , 'lbEstimatedTargetWeightValue' ) self.lbAcidConcentrateIndex = self.find_widget(QtWidgets.QLabel , 'lbAcidConcentrateIndex' ) def _init_widgets(self): """ initializes the widgets' properties :return: none """ self.do_validateReset() self.spnCreateRxRejectReason.setValue(0) self.spnAutoLoadRejectReason.setValue(0) self.spnStartTxRejectReason .setValue(0) def _init_connections(self): """ initializes the widgets connections :return: """ self.btnCreate_tx .clicked.connect(self.do_create_tx ) self.btnCreateReset .clicked.connect(self.do_createReset ) self.btnAutoLoadReset .clicked.connect(self.do_autoLoadReset ) self.btnStartTxReset .clicked.connect(self.do_startTxReset ) self.btnValidate .clicked.connect(self.do_validate ) self.btnValidateReset .clicked.connect(self.do_validateReset ) self.btnAutoLoad .clicked.connect(self.do_auto_load ) @Slot() def do_create_tx(self): self.lbCreateTx.setText("-") if self.spnCreateRxRejectReason.value() == 0 : self.td_interface.td_Treatment_Parameters_CreateRx (0) else: self.td_interface.td_Treatment_Parameters_CreateRx (self.spnCreateRxRejectReason.value()) @Slot() def do_createReset(self): self.spnCreateRxRejectReason.setValue(0) self.lbCreateTx.setText("-") @Slot() def do_autoLoadReset(self): self.btnAutoLoadReset.setValue(0) self.lbAutoLoad.setText("-") def do_startTxReset(self): self.lbStartTreatment.setText("-") @Slot() def do_auto_load(self): reason = self.spnAutoLoadRejectReason.value() self.td_interface.td_blood_set_auto_load_response(reason) self.lbAutoLoad.setText("-") @Slot() def do_validate(self): """ send the validation response message :return: none """ accepted = ( self.spnTreatmentModalitRejectReason .value() + self.spnHDFTreatmentModeRejectReason .value() + self.spnBloodFlowRateRejectReason .value() + self.spnDialysateFlowRateRejectReason .value() + self.spnTreatmentDurationRejectReason .value() + self.spnHeparinStopTimeRejectReason .value() + self.spnHeparinTypeRejectReason .value() + self.spnDryBicarbConcentrateRejectReason .value() + self.spnSodiumRejectReason .value() + self.spnBicarbonateRejectReason .value() + self.spnDialyzerTypeRejectReason .value() + self.spnSalineBolusVolumeRejectReason .value() + self.spnBloodPressureMeasureIntervalRejectReason .value() + self.spnPrimeDiscardVolumeRejectReason .value() + self.spnRinsebackVolumeRejectReason .value() + self.spnHepatitisBStatusRejectReason .value() + self.spnSubstitutionFluidRejectReason .value() + self.spnHeparinBolusVolumeRejectReason .value() + self.spnHeparinDispensingRateRejectReason .value() + self.spnDialysateTempRejectReason .value() + self.spnAcidConcentrateRejectReason .value() + self.spnUFVolumeRejectReason .value() + self.spnPreWeightRejectReason .value() + self.spnEstimatedTargetWeightRejectReason .value() + self.spnAcidConcentrateIndextRejectReason .value() ) == 0 self.td_interface.td_Treatment_Parameters_Validation( 1 if accepted else 0, self.spnTreatmentModalitRejectReason .value(), self.spnHDFTreatmentModeRejectReason .value(), self.spnBloodFlowRateRejectReason .value(), self.spnDialysateFlowRateRejectReason .value(), self.spnTreatmentDurationRejectReason .value(), self.spnHeparinStopTimeRejectReason .value(), self.spnHeparinTypeRejectReason .value(), self.spnDryBicarbConcentrateRejectReason .value(), self.spnSodiumRejectReason .value(), self.spnBicarbonateRejectReason .value(), self.spnDialyzerTypeRejectReason .value(), self.spnSalineBolusVolumeRejectReason .value(), self.spnBloodPressureMeasureIntervalRejectReason .value(), self.spnPrimeDiscardVolumeRejectReason .value(), self.spnRinsebackVolumeRejectReason .value(), self.spnHepatitisBStatusRejectReason .value(), self.spnSubstitutionFluidRejectReason .value(), self.spnHeparinBolusVolumeRejectReason .value(), self.spnHeparinDispensingRateRejectReason .value(), self.spnDialysateTempRejectReason .value(), self.spnAcidConcentrateRejectReason .value(), self.spnUFVolumeRejectReason .value(), self.spnPreWeightRejectReason .value(), self.spnEstimatedTargetWeightRejectReason .value(), self.spnAcidConcentrateIndextRejectReason .value() ) @Slot() def do_validateReset(self): self.spnTreatmentModalitRejectReason .setValue(0) self.spnHDFTreatmentModeRejectReason .setValue(0) self.spnBloodFlowRateRejectReason .setValue(0) self.spnDialysateFlowRateRejectReason .setValue(0) self.spnTreatmentDurationRejectReason .setValue(0) self.spnHeparinStopTimeRejectReason .setValue(0) self.spnHeparinTypeRejectReason .setValue(0) self.spnDryBicarbConcentrateRejectReason .setValue(0) self.spnSodiumRejectReason .setValue(0) self.spnBicarbonateRejectReason .setValue(0) self.spnDialyzerTypeRejectReason .setValue(0) self.spnSalineBolusVolumeRejectReason .setValue(0) self.spnBloodPressureMeasureIntervalRejectReason .setValue(0) self.spnPrimeDiscardVolumeRejectReason .setValue(0) self.spnRinsebackVolumeRejectReason .setValue(0) self.spnHepatitisBStatusRejectReason .setValue(0) self.spnSubstitutionFluidRejectReason .setValue(0) self.spnHeparinBolusVolumeRejectReason .setValue(0) self.spnHeparinDispensingRateRejectReason .setValue(0) self.spnDialysateTempRejectReason .setValue(0) self.spnAcidConcentrateRejectReason .setValue(0) self.spnUFVolumeRejectReason .setValue(0) self.spnPreWeightRejectReason .setValue(0) self.spnEstimatedTargetWeightRejectReason .setValue(0) self.spnAcidConcentrateIndextRejectReason .setValue(0) @Slot() def handle_load_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.lbAutoLoad.setText("Requested") @Slot() def handle_create_tx_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.lbCreateTx.setText("Create Tx Requested") @Slot() def handle_start_tx_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.lbStartTreatment.setText("Start Tx Requested") @Slot() def handle_validate_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ message = message['message'] self.index = MsgFieldPositions.START_POS_FIELD_1 self.lbTreatmentModality .setText(str(self.getIntValue(message))) self.lbHDFTreatmentMode .setText(str(self.getIntValue(message))) self.lbBloodFlowRate .setText(str(self.getIntValue(message))) self.lbDialysateFlowRate .setText(str(self.getIntValue(message))) self.lbTreatmentDuration .setText(str(self.getIntValue(message))) self.lbHeparinStopTime .setText(str(self.getIntValue(message))) self.lbHeparinType .setText(str(self.getIntValue(message))) self.lbDryBicarbConcentrate .setText(str(self.getIntValue(message))) self.lbSodium .setText(str(self.getIntValue(message))) self.lbBicarbonate .setText(str(self.getIntValue(message))) self.lbDialyzerType .setText(str(self.getIntValue(message))) self.lbSalineBolusVolume .setText(str(self.getIntValue(message))) self.lbBloodPressureMeasureInterval .setText(str(self.getIntValue(message))) self.lbPrimeDiscardVolume .setText(str(self.getIntValue(message))) self.lbRinsebackVolume .setText(str(self.getIntValue(message))) self.lbHepatitisBStatus .setText(str(self.getIntValue(message))) self.lbSubstitutionFluid .setText(f"{self.getFloatValue(message):.1f}") self.lbHeparinBolusVolume .setText(f"{self.getFloatValue(message):.1f}") self.lbHeparinDispensingRate .setText(f"{self.getFloatValue(message):.1f}") self.lbDialysateTemp .setText(f"{self.getFloatValue(message):.1f}") self.lbAcidConcentrate .setText(f"{self.getFloatValue(message):.3f}") self.lbUFVolue .setText(f"{self.getFloatValue(message):.1f}") self.lbPreWeight .setText(f"{self.getFloatValue(message):.1f}") self.lbEstimatedTargetWeight .setText(f"{self.getFloatValue(message):.1f}") self.lbAcidConcentrateIndex .setText(str(self.getIntValue(message))) def getIntValue (self, message): val,self.index = conversions.bytearray_to_integer( message, self.index) return val def getFloatValue (self, message): val,self.index = conversions.bytearray_to_float( message, self.index) return val