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