wip: add slot to update state from table entries

This commit is contained in:
2025-09-01 20:42:49 +02:00
committed by appel_c
parent 0a767d268c
commit a49d9bbbd1
2 changed files with 24 additions and 3 deletions
@@ -18,6 +18,9 @@ from qtpy.QtWidgets import (
from bec_widgets import BECWidget from bec_widgets import BECWidget
from bec_widgets.utils.error_popups import SafeSlot from bec_widgets.utils.error_popups import SafeSlot
from bec_widgets.widgets.containers.advanced_dock_area.advanced_dock_area import AdvancedDockArea from bec_widgets.widgets.containers.advanced_dock_area.advanced_dock_area import AdvancedDockArea
from bec_widgets.widgets.control.device_manager.components.available_device_resources.available_device_resources import (
AvailableDeviceResources,
)
from bec_widgets.widgets.control.device_manager.components.device_table_view import DeviceTableView from bec_widgets.widgets.control.device_manager.components.device_table_view import DeviceTableView
from bec_widgets.widgets.control.device_manager.components.dm_config_view import DMConfigView from bec_widgets.widgets.control.device_manager.components.dm_config_view import DMConfigView
from bec_widgets.widgets.control.device_manager.components.dm_ophyd_test import ( from bec_widgets.widgets.control.device_manager.components.dm_ophyd_test import (
@@ -76,7 +79,7 @@ class DeviceManagerView(BECWidget, QWidget):
self._root_layout.addWidget(self.dock_manager) self._root_layout.addWidget(self.dock_manager)
# Initialize the widgets # Initialize the widgets
self.explorer = IDEExplorer(self) # TODO will be replaced by explorer widget self.available_devices = AvailableDeviceResources(self)
self.device_table_view = DeviceTableView(self) self.device_table_view = DeviceTableView(self)
# Placeholder # Placeholder
self.dm_config_view = DMConfigView(self) self.dm_config_view = DMConfigView(self)
@@ -89,7 +92,7 @@ class DeviceManagerView(BECWidget, QWidget):
# Create the dock widgets # Create the dock widgets
self.explorer_dock = QtAds.CDockWidget("Explorer", self) self.explorer_dock = QtAds.CDockWidget("Explorer", self)
self.explorer_dock.setWidget(self.explorer) self.explorer_dock.setWidget(self.available_devices)
self.device_table_view_dock = QtAds.CDockWidget("Device Table", self) self.device_table_view_dock = QtAds.CDockWidget("Device Table", self)
self.device_table_view_dock.setWidget(self.device_table_view) self.device_table_view_dock.setWidget(self.device_table_view)
@@ -1,10 +1,11 @@
from random import randint from random import randint
from typing import Iterable from typing import Any, Callable, Generator, Iterable, TypeVar
from qtpy.QtCore import QSize from qtpy.QtCore import QSize
from qtpy.QtWidgets import QListWidgetItem, QWidget from qtpy.QtWidgets import QListWidgetItem, QWidget
from bec_widgets.utils.bec_widget import BECWidget from bec_widgets.utils.bec_widget import BECWidget
from bec_widgets.utils.error_popups import SafeSlot
from bec_widgets.widgets.control.device_manager.components.available_device_resources.available_device_resources_ui import ( from bec_widgets.widgets.control.device_manager.components.available_device_resources.available_device_resources_ui import (
Ui_availableDeviceResources, Ui_availableDeviceResources,
) )
@@ -16,6 +17,17 @@ from bec_widgets.widgets.control.device_manager.components.available_device_reso
DeviceTagGroup, DeviceTagGroup,
) )
_T = TypeVar("_T")
_RT = TypeVar("_RT")
def _yield_only_passing(fn: Callable[[_T], _RT], vals: Iterable[_T]) -> Generator[_RT, Any, None]:
for v in vals:
try:
yield fn(v)
except BaseException:
pass
class AvailableDeviceResources(BECWidget, QWidget, Ui_availableDeviceResources): class AvailableDeviceResources(BECWidget, QWidget, Ui_availableDeviceResources):
def __init__(self, parent=None, **kwargs): def __init__(self, parent=None, **kwargs):
@@ -46,6 +58,12 @@ class AvailableDeviceResources(BECWidget, QWidget, Ui_availableDeviceResources):
for list_item, tag_group_widget in self._items.values(): for list_item, tag_group_widget in self._items.values():
list_item.setSizeHint(tag_group_widget.sizeHint()) list_item.setSizeHint(tag_group_widget.sizeHint())
@SafeSlot(list)
def update_devices_state(self, config_list: list[dict[str, Any]]):
self.set_devices_state(
_yield_only_passing(HashableDevice.model_validate, config_list), True
)
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys