Index: simulator/plugins/alarms/loader.py =================================================================== diff -u -r313132b681260cc0761c65d46200adb40b72f478 -r80e41aa60d1fe7534b4c082f087f708afb89c38d --- simulator/plugins/alarms/loader.py (.../loader.py) (revision 313132b681260cc0761c65d46200adb40b72f478) +++ simulator/plugins/alarms/loader.py (.../loader.py) (revision 80e41aa60d1fe7534b4c082f087f708afb89c38d) @@ -6,11 +6,11 @@ from datetime import datetime # Qt from PySide2 import QtWidgets -from PySide2.QtCore import Slot, QObject, Qt +from PySide2.QtCore import Slot, QTimer, Qt # parent from simulator.dynamicloader import DynamicLoader # hd Simulator -from dialin.ui.hd_simulator import HDSimulator +from simulator.interface import SimulationInterface # plugin specific from dialin.common.prs_defs import AlarmPriority @@ -21,6 +21,7 @@ """ canMaximize = True + timer: QTimer btnTrigger: QtWidgets.QPushButton btnClear: QtWidgets.QPushButton @@ -40,6 +41,25 @@ lstFlags: QtWidgets.QListWidget tblTriggeredIDs: QtWidgets.QTableWidget + cbFieldDescriptor1: QtWidgets.QComboBox + cbFieldDescriptor2: QtWidgets.QComboBox + leDataField1: QtWidgets.QLineEdit + leDataField2: QtWidgets.QLineEdit + + btnAccept: QtWidgets.QPushButton + btnReject: QtWidgets.QPushButton + spnReason: QtWidgets.QSpinBox + spnP0: QtWidgets.QSpinBox + spnP1: QtWidgets.QSpinBox + spnP2: QtWidgets.QSpinBox + spnP3: QtWidgets.QSpinBox + spnP4: QtWidgets.QSpinBox + spnP5: QtWidgets.QSpinBox + spnP6: QtWidgets.QSpinBox + spnP7: QtWidgets.QSpinBox + spnP8: QtWidgets.QSpinBox + spnP9: QtWidgets.QSpinBox + priority = AlarmPriority.ALARM_HIGH flags = 0 @@ -50,6 +70,9 @@ eColFlags = 4 eColMessage = 5 eColCount = 6 + + eRowMute = 9 + # column: (width, text) fixedLabels = { eColTime: (70, 'Time'), @@ -73,10 +96,8 @@ AlarmPriority.ALARM_HIGH: 'rgb(239, 41, 41)' } - def __init__(self, hd_simulator: HDSimulator): - super().__init__(os.path.dirname(__file__), hd_simulator) - self.alarm = hd_simulator.alarm() - print(" ---------- ", self.hd_simulator) + def __init__(self, interface: SimulationInterface): + super().__init__(os.path.dirname(__file__), interface) def _init_loader(self): """ @@ -101,11 +122,33 @@ self.spnAlarmID = self.find_spinbox('spnAlarmID') self.tblTriggeredIDs = self.find_table_widget('tblTriggeredIDs') + self.cbFieldDescriptor1 = self.find_combobox('cbFieldDescriptor1') + self.cbFieldDescriptor2 = self.find_combobox('cbFieldDescriptor2') + self.leDataField1 = self.find_line_edit('leDataField1') + self.leDataField2 = self.find_line_edit('leDataField2') + + self.btnAccept = self.find_button('btnAccept') + self.btnReject = self.find_button('btnReject') + self.spnReason = self.find_spinbox('spnReason') + self.spnP0 = self.find_spinbox('spnP0') + self.spnP1 = self.find_spinbox('spnP1') + self.spnP2 = self.find_spinbox('spnP2') + self.spnP3 = self.find_spinbox('spnP3') + self.spnP4 = self.find_spinbox('spnP4') + self.spnP5 = self.find_spinbox('spnP5') + self.spnP6 = self.find_spinbox('spnP6') + self.spnP7 = self.find_spinbox('spnP7') + self.spnP8 = self.find_spinbox('spnP8') + self.spnP9 = self.find_spinbox('spnP9') + def _init_widgets(self): """ initializes the widgets' properties :return: none """ + self.timer = QTimer() + self.timer.start(1000) + self.__populate_status_ids_columns() self.rdoPriorityNone.setStyleSheet('background-color: {};'.format(self.styles[AlarmPriority.ALARM_NONE])) self.rdoPriorityLow.setStyleSheet('background-color: {};'.format(self.styles[AlarmPriority.ALARM_LOW])) @@ -120,6 +163,8 @@ initializes the widgets connections :return: """ + self.timer.timeout.connect(self.do_timer_timeout) + self.btnTrigger.clicked.connect(self.do_trigger) self.btnClear.clicked.connect(self.do_clear) self.btnCondition.clicked.connect(self.do_clear_condition) @@ -132,6 +177,8 @@ self.rdoPriorityLow.toggled.connect(self.do_set_priority_low) self.rdoPriorityMed.toggled.connect(self.do_set_priority_med) self.rdoPriorityHigh.toggled.connect(self.do_set_priority_high) + self.btnAccept.clicked.connect(self.do_active_list_accept) + self.btnReject.clicked.connect(self.do_active_list_reject) def set_flags(self): """ @@ -152,6 +199,14 @@ self.flags &= ~bit @Slot() + def do_timer_timeout(self) -> None: + """ + one second timer to send the alarm status at all the time like what FW does but in lower frequency + :return: None + """ + # self.do_send() + + @Slot() def do_set_priority_none(self): """ the slot for priority buttons @@ -194,7 +249,7 @@ mute_out = self.spnMuteTimeout.value() if alarm_id >= 0: self.set_flags() - self.alarm.cmd_activate_alarm_id( + self.interface.alarm.cmd_activate_alarm_id( self.priority, alarm_id, escalate, @@ -210,8 +265,20 @@ :return: none """ alarm_id = self.spnAlarmID.value() + field_descriptor_1 = self.cbFieldDescriptor1.currentIndex() + data_field_1 = self.leDataField1.text() + if data_field_1 == "": + data_field_1 = "0" + field_descriptor_2 = self.cbFieldDescriptor2.currentIndex() + data_field_2 = self.leDataField2.text() + if data_field_2 == "": + data_field_2 = "0" + if alarm_id: - self.alarm.cmd_set_alarm_triggered(alarm_id) + self.interface.alarm.cmd_set_alarm_triggered( + alarm_id, + field_descriptor_1, data_field_1, + field_descriptor_2, data_field_2) self.__append_triggered_row(alarm_id) @Slot() @@ -221,7 +288,7 @@ :return: none """ [alarm_id, row] = self.alarm_id() - self.alarm.cmd_set_alarm_cleared(alarm_id) + self.interface.alarm.cmd_set_alarm_cleared(alarm_id) self.tblTriggeredIDs.removeRow(row) @Slot() @@ -231,7 +298,7 @@ :return: none """ [alarm_id, row] = self.alarm_id() - self.alarm.cmd_set_alarm_cleared_condition(alarm_id) + self.interface.alarm.cmd_set_alarm_cleared_condition(alarm_id) self.tblTriggeredIDs.item(row, self.eColID).setBackground(self.colors[AlarmPriority.ALARM_NONE]) self.tblTriggeredIDs.item(row, self.eColID).setSelected(False) @@ -241,17 +308,48 @@ the slot for mute button :return: none """ - print(" --- ", QObject.sender(self).objectName()) + print(self.lstFlags.item(self.eRowMute).checkState()) + if self.lstFlags.item(self.eRowMute).checkState() == Qt.CheckState.Unchecked: + self.lstFlags.item(self.eRowMute).setCheckState(Qt.CheckState.Checked) + else: + self.lstFlags.item(self.eRowMute).setCheckState(Qt.CheckState.Unchecked) + self.do_send() @Slot() + def do_active_list_accept(self): + """ + the slot for mute button + :return: none + """ + a0 = self.spnP0.value() + a1 = self.spnP1.value() + a2 = self.spnP2.value() + a3 = self.spnP3.value() + a4 = self.spnP4.value() + a5 = self.spnP5.value() + a6 = self.spnP6.value() + a7 = self.spnP7.value() + a8 = self.spnP8.value() + a9 = self.spnP9.value() + self.interface.alarm.cmd_send_active_list_response(True, 0, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) + + @Slot() + def do_active_list_reject(self): + """ + the slot for mute button + :return: none + """ + reason = self.spnReason.value() + self.interface.alarm.cmd_send_active_list_response(False, reason) + + @Slot() def on_status_ids_item_clicked(self, item: QtWidgets.QTableWidgetItem): """ slot to handle on item clicked :param item: the clicked item :return: None """ selected = item.isSelected() - self.btnMute.setEnabled(selected) @Slot() def on_trigger_ids_item_clicked(self, item: QtWidgets.QTableWidgetItem):