From ed4d79e0fd31e292d741883dcaf2fd1bd657560b Mon Sep 17 00:00:00 2001 From: appleb_m Date: Tue, 2 Dec 2025 15:48:22 +0100 Subject: [PATCH] GUI: added detector status to data colelciton panel --- .../panels/data_collection_settings.py | 49 ++++++++++++++++--- gui/src/aaregui/widgets/message_box.py | 25 +++++++++- 2 files changed, 66 insertions(+), 8 deletions(-) diff --git a/gui/src/aaregui/panels/data_collection_settings.py b/gui/src/aaregui/panels/data_collection_settings.py index 19057f45..70d2d0bc 100644 --- a/gui/src/aaregui/panels/data_collection_settings.py +++ b/gui/src/aaregui/panels/data_collection_settings.py @@ -6,7 +6,7 @@ from PySide6.QtWidgets import ( QGridLayout, QPushButton, QWidget, - QProgressBar, QMessageBox, + QProgressBar, QMessageBox, QLabel, ) from aaredaqlib.diffraction_geometry import DiffractionGeometry @@ -66,6 +66,14 @@ class DataCollectionSettings(QFrame): self.progress_bar.setStyleSheet("background-color: rgb(255, 255, 255);") v_layout.addWidget(self.progress_bar) + self.detector_state = QLabel(self) + self.detector_state.setText("Detector state: Idle") + v_layout.addWidget(self.detector_state) + + self.detector_message = QLabel(self) + self.detector_message.setText("Detector message: ''") + v_layout.addWidget(self.detector_message) + abort_button = QPushButton("Abort measurement", parent=self) abort_button.setStyleSheet("color: rgb(164, 0, 0);") abort_button.clicked.connect(self.cancel_button_clicked) @@ -103,6 +111,39 @@ class DataCollectionSettings(QFrame): jfjoch_status = s.jfjoch_status progress = getattr(jfjoch_status, "progress", None) + #states are Enum: "Idle" "Waiting" "Busy" "Error" "Not connected" + #message serverity is Enum: "success" "info" "warning" "error" + #messagge is string + #progress is float from 0 to 1 + + if (jfjoch_status.message_severity == "error" or jfjoch_status.state == "Error" + or jfjoch_status.state == "Not connected"): + self.detector_message.setStyleSheet("color: rgb(164, 0, 0);") + self.detector_state.setStyleSheet("color: rgb(164, 0, 0);") + elif jfjoch_status.message_severity == "warning": + self.detector_message.setStyleSheet("color: rgb(255, 165, 0);") + elif jfjoch_status.message_severity == "success": + self.detector_message.setStyleSheet("color: rgb(0, 128, 0);") + elif jfjoch_status.message_severity == "info": + self.detector_message.setStyleSheet("color: rgb(0, 0, 255);") + else: + self.detector_message.setStyleSheet("color: rgb(0, 0, 255);") + + if (jfjoch_status.state == "Busy" or + jfjoch_status.state == "Measuring" or jfjoch_status.state == "Pedestal"): + self.detector_state.setStyleSheet("color: rgb(255, 165, 0);") + elif jfjoch_status.state == "waiting": + self.detector_state.setStyleSheet("color: rgb(255, 165, 0);") + elif jfjoch_status.state == "Idle": + self.detector_state.setStyleSheet("color: rgb(0, 0, 255);") + self.progress_bar.setVisible(False) + else: + self.detector_state.setStyleSheet("color: rgb(0, 0, 255);") + logger.debug(f"unknown detector state {jfjoch_status.state}") + + self.detector_state.setText(f"Detector state: {jfjoch_status.state}") + self.detector_message.setText(f"Detector message: {jfjoch_status.message}") + if progress: if not self.progress_bar.isVisible(): self.progress_bar.setVisible(True) @@ -114,12 +155,6 @@ class DataCollectionSettings(QFrame): else: self.progress_bar.setVisible(False) - #states are Enum: "Idle" "Waiting" "Busy" "Error" "Not connected" - #message serverity is Enum: "success" "info" "warning" "error" - #messagge is string - #progress is float from 0 to 1 - if jfjoch_status.state == "Error": - QMessageBox.critical(self, "Error", jfjoch_status.message) @Slot(int) diff --git a/gui/src/aaregui/widgets/message_box.py b/gui/src/aaregui/widgets/message_box.py index a8134a20..400563ea 100644 --- a/gui/src/aaregui/widgets/message_box.py +++ b/gui/src/aaregui/widgets/message_box.py @@ -93,4 +93,27 @@ def ring_current_auto_check(parent, ring_current, check_func) -> bool: loop.exec() # returns as soon as box finishes without blocking UI processing of its signals result = box.result() - return result == QMessageBox.StandardButton.Yes \ No newline at end of file + return result == QMessageBox.StandardButton.Yes + +def detector_status_check(parent, jfjoch_status) -> bool: + if jfjoch_status.state == "Idle": + return True + elif jfjoch_status.state == "Inactive": + QMessageBox.warning(parent, "Detector Inactive", f"Please initialise detector from JFJoch Control Panel." + f"Message: {jfjoch_status.message}") + elif jfjoch_status.state == "Busy": + QMessageBox.warning(parent, "Detector busy", f"Dector in Busy State, please check JFJoch Control Panel.\n" + f" Detector Message: {jfjoch_status.message}") + elif jfjoch_status.state == "Measuring" or jfjoch_status.state == "Pedestal": + QMessageBox.warning(parent, "Detector measuring", f"Detector measuring, please wait.\n" + f"State:{jfjoch_status.state}\n" + f"Message: {jfjoch_status.message}") + elif jfjoch_status.state == "Error": + QMessageBox.critical(parent, "Detector error", f"Detector in Error State, please check JFJoch Control Panel.\n" + f"Detector status: {jfjoch_status.state}\n" + f"Message: {jfjoch_status.message}\n") + else: + QMessageBox.warning(parent, "unkwown state", f"State:{jfjoch_status.state}\n" + f"Message: {jfjoch_status.message}\n" + f"Please Check JFJoch Control Panel.") + return False \ No newline at end of file