From 6b7a094407f8aac2600dd416613c5cdd5f27a264 Mon Sep 17 00:00:00 2001 From: wyzula-jan Date: Tue, 12 May 2026 20:10:25 +0200 Subject: [PATCH] wip scan group box enfore --- .../device_combobox/device_combobox.py | 8 ++++++-- .../control/scan_control/scan_group_box.py | 20 ++++++++++--------- tests/unit_tests/test_device_input_widgets.py | 2 ++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py b/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py index 95af8c42..62f5ec86 100644 --- a/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +++ b/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py @@ -167,6 +167,8 @@ class DeviceComboBox(BECWidget, QComboBox): if default is not None: self.set_device(default) + else: + self.setCurrentText("") self._callback_id = self.bec_dispatcher.client.callbacks.register( EventType.DEVICE_UPDATE, self.on_device_update @@ -346,12 +348,15 @@ class DeviceComboBox(BECWidget, QComboBox): @set_first_element_as_empty.setter def set_first_element_as_empty(self, value: bool) -> None: self._set_first_element_as_empty = value + current_text = self.currentText() if value: if self.count() == 0 or self.itemText(0) != "": self.insertItem(0, "") self.setCurrentIndex(0) elif self.count() > 0 and self.itemText(0) == "": self.removeItem(0) + if not current_text: + self.setCurrentText("") @property def device_filter(self) -> list[BECDeviceFilter]: @@ -505,8 +510,7 @@ class DeviceComboBox(BECWidget, QComboBox): replace_combobox_items(self, devices) if self._set_first_element_as_empty: self.insertItem(0, "") - if current_text: - self.setCurrentText(current_text) + self.setCurrentText(current_text) def _device_name_from_text(self, text: str) -> str: index = self.findText(text) diff --git a/bec_widgets/widgets/control/scan_control/scan_group_box.py b/bec_widgets/widgets/control/scan_control/scan_group_box.py index 168bf422..e9c746e8 100644 --- a/bec_widgets/widgets/control/scan_control/scan_group_box.py +++ b/bec_widgets/widgets/control/scan_control/scan_group_box.py @@ -272,18 +272,20 @@ class ScanGroupBox(QGroupBox): if default == "_empty": default = None if widget_class is DeviceComboBox: - widget = widget_class(parent=self.parent(), arg_name=arg_name) + device_filter = ( + BECDeviceFilter.POSITIONER + if item["type"] == ScanArgType.DEVICE + else BECDeviceFilter.DEVICE + ) + widget = widget_class( + parent=self.parent(), + arg_name=arg_name, + default=default, + device_filter=device_filter, + ) else: widget = widget_class(parent=self.parent(), arg_name=arg_name, default=default) if isinstance(widget, DeviceComboBox): - if item["type"] == ScanArgType.DEVICE: - widget.set_device_filter(BECDeviceFilter.POSITIONER) - else: - widget.set_device_filter(BECDeviceFilter.DEVICE) - if default is None: - widget.set_first_element_as_empty = True - else: - widget.set_device(default) self.selected_devices[widget] = "" widget.device_selected.connect(self.emit_device_selected) if isinstance(widget, ScanLiteralsComboBox): diff --git a/tests/unit_tests/test_device_input_widgets.py b/tests/unit_tests/test_device_input_widgets.py index 5a94fb4e..bb4ff07d 100644 --- a/tests/unit_tests/test_device_input_widgets.py +++ b/tests/unit_tests/test_device_input_widgets.py @@ -37,6 +37,8 @@ def test_device_input_combobox_init(device_input_combobox): assert isinstance(device_input_combobox, DeviceComboBox) assert device_input_combobox.config.widget_class == "DeviceComboBox" assert device_input_combobox.isEditable() is True + assert device_input_combobox.currentText() == "" + assert device_input_combobox.is_valid_input is False assert device_input_combobox.config.device_filter == [] assert device_input_combobox.config.readout_filter == [ ReadoutPriority.MONITORED.value,