0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

fix(waveform): signals for x device can be defined from gui

This commit is contained in:
2025-04-03 15:32:12 +02:00
parent af28e2e433
commit 39164feb18
3 changed files with 53 additions and 3 deletions

View File

@ -7,6 +7,7 @@ from qtpy.QtWidgets import (
QGroupBox,
QHBoxLayout,
QLabel,
QLineEdit,
QSizePolicy,
QVBoxLayout,
QWidget,
@ -53,6 +54,9 @@ class CurveSetting(SettingWidget):
self.device_x_label = QLabel("Device")
self.device_x = DeviceLineEdit()
self.signal_x_label = QLabel("Signal")
self.signal_x = QLineEdit()
self._get_x_mode_from_waveform()
self.switch_x_device_selection()
@ -63,6 +67,8 @@ class CurveSetting(SettingWidget):
self.x_axis_box.layout.addWidget(self.spacer)
self.x_axis_box.layout.addWidget(self.device_x_label)
self.x_axis_box.layout.addWidget(self.device_x)
self.x_axis_box.layout.addWidget(self.signal_x_label)
self.x_axis_box.layout.addWidget(self.signal_x)
self.x_axis_box.setFixedHeight(80)
self.layout.addWidget(self.x_axis_box)
@ -77,6 +83,7 @@ class CurveSetting(SettingWidget):
if self.mode_combo.currentText() == "device":
self.device_x.setEnabled(True)
self.device_x.setText(self.target_widget.x_axis_mode["name"])
self.signal_x.setText(self.target_widget.x_axis_mode["entry"])
else:
self.device_x.setEnabled(False)
@ -98,6 +105,9 @@ class CurveSetting(SettingWidget):
"""
if self.mode_combo.currentText() == "device":
self.target_widget.x_mode = self.device_x.text()
signal_x = self.signal_x.text()
if signal_x != "":
self.target_widget.x_entry = signal_x
else:
self.target_widget.x_mode = self.mode_combo.currentText()
self.curve_manager.send_curve_json()

View File

@ -454,12 +454,41 @@ class Waveform(PlotBase):
@x_mode.setter
def x_mode(self, value: str):
self.x_axis_mode["name"] = value
if value not in ["timestamp", "index", "auto"]:
self.x_axis_mode["entry"] = self.entry_validator.validate_signal(value, None)
self._switch_x_axis_item(mode=value)
self.async_signal_update.emit()
self.sync_signal_update.emit()
self.plot_item.enableAutoRange(x=True)
self.round_plot_widget.apply_plot_widget_style() # To keep the correct theme
@SafeProperty(str)
def x_entry(self) -> str | None:
"""
The x signal name.
"""
return self.x_axis_mode["entry"]
@x_entry.setter
def x_entry(self, value: str | None):
"""
Set the x signal name.
Args:
value(str|None): The x signal name to set.
"""
if value is None:
return
if self.x_axis_mode["name"] in ["auto", "index", "timestamp"]:
logger.warning("Cannot set x_entry when x_mode is not 'device'.")
return
self.x_axis_mode["entry"] = self.entry_validator.validate_signal(self.x_mode, value)
self._switch_x_axis_item(mode="device")
self.async_signal_update.emit()
self.sync_signal_update.emit()
self.plot_item.enableAutoRange(x=True)
self.round_plot_widget.apply_plot_widget_style()
@SafeProperty(str)
def color_palette(self) -> str:
"""
@ -1492,9 +1521,6 @@ class Waveform(PlotBase):
default_axis = pg.AxisItem(orientation="bottom")
self.plot_item.setAxisItems({"bottom": default_axis})
if mode not in ["timestamp", "index", "auto"]:
self.x_axis_mode["entry"] = self.entry_validator.validate_signal(mode, None)
self.set_x_label_suffix(self.x_axis_mode["label_suffix"])
def _categorise_device_curves(self) -> str:

View File

@ -119,6 +119,20 @@ def test_curve_setting_refresh(curve_setting_fixture, qtbot):
assert curve_setting.mode_combo.currentText() == "timestamp"
def test_change_device_from_target_widget(curve_setting_fixture, qtbot):
curve_setting, wf = curve_setting_fixture
wf.x_mode = "samx"
# Call refresh
curve_setting.refresh()
assert curve_setting.mode_combo.currentText() == "device"
assert curve_setting.device_x.isEnabled()
assert curve_setting.device_x.text() == wf.x_axis_mode["name"]
assert curve_setting.signal_x.text() == wf.x_axis_mode["entry"]
##################################################
# CurveTree
##################################################