diff --git a/bec_widgets/cli/client.py b/bec_widgets/cli/client.py index 608d5856..1aa691d0 100644 --- a/bec_widgets/cli/client.py +++ b/bec_widgets/cli/client.py @@ -1861,43 +1861,66 @@ class Ring(RPCBase): @rpc_call def set_value(self, value: "int | float"): """ - None + Set the value for the ring widget + + Args: + value(int | float): Value for the ring widget """ @rpc_call def set_color(self, color: "str | tuple"): """ - None + Set the color for the ring widget + + Args: + color(str | tuple): Color for the ring widget. Can be HEX code or tuple (R, G, B, A). """ @rpc_call def set_background(self, color: "str | tuple"): """ - None + Set the background color for the ring widget + + Args: + color(str | tuple): Background color for the ring widget. Can be HEX code or tuple (R, G, B, A). """ @rpc_call def set_line_width(self, width: "int"): """ - None + Set the line width for the ring widget + + Args: + width(int): Line width for the ring widget """ @rpc_call def set_min_max_values(self, min_value: "int | float", max_value: "int | float"): """ - None + Set the min and max values for the ring widget. + + Args: + min_value(int | float): Minimum value for the ring widget + max_value(int | float): Maximum value for the ring widget """ @rpc_call def set_start_angle(self, start_angle: "int"): """ - None + Set the start angle for the ring widget + + Args: + start_angle(int): Start angle for the ring widget in degrees """ @rpc_call def set_update(self, mode: "Literal['manual', 'scan', 'device']", device: "str" = None): """ - Set the update mode for the ring widget + Set the update mode for the ring widget. + Modes: + - "manual": Manual update mode, the value is set by the user. + - "scan": Update mode for the scan progress. The value is updated by the current scan progress. + - "device": Update mode for the device readback. The value is updated by the device readback. Take into account that user has to set the device name and limits. Args: mode(str): Update mode for the ring widget. Can be "manual", "scan" or "device" @@ -1907,5 +1930,5 @@ class Ring(RPCBase): @rpc_call def reset_connection(self): """ - None + Reset the connections for the ring widget. Disconnect the current slot and endpoint. """ diff --git a/bec_widgets/widgets/spiral_progress_bar/ring.py b/bec_widgets/widgets/spiral_progress_bar/ring.py index 987e06e5..6224fe26 100644 --- a/bec_widgets/widgets/spiral_progress_bar/ring.py +++ b/bec_widgets/widgets/spiral_progress_bar/ring.py @@ -114,32 +114,75 @@ class Ring(BECConnector): self.set_connections(self.config.connections.slot, self.config.connections.endpoint) def set_value(self, value: int | float): + """ + Set the value for the ring widget + + Args: + value(int | float): Value for the ring widget + """ self.config.value = round( float(max(self.config.min_value, min(self.config.max_value, value))), self.config.precision, ) def set_color(self, color: str | tuple): + """ + Set the color for the ring widget + + Args: + color(str | tuple): Color for the ring widget. Can be HEX code or tuple (R, G, B, A). + """ self.config.color = color self.color = self.convert_color(color) def set_background(self, color: str | tuple): + """ + Set the background color for the ring widget + + Args: + color(str | tuple): Background color for the ring widget. Can be HEX code or tuple (R, G, B, A). + """ self.config.background_color = color self.color = self.convert_color(color) def set_line_width(self, width: int): + """ + Set the line width for the ring widget + + Args: + width(int): Line width for the ring widget + """ self.config.line_width = width def set_min_max_values(self, min_value: int | float, max_value: int | float): + """ + Set the min and max values for the ring widget. + + Args: + min_value(int | float): Minimum value for the ring widget + max_value(int | float): Maximum value for the ring widget + """ self.config.min_value = min_value self.config.max_value = max_value def set_start_angle(self, start_angle: int): + """ + Set the start angle for the ring widget + + Args: + start_angle(int): Start angle for the ring widget in degrees + """ self.config.start_position = start_angle self.start_position = start_angle * 16 @staticmethod def convert_color(color): + """ + Convert the color to QColor + + Args: + color(str | tuple): Color for the ring widget. Can be HEX code or tuple (R, G, B, A). + """ converted_color = None if isinstance(color, str): converted_color = QtGui.QColor(color) @@ -149,7 +192,11 @@ class Ring(BECConnector): def set_update(self, mode: Literal["manual", "scan", "device"], device: str = None): """ - Set the update mode for the ring widget + Set the update mode for the ring widget. + Modes: + - "manual": Manual update mode, the value is set by the user. + - "scan": Update mode for the scan progress. The value is updated by the current scan progress. + - "device": Update mode for the device readback. The value is updated by the device readback. Take into account that user has to set the device name and limits. Args: mode(str): Update mode for the ring widget. Can be "manual", "scan" or "device" @@ -169,6 +216,13 @@ class Ring(BECConnector): self.parent_progress_widget.enable_auto_updates(False) def set_connections(self, slot: str, endpoint: str | EndpointInfo): + """ + Set the connections for the ring widget + + Args: + slot(str): Slot for the ring widget update. Can be "on_scan_progress" or "on_device_readback". + endpoint(str | EndpointInfo): Endpoint for the ring widget update. Endpoint has to match the slot type. + """ if self.config.connections.endpoint == endpoint and self.config.connections.slot == slot: return else: @@ -179,12 +233,22 @@ class Ring(BECConnector): self.bec_dispatcher.connect_slot(getattr(self, slot), endpoint) def reset_connection(self): + """ + Reset the connections for the ring widget. Disconnect the current slot and endpoint. + """ self.bec_dispatcher.disconnect_slot( self.config.connections.slot, self.config.connections.endpoint ) self.config.connections = RingConnections() def on_scan_progress(self, msg, meta): + """ + Update the ring widget with the scan progress. + + Args: + msg(dict): Message with the scan progress + meta(dict): Metadata for the message + """ current_RID = meta.get("RID", None) if current_RID != self.RID: self.set_min_max_values(0, msg.get("max_value", 100)) @@ -192,6 +256,13 @@ class Ring(BECConnector): self.parent_progress_widget.update() def on_device_readback(self, msg, meta): + """ + Update the ring widget with the device readback. + + Args: + msg(dict): Message with the device readback + meta(dict): Metadata for the message + """ if isinstance(self.config.connections.endpoint, EndpointInfo): endpoint = self.config.connections.endpoint.endpoint else: diff --git a/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py b/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py index d671fdcc..4dff9d2c 100644 --- a/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py +++ b/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py @@ -464,6 +464,13 @@ class SpiralProgressBar(BECConnector, QWidget): @Slot(dict, dict) def on_scan_queue_status(self, msg, meta): + """ + Slot to handle scan queue status messages. Decides what update to perform based on the scan queue status. + + Args: + msg(dict): Message from the BEC. + meta(dict): Metadata from the BEC. + """ primary_queue = msg.get("queue").get("primary") info = primary_queue.get("info", None) @@ -490,6 +497,12 @@ class SpiralProgressBar(BECConnector, QWidget): # print("hook device_progress") def _hook_scan_progress(self, ring_index: int = None): + """ + Hook the scan progress to the progress bars. + + Args: + ring_index(int): Index of the progress bar to hook the scan progress to. + """ if ring_index is not None: ring = self._find_ring_by_index(ring_index) else: @@ -501,6 +514,15 @@ class SpiralProgressBar(BECConnector, QWidget): ring.set_connections("on_scan_progress", MessageEndpoints.scan_progress()) def _hook_readback(self, bar_index: int, device: str, min: float | int, max: float | int): + """ + Hook the readback values to the progress bars. + + Args: + bar_index(int): Index of the progress bar to hook the readback values to. + device(str): Device to readback values from. + min(float|int): Minimum value for the progress bar. + max(float|int): Maximum value for the progress bar. + """ ring = self._find_ring_by_index(bar_index) ring.set_min_max_values(min, max) endpoint = MessageEndpoints.device_readback(device)