diff --git a/bec_widgets/examples/device_manager_view/device_manager_view.py b/bec_widgets/examples/device_manager_view/device_manager_view.py index d3950dca..625af75a 100644 --- a/bec_widgets/examples/device_manager_view/device_manager_view.py +++ b/bec_widgets/examples/device_manager_view/device_manager_view.py @@ -18,6 +18,9 @@ from qtpy.QtWidgets import ( from bec_widgets import BECWidget 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.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.dm_config_view import DMConfigView 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) # 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) # Placeholder self.dm_config_view = DMConfigView(self) @@ -89,7 +92,7 @@ class DeviceManagerView(BECWidget, QWidget): # Create the dock widgets 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.setWidget(self.device_table_view) diff --git a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources.py b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources.py index 6c650ac6..721599af 100644 --- a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources.py +++ b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources.py @@ -1,10 +1,11 @@ from random import randint -from typing import Iterable +from typing import Any, Callable, Generator, Iterable, TypeVar from qtpy.QtCore import QSize from qtpy.QtWidgets import QListWidgetItem, QWidget 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 ( Ui_availableDeviceResources, ) @@ -16,6 +17,17 @@ from bec_widgets.widgets.control.device_manager.components.available_device_reso 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): 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(): 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__": import sys