fix(device_input): styling adjusted

This commit is contained in:
2026-06-05 14:36:57 +02:00
parent 0ec46c8978
commit 133c600444
4 changed files with 52 additions and 11 deletions
@@ -603,8 +603,10 @@ class DeviceComboBox(BECWidget, QComboBox):
return device.readout_priority in self.readout_filter
def _update_validity_style(self, is_valid: bool) -> None:
border_color = "transparent" if is_valid or not self.isEnabled() else "red"
self.setStyleSheet(f"border: 1px solid {border_color};")
if is_valid or not self.isEnabled():
self.setStyleSheet("")
return
self.setStyleSheet("QComboBox { border: 1px solid red; }")
def _filter_devices_by_signal_class(
self, devices: list[Device | BECSignal | ComputedSignal | Positioner]
@@ -468,8 +468,7 @@ class SignalComboBox(BECWidget, QComboBox):
True if an enabled item was found and selected.
"""
for index in range(self.count()):
item = self.model().item(index)
if item is not None and item.isEnabled():
if self._item_is_enabled(index):
self.setCurrentIndex(index)
return True
return False
@@ -626,8 +625,10 @@ class SignalComboBox(BECWidget, QComboBox):
self.check_validity(self.currentText())
def _update_validity_style(self, is_valid: bool) -> None:
border_color = "transparent" if is_valid or not self.isEnabled() else "red"
self.setStyleSheet(f"border: 1px solid {border_color};")
if is_valid or not self.isEnabled():
self.setStyleSheet("")
return
self.setStyleSheet("QComboBox { border: 1px solid red; }")
def _replace_signal_items(self, items: list[str | tuple[str, dict]] | None = None):
combo_items = self._signals if items is None else items
@@ -648,15 +649,37 @@ class SignalComboBox(BECWidget, QComboBox):
if self._config_signals:
index = offset + len(self._hinted_signals) + len(self._normal_signals)
self.insertItem(index, "Config Signals")
self.model().item(index).setEnabled(False)
self._set_item_enabled(index, False)
if self._normal_signals:
index = offset + len(self._hinted_signals)
self.insertItem(index, "Normal Signals")
self.model().item(index).setEnabled(False)
self._set_item_enabled(index, False)
if self._hinted_signals:
index = offset
self.insertItem(index, "Hinted Signals")
self.model().item(index).setEnabled(False)
self._set_item_enabled(index, False)
def _standard_item(self, index: int):
model = self.model()
item_getter = getattr(model, "item", None)
if callable(item_getter):
return item_getter(index)
return None
def _item_is_enabled(self, index: int) -> bool:
item = self._standard_item(index)
if item is not None:
return item.isEnabled()
model_index = self.model().index(index, self.modelColumn())
if not model_index.isValid():
return True
return bool(self.model().flags(model_index) & Qt.ItemFlag.ItemIsEnabled)
def _set_item_enabled(self, index: int, enabled: bool) -> None:
item = self._standard_item(index)
if item is not None:
item.setEnabled(enabled)
def _display_text_for_signal(self, signal: str) -> str | None:
for entry in self._signals:
@@ -120,7 +120,7 @@ def test_device_input_combobox_disabled_invalid_has_neutral_border(device_input_
assert "red" in device_input_combobox.styleSheet()
device_input_combobox.setEnabled(False)
assert "transparent" in device_input_combobox.styleSheet()
assert device_input_combobox.styleSheet() == ""
device_input_combobox.setEnabled(True)
assert "red" in device_input_combobox.styleSheet()
+17 -1
View File
@@ -96,6 +96,22 @@ def test_signal_combobox_autocomplete(qtbot, mocked_client):
assert text_changes[-1] == "manual_signal"
def test_signal_combobox_group_headers_are_disabled(qtbot, mocked_client):
widget = create_widget(qtbot=qtbot, widget=SignalComboBox, client=mocked_client)
widget.set_device("samx")
assert widget.itemText(0) == "Hinted Signals"
assert widget.itemText(2) == "Normal Signals"
assert widget.itemText(4) == "Config Signals"
assert widget.model().item(0).isEnabled() is False
assert widget.model().item(2).isEnabled() is False
assert widget.model().item(4).isEnabled() is False
assert widget.set_to_first_enabled() is True
assert widget.currentText() == "samx (readback)"
def test_signal_combobox_qproperties(device_signal_combobox):
device_signal_combobox.include_config_signals = False
device_signal_combobox.include_normal_signals = False
@@ -116,7 +132,7 @@ def test_signal_combobox_disabled_invalid_has_neutral_border(device_signal_combo
assert "red" in device_signal_combobox.styleSheet()
device_signal_combobox.setEnabled(False)
assert "transparent" in device_signal_combobox.styleSheet()
assert device_signal_combobox.styleSheet() == ""
device_signal_combobox.setEnabled(True)
assert "red" in device_signal_combobox.styleSheet()