diff --git a/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py b/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py index 0033aa5..342e206 100644 --- a/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py +++ b/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py @@ -25,7 +25,6 @@ from qtpy.QtWidgets import ( QTextEdit, QTabWidget, ) -import time logger = bec_logger.logger CAMERA = ("cam_xeye", "image") @@ -146,6 +145,7 @@ class XRayEye(BECWidget, QWidget): def __init__(self, parent=None, **kwargs): super().__init__(parent=parent, **kwargs) + self._connected_motor = None self.get_bec_shortcuts() self._init_ui() @@ -357,13 +357,14 @@ class XRayEye(BECWidget, QWidget): self.on_tomo_angle_readback, MessageEndpoints.device_readback(motor) ) logger.info(f"Successfully connected to {motor}") + self._connected_motor = motor ################################################################################ # Properties ported from the original OmnyAlignment, can be adjusted as needed ################################################################################ @SafeProperty(str) def user_message(self): - return self.message_line_edit.text() + return self.message_line_edit.toPlainText() @user_message.setter def user_message(self, message: str): @@ -520,44 +521,50 @@ class XRayEye(BECWidget, QWidget): @SafeSlot() def submit(self): """Execute submit action by submit button.""" - print("submit pushed") self.submit_button.blockSignals(True) - if self.roi_manager.single_active_roi is None: - logger.warning("No active ROI") - return - roi_coordinates = self.roi_manager.single_active_roi.get_coordinates() - roi_center_x = roi_coordinates["center_x"] - roi_center_y = roi_coordinates["center_y"] - # Case of rectangular ROI - if isinstance(self.roi_manager.single_active_roi, RectangularROI): - roi_width = roi_coordinates["width"] - roi_height = roi_coordinates["height"] - elif isinstance(self.roi_manager.single_active_roi, CircularROI): - roi_width = roi_coordinates["diameter"] - roi_height = roi_coordinates["radius"] - else: - logger.warning("Unsupported ROI type for submit action.") - return + try: + if self.roi_manager.single_active_roi is None: + logger.warning("No active ROI") + return + roi_coordinates = self.roi_manager.single_active_roi.get_coordinates() + roi_center_x = roi_coordinates["center_x"] + roi_center_y = roi_coordinates["center_y"] + # Case of rectangular ROI + if isinstance(self.roi_manager.single_active_roi, RectangularROI): + roi_width = roi_coordinates["width"] + roi_height = roi_coordinates["height"] + elif isinstance(self.roi_manager.single_active_roi, CircularROI): + roi_width = roi_coordinates["diameter"] + roi_height = roi_coordinates["radius"] + else: + logger.warning("Unsupported ROI type for submit action.") + return - print( - f"current roi: x:{roi_center_x}, y:{roi_center_y}, w:{roi_width},h:{roi_height}" - ) # TODO remove when will be not needed for debugging - # submit roi coordinates - step = int(self.dev.omny_xray_gui.step.read().get("omny_xray_gui_step").get("value")) + # submit roi coordinates + step = int(self.dev.omny_xray_gui.step.read().get("omny_xray_gui_step").get("value")) - xval_x = getattr(self.dev.omny_xray_gui, f"xval_x_{step}").set(roi_center_x) - xval_y = getattr(self.dev.omny_xray_gui, f"yval_y_{step}").set(roi_center_y) - width_x = getattr(self.dev.omny_xray_gui, f"width_x_{step}").set(roi_width) - width_y = getattr(self.dev.omny_xray_gui, f"width_y_{step}").set(roi_height) - self.dev.omny_xray_gui.submit.set(1) - print("submit done") - self.submit_button.blockSignals(False) + getattr(self.dev.omny_xray_gui, f"xval_x_{step}").set(roi_center_x) + getattr(self.dev.omny_xray_gui, f"yval_y_{step}").set(roi_center_y) + getattr(self.dev.omny_xray_gui, f"width_x_{step}").set(roi_width) + getattr(self.dev.omny_xray_gui, f"width_y_{step}").set(roi_height) + self.dev.omny_xray_gui.submit.set(1) + finally: + self.submit_button.blockSignals(False) def cleanup(self): """Cleanup connections on widget close -> disconnect slots and stop live mode of camera.""" + if self._connected_motor is not None: + self.bec_dispatcher.disconnect_slot( + self.on_tomo_angle_readback, MessageEndpoints.device_readback(self._connected_motor) + ) + self.bec_dispatcher.disconnect_slot( - self.device_updates, MessageEndpoints.device_readback("omny_xray_gui") + self.getting_shutter_status, MessageEndpoints.device_readback("omnyfsh") ) + self.bec_dispatcher.disconnect_slot( + self.getting_camera_status, MessageEndpoints.device_read_configuration(CAMERA[0]) + ) + getattr(self.dev, CAMERA[0]).stop_live_mode() super().cleanup()