diff --git a/bec_widgets/assets/toolbar_icons/drag_pan_mode.svg b/bec_widgets/assets/toolbar_icons/drag_pan_mode.svg
new file mode 100644
index 00000000..06205000
--- /dev/null
+++ b/bec_widgets/assets/toolbar_icons/drag_pan_mode.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/bec_widgets/assets/toolbar_icons/rectangle_mode.svg b/bec_widgets/assets/toolbar_icons/rectangle_mode.svg
new file mode 100644
index 00000000..d47bbb2e
--- /dev/null
+++ b/bec_widgets/assets/toolbar_icons/rectangle_mode.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/bec_widgets/widgets/figure/plots/waveform/waveform.py b/bec_widgets/widgets/figure/plots/waveform/waveform.py
index be900ae9..127c941d 100644
--- a/bec_widgets/widgets/figure/plots/waveform/waveform.py
+++ b/bec_widgets/widgets/figure/plots/waveform/waveform.py
@@ -390,7 +390,6 @@ class BECWaveform(BECPlotBase):
self.async_signal_update.emit()
self.scan_signal_update.emit()
- # self.autorange_timer.start(200)
@pyqtSlot()
def auto_range(self):
diff --git a/bec_widgets/widgets/waveform/waveform_toolbar/waveform_toolbar.py b/bec_widgets/widgets/waveform/waveform_toolbar/waveform_toolbar.py
index 6189c1cd..e4d31152 100644
--- a/bec_widgets/widgets/waveform/waveform_toolbar/waveform_toolbar.py
+++ b/bec_widgets/widgets/waveform/waveform_toolbar/waveform_toolbar.py
@@ -30,6 +30,30 @@ class MatplotlibAction(ToolBarAction):
toolbar.addAction(self.action)
+class DragModeAction(ToolBarAction):
+ def add_to_toolbar(self, toolbar, target):
+ icon = QIcon()
+ icon.addFile(
+ os.path.join(MODULE_PATH, "assets", "toolbar_icons", "drag_pan_mode.svg"),
+ size=QSize(20, 20),
+ )
+ self.action = QAction(icon, "Drag Mouse Mode", target)
+ self.action.setCheckable(True)
+ toolbar.addAction(self.action)
+
+
+class RectangeModeAction(ToolBarAction):
+ def add_to_toolbar(self, toolbar, target):
+ icon = QIcon()
+ icon.addFile(
+ os.path.join(MODULE_PATH, "assets", "toolbar_icons", "rectangle_mode.svg"),
+ size=QSize(20, 20),
+ )
+ self.action = QAction(icon, "Rectangle Zoom Mode", target)
+ self.action.setCheckable(True)
+ toolbar.addAction(self.action)
+
+
class AutoRangeAction(ToolBarAction):
def add_to_toolbar(self, toolbar, target):
icon = QIcon()
diff --git a/bec_widgets/widgets/waveform/waveform_widget.py b/bec_widgets/widgets/waveform/waveform_widget.py
index 927e75e1..c5795913 100644
--- a/bec_widgets/widgets/waveform/waveform_widget.py
+++ b/bec_widgets/widgets/waveform/waveform_widget.py
@@ -4,6 +4,8 @@ import sys
from typing import Literal
import numpy as np
+import pyqtgraph as pg
+from qtpy.QtCore import Slot
from qtpy.QtWidgets import QVBoxLayout, QWidget
from bec_widgets.qt_utils.error_popups import SafeSlot, WarningPopupUtility
@@ -75,6 +77,8 @@ class BECWaveformWidget(BECConnector, QWidget):
"save": SaveAction(),
"matplotlib": MatplotlibAction(),
"separator_1": SeparatorAction(),
+ "drag_mode": DragModeAction(),
+ "rectangle_mode": RectangeModeAction(),
"auto_range": AutoRangeAction(),
"separator_2": SeparatorAction(),
"curves": CurveAction(),
@@ -107,6 +111,10 @@ class BECWaveformWidget(BECConnector, QWidget):
def _hook_actions(self):
self.toolbar.widgets["save"].action.triggered.connect(self.export)
self.toolbar.widgets["matplotlib"].action.triggered.connect(self.export_to_matplotlib)
+ self.toolbar.widgets["drag_mode"].action.triggered.connect(self.enable_mouse_pan_mode)
+ self.toolbar.widgets["rectangle_mode"].action.triggered.connect(
+ self.enable_mouse_rectangle_mode
+ )
self.toolbar.widgets["auto_range"].action.triggered.connect(self._auto_range_from_toolbar)
self.toolbar.widgets["curves"].action.triggered.connect(self.show_curve_settings)
self.toolbar.widgets["fit_params"].action.triggered.connect(self.show_fit_summary_dialog)
@@ -118,6 +126,9 @@ class BECWaveformWidget(BECConnector, QWidget):
# lambda: self.save_config(path=None, gui=True)
# )
+ ###################################
+ # Dialog Windows
+ ###################################
def show_axis_settings(self):
dialog = SettingsDialog(
self,
@@ -508,6 +519,18 @@ class BECWaveformWidget(BECConnector, QWidget):
"""
self.waveform.lock_aspect_ratio(lock)
+ @Slot()
+ def enable_mouse_rectangle_mode(self):
+ self.toolbar.widgets["rectangle_mode"].action.setChecked(True)
+ self.toolbar.widgets["drag_mode"].action.setChecked(False)
+ self.waveform.plot_item.getViewBox().setMouseMode(pg.ViewBox.RectMode)
+
+ @Slot()
+ def enable_mouse_pan_mode(self):
+ self.toolbar.widgets["drag_mode"].action.setChecked(True)
+ self.toolbar.widgets["rectangle_mode"].action.setChecked(False)
+ self.waveform.plot_item.getViewBox().setMouseMode(pg.ViewBox.PanMode)
+
def export(self):
"""
Show the export dialog for the plot widget.