1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-03-30 05:18:36 +02:00

fix(waveform): alignment panel indicators request autoscale if updated

This commit is contained in:
2026-03-25 14:17:30 +01:00
committed by Jan Wyzula
parent a486c52058
commit a2923752c2
3 changed files with 24 additions and 1 deletions

View File

@@ -38,6 +38,7 @@ class WaveformAlignmentController(QObject):
"""Own the alignment plot overlays and synchronize them with the alignment panel."""
move_absolute_requested = Signal(float)
autoscale_requested = Signal()
def __init__(self, plot_item: pg.PlotItem, panel: WaveformAlignmentPanel, parent=None):
super().__init__(parent=parent)
@@ -129,6 +130,7 @@ class WaveformAlignmentController(QObject):
self._marker_line.label.setText(
f"{self._positioner_name}: {self._readback:.{self._precision}f}"
)
self.autoscale_requested.emit()
@SafeSlot(dict, dict)
def update_dap_summary(self, data: dict, metadata: dict):
@@ -219,7 +221,6 @@ class WaveformAlignmentController(QObject):
label="",
labelOpts={"position": 0.95, "color": warning},
)
self._marker_line.skip_auto_range = True
self._apply_marker_style()
self._plot_item.addItem(self._marker_line)
@@ -254,6 +255,7 @@ class WaveformAlignmentController(QObject):
value = min(max(value, self._limits[0]), self._limits[1])
self._target_line.setValue(value)
self._on_target_line_changed()
self.autoscale_requested.emit()
def _refresh_target_line_metadata(self):
if self._target_line is None or self._positioner_name is None:
@@ -326,6 +328,7 @@ class WaveformAlignmentController(QObject):
return
self._panel.set_target_value(float(self._target_line.value()), precision=self._precision)
self._refresh_target_controls()
self.autoscale_requested.emit()
@SafeSlot()
def _on_target_move_requested(self):

View File

@@ -292,6 +292,7 @@ class Waveform(PlotBase):
widget=self._alignment_panel
)
self._alignment_controller.move_absolute_requested.connect(self._move_alignment_positioner)
self._alignment_controller.autoscale_requested.connect(self._autoscale_alignment_indicators)
self.dap_summary_update.connect(self._alignment_controller.update_dap_summary)
self.toolbar.components.get_action("alignment_mode").action.toggled.connect(
self.toggle_alignment_mode
@@ -400,6 +401,11 @@ class Waveform(PlotBase):
return
self.dev[self._alignment_positioner_name].move(float(value), relative=False)
@SafeSlot()
def _autoscale_alignment_indicators(self):
"""Autoscale the waveform view after alignment indicator updates."""
self._reset_view()
def _add_waveform_specific_popup(self):
"""
Add popups to the Waveform widget.

View File

@@ -107,6 +107,20 @@ def test_alignment_controller_emits_move_request_for_fit_center(qtbot, mocked_cl
move_callback.assert_called_once_with(2.5)
def test_alignment_controller_requests_autoscale_for_marker_and_target(qtbot, mocked_client):
_, panel, controller = create_alignment_controller(qtbot, mocked_client)
autoscale_callback = MagicMock()
controller.autoscale_requested.connect(autoscale_callback)
controller.update_context(
AlignmentContext(visible=True, positioner_name="samx", precision=3, readback=1.0)
)
panel.target_toggle.setChecked(True)
assert autoscale_callback.call_count >= 2
def test_alignment_controller_emits_move_request_for_target(qtbot, mocked_client):
_, panel, controller = create_alignment_controller(qtbot, mocked_client)