From 715bc961496163cc7fff42d8066bea881e833bab Mon Sep 17 00:00:00 2001 From: Matt Liberty Date: Wed, 19 Jul 2023 15:44:11 -0400 Subject: [PATCH] =?UTF-8?q?Added=20waveform=20right-click=20on=20=CE=94t?= =?UTF-8?q?=20to=20manually=20set.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- .../widgets/waveform/waveform_widget.py | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eff52e29..7e0c2f27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,8 @@ This file contains the list of changes made to pyjoulescope_ui. When open files using file association, just view the file. Does not affect "normal" configuration or open widgets. * Fixed elided tab text in dock manager. -* Added manual "Report Issue" option. +* Added manual "Report Issue" option. +* Added waveform right-click on Δt to manually set. * Renamed joulescope_ui.json to joulescope_ui.json_plus to avoid name collision. * Bumped dependency versions: * joulescope 1.1.7 -> 1.1.8 diff --git a/joulescope_ui/widgets/waveform/waveform_widget.py b/joulescope_ui/widgets/waveform/waveform_widget.py index fe468e0f..72621437 100644 --- a/joulescope_ui/widgets/waveform/waveform_widget.py +++ b/joulescope_ui/widgets/waveform/waveform_widget.py @@ -2483,6 +2483,8 @@ def plot_mousePressEvent(self, event: QtGui.QMouseEvent): elif y_name == 'x_axis': if x_name.startswith('plot'): self._menu_x_axis(event) + elif x_name.startswith('statistics'): + self._menu_dt(event) elif y_name == 'summary': self._menu_summary(event) @@ -2816,6 +2818,41 @@ def _menu_plot(self, idx, event: QtGui.QMouseEvent): style_action] return self._menu_show(event) + def _menu_dt(self, event: QtGui.QMouseEvent): + self._log.info('_menu_dt(%s)', event.pos()) + menu = QtWidgets.QMenu('Waveform context menu', self) + x0, x1 = self.x_range + interval = abs(x1 - x0) / time64.SECOND + interval_widget = IntervalWidget(self, interval) + interval_widget.value.connect(self._on_dt_interval) + interval_action = QtWidgets.QWidgetAction(menu) + interval_action.setDefaultWidget(interval_widget) + menu.addAction(interval_action) + + self._menu = [menu, interval_widget, interval_action] + return self._menu_show(event) + + def _on_dt_interval(self, dt): + e0, e1 = self._extents() + er = e1 - e0 + dt = int(dt * time64.SECOND) + dt = min(dt, er) + if dt < er and self.pin_left and self.pin_right: + self.pin_left = False # unpin from left + + x0, x1 = self.x_range + xc = (x1 + x0) // 2 + dt_half = dt // 2 + x0, x1 = xc - dt_half, xc + dt_half + if self.pin_left or x0 < e0: + x0, x1 = e0, e0 + dt + elif self.pin_right or x1 > e0: + x0, x1 = e1 - dt, e1 + self.x_range = [x0, x1] + self._plot_data_invalidate() + + self._repaint_request = True + def _menu_statistics(self, idx, event: QtGui.QMouseEvent): self._log.info('_menu_statistics(%s, %s)', idx, event.pos()) menu = QtWidgets.QMenu('Waveform context menu', self)