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:
@@ -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):
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user