0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 11:11:49 +02:00

fix(bar): docstrings extended

This commit is contained in:
2024-06-06 18:10:34 +02:00
parent d0d6908a74
commit edb1775967
3 changed files with 125 additions and 9 deletions

View File

@ -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.
"""

View File

@ -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:

View File

@ -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)