wip scan group box enfore

This commit is contained in:
2026-05-12 20:10:25 +02:00
parent 3055a7e090
commit 6b7a094407
3 changed files with 19 additions and 11 deletions
@@ -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)
@@ -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):
@@ -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,