Fisheye: Tag 6a5824cc32716947513b4a5adca54a9e513c0c5c refers to a dead (removed) revision in file `simulator/Simulator.ui'.
Fisheye: No comparison available. Pass `N' to diff?
Index: simulator/plugins/__init__.py
===================================================================
diff -u
--- simulator/plugins/__init__.py (revision 0)
+++ simulator/plugins/__init__.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1 @@
\ No newline at end of file
Index: simulator/plugins/inlinebloodpressures/inlinebloodpressures.py
===================================================================
diff -u
--- simulator/plugins/inlinebloodpressures/inlinebloodpressures.py (revision 0)
+++ simulator/plugins/inlinebloodpressures/inlinebloodpressures.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,164 @@
+"""
+The In-Line Blood Pressure ui class
+"""
+
+from runtimewidget import RunTimeWidget
+from PySide2 import QtWidgets
+from PySide2.QtCore import QObject, Slot
+from dialin.squish import denaliMessages
+from dialin.squish.denaliMessages import txStates, EResponse
+from dialin.common import Ranges
+
+
+class InlineBloodPressures(RunTimeWidget):
+ """
+ The In-Line Blood Pressure ui class
+ """
+ btnAVPressuresAccept: QtWidgets.QPushButton
+ btnAVPressuresReject: QtWidgets.QPushButton
+
+ lblArterialTitle: QtWidgets.QLabel
+ lblVenousTitle: QtWidgets.QLabel
+ lblAVPressuresAction: QtWidgets.QLabel
+ lblArterialLimitLow: QtWidgets.QLabel
+ lblArterialLimitHigh: QtWidgets.QLabel
+ lblVenousLimitLow: QtWidgets.QLabel
+ lblVenousLimitHigh: QtWidgets.QLabel
+
+ spnAVPressuresRejectReason: QtWidgets.QSpinBox
+ spnArterialLimitLow: QtWidgets.QSpinBox
+ spnArterialLimitHigh: QtWidgets.QSpinBox
+ spnVenousLimitLow: QtWidgets.QSpinBox
+ spnVenousLimitHigh: QtWidgets.QSpinBox
+
+ sldArterialValue: QtWidgets.QSlider
+ sldVenousValue: QtWidgets.QSlider
+
+ def __init__(self):
+ super().__init__("plugins/inlinebloodpressures/inlinebloodpressures.ui")
+ self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IDLE
+ self.initialize()
+ self.init_widgets()
+ self.init_connections()
+
+ def initialize(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.lblArterialTitle = self.find_label('lblArterialTitle')
+ self.lblVenousTitle = self.find_label('lblVenousTitle')
+ self.lblArterialLimitLow = self.find_label('lblArterialLimitLow')
+ self.lblArterialLimitHigh = self.find_label('lblArterialLimitHigh')
+ self.lblVenousLimitLow = self.find_label('lblVenousLimitLow')
+ self.lblVenousLimitHigh = self.find_label('lblVenousLimitHigh')
+ self.lblAVPressuresAction = self.find_label('lblAVPressuresAction')
+
+ self.btnAVPressuresAccept = self.find_button('btnAVPressuresAccept')
+ self.btnAVPressuresReject = self.find_button('btnAVPressuresReject')
+
+ self.spnArterialLimitLow = self.find_spinbox('spnArterialLimitLow')
+ self.spnArterialLimitHigh = self.find_spinbox('spnArterialLimitHigh')
+ self.spnVenousLimitLow = self.find_spinbox('spnVenousLimitLow')
+ self.spnVenousLimitHigh = self.find_spinbox('spnVenousLimitHigh')
+ self.spnAVPressuresRejectReason = self.find_spinbox('spnAVPressuresRejectReason')
+
+ self.sldArterialValue = self.find_slider('sldArterialValue')
+ self.sldVenousValue = self.find_slider('sldVenousValue')
+
+ def init_widgets(self):
+ """
+ initializes the widgets' properties
+ :return: none
+ """
+ self.lblArterialTitle.setText(
+ f"{self.lblArterialTitle.text()} [{Ranges.ARTERIAL_PRESSURE_MINIMUM},{Ranges.ARTERIAL_PRESSURE_MAXIMUM}]"
+ )
+ self.lblVenousTitle.setText(
+ f"{self.lblVenousTitle.text()} [{Ranges.VENOUS_PRESSURE_MINIMUM},{Ranges.VENOUS_PRESSURE_MAXIMUM}]"
+ )
+
+ self.lblArterialLimitLow.setText(f"{Ranges.ARTERIAL_PRESSURE_LOW_MIN}\n{Ranges.ARTERIAL_PRESSURE_LOW_MAX}")
+ self.lblArterialLimitHigh.setText(f"{Ranges.ARTERIAL_PRESSURE_HIGH_MIN}\n{Ranges.ARTERIAL_PRESSURE_HIGH_MAX}")
+ self.lblVenousLimitLow.setText(f"{Ranges.VENOUS_PRESSURE_LOW_MIN}\n{Ranges.VENOUS_PRESSURE_LOW_MAX}")
+ self.lblVenousLimitHigh.setText(f"{Ranges.VENOUS_PRESSURE_HIGH_MIN}\n{Ranges.VENOUS_PRESSURE_HIGH_MAX}")
+
+ self.sldArterialValue.setMinimum(Ranges.ARTERIAL_PRESSURE_MINIMUM)
+ self.sldArterialValue.setMaximum(Ranges.ARTERIAL_PRESSURE_MAXIMUM)
+ self.sldArterialValue.setValue(0)
+ self.sldVenousValue.setMinimum(Ranges.VENOUS_PRESSURE_MINIMUM)
+ self.sldVenousValue.setMaximum(Ranges.VENOUS_PRESSURE_MAXIMUM)
+ self.sldVenousValue.setValue(0)
+
+ self.spnArterialLimitLow.setMinimum(Ranges.ARTERIAL_PRESSURE_LOW_MIN)
+ self.spnArterialLimitLow.setMaximum(Ranges.ARTERIAL_PRESSURE_LOW_MAX)
+ self.spnArterialLimitLow.setValue(Ranges.ARTERIAL_PRESSURE_LOW_DEF)
+
+ self.spnArterialLimitHigh.setMinimum(Ranges.ARTERIAL_PRESSURE_HIGH_MIN)
+ self.spnArterialLimitHigh.setMaximum(Ranges.ARTERIAL_PRESSURE_HIGH_MAX)
+ self.spnArterialLimitHigh.setValue(Ranges.ARTERIAL_PRESSURE_HIGH_DEF)
+
+ self.spnVenousLimitLow.setMinimum(Ranges.VENOUS_PRESSURE_LOW_MIN)
+ self.spnVenousLimitLow.setMaximum(Ranges.VENOUS_PRESSURE_LOW_MAX)
+ self.spnVenousLimitLow.setValue(Ranges.VENOUS_PRESSURE_LOW_DEF)
+
+ self.spnVenousLimitHigh.setMinimum(Ranges.VENOUS_PRESSURE_HIGH_MIN)
+ self.spnVenousLimitHigh.setMaximum(Ranges.VENOUS_PRESSURE_HIGH_MAX)
+ self.spnVenousLimitHigh.setValue(Ranges.VENOUS_PRESSURE_HIGH_DEF)
+
+ def init_connections(self):
+ """
+ initializes the widgets connections
+ :return: none
+ """
+ # sending the CANBus message when slider value changed
+ self.sldArterialValue.valueChanged.connect(self.do_pressures_data)
+ self.sldVenousValue.valueChanged.connect(self.do_pressures_data)
+
+ # sending the CANBus message when accepted or rejected
+ self.btnAVPressuresAccept.clicked.connect(self.do_pressures_limits_accept)
+ self.btnAVPressuresReject.clicked.connect(self.do_pressures_limits_reject)
+
+ @Slot()
+ def do_pressures_data(self):
+ """
+ sends the pressures values message with given value on the screen
+ :return: none
+ """
+ denaliMessages.setPressureOcclusionData(
+ self.sldArterialValue.value(),
+ self.sldVenousValue.value(),
+ 0, 0, 0
+ )
+
+ @Slot()
+ def do_pressures_limits_accept(self):
+ """
+ sends the pressures values message with given value on the screen
+ :return: none
+ """
+ # vAccepted, vReason, vArterialLow, vArterialHigh, vVenousLow, vVenousHigh
+ denaliMessages.sendTreatmentAdjustPressuresLimitsResponse(
+ EResponse.Accepted, 0,
+ self.spnArterialLimitLow.value(),
+ self.spnArterialLimitHigh.value(),
+ self.spnVenousLimitLow.value(),
+ self.spnVenousLimitHigh.value()
+ )
+ self.lblAVPressuresAction.setText('Accepted ')
+
+ @Slot()
+ def do_pressures_limits_reject(self):
+ """
+ sends the pressures values message with given value on the screen
+ :return: none
+ """
+ reason = self.spnAVPressuresRejectReason.value()
+ denaliMessages.sendTreatmentAdjustPressuresLimitsResponse(
+ EResponse.Rejected, reason,
+ self.spnArterialLimitLow.value(),
+ self.spnArterialLimitHigh.value(),
+ self.spnVenousLimitLow.value(),
+ self.spnVenousLimitHigh.value()
+ )
+ self.lblAVPressuresAction.setText('Rejected ' + "{}".format(reason))
Index: simulator/plugins/inlinebloodpressures/inlinebloodpressures.ui
===================================================================
diff -u
--- simulator/plugins/inlinebloodpressures/inlinebloodpressures.ui (revision 0)
+++ simulator/plugins/inlinebloodpressures/inlinebloodpressures.ui (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,684 @@
+
+
+ ui_inlinebloodpressures
+
+
+
+ 0
+ 0
+ 692
+ 151
+
+
+
+ In-Line Blood Pressures
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(164, 0, 0);
+color: rgb(238, 238, 236);
+
+
+ In-Line Blood Pressures
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ QLayout::SetFixedSize
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 10
+
+
+
+ -
+
+
+
+ 30
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ Low
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 10
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ High
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 30
+ 0
+
+
+
+ Value
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ sldVenousValue
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(229, 156, 156);
+
+
+ Venous Limit (mmHg)
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ High
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 10
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+ Value
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ sldArterialValue
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ Low
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 10
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(229, 156, 156);
+
+
+ Arterial Limit (mmHg)
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 30
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+ QLayout::SetFixedSize
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(229, 156, 156);
+
+
+ Adjustment
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Confirm
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Reject
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ reason
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+ sldArterialValue
+ valueChanged(int)
+ lblArterialValue
+ setNum(int)
+
+
+ 138
+ 122
+
+
+ 214
+ 128
+
+
+
+
+ sldVenousValue
+ valueChanged(int)
+ lblVenousValue
+ setNum(int)
+
+
+ 304
+ 124
+
+
+ 443
+ 127
+
+
+
+
+
Index: simulator/plugins/salinebolus/salinebolus.py
===================================================================
diff -u
--- simulator/plugins/salinebolus/salinebolus.py (revision 0)
+++ simulator/plugins/salinebolus/salinebolus.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,106 @@
+"""
+The Saline Bolus ui loader class
+"""
+from runtimewidget import RunTimeWidget
+from PySide2 import QtWidgets
+from PySide2.QtCore import Slot
+from dialin.squish import denaliMessages
+from dialin.squish.denaliMessages import txStates, EResponse
+
+
+class SalineBolus(RunTimeWidget):
+ """
+ The Saline Bolus ui loader class
+ """
+
+ btnSalineAccept: QtWidgets.QPushButton
+ btnSalineReject: QtWidgets.QPushButton
+ lblSalineAction: QtWidgets.QLabel
+ spnSalineRejectReason: QtWidgets.QSpinBox
+ cmbSalineAcceptTarget: QtWidgets.QComboBox
+ sldSalineTarget: QtWidgets.QSlider
+ sldSalineCumulative: QtWidgets.QSlider
+ sldSalineVolume: QtWidgets.QSlider
+
+ saline_requested_state: txStates
+
+ def __init__(self):
+ super().__init__("plugins/salinebolus/salinebolus.ui")
+ self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IDLE
+ self.initialize()
+ self.init_widgets()
+ self.init_connections()
+
+ def initialize(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ # saline adjustment
+ self.btnSalineAccept = self.find_button('btnSalineAccept')
+ self.btnSalineReject = self.find_button('btnSalineReject')
+ self.lblSalineAction = self.find_label('lblSalineAction')
+ self.spnSalineRejectReason = self.find_spinbox('spnSalineRejectReason')
+ self.cmbSalineAcceptTarget = self.find_combobox('cmbSalineAcceptTarget')
+ # saline data
+ self.sldSalineTarget = self.find_slider('sldSalineTarget')
+ self.sldSalineCumulative = self.find_slider('sldSalineCumulative')
+ self.sldSalineVolume = self.find_slider('sldSalineVolume')
+
+ def init_widgets(self):
+ """
+ initializes the widgets' properties
+ :return: none
+ """
+ pass
+
+ def init_connections(self):
+ """
+ initializes the widgets connections
+ :return:
+ """
+ # saline adjustment
+ self.btnSalineAccept.clicked.connect(self.do_sb_accept)
+ self.btnSalineReject.clicked.connect(self.do_sb_reject)
+ # saline data
+ self.sldSalineTarget.valueChanged.connect(self.do_saline_data)
+ self.sldSalineCumulative.valueChanged.connect(self.do_saline_data)
+ self.sldSalineVolume.valueChanged.connect(self.do_saline_data)
+
+ @Slot()
+ def do_sb_accept(self):
+ """
+ the slot for accept saline bolus button
+ :return: none
+ """
+ # toggle the saline requested state
+ if self.saline_requested_state == txStates.SALINE_BOLUS_STATE_IN_PROGRESS:
+ self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IDLE
+ else:
+ self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IN_PROGRESS
+
+ target = self.cmbSalineAcceptTarget.currentText()
+ denaliMessages.setSalineBolusResponse(True, 0, target, self.saline_requested_state)
+ self.lblSalineAction.setText('Accepted ' + target)
+
+ @Slot()
+ def do_sb_reject(self):
+ """
+ the slot for accept saline bolus button
+ :return: none
+ """
+ reason = self.spnSalineRejectReason.value()
+ denaliMessages.setSalineBolusResponse(False, reason, 0, self.saline_requested_state)
+ self.lblSalineAction.setText('Rejected ' + "{}".format(reason))
+
+
+ @Slot()
+ def do_saline_data(self):
+ """
+ the slot which is called to send the saline bolus data
+ by calling the denaliMessage API setTreatmentSalineBolusData
+ :return: none
+ """
+ denaliMessages.setTreatmentSalineBolusData(self.sldSalineTarget.value(),
+ self.sldSalineCumulative.value(),
+ self.sldSalineVolume.value())
Index: simulator/plugins/salinebolus/salinebolus.ui
===================================================================
diff -u
--- simulator/plugins/salinebolus/salinebolus.ui (revision 0)
+++ simulator/plugins/salinebolus/salinebolus.ui (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,650 @@
+
+
+ ui_salinebolus
+
+
+
+ 0
+ 0
+ 493
+ 317
+
+
+
+ Saline Bolus
+
+
+ -
+
+
-
+
+
-
+
+
+
+ 10
+
+
+
+ Accept
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(233, 185, 110);
+
+
+ Saline Bolus Adjustment
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ mL
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
-
+
+ 100
+
+
+ -
+
+ 200
+
+
+ -
+
+ 300
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ reason
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Reject
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 75
+ 0
+
+
+
+
+ 10
+
+
+
+ Cumulative
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ sldSalineCumulative
+
+
+
+ -
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(233, 185, 110);
+
+
+ Saline Bolus Data
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Volume
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ sldSalineVolume
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ 300
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 75
+ 0
+
+
+
+
+ 10
+
+
+
+ Target
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ sldSalineTarget
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 1000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ 300
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 300
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 300
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ 1000
+
+
+ Qt::Horizontal
+
+
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(193, 125, 17);
+color: rgb(238, 238, 236);
+
+
+ Saline Bolus
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+ sldSalineTarget
+ valueChanged(int)
+ lblSalineTarget
+ setNum(int)
+
+
+ 433
+ 198
+
+
+ 474
+ 200
+
+
+
+
+ sldSalineVolume
+ valueChanged(int)
+ lblSalineVolume
+ setNum(int)
+
+
+ 398
+ 247
+
+
+ 476
+ 245
+
+
+
+
+ sldSalineCumulative
+ valueChanged(int)
+ lblSalineCumulative
+ setNum(int)
+
+
+ 392
+ 293
+
+
+ 472
+ 294
+
+
+
+
+
Index: simulator/plugins/treatmentranges/treatmentranges.py
===================================================================
diff -u
--- simulator/plugins/treatmentranges/treatmentranges.py (revision 0)
+++ simulator/plugins/treatmentranges/treatmentranges.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,91 @@
+"""
+ The Treatment Ranges ui loader
+"""
+from runtimewidget import RunTimeWidget
+from PySide2 import QtWidgets
+from PySide2.QtCore import QTimer
+from PySide2.QtCore import Slot
+from dialin.squish import denaliMessages
+from dialin.squish.denaliMessages import txStates, EResponse
+
+
+class TreatmentRanges(RunTimeWidget):
+ """
+ The Treatment Ranges ui loader
+ """
+ timer: QTimer
+
+ chkRangesBroadcast: QtWidgets.QCheckBox
+ spnDurationMin: QtWidgets.QSpinBox
+ spnDurationMax: QtWidgets.QSpinBox
+ spnDialysateMin: QtWidgets.QSpinBox
+ spnDialysateMax: QtWidgets.QSpinBox
+ spnUFVolumeMin: QtWidgets.QSpinBox
+ spnUFVolumeMax: QtWidgets.QSpinBox
+ sldDurationValue: QtWidgets.QSlider
+
+ def __init__(self):
+ super().__init__("plugins/treatmentranges/treatmentranges.ui")
+ self.initialize()
+ self.init_widgets()
+ self.init_connections()
+
+ def initialize(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.spnDurationMin = self.find_spinbox('spnDurationMin')
+ self.spnDurationMax = self.find_spinbox('spnDurationMax')
+ self.sldDurationValue = self.find_slider('sldDurationValue')
+ self.spnUFVolumeMin = self.find_spinbox('spnUFVolumeMin')
+ self.spnUFVolumeMax = self.find_spinbox('spnUFVolumeMax')
+ self.spnDialysateMin = self.find_spinbox('spnDialysateMin')
+ self.spnDialysateMax = self.find_spinbox('spnDialysateMax')
+ self.chkRangesBroadcast = self.find_checkox('chkRangesBroadcast')
+
+ def init_connections(self):
+ """
+ initializes the widgets connections
+ :return: none
+ """
+ self.timer.timeout.connect(self.do_ranges_data)
+ self.sldDurationValue.valueChanged.connect(self.do_duration_data)
+
+ def init_widgets(self):
+ """
+ initializes the widgets' properties
+ :return: none
+ """
+ self.timer = QTimer()
+ self.timer.start(1000)
+
+ @Slot()
+ def do_duration_data(self, value):
+ """
+ sends the duration message
+ :return: none
+ """
+ denaliMessages.setTreatmentTime(self.spnDurationMax.value() * 60, value)
+ denaliMessages.setTreatmentHeparinData(value)
+
+ @Slot()
+ def do_ranges_data(self):
+ """
+ sends the treatment ranges message with given value on the screen
+ :return: none
+ """
+ if self.chkRangesBroadcast.isChecked():
+ duration_min = self.spnDurationMin.value()
+ duration_max = self.spnDurationMax.value()
+ self.sldDurationValue.setMinimum(duration_min * 60)
+ self.sldDurationValue.setMaximum(duration_max * 60)
+
+ denaliMessages.setTreatmentParamRanges(
+ duration_min,
+ duration_max,
+ self.spnUFVolumeMin.value(),
+ self.spnUFVolumeMax.value(),
+ self.spnDialysateMin.value(),
+ self.spnDialysateMax.value()
+ )
Index: simulator/plugins/treatmentranges/treatmentranges.ui
===================================================================
diff -u
--- simulator/plugins/treatmentranges/treatmentranges.ui (revision 0)
+++ simulator/plugins/treatmentranges/treatmentranges.ui (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,727 @@
+
+
+ ui_treatmentranges
+
+
+
+ 0
+ 0
+ 658
+ 174
+
+
+
+ Ranges
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Turn Treatment ranges broadcast message Automatic send Off/On
+
+
+ Broad cast
+
+
+ true
+
+
+
+ -
+
+
-
+
+
+
+ 10
+
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
-
+
+
+
+ 10
+
+
+
+ background-color: rgb(173, 127, 168);
+
+
+ Ultrafiltration (mL)
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 8000
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 8000
+
+
+ 8000
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Min
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ spnUFVolumeMin
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ spnUFVolumeMax
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 8000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Value
+
+
+ horizontalSlider_2
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 100
+
+
+ 600
+
+
+ 50
+
+
+ 600
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ spnDialysateMax
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(173, 127, 168);
+
+
+ Dialysate (mL/min)
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 600
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 100
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 100
+
+
+ 600
+
+
+ 50
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Min
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ spnDialysateMin
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Value
+
+
+ horizontalSlider_3
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 480
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(173, 127, 168);
+
+
+ Duration (min)
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ 480
+
+
+ 480
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ spnDurationMax
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 480
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Min
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ spnDurationMin
+
+
+
+ -
+
+
+ 480
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ Value
+
+
+ sldDurationValue
+
+
+
+ -
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Vertical
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(117, 80, 123);
+color: rgb(238, 238, 236);
+
+
+ Treatment Ranges
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+
+
+ sldDurationValue
+ valueChanged(int)
+ label_18
+ setNum(int)
+
+
+ 143
+ 125
+
+
+ 191
+ 130
+
+
+
+
+ horizontalSlider_2
+ valueChanged(int)
+ label
+ setNum(int)
+
+
+ 352
+ 128
+
+
+ 404
+ 125
+
+
+
+
+ horizontalSlider_3
+ valueChanged(int)
+ label_2
+ setNum(int)
+
+
+ 564
+ 130
+
+
+ 636
+ 130
+
+
+
+
+
Index: simulator/plugins/treatmentstates/treatmentstates.py
===================================================================
diff -u
--- simulator/plugins/treatmentstates/treatmentstates.py (revision 0)
+++ simulator/plugins/treatmentstates/treatmentstates.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,69 @@
+"""
+ The Ultrafiltration ui loader
+"""
+from runtimewidget import RunTimeWidget
+from PySide2 import QtWidgets
+from PySide2.QtCore import Slot
+from dialin.squish import denaliMessages
+from dialin.squish.denaliMessages import txStates, EResponse
+
+
+class TreatmentStates(RunTimeWidget):
+ """
+ The Ultrafiltration ui loader
+ """
+ tblSubMode: QtWidgets.QTableWidget
+ tblUFStates: QtWidgets.QTableWidget
+ tblSalineStates: QtWidgets.QTableWidget
+ tblHeparinStates: QtWidgets.QTableWidget
+
+ def __init__(self):
+ super().__init__("plugins/treatmentstates/treatmentstates.ui")
+ self.initialize()
+ self.init_widgets()
+ self.init_connections()
+
+ # apply/send the initial states
+ self.do_treatment_states()
+
+ def initialize(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.tblSubMode = self.find_table_widget('tblSubMode')
+ self.tblUFStates = self.find_table_widget('tblUFStates')
+ self.tblSalineStates = self.find_table_widget('tblSalineStates')
+ self.tblHeparinStates = self.find_table_widget('tblHeparinStates')
+
+ def init_connections(self):
+ """
+ initializes the widgets connections
+ :return: none
+ """
+ self.tblSubMode.cellClicked.connect(self.do_treatment_states)
+ self.tblUFStates.cellClicked.connect(self.do_treatment_states)
+ self.tblSalineStates.cellClicked.connect(self.do_treatment_states)
+ self.tblHeparinStates.cellClicked.connect(self.do_treatment_states)
+
+ def init_widgets(self):
+ """
+ initializes the widgets' properties
+ :return: none
+ """
+ self.tblSubMode.setCurrentCell(txStates.TREATMENT_DIALYSIS_STATE, 0)
+ self.tblUFStates.setCurrentCell(txStates.UF_OFF_STATE, 0)
+ self.tblSalineStates.setCurrentCell(txStates.SALINE_BOLUS_STATE_IDLE, 0)
+ self.tblHeparinStates.setCurrentCell(txStates.HEPARIN_STATE_OFF, 0)
+
+ @Slot()
+ def do_treatment_states(self):
+ """
+ the slot for saline bolus state change
+ :return: none
+ """
+ sub_mode = self.tblSubMode.verticalHeaderItem(self.tblSubMode.currentRow()).text()
+ uf_state = self.tblUFStates.verticalHeaderItem(self.tblUFStates.currentRow()).text()
+ saline = self.tblSalineStates.verticalHeaderItem(self.tblSalineStates.currentRow()).text()
+ heparin = self.tblHeparinStates.verticalHeaderItem(self.tblHeparinStates.currentRow()).text()
+ denaliMessages.setTreatmentStatesData(sub_mode, uf_state, saline, heparin)
Index: simulator/plugins/treatmentstates/treatmentstates.ui
===================================================================
diff -u
--- simulator/plugins/treatmentstates/treatmentstates.ui (revision 0)
+++ simulator/plugins/treatmentstates/treatmentstates.ui (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,464 @@
+
+
+ ui_treatmentstates
+
+
+
+ 0
+ 0
+ 674
+ 466
+
+
+
+ States
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(245, 121, 0);
+color: rgb(238, 238, 236);
+
+
+ Treatment States
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 325
+ 265
+
+
+
+
+ 8
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ 300
+
+
+ true
+
+
+ 18
+
+
+ 21
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ 3
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 6
+
+
+
+
+ 7
+
+
+
+
+ 8
+
+
+
+
+ 9
+
+
+
+
+ 10
+
+
+
+
+ Treatment States (subMode)
+
+
+ -
+
+ TREATMENT_START_STATE
+
+
+ -
+
+ TREATMENT_DIALYSIS_STATE
+
+
+ -
+
+ TREATMENT_STOP_STATE
+
+
+ -
+
+ TREATMENT_RINSEBACK_STATE
+
+
+ -
+
+ TREATMENT_RINSEBACK_PAUSE_STATE
+
+
+ -
+
+ TREATMENT_RECIRC_SETUP_STATE
+
+
+ -
+
+ TREATMENT_RECIRC_STATE
+
+
+ -
+
+ TREATMENT_RECIRC_PAUSE_STATE
+
+
+ -
+
+ TREATMENT_RECIRC_STOP_STATE
+
+
+ -
+
+ TREATMENT_DIALYSIS_END_STATE
+
+
+ -
+
+ TREATMENT_END_STATE
+
+
+
+
+ -
+
+
+
+ 325
+ 225
+
+
+
+
+ 8
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ 300
+
+
+ 21
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ 3
+
+
+
+
+ 4
+
+
+
+
+ UF States
+
+
+ -
+
+ UF_START_STATE
+
+
+ -
+
+ UF_PAUSED_STATE
+
+
+ -
+
+ UF_RUNNING_STATE
+
+
+ -
+
+ UF_OFF_STATE
+
+
+ -
+
+ UF_COMPLETED_STATE
+
+
+
+
+ -
+
+
+
+ 310
+ 100
+
+
+
+
+ 8
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ 300
+
+
+ 21
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ 3
+
+
+
+
+ Saline States
+
+
+ -
+
+ SALINE_BOLUS_STATE_IDLE
+
+
+ ItemIsSelectable|ItemIsEnabled
+
+
+ -
+
+ SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP
+
+
+ -
+
+ SALINE_BOLUS_STATE_IN_PROGRESS
+
+
+ -
+
+ SALINE_BOLUS_STATE_MAX_DELIVERED
+
+
+
+
+ -
+
+
+
+ 325
+ 155
+
+
+
+
+ 8
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ 300
+
+
+ 21
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ 3
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ Heparin States
+
+
+ -
+
+ HEPARIN_STATE_OFF
+
+
+ ItemIsSelectable|ItemIsEnabled
+
+
+ -
+
+ HEPARIN_STATE_PAUSED
+
+
+ -
+
+ HEPARIN_STATE_INITIAL_BOLUS
+
+
+ -
+
+ HEPARIN_STATE_DISPENSING
+
+
+ -
+
+ HEPARIN_STATE_COMPLETED
+
+
+ -
+
+ HEPARIN_STATE_EMPTY
+
+
+
+
+
+
+
+
+
Index: simulator/plugins/ultrafiltration/ultrafiltration.py
===================================================================
diff -u
--- simulator/plugins/ultrafiltration/ultrafiltration.py (revision 0)
+++ simulator/plugins/ultrafiltration/ultrafiltration.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,148 @@
+"""
+ The Ultrafiltration ui loader
+"""
+from runtimewidget import RunTimeWidget
+from PySide2 import QtWidgets
+from PySide2.QtCore import Slot
+from dialin.squish import denaliMessages
+from dialin.squish.denaliMessages import txStates, EResponse
+
+
+class Ultrafiltration(RunTimeWidget):
+ """
+ The Ultrafiltration ui loader
+ """
+
+ # components
+ btnUfPauseAccept: QtWidgets.QPushButton
+ btnUfPauseReject: QtWidgets.QPushButton
+ btnUfResumeAccept: QtWidgets.QPushButton
+ btnUfResumeReject: QtWidgets.QPushButton
+ btnUfEditAccept: QtWidgets.QPushButton
+ btnUfEditReject: QtWidgets.QPushButton
+
+ lblUfPauseAction: QtWidgets.QLabel
+ lblUfResumeAction: QtWidgets.QLabel
+ lblUfEditAction: QtWidgets.QLabel
+
+ spnUfPauseRejectReason: QtWidgets.QSpinBox
+ spnUfEditRejectReason: QtWidgets.QSpinBox
+ spnUfResumeRejectReason: QtWidgets.QSpinBox
+ sldUfVolume: QtWidgets.QSlider
+
+ def __init__(self):
+ super().__init__("plugins/ultrafiltration/ultrafiltration.ui")
+ self.initialize()
+ self.init_widgets()
+ self.init_connections()
+
+ def initialize(self):
+ """
+ finds and creates widgets
+ :return: none
+ """
+ self.btnUfPauseAccept = self.find_button('btnUfPauseAccept')
+ self.btnUfPauseReject = self.find_button('btnUfPauseReject')
+ self.btnUfResumeAccept = self.find_button('btnUfResumeAccept')
+ self.btnUfResumeReject = self.find_button('btnUfResumeReject')
+ self.btnUfEditAccept = self.find_button('btnUfEditAccept')
+ self.btnUfEditReject = self.find_button('btnUfEditReject')
+ self.lblUfPauseAction = self.find_label('lblUfPauseAction')
+ self.lblUfResumeAction = self.find_label('lblUfResumeAction')
+ self.lblUfEditAction = self.find_label('lblUfEditAction')
+ self.spnUfPauseRejectReason = self.find_spinbox('spnUfPauseRejectReason')
+ self.spnUfResumeRejectReason = self.find_spinbox('spnUfResumeRejectReason')
+ self.spnUfEditRejectReason = self.find_spinbox('spnUfEditRejectReason')
+ self.sldUfVolume = self.find_slider('sldUfVolume')
+
+ def init_widgets(self):
+ """
+ initializes the widgets' properties
+ :return: none
+ """
+ pass
+
+ def init_connections(self):
+ """
+ initializes the widgets connections
+ :return: none
+ """
+ self.btnUfPauseAccept.clicked.connect(self.do_uf_pause_accept)
+ self.btnUfPauseReject.clicked.connect(self.do_uf_pause_reject)
+ self.btnUfResumeAccept.clicked.connect(self.do_uf_resume_accept)
+ self.btnUfResumeReject.clicked.connect(self.do_uf_resume_reject)
+ self.btnUfEditAccept.clicked.connect(self.do_uf_edit_accept)
+ self.btnUfEditReject.clicked.connect(self.do_uf_edit_reject)
+ self.sldUfVolume.valueChanged.connect(self.do_uf_volume_data)
+
+ @Slot()
+ def do_uf_pause_accept(self):
+ """
+ the slot for accept ultrafiltration pause button
+ :return: none
+ """
+ denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
+ EResponse.Accepted, 0, txStates.UF_PAUSED_STATE)
+ self.lblUfPauseAction.setText('Accepted ')
+
+ @Slot()
+ def do_uf_pause_reject(self):
+ """
+ the slot for reject ultrafiltration pause button
+ :return: none
+ """
+ reason = self.spnUfPauseRejectReason.value()
+ denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
+ EResponse.Rejected, reason, txStates.UF_RUNNING_STATE)
+ self.lblUfPauseAction.setText('Rejected ' + "{}".format(reason))
+
+ @Slot()
+ def do_uf_resume_accept(self):
+ """
+ the slot for accept ultrafiltration resume accept
+ :return: none
+ """
+ denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
+ EResponse.Accepted, 0, txStates.UF_RUNNING_STATE)
+ self.lblUfResumeAction.setText('Accepted ')
+
+ @Slot()
+ def do_uf_resume_reject(self):
+ """
+ the slot for reject ultrafiltration resume button
+ :return: none
+ """
+ reason = self.spnUfResumeRejectReason.value()
+ denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
+ EResponse.Rejected, reason, txStates.UF_PAUSED_STATE)
+ self.lblUfResumeAction.setText('Rejected ' + "{}".format(reason))
+
+ @Slot()
+ def do_uf_edit_accept(self):
+ """
+ the slot for accept ultrafiltration next button
+ :return: none
+ """
+ denaliMessages.setTreatmentAdjustUltrafiltrationEditResponse(
+ EResponse.Accepted, 0, 2500, 60, 0, 10, 0, 10)
+ self.lblUfEditAction.setText('Accepted ')
+
+ @Slot()
+ def do_uf_edit_reject(self):
+ """
+ the slot for reject ultrafiltration next button
+ :return: none
+ """
+ reason = self.spnUfEditRejectReason.value()
+ denaliMessages.setTreatmentAdjustUltrafiltrationEditResponse(
+ EResponse.Rejected, reason, 2500, 60, 0, 10, 0, 10)
+ self.lblUfEditAction.setText('Rejected ' + "{}".format(reason))
+
+ @Slot()
+ def do_uf_volume_data(self):
+ """
+ sends the ultrafiltration delivered volume message
+ :return: none
+ """
+ denaliMessages.setTreatmentUltrafiltration(self.sldUfVolume.value(), 0, 0, 0, 0, 0, 0)
+
Index: simulator/plugins/ultrafiltration/ultrafiltration.ui
===================================================================
diff -u
--- simulator/plugins/ultrafiltration/ultrafiltration.ui (revision 0)
+++ simulator/plugins/ultrafiltration/ultrafiltration.ui (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,748 @@
+
+
+ ui_ultrafiltration
+
+
+
+ 0
+ 0
+ 960
+ 344
+
+
+
+ Ultrafiltration
+
+
+ -
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ reason
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(114, 159, 207);
+
+
+ UF Resume
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Resume
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Reject
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 10
+
+
+
+ Reject
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(114, 159, 207);
+
+
+ UF Pause
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ reason
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Pause
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ reason
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(114, 159, 207);
+
+
+ UF Edit Volume
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Reject
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Next
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+
+ 10
+
+
+
+ Confirm
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 0
+
+
+
+
+ 10
+
+
+
+ reason
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(114, 159, 207);
+
+
+ UF Confirm Volume
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Reject
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Duration
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Plain
+
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Rate
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ background-color: rgb(114, 159, 207);
+
+
+ UF delivered Volume
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Max
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 8000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ 8000
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 10
+
+
+
+ Volume
+
+
+ Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft
+
+
+ sldUfVolume
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ background-color: rgb(52, 101, 164);
+color: rgb(238, 238, 236);
+
+
+ Ultrafiltration
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ sldUfVolume
+ valueChanged(int)
+ lblSalineTarget_2
+ setNum(int)
+
+
+ 830
+ 316
+
+
+ 944
+ 325
+
+
+
+
+
Index: simulator/run.py
===================================================================
diff -u -r188a7f6ac2af6d9a6e7f848f5efc385e106375fc -r6a5824cc32716947513b4a5adca54a9e513c0c5c
--- simulator/run.py (.../run.py) (revision 188a7f6ac2af6d9a6e7f848f5efc385e106375fc)
+++ simulator/run.py (.../run.py) (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -4,555 +4,83 @@
# import project classes
# import names
from dialin.squish import utils, denaliMessages
-from dialin.squish.denaliMessages import txStates, EResponse
+from dialin.squish.denaliMessages import txStates
# Import PySide2 classes
-from PySide2.QtUiTools import QUiLoader
from PySide2 import QtCore, QtWidgets
-from PySide2.QtCore import QFile, Slot
-from PySide2.QtGui import qApp
-from PySide2.QtCore import QTimer
-from dialin.common import Ranges
+from PySide2.QtCore import Slot
+from runtimewidget import RunTimeWidget
-class RunTimeWidget:
- """
- the parent class of all the run time loadable widgets
- """
+from plugins.ultrafiltration.ultrafiltration import Ultrafiltration
+from plugins.inlinebloodpressures.inlinebloodpressures import InlineBloodPressures
+from plugins.salinebolus.salinebolus import SalineBolus
+from plugins.treatmentstates.treatmentstates import TreatmentStates
+from plugins.treatmentranges.treatmentranges import TreatmentRanges
- loader: QUiLoader
- window: QtWidgets.QWidget
- def __init__(self, ui_name: str):
- self.ui_name = ui_name
- self.loader = QUiLoader()
- self.__load_ui()
-
- def __load_ui(self):
- """
- loads the ui file of the GUI at run time
- :return: none
- """
- ui_file = QFile(self.ui_name)
- ui_file.open(QFile.ReadOnly)
- self.window = self.loader.load(ui_file)
- # assert if the ui file can't be loaded
- error = self.loader.errorString()
- assert len(error) == 0, error
- ui_file.close()
-
- def show(self):
- """
- shows the main container window
- :return: none
- """
- self.window.show()
-
- def __find_child(self, child_type, child_name: str) -> QtWidgets.QWidget:
- """
- finds a child in the loaded ui and returns the reference to it if found
- otherwise quits the application
- :param child_type: (var) type of the child
- :param child_name: (str) name of the child
- :return: (QtWidgets.QWidget) reference to the child
- """
- child: QtWidgets.QWidget = self.window.findChild(child_type, child_name)
- assert child is not None, "child name '{}' with type '{}' can't be found.".format(child_name, child_type)
- return child
-
- def find_label(self, name: str) -> QtWidgets.QLabel:
- """
- convenient method of find_child for QLabel
- :param name: (str) name of the QLabel Object
- :return: (QLabel) reference to the QLabel
- """
- child = self.__find_child(QtWidgets.QLabel, name)
- return child
-
- def find_button(self, name: str) -> QtWidgets.QPushButton:
- """
- convenient method of find_child for QPushButton
- :param name: (str) name of the QPushButton Object
- :return: (QPushButton) reference to the QPushButton
- """
- child = self.__find_child(QtWidgets.QPushButton, name)
- return child
-
- def find_combobox(self, name: str) -> QtWidgets.QComboBox:
- """
- convenient method of find_child for QComboBox
- :param name: (str) name of the QComboBox Object
- :return: (QComboBox) reference to the QComboBox
- """
- child = self.__find_child(QtWidgets.QComboBox, name)
- return child
-
- def find_checkox(self, name: str) -> QtWidgets.QCheckBox:
- """
- convenient method of find_child for QCheckBox
- :param name: (str) name of the QCheckBox Object
- :return: (QCheckBox) reference to the QComboBox
- """
- child = self.__find_child(QtWidgets.QCheckBox, name)
- return child
-
- def find_spinbox(self, name: str) -> QtWidgets.QSpinBox:
- """
- convenient method of find_child for QSpinBox
- :param name: (str) name of the QSpinBox Object
- :return: (QSpinBox) reference to the QSpinBox
- """
- child = self.__find_child(QtWidgets.QSpinBox, name)
- return child
-
- def find_slider(self, name: str) -> QtWidgets.QSlider:
- """
- convenient method of find_child for QSlider
- :param name: (str) name of the QSlider Object
- :return: (QSlider) reference to the QSlider
- """
- child = self.__find_child(QtWidgets.QSlider, name)
- return child
-
- def find_table_widget(self, name: str) -> QtWidgets.QTableWidget:
- """
- convenient method of find_child for QTableWidget
- :param name: (str) name of the QTableWidget Object
- :return: (QTableWidget) reference to the QTableWidget
- """
- child: QtWidgets.QTableWidget = self.__find_child(QtWidgets.QTableWidget, name)
- return child
-
-
class Simulator(RunTimeWidget):
"""
The simulator class which loads the ui file dynamically and initializes the objects
and can be eventually shown.
Note: this class is growing fast and seems like needs to be multiple classes
"""
# global variables declarations
- ui_file_name = "Simulator.ui"
- timer: QTimer
- # checkbox
- chkRangesBroadcast: QtWidgets.QCheckBox
- # pushbutton
- btnSalineAccept: QtWidgets.QPushButton
- btnSalineReject: QtWidgets.QPushButton
- btnUfPauseAccept: QtWidgets.QPushButton
- btnUfPauseReject: QtWidgets.QPushButton
- btnUfResumeAccept: QtWidgets.QPushButton
- btnUfResumeReject: QtWidgets.QPushButton
- btnUfEditAccept: QtWidgets.QPushButton
- btnUfEditReject: QtWidgets.QPushButton
- btnAVPressuresAccept: QtWidgets.QPushButton
- btnAVPressuresReject: QtWidgets.QPushButton
- # label
- lblSalineAction: QtWidgets.QLabel
- lblUfPauseAction: QtWidgets.QLabel
- lblUfResumeAction: QtWidgets.QLabel
- lblUfEditAction: QtWidgets.QLabel
- lblArterialTitle: QtWidgets.QLabel
- lblVenousTitle: QtWidgets.QLabel
- lblAVPressuresAction: QtWidgets.QLabel
- lblArterialLimitLow: QtWidgets.QLabel
- lblArterialLimitHigh: QtWidgets.QLabel
- lblVenousLimitLow: QtWidgets.QLabel
- lblVenousLimitHigh: QtWidgets.QLabel
- # spinbox
- spnSalineRejectReason: QtWidgets.QSpinBox
- spnUfPauseRejectReason: QtWidgets.QSpinBox
- spnUfResumeRejectReason: QtWidgets.QSpinBox
- spnUfEditRejectReason: QtWidgets.QSpinBox
- spnAVPressuresRejectReason: QtWidgets.QSpinBox
- spnDurationMin: QtWidgets.QSpinBox
- spnDurationMax: QtWidgets.QSpinBox
- spnUFVolumeMin: QtWidgets.QSpinBox
- spnUFVolumeMax: QtWidgets.QSpinBox
- spnDialysateMin: QtWidgets.QSpinBox
- spnDialysateMax: QtWidgets.QSpinBox
- spnArterialLimitLow: QtWidgets.QSpinBox
- spnArterialLimitHigh: QtWidgets.QSpinBox
- spnVenousLimitLow: QtWidgets.QSpinBox
- spnVenousLimitHigh: QtWidgets.QSpinBox
- # combobox
- cmbSalineAcceptTarget: QtWidgets.QComboBox
- # sliders
- sldSalineTarget: QtWidgets.QSlider
- sldSalineCumulative: QtWidgets.QSlider
- sldSalineVolume: QtWidgets.QSlider
- sldUfVolume: QtWidgets.QSlider
- sldArterialValue: QtWidgets.QSlider
- sldVenousValue: QtWidgets.QSlider
- sldDurationValue: QtWidgets.QSlider
- # tables
- tblSalineSubMode: QtWidgets.QTableWidget
- tblSalineUFStates: QtWidgets.QTableWidget
- tblSalineSalineStates: QtWidgets.QTableWidget
- # static class variables
- saline_requested_state: txStates
+ mdiArea: QtWidgets.QMdiArea
- def __init__(self):
- super().__init__(Simulator.ui_file_name)
- self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IDLE
- self.initialize()
+ obj_ultrafiltration: Ultrafiltration
+ sub_ultrafiltration: QtWidgets.QMdiSubWindow
+ wgt_ultrafiltration: QtWidgets.QWidget
- def setup_ranges(self):
- """
- sets up the treatment ranges timer and 1 sec interval
- :return: none
- """
- self.spnDurationMin = self.find_spinbox('spnDurationMin')
- self.spnDurationMax = self.find_spinbox('spnDurationMax')
- self.sldDurationValue = self.find_slider('sldDurationValue')
- self.spnUFVolumeMin = self.find_spinbox('spnUFVolumeMin')
- self.spnUFVolumeMax = self.find_spinbox('spnUFVolumeMax')
- self.spnDialysateMin = self.find_spinbox('spnDialysateMin')
- self.spnDialysateMax = self.find_spinbox('spnDialysateMax')
- self.chkRangesBroadcast = self.find_checkox('chkRangesBroadcast')
- self.timer = QTimer()
- self.timer.start(1000)
- self.timer.timeout.connect(self.do_ranges_data)
+ obj_inlinebloodpressures: InlineBloodPressures
+ sub_inlinebloodpressures: QtWidgets.QMdiSubWindow
+ wgt_inlinebloodpressures: QtWidgets.QWidget
- self.sldDurationValue.valueChanged.connect(self.do_duration_data)
+ obj_salinebolus: SalineBolus
+ sub_salinebolus: QtWidgets.QMdiSubWindow
+ wgt_salinebolus: QtWidgets.QWidget
- def setup_uf_adjustment(self):
- """
- sets up the treatment Ultrafiltration adjustment GUI section
- :return: none
- """
- self.btnUfPauseAccept = self.find_button('btnUfPauseAccept')
- self.btnUfPauseReject = self.find_button('btnUfPauseReject')
- self.btnUfResumeAccept = self.find_button('btnUfResumeAccept')
- self.btnUfResumeReject = self.find_button('btnUfResumeReject')
- self.btnUfEditAccept = self.find_button('btnUfEditAccept')
- self.btnUfEditReject = self.find_button('btnUfEditReject')
- self.lblUfPauseAction = self.find_label('lblUfPauseAction')
- self.lblUfResumeAction = self.find_label('lblUfResumeAction')
- self.lblUfEditAction = self.find_label('lblUfEditAction')
- self.spnUfPauseRejectReason = self.find_spinbox('spnUfPauseRejectReason')
- self.spnUfResumeRejectReason = self.find_spinbox('spnUfResumeRejectReason')
- self.spnUfEditRejectReason = self.find_spinbox('spnUfEditRejectReason')
- self.sldUfVolume = self.find_slider('sldUfVolume')
- self.btnUfPauseAccept.clicked.connect(self.do_uf_pause_accept)
- self.btnUfPauseReject.clicked.connect(self.do_uf_pause_reject)
- self.btnUfResumeAccept.clicked.connect(self.do_uf_resume_accept)
- self.btnUfResumeReject.clicked.connect(self.do_uf_resume_reject)
- self.btnUfEditAccept.clicked.connect(self.do_uf_edit_accept)
- self.btnUfEditReject.clicked.connect(self.do_uf_edit_reject)
- self.sldUfVolume.valueChanged.connect(self.do_uf_volume_data)
+ obj_treatmentstates: TreatmentStates
+ sub_treatmentstates: QtWidgets.QMdiSubWindow
+ wgt_treatmentstates: QtWidgets.QWidget
- def setup_saline_adjustment(self):
- """
- sets up the treatment saline bolus adjustment GUI section
- :return: none
- """
- self.btnSalineAccept = self.find_button('btnSalineAccept')
- self.btnSalineReject = self.find_button('btnSalineReject')
- self.lblSalineAction = self.find_label('lblSalineAction')
- self.spnSalineRejectReason = self.find_spinbox('spnSalineRejectReason')
- self.cmbSalineAcceptTarget = self.find_combobox('cmbSalineAcceptTarget')
- self.btnSalineAccept.clicked.connect(self.do_sb_accept)
- self.btnSalineReject.clicked.connect(self.do_sb_reject)
+ obj_treatmentranges: TreatmentRanges
+ sub_treatmentranges: QtWidgets.QMdiSubWindow
+ wgt_treatmentranges: QtWidgets.QWidget
- def setup_saline_data(self):
- """
- sets up the treatment saline bolus data sender GUI section
- :return: none
- """
- self.sldSalineTarget = self.find_slider('sldSalineTarget')
- self.sldSalineCumulative = self.find_slider('sldSalineCumulative')
- self.sldSalineVolume = self.find_slider('sldSalineVolume')
- self.sldSalineTarget.valueChanged.connect(self.do_saline_data)
- self.sldSalineCumulative.valueChanged.connect(self.do_saline_data)
- self.sldSalineVolume.valueChanged.connect(self.do_saline_data)
+ def __init__(self):
+ super().__init__("simulator.ui")
+ self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IDLE
+ self.initialize()
+ self.mdiArea = self.find_widget(QtWidgets.QMdiArea, 'mdiArea')
- def setup_treatment_states(self):
- """
- sets up the treatment saline bolus states GUI section
- :return: none
- """
- self.tblSalineSubMode = self.find_table_widget('tblSalineSubMode')
- self.tblSalineUFStates = self.find_table_widget('tblSalineUFStates')
- self.tblSalineSalineStates = self.find_table_widget('tblSalineSalineStates')
- self.tblSalineSubMode.setCurrentCell(0, 0)
- self.tblSalineUFStates.setCurrentCell(0, 0)
- self.tblSalineSalineStates.setCurrentCell(0, 0)
- self.tblSalineSubMode.cellClicked.connect(self.do_saline_saline_state)
- self.tblSalineUFStates.cellClicked.connect(self.do_saline_saline_state)
- self.tblSalineSalineStates.cellClicked.connect(self.do_saline_saline_state)
+ # ultrafiltration
+ self.obj_ultrafiltration = Ultrafiltration()
+ self.wgt_ultrafiltration = self.obj_ultrafiltration.window
+ self.sub_ultrafiltration = self.mdiArea.addSubWindow(self.wgt_ultrafiltration)
- def setup_pressures_limits(self):
- """
- sets up the treatment pressures
- :return: none
- """
- self.lblArterialTitle = self.find_label('lblArterialTitle')
- self.lblVenousTitle = self.find_label('lblVenousTitle')
- self.lblArterialLimitLow = self.find_label('lblArterialLimitLow')
- self.lblArterialLimitHigh = self.find_label('lblArterialLimitHigh')
- self.lblVenousLimitLow = self.find_label('lblVenousLimitLow')
- self.lblVenousLimitHigh = self.find_label('lblVenousLimitHigh')
- self.lblAVPressuresAction = self.find_label('lblAVPressuresAction')
+ self.obj_inlinebloodpressures = InlineBloodPressures()
+ self.wgt_inlinebloodpressures = self.obj_inlinebloodpressures.window
+ self.sub_inlinebloodpressures = self.mdiArea.addSubWindow(self.wgt_inlinebloodpressures)
- self.btnAVPressuresAccept = self.find_button('btnAVPressuresAccept')
- self.btnAVPressuresReject = self.find_button('btnAVPressuresReject')
+ self.obj_salinebolus = SalineBolus()
+ self.wgt_salinebolus = self.obj_salinebolus.window
+ self.sub_salinebolus = self.mdiArea.addSubWindow(self.wgt_salinebolus)
- self.spnArterialLimitLow = self.find_spinbox('spnArterialLimitLow')
- self.spnArterialLimitHigh = self.find_spinbox('spnArterialLimitHigh')
- self.spnVenousLimitLow = self.find_spinbox('spnVenousLimitLow')
- self.spnVenousLimitHigh = self.find_spinbox('spnVenousLimitHigh')
- self.spnAVPressuresRejectReason = self.find_spinbox('spnAVPressuresRejectReason')
+ self.obj_treatmentstates = TreatmentStates()
+ self.wgt_treatmentstates = self.obj_treatmentstates.window
+ self.sub_treatmentstates = self.mdiArea.addSubWindow(self.wgt_treatmentstates)
- self.sldArterialValue = self.find_slider('sldArterialValue')
- self.sldVenousValue = self.find_slider('sldVenousValue')
+ self.obj_treatmentranges = TreatmentRanges()
+ self.wgt_treatmentranges = self.obj_treatmentranges.window
+ self.sub_treatmentranges = self.mdiArea.addSubWindow(self.wgt_treatmentranges)
- self.lblArterialTitle.setText(
- f"{self.lblArterialTitle.text()} [{Ranges.ARTERIAL_PRESSURE_MINIMUM},{Ranges.ARTERIAL_PRESSURE_MAXIMUM}]"
- )
- self.lblVenousTitle.setText(
- f"{self.lblVenousTitle.text()} [{Ranges.VENOUS_PRESSURE_MINIMUM},{Ranges.VENOUS_PRESSURE_MAXIMUM}]"
- )
-
- self.lblArterialLimitLow.setText(f"{Ranges.ARTERIAL_PRESSURE_LOW_MIN}\n{Ranges.ARTERIAL_PRESSURE_LOW_MAX}")
- self.lblArterialLimitHigh.setText(f"{Ranges.ARTERIAL_PRESSURE_HIGH_MIN}\n{Ranges.ARTERIAL_PRESSURE_HIGH_MAX}")
- self.lblVenousLimitLow.setText(f"{Ranges.VENOUS_PRESSURE_LOW_MIN}\n{Ranges.VENOUS_PRESSURE_LOW_MAX}")
- self.lblVenousLimitHigh.setText(f"{Ranges.VENOUS_PRESSURE_HIGH_MIN}\n{Ranges.VENOUS_PRESSURE_HIGH_MAX}")
-
- # sending the CANBus message when slider value changed
- self.sldArterialValue.valueChanged.connect(self.do_pressures_data)
- self.sldVenousValue.valueChanged.connect(self.do_pressures_data)
-
- # sending the CANBus message when accepted or rejected
- self.btnAVPressuresAccept.clicked.connect(self.do_pressures_limits_accept)
- self.btnAVPressuresReject.clicked.connect(self.do_pressures_limits_reject)
-
- self.sldArterialValue.setMinimum(Ranges.ARTERIAL_PRESSURE_MINIMUM)
- self.sldArterialValue.setMaximum(Ranges.ARTERIAL_PRESSURE_MAXIMUM)
- self.sldArterialValue.setValue(0)
- self.sldVenousValue.setMinimum(Ranges.VENOUS_PRESSURE_MINIMUM)
- self.sldVenousValue.setMaximum(Ranges.VENOUS_PRESSURE_MAXIMUM)
- self.sldVenousValue.setValue(0)
-
- self.spnArterialLimitLow.setMinimum(Ranges.ARTERIAL_PRESSURE_LOW_MIN)
- self.spnArterialLimitLow.setMaximum(Ranges.ARTERIAL_PRESSURE_LOW_MAX)
- self.spnArterialLimitLow.setValue(Ranges.ARTERIAL_PRESSURE_LOW_DEF)
-
- self.spnArterialLimitHigh.setMinimum(Ranges.ARTERIAL_PRESSURE_HIGH_MIN)
- self.spnArterialLimitHigh.setMaximum(Ranges.ARTERIAL_PRESSURE_HIGH_MAX)
- self.spnArterialLimitHigh.setValue(Ranges.ARTERIAL_PRESSURE_HIGH_DEF)
-
- self.spnVenousLimitLow.setMinimum(Ranges.VENOUS_PRESSURE_LOW_MIN)
- self.spnVenousLimitLow.setMaximum(Ranges.VENOUS_PRESSURE_LOW_MAX)
- self.spnVenousLimitLow.setValue(Ranges.VENOUS_PRESSURE_LOW_DEF)
-
- self.spnVenousLimitHigh.setMinimum(Ranges.VENOUS_PRESSURE_HIGH_MIN)
- self.spnVenousLimitHigh.setMaximum(Ranges.VENOUS_PRESSURE_HIGH_MAX)
- self.spnVenousLimitHigh.setValue(Ranges.VENOUS_PRESSURE_HIGH_DEF)
-
- @Slot()
- def do_duration_data(self, value):
- """
- sends the duration message
- :return: none
- """
- # denaliMessages.setTreatmentTime(self.spnDurationMax.value() * 60, value)
- denaliMessages.setTreatmentHeparinData(value)
-
- @Slot()
- def do_sb_accept(self):
- """
- the slot for accept saline bolus button
- :return: none
- """
- # toggle the saline requested state
- if self.saline_requested_state == txStates.SALINE_BOLUS_STATE_IN_PROGRESS:
- self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IDLE
- else:
- self.saline_requested_state = txStates.SALINE_BOLUS_STATE_IN_PROGRESS
-
- target = self.cmbSalineAcceptTarget.currentText()
- denaliMessages.setSalineBolusResponse(True, 0, target, self.saline_requested_state)
- self.lblSalineAction.setText('Accepted ' + target)
-
- @Slot()
- def do_sb_reject(self):
- """
- the slot for accept saline bolus button
- :return: none
- """
- reason = self.spnSalineRejectReason.value()
- denaliMessages.setSalineBolusResponse(False, reason, 0, self.saline_requested_state)
- self.lblSalineAction.setText('Rejected ' + "{}".format(reason))
-
- @Slot()
- def do_uf_pause_accept(self):
- """
- the slot for accept ultrafiltration pause button
- :return: none
- """
- denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
- EResponse.Accepted, 0, txStates.UF_PAUSED_STATE)
- self.lblUfPauseAction.setText('Accepted ')
-
- @Slot()
- def do_uf_pause_reject(self):
- """
- the slot for reject ultrafiltration pause button
- :return: none
- """
- reason = self.spnUfPauseRejectReason.value()
- denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
- EResponse.Rejected, reason, txStates.UF_RUNNING_STATE)
- self.lblUfPauseAction.setText('Rejected ' + "{}".format(reason))
-
- @Slot()
- def do_uf_resume_accept(self):
- """
- the slot for accept ultrafiltration resume accept
- :return: none
- """
- denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
- EResponse.Accepted, 0, txStates.UF_RUNNING_STATE)
- self.lblUfResumeAction.setText('Accepted ')
-
- @Slot()
- def do_uf_resume_reject(self):
- """
- the slot for reject ultrafiltration resume button
- :return: none
- """
- reason = self.spnUfResumeRejectReason.value()
- denaliMessages.setTreatmentAdjustUltrafiltrationStateResponse(
- EResponse.Rejected, reason, txStates.UF_PAUSED_STATE)
- self.lblUfResumeAction.setText('Rejected ' + "{}".format(reason))
-
- @Slot()
- def do_uf_edit_accept(self):
- """
- the slot for accept ultrafiltration next button
- :return: none
- """
- denaliMessages.setTreatmentAdjustUltrafiltrationEditResponse(
- EResponse.Accepted, 0, 2500, 60, 0, 10, 0, 10)
- self.lblUfEditAction.setText('Accepted ')
-
- @Slot()
- def do_uf_edit_reject(self):
- """
- the slot for reject ultrafiltration next button
- :return: none
- """
- reason = self.spnUfEditRejectReason.value()
- denaliMessages.setTreatmentAdjustUltrafiltrationEditResponse(
- EResponse.Rejected, reason, 2500, 60, 0, 10, 0, 10)
- self.lblUfEditAction.setText('Rejected ' + "{}".format(reason))
-
- @Slot()
- def do_saline_saline_state(self):
- """
- the slot for saline bolus state change
- :return: none
- """
- sub_mode = self.tblSalineSubMode.verticalHeaderItem(self.tblSalineSubMode.currentRow()).text()
- uf_state = self.tblSalineUFStates.verticalHeaderItem(self.tblSalineUFStates.currentRow()).text()
- saline = self.tblSalineSalineStates.verticalHeaderItem(self.tblSalineSalineStates.currentRow()).text()
- denaliMessages.setTreatmentStatesData(sub_mode, uf_state, saline)
-
- @Slot()
- def do_saline_data(self):
- """
- the slot which is called to send the saline bolus data
- by calling the denaliMessage API setTreatmentSalineBolusData
- :return: none
- """
- denaliMessages.setTreatmentSalineBolusData(self.sldSalineTarget.value(),
- self.sldSalineCumulative.value(),
- self.sldSalineVolume.value())
-
- @Slot()
- def do_uf_volume_data(self):
- """
- sends the ultrafiltration delivered volume message
- :return: none
- """
- denaliMessages.setTreatmentUltrafiltration(self.sldUfVolume.value(), 0, 0, 0, 0, 0, 0)
-
- @Slot()
- def do_ranges_data(self):
- """
- sends the treatment ranges message with given value on the screen
- :return: none
- """
- if self.chkRangesBroadcast.isChecked():
- duration_min = self.spnDurationMin.value()
- duration_max = self.spnDurationMax.value()
- self.sldDurationValue.setMinimum(duration_min * 60 )
- self.sldDurationValue.setMaximum(duration_max * 60 )
-
- denaliMessages.setTreatmentParamRanges(
- duration_min,
- duration_max,
- self.spnUFVolumeMin.value(),
- self.spnUFVolumeMax.value(),
- self.spnDialysateMin.value(),
- self.spnDialysateMax.value()
- )
-
- @Slot()
- def do_pressures_data(self):
- """
- sends the pressures values message with given value on the screen
- :return: none
- """
- denaliMessages.setPressureOcclusionData(
- self.sldArterialValue.value(),
- self.sldVenousValue.value(),
- 0, 0, 0
- )
-
- @Slot()
- def do_pressures_limits_accept(self):
- """
- sends the pressures values message with given value on the screen
- :return: none
- """
- # vAccepted, vReason, vArterialLow, vArterialHigh, vVenousLow, vVenousHigh
- denaliMessages.sendTreatmentAdjustPressuresLimitsResponse(
- EResponse.Accepted, 0,
- self.spnArterialLimitLow.value(),
- self.spnArterialLimitHigh.value(),
- self.spnVenousLimitLow.value(),
- self.spnVenousLimitHigh.value()
- )
- self.lblAVPressuresAction.setText('Accepted ')
-
- @Slot()
- def do_pressures_limits_reject(self):
- """
- sends the pressures values message with given value on the screen
- :return: none
- """
- reason = self.spnAVPressuresRejectReason.value()
- denaliMessages.sendTreatmentAdjustPressuresLimitsResponse(
- EResponse.Rejected, reason,
- self.spnArterialLimitLow.value(),
- self.spnArterialLimitHigh.value(),
- self.spnVenousLimitLow.value(),
- self.spnVenousLimitHigh.value()
- )
- self.lblAVPressuresAction.setText('Rejected ' + "{}".format(reason))
-
def initialize(self):
"""
initializes the class by calling it's initializer methods to make objects ready
:return: none
"""
- self.setup_ranges()
- self.setup_saline_adjustment()
- self.setup_saline_data()
- self.setup_uf_adjustment()
- self.setup_treatment_states()
- self.setup_pressures_limits()
+ pass
def main():
@@ -563,15 +91,15 @@
utils.tstStart(__file__)
# create qt application
- QtWidgets.QApplication(sys.argv)
+ app = QtWidgets.QApplication(sys.argv)
simulator = Simulator()
simulator.show()
utils.tstDone()
# start qt application main loop
- sys.exit(qApp.exec_())
+ sys.exit(app.exec_())
if __name__ == "__main__":
Index: simulator/runtimewidget.py
===================================================================
diff -u
--- simulator/runtimewidget.py (revision 0)
+++ simulator/runtimewidget.py (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,117 @@
+"""
+ find and loads the ui objects
+"""
+from PySide2.QtUiTools import QUiLoader
+from PySide2.QtCore import QFile
+from PySide2 import QtWidgets
+
+
+class RunTimeWidget:
+ """
+ the parent class of all the run time loadable widgets
+ """
+
+ loader: QUiLoader
+ window: QtWidgets.QWidget
+
+ def __init__(self, ui_name: str):
+ self.ui_name = ui_name
+ self.loader = QUiLoader()
+ self.__load_ui()
+
+ def __load_ui(self):
+ """
+ loads the ui file of the GUI at run time
+ :return: none
+ """
+ ui_file = QFile(self.ui_name)
+ ui_file.open(QFile.ReadOnly)
+ self.window = self.loader.load(ui_file)
+ # assert if the ui file can't be loaded
+ error = self.loader.errorString()
+ assert len(error) == 0, error
+ ui_file.close()
+
+ def show(self):
+ """
+ shows the main container window
+ :return: none
+ """
+ self.window.show()
+
+ def find_widget(self, child_type, child_name: str) -> QtWidgets.QWidget:
+ """
+ finds a child in the loaded ui and returns the reference to it if found
+ otherwise quits the application
+ :param child_type: (var) type of the child
+ :param child_name: (str) name of the child
+ :return: (QtWidgets.QWidget) reference to the child
+ """
+ child: QtWidgets.QWidget = self.window.findChild(child_type, child_name)
+ assert child is not None, "child name '{}' with type '{}' can't be found.".format(child_name, child_type)
+ return child
+
+ def find_label(self, name: str) -> QtWidgets.QLabel:
+ """
+ convenient method of find_child for QLabel
+ :param name: (str) name of the QLabel Object
+ :return: (QLabel) reference to the QLabel
+ """
+ child = self.find_widget(QtWidgets.QLabel, name)
+ return child
+
+ def find_button(self, name: str) -> QtWidgets.QPushButton:
+ """
+ convenient method of find_child for QPushButton
+ :param name: (str) name of the QPushButton Object
+ :return: (QPushButton) reference to the QPushButton
+ """
+ child = self.find_widget(QtWidgets.QPushButton, name)
+ return child
+
+ def find_combobox(self, name: str) -> QtWidgets.QComboBox:
+ """
+ convenient method of find_child for QComboBox
+ :param name: (str) name of the QComboBox Object
+ :return: (QComboBox) reference to the QComboBox
+ """
+ child = self.find_widget(QtWidgets.QComboBox, name)
+ return child
+
+ def find_checkox(self, name: str) -> QtWidgets.QCheckBox:
+ """
+ convenient method of find_child for QCheckBox
+ :param name: (str) name of the QCheckBox Object
+ :return: (QCheckBox) reference to the QComboBox
+ """
+ child = self.find_widget(QtWidgets.QCheckBox, name)
+ return child
+
+ def find_spinbox(self, name: str) -> QtWidgets.QSpinBox:
+ """
+ convenient method of find_child for QSpinBox
+ :param name: (str) name of the QSpinBox Object
+ :return: (QSpinBox) reference to the QSpinBox
+ """
+ child = self.find_widget(QtWidgets.QSpinBox, name)
+ return child
+
+ def find_slider(self, name: str) -> QtWidgets.QSlider:
+ """
+ convenient method of find_child for QSlider
+ :param name: (str) name of the QSlider Object
+ :return: (QSlider) reference to the QSlider
+ """
+ child = self.find_widget(QtWidgets.QSlider, name)
+ return child
+
+ def find_table_widget(self, name: str) -> QtWidgets.QTableWidget:
+ """
+ convenient method of find_child for QTableWidget
+ :param name: (str) name of the QTableWidget Object
+ :return: (QTableWidget) reference to the QTableWidget
+ """
+ child: QtWidgets.QTableWidget = self.find_widget(QtWidgets.QTableWidget, name)
+ return child
+
+
Index: simulator/simulator.ui
===================================================================
diff -u
--- simulator/simulator.ui (revision 0)
+++ simulator/simulator.ui (revision 6a5824cc32716947513b4a5adca54a9e513c0c5c)
@@ -0,0 +1,138 @@
+
+
+ MainWindow
+
+
+
+ 0
+ 0
+ 1294
+ 812
+
+
+
+ MainWindow
+
+
+
+
+
+ 9
+ 9
+ 1276
+ 750
+
+
+
+
+
+
+
+
+ Cascade
+
+
+
+
+ true
+
+
+ true
+
+
+ Treatment States
+
+
+
+
+ true
+
+
+ true
+
+
+ Treatment Ranges
+
+
+
+
+ true
+
+
+ true
+
+
+ Ultrafiltration
+
+
+
+
+ true
+
+
+ true
+
+
+ Saline Bolus
+
+
+
+
+ true
+
+
+ true
+
+
+ In-Line Blood Pressures
+
+
+
+
+
+
+ actionCascade
+ triggered()
+ mdiArea
+ cascadeSubWindows()
+
+
+ -1
+ -1
+
+
+ 600
+ 409
+
+
+
+
+