feat(beamline_states): exempt scan-interlock states from display filters

This commit is contained in:
2026-06-12 17:54:10 +02:00
committed by Klaus Wakonig
parent 90084db580
commit beddfb14b2
2 changed files with 38 additions and 8 deletions
@@ -655,7 +655,8 @@ class BeamlineStateManager(BECWidget, QWidget):
visible_names = []
hidden_names = []
for name in self._state_order:
if self._is_state_visible(name):
# States watched by the scan interlock are exempt from filtering.
if name in self._interlock_states or self._is_state_visible(name):
visible_names.append(name)
else:
hidden_names.append(name)
+36 -7
View File
@@ -654,7 +654,36 @@ def test_beamline_state_manager_header_visibility_follows_filters(qtbot, mocked_
)
beamline_state_manager._state_pills["limits"].update_state(
{"name": "limits", "status": "valid", "label": "Within limits."}, {}
{"name": "limits", "status": "invalid", "label": "Out of limits."}, {}
)
beamline_state_manager._state_pills["shutter_open"].update_state(
{"name": "shutter_open", "status": "valid", "label": "Open."}, {}
)
beamline_state_manager._selected_statuses = {"valid"}
beamline_state_manager._apply_filters()
model = beamline_state_manager._model
assert not beamline_state_manager._view.isRowHidden(0)
assert not beamline_state_manager._view.isRowHidden(model.index_for_name("shutter_open").row())
assert beamline_state_manager._view.isRowHidden(2)
assert beamline_state_manager._view.isRowHidden(model.index_for_name("limits").row())
beamline_state_manager.clear_filters()
assert not beamline_state_manager._view.isRowHidden(2)
def test_beamline_state_manager_interlock_states_bypass_filters(qtbot, mocked_client):
beamline_state_manager = create_widget(qtbot, BeamlineStateManager, client=mocked_client)
beamline_state_manager.update_available_states(
{"states": [_limits_state(), _shutter_state()]}, {}
)
_install_fake_scan_interlock(
beamline_state_manager, _FakeScanInterlock(states_watched={"shutter_open": "valid"})
)
beamline_state_manager._state_pills["limits"].update_state(
{"name": "limits", "status": "invalid", "label": "Out of limits."}, {}
)
beamline_state_manager._state_pills["shutter_open"].update_state(
{"name": "shutter_open", "status": "invalid", "label": "Closed."}, {}
@@ -663,14 +692,14 @@ def test_beamline_state_manager_header_visibility_follows_filters(qtbot, mocked_
beamline_state_manager._apply_filters()
model = beamline_state_manager._model
assert beamline_state_manager._view.isRowHidden(0)
assert beamline_state_manager._view.isRowHidden(model.index_for_name("shutter_open").row())
assert not beamline_state_manager._view.isRowHidden(2)
assert not beamline_state_manager._view.isRowHidden(model.index_for_name("limits").row())
assert not beamline_state_manager._view.isRowHidden(model.index_for_name("shutter_open").row())
assert beamline_state_manager._view.isRowHidden(model.index_for_name("limits").row())
assert "1 state is hidden" in beamline_state_manager._hidden_summary.text()
beamline_state_manager.clear_filters()
beamline_state_manager._device_filter_text = "nonexistent_device"
beamline_state_manager._apply_filters()
assert not beamline_state_manager._view.isRowHidden(0)
assert not beamline_state_manager._view.isRowHidden(model.index_for_name("shutter_open").row())
def test_beamline_state_manager_paints_section_headers(qtbot, mocked_client):