From b4af2cc77aa0013f4547cd98345b0c77abb7101b Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Thu, 24 Apr 2025 17:37:10 +0200 Subject: [PATCH] docs: updated docs for v2 (#531) --- .../widget_screenshots/scatter_waveform.png | Bin 0 -> 84019 bytes .../widget_development/widget_tutorial.md | 36 ++++++++-------- .../buttons_appearance/buttons_appearance.md | 24 +++++------ .../user/widgets/device_input/device_input.md | 12 +++--- .../user/widgets/lmfit_dialog/lmfit_dialog.md | 10 ++--- .../widgets/positioner_box/positioner_box.md | 6 +-- .../positioner_box/positioner_box_2d.md | 10 ++--- .../widgets/progress_bar/ring_progress_bar.md | 3 +- .../scatter_2D.gif | Bin .../scatter_waveform/scatter_waveform.md | 39 ++++++++++++++++++ docs/user/widgets/toggle/toggle.md | 6 +-- docs/user/widgets/waveform/waveform_widget.md | 25 ++--------- docs/user/widgets/widgets.md | 11 ++++- 13 files changed, 105 insertions(+), 77 deletions(-) create mode 100644 docs/assets/widget_screenshots/scatter_waveform.png rename docs/user/widgets/{waveform => scatter_waveform}/scatter_2D.gif (100%) create mode 100644 docs/user/widgets/scatter_waveform/scatter_waveform.md diff --git a/docs/assets/widget_screenshots/scatter_waveform.png b/docs/assets/widget_screenshots/scatter_waveform.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1988700f90c470d0680e5cc4441eef77b0a736 GIT binary patch literal 84019 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 ZFs0~uw+=Q}aqj>>;=(c?ir(w_{|}-RA~yg4 literal 0 HcmV?d00001 diff --git a/docs/developer/widget_development/widget_tutorial.md b/docs/developer/widget_development/widget_tutorial.md index e947a408..17b02b56 100644 --- a/docs/developer/widget_development/widget_tutorial.md +++ b/docs/developer/widget_development/widget_tutorial.md @@ -28,7 +28,7 @@ from qtpy.QtWidgets import QWidget, QLabel, QDoubleSpinBox, QPushButton, QVBoxLa class MotorControlWidget(QWidget): - def __init__(self, motor_name: str, parent=None): + def __init__(self, parent=None, motor_name: str = ""): super().__init__(parent) self.motor_name = motor_name @@ -70,18 +70,17 @@ from [`BECWidget`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api pass the motor name to the widget, and use `get_bec_shortcuts` to access BEC services. ```python -from qtpy.QtCore import Slot -from qtpy.QtWidgets import QWidget, QLabel, QDoubleSpinBox, QPushButton, QVBoxLayout - from bec_lib.endpoints import MessageEndpoints +from qtpy.QtWidgets import QDoubleSpinBox, QLabel, QPushButton, QVBoxLayout, QWidget + from bec_widgets.utils.bec_widget import BECWidget +from bec_widgets.utils.error_popups import SafeSlot class MotorControlWidget(BECWidget, QWidget): - def __init__(self, motor_name: str, parent=None, *args, **kwargs): - super().__init__(*args, **kwargs) - QWidget.__init__(self, parent) + def __init__(self, parent=None, motor_name: str = "", **kwargs): + super().__init__(parent=parent, **kwargs) self.motor_name = motor_name @@ -114,13 +113,13 @@ class MotorControlWidget(BECWidget, QWidget): self.on_motor_update, MessageEndpoints.device_readback(self.motor_name) ) - @Slot() + @SafeSlot() def move_motor(self): target_position = self.spin_box.value() self.dev[self.motor_name].move(target_position) print(f"Commanding motor {self.motor_name} to move to {target_position}") - @Slot(dict, dict) + @SafeSlot(dict, dict) def on_motor_update(self, msg_content, metadata): position = msg_content.get("signals", {}).get(self.motor_name, {}).get("value", "N/A") self.label.setText(f"{self.motor_name} : {round(position, 2)}") @@ -132,19 +131,18 @@ Next, we’ll set up an RPC interface to allow remote control of the widget from the `BECIPythonClient`. We’ll expose a method that allows changing the motor name through CLI commands. ```python -from qtpy.QtCore import Slot -from qtpy.QtWidgets import QWidget, QLabel, QDoubleSpinBox, QPushButton, QVBoxLayout - from bec_lib.endpoints import MessageEndpoints +from qtpy.QtWidgets import QDoubleSpinBox, QLabel, QPushButton, QVBoxLayout, QWidget + from bec_widgets.utils.bec_widget import BECWidget +from bec_widgets.utils.error_popups import SafeSlot class MotorControlWidget(BECWidget, QWidget): USER_ACCESS = ["change_motor"] - def __init__(self, motor_name: str, parent=None, *args, **kwargs): - super().__init__(*args, **kwargs) - QWidget.__init__(self, parent) + def __init__(self, parent=None, motor_name: str = "", **kwargs): + super().__init__(parent=parent, **kwargs) self.motor_name = motor_name @@ -177,13 +175,13 @@ class MotorControlWidget(BECWidget, QWidget): self.on_motor_update, MessageEndpoints.device_readback(self.motor_name) ) - @Slot() + @SafeSlot() def move_motor(self): target_position = self.spin_box.value() self.dev[self.motor_name].move(target_position) print(f"Commanding motor {self.motor_name} to move to {target_position}") - @Slot(dict, dict) + @SafeSlot(dict, dict) def on_motor_update(self, msg_content, metadata): position = msg_content.get("signals", {}).get(self.motor_name, {}).get("value", "N/A") self.label.setText(f"{self.motor_name} : {round(position, 2)}") @@ -203,11 +201,11 @@ class MotorControlWidget(BECWidget, QWidget): ``` ```{warning} -After implementing an RPC method, you must run the `cli/generate_cli.py` script to update the CLI commands for `BECIPythonClient`. This script generates the necessary command-line interface bindings, ensuring that your RPC method can be accessed and controlled remotely. +After implementing an RPC method, you must run the `bw-generate-cli --target ` script to update the CLI commands for `BECIPythonClient`, e.g. `bw-generate-cli --target csaxs_bec`. This script generates the necessary command-line interface bindings, ensuring that your RPC method can be accessed and controlled remotely. ``` ```{note} -In this tutorial, we used the @Slot decorator from QtCore to mark methods as slots for signals. This decorator ensures that the connected methods are treated as slots by the Qt framework, which can be connected to signals. It’s a best practice to use the @Slot decorator to clearly indicate which methods are intended to handle signal events with correct argument signatures. +In this tutorial, we used the @SafeSlot decorator from BEC Widgets to mark methods as slots for signals. This decorator ensures that the connected methods are treated as slots by the Qt framework, which can be connected to signals. It’s a best practice to use the @SafeSlot decorator to clearly indicate which methods are intended to handle signal events with correct argument signatures. @SafeSlot also provides error handling and logging capabilities, making it more robust and easier to debug. ``` ## Step 4: Running the Widget diff --git a/docs/user/widgets/buttons_appearance/buttons_appearance.md b/docs/user/widgets/buttons_appearance/buttons_appearance.md index 31af3c8a..32b40060 100644 --- a/docs/user/widgets/buttons_appearance/buttons_appearance.md +++ b/docs/user/widgets/buttons_appearance/buttons_appearance.md @@ -63,12 +63,12 @@ from qtpy.QtWidgets import QWidget, QVBoxLayout from bec_widgets.widgets.buttons import DarkModeButton class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Create and add the DarkModeButton to the layout - self.dark_mode_button = DarkModeButton() + self.dark_mode_button = DarkModeButton(parent=self) self.layout().addWidget(self.dark_mode_button) # Example of how this custom GUI might be used: @@ -83,12 +83,12 @@ from qtpy.QtWidgets import QWidget, QVBoxLayout from bec_widgets.widgets.buttons import ColorButton class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Create and add the ColorButton to the layout - self.color_button = ColorButton() + self.color_button = ColorButton(self) self.layout().addWidget(self.color_button) # Example of how this custom GUI might be used: @@ -103,12 +103,12 @@ from qtpy.QtWidgets import QWidget, QVBoxLayout from bec_widgets.widgets.buttons import ColormapSelector class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Create and add the ColormapSelector to the layout - self.colormap_selector = ColormapSelector() + self.colormap_selector = ColormapSelector(self) self.layout().addWidget(self.colormap_selector) # Example of how this custom GUI might be used: @@ -123,12 +123,12 @@ from qtpy.QtWidgets import QWidget, QVBoxLayout from bec_widgets.widgets.buttons import ColormapButton class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Create and add the ColormapButton to the layout - self.colormap_button = ColormapButton() + self.colormap_button = ColormapButton(self) self.layout().addWidget(self.colormap_button) # Connect the signal to handle colormap changes diff --git a/docs/user/widgets/device_input/device_input.md b/docs/user/widgets/device_input/device_input.md index c289d554..7469880e 100644 --- a/docs/user/widgets/device_input/device_input.md +++ b/docs/user/widgets/device_input/device_input.md @@ -45,12 +45,12 @@ from bec_lib.device import ReadoutPriority from bec_widgets.widgets.base_classes.device_input_base import BECDeviceFilter class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Initialize the layout for the widget # Create and add the DeviceLineEdit to the layout - self.device_line_edit = DeviceLineEdit(device_filter=BECDeviceFilter.POSITIONER, readout_priority_filter=ReadoutPriority.BASELINE) + self.device_line_edit = DeviceLineEdit(parent=self, device_filter=BECDeviceFilter.POSITIONER, readout_priority_filter=ReadoutPriority.BASELINE) self.layout().addWidget(self.device_line_edit) # Example of how this custom GUI might be used: @@ -71,12 +71,12 @@ from bec_lib.device import ReadoutPriority from bec_widgets.widgets.base_classes.device_input_base import BECDeviceFilter class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Initialize the layout for the widget # Create and add the DeviceComboBox to the layout - self.device_combobox = DeviceComboBox(device_filter=BECDeviceFilter.POSITIONER, readout_priority_filter=ReadoutPriority.BASELINE) + self.device_combobox = DeviceComboBox(parent=self, device_filter=BECDeviceFilter.POSITIONER, readout_priority_filter=ReadoutPriority.BASELINE) self.layout().addWidget(self.device_combobox) # Example of how this custom GUI might be used: diff --git a/docs/user/widgets/lmfit_dialog/lmfit_dialog.md b/docs/user/widgets/lmfit_dialog/lmfit_dialog.md index a3157e0a..8c0607cd 100644 --- a/docs/user/widgets/lmfit_dialog/lmfit_dialog.md +++ b/docs/user/widgets/lmfit_dialog/lmfit_dialog.md @@ -4,14 +4,14 @@ ````{tab} Overview -The [`LMFit Dialog`](/api_reference/_autosummary/bec_widgets.widgets.lmfit_dialog.lmfit_dialog.LMFitDialog) is a widget that is developed to be used together with the [`BECWaveformWidget`](/api_reference/_autosummary/bec_widgets.widgets.waveform.waveform_widget.BECWaveformWidget). The `BECWaveformWidget` allows user to submit a fit request to BEC's [DAP server](https://bec.readthedocs.io/en/latest/developer/getting_started/architecture.html) choosing from a selection of [LMFit models](https://lmfit.github.io/lmfit-py/builtin_models.html#) to fit monitored data sources. The `LMFit Dialog` provides an interface to monitor these fits, including statistics and fit parameters in real time. -Within the `BECWaveformWidget`, the dialog is accessible via the toolbar and will be automatically linked to the current waveform widget. For a more customised use, we can embed the `LMFit Dialog` in a larger GUI using the *BEC Designer*. In this case, one has to connect the [`update_summary_tree`](/api_reference/_autosummary/bec_widgets.widgets.lmfit_dialog.lmfit_dialog.LMFitDialog.rst#bec_widgets.widgets.lmfit_dialog.lmfit_dialog.LMFitDialog.update_summary_tree) slot of the LMFit Dialog to the [`dap_summary_update`](/api_reference/_autosummary/bec_widgets.widgets.waveform.waveform_widget.BECWaveformWidget.rst#bec_widgets.widgets.waveform.waveform_widget.BECWaveformWidget.dap_summary_update) signal of the BECWaveformWidget to ensure its functionality. +The [`LMFit Dialog`](/api_reference/_autosummary/bec_widgets.widgets.dap.lmfit_dialog.lmfit_dialog.LMFitDialog) is a widget that is developed to be used together with the [`Waveform`](/api_reference/_autosummary/bec_widgets.widgets.plots.waveform.waveform_widget.Waveform) widget. The `Waveform` widget allows user to submit a fit request to BEC's [DAP server](https://bec.readthedocs.io/en/latest/developer/getting_started/architecture.html) choosing from a selection of [LMFit models](https://lmfit.github.io/lmfit-py/builtin_models.html#) to fit monitored data sources. The `LMFit Dialog` provides an interface to monitor these fits, including statistics and fit parameters in real time. +Within the `Waveform` widget, the dialog is accessible via the toolbar and will be automatically linked to the current waveform widget. For a more customised use, we can embed the `LMFit Dialog` in a larger GUI using the *BEC Designer*. In this case, one has to connect the [`update_summary_tree`](/api_reference/_autosummary/bec_widgets.widgets.dap.lmfit_dialog.lmfit_dialog.LMFitDialog.rst#bec_widgets.widgets.lmfit_dialog.lmfit_dialog.LMFitDialog.update_summary_tree) slot of the LMFit Dialog to the [`dap_summary_update`](/api_reference/_autosummary/bec_widgets.widgets.plots.waveform.waveform_widget.Waveform.rst#bec_widgets.widgets.plots.waveform.waveform_widget.Waveform.dap_summary_update) signal of the BECWaveformWidget to ensure its functionality. ## Key Features: - **Fit Summary**: Display updates on LMFit DAP processes and fit statistics. - **Fit Parameter**: Display current fit parameter. -- **BECWaveformWidget Integration**: Directly connect to BECWaveformWidget to display fit statistics and parameters. +- **`Waveform` Widget Integration**: Directly connect to `Waveform` widget to display fit statistics and parameters. ```{figure} /assets/widget_screenshots/lmfit_dialog.png --- name: lmfit_dialog @@ -20,12 +20,12 @@ LMFit Dialog ``` ```` ````{tab} Connect in BEC Designer -The `LMFit Dialog` widget can be connected to a `BECWaveformWidget` to display fit statistics and parameters from the LMFit DAP process hooked up to the waveform widget. You can use the signal/slot editor from the BEC Designer to connect the `dap_summary_update` signal of the BECWaveformWidget to the `update_summary_tree` slot of the LMFit Dialog. +The `LMFit Dialog` widget can be connected to a `Waveform` widget to display fit statistics and parameters from the LMFit DAP process hooked up to the waveform widget. You can use the signal/slot editor from the BEC Designer to connect the `dap_summary_update` signal of the `Waveform` widget to the `update_summary_tree` slot of the LMFit Dialog. ```{figure} /assets/widget_screenshots/lmfit_dialog_connect.png ```` ````{tab} Connect in Python -It is also possible to directly connect the `dap_summary_update` signal of the BECWaveformWidget to the `update_summary_tree` slot of the LMFit Dialog in Python. +It is also possible to directly connect the `dap_summary_update` signal of the `Waveform` widget to the `update_summary_tree` slot of the LMFit Dialog in Python. ```python waveform = BECWaveformWidget(...) diff --git a/docs/user/widgets/positioner_box/positioner_box.md b/docs/user/widgets/positioner_box/positioner_box.md index ff19570c..7c4e05c8 100644 --- a/docs/user/widgets/positioner_box/positioner_box.md +++ b/docs/user/widgets/positioner_box/positioner_box.md @@ -27,12 +27,12 @@ from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget from bec_widgets.widgets.positioner_box import PositionerBox class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Initialize the layout for the widget # Create and add the PositionerBox to the layout - self.positioner_box = PositionerBox(device="motor1") + self.positioner_box = PositionerBox(parent=self, device="motor1") self.layout().addWidget(self.positioner_box) # Example of how this custom GUI might be used: diff --git a/docs/user/widgets/positioner_box/positioner_box_2d.md b/docs/user/widgets/positioner_box/positioner_box_2d.md index bdaed4ab..db1c9507 100644 --- a/docs/user/widgets/positioner_box/positioner_box_2d.md +++ b/docs/user/widgets/positioner_box/positioner_box_2d.md @@ -1,10 +1,10 @@ (user.widgets.positioner_box_2d)= -# Positioner Box Widget +# Positioner Box 2D Widget ````{tab} Overview -The [`PositionerBox2D`](/api_reference/_autosummary/bec_widgets.cli.client.PositionerBox2D) widget is very similar to the ['PositionerBox'](/user/widgets/positioner_box/positioner_box) but allows controlling two positioners at the same time, in a horizontal and vertical orientation respectively. It is intended primarily for controlling axes which have a perpendicular relationship like that. In other cases, it may be better to use a `PositionerGroup` instead. +The [`PositionerBox2D`](/api_reference/_autosummary/bec_widgets.cli.client.PositionerBox2D) widget is very similar to the [`PositionerBox`](/user/widgets/positioner_box/positioner_box) but allows controlling two positioners at the same time, in a horizontal and vertical orientation respectively. It is intended primarily for controlling axes which have a perpendicular relationship like that. In other cases, it may be better to use a `PositionerGroup` instead. The `PositionerBox2D` has the same features as the standard `PositionerBox`, but additionally, step buttons which move the positioner by the selected step size, and tweak buttons which move by a tenth of the selected step size. @@ -23,12 +23,12 @@ from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget from bec_widgets.widgets.positioner_box import PositionerBox2D class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Initialize the layout for the widget # Create and add the PositionerBox to the layout - self.positioner_box_2d = PositionerBox(device_hor="horizontal_motor", device_ver="vertical_motor") + self.positioner_box_2d = PositionerBox(parent=self, device_hor="horizontal_motor", device_ver="vertical_motor") self.layout().addWidget(self.positioner_box_2d) # Example of how this custom GUI might be used: diff --git a/docs/user/widgets/progress_bar/ring_progress_bar.md b/docs/user/widgets/progress_bar/ring_progress_bar.md index 782d7593..a86ec75a 100644 --- a/docs/user/widgets/progress_bar/ring_progress_bar.md +++ b/docs/user/widgets/progress_bar/ring_progress_bar.md @@ -24,7 +24,8 @@ In this example, we demonstrate how to add a `RingProgressBar` widget to a `BECD ```python # Add a new dock with a RingProgressBar widget -progress = gui.add_dock().add_widget("RingProgressBar") +dock_area = gui.new('my_new_dock_area') # Create a new dock area +progress = dock_area.new().new(gui.available_widgets.RingProgressBar) # Customize the size of the progress ring progress.set_line_widths(20) diff --git a/docs/user/widgets/waveform/scatter_2D.gif b/docs/user/widgets/scatter_waveform/scatter_2D.gif similarity index 100% rename from docs/user/widgets/waveform/scatter_2D.gif rename to docs/user/widgets/scatter_waveform/scatter_2D.gif diff --git a/docs/user/widgets/scatter_waveform/scatter_waveform.md b/docs/user/widgets/scatter_waveform/scatter_waveform.md new file mode 100644 index 00000000..aa699c97 --- /dev/null +++ b/docs/user/widgets/scatter_waveform/scatter_waveform.md @@ -0,0 +1,39 @@ +(user.widgets.scatter_waveform_widget)= + +# Scatter Waveform Widget + +````{tab} Overview +The 2D scatter plot widget is designed for more complex data visualization. It employs a false color map to represent a third dimension (z-axis), making it an ideal tool for visualizing multidimensional data sets. + +## Key Features: +- **Real-Time Data Visualization**: Display 2D scatter plots with a third dimension represented by color. +- **Flexible Integration**: Can be integrated into [`BECDockArea`](user.widgets.bec_dock_area), or used as an individual component in your application through `BECDesigner`. + +```` + +````{tab} Examples - CLI + +`ScatterWaveform` widget can be embedded in [`BECDockArea`](user.widgets.bec_dock_area), or used as an individual component in your application through `BECDesigner`. The command-line API is consistent across these contexts. + +## Example + +```python +# Add a new dock_area, a new dock and a BECWaveForm to the dock +plt = gui.new().new().new(gui.available_widgets.ScatterWaveform) +plt.plot(x_name='samx', y_name='samy', z_name='bpm4i') + +``` + +![Scatter 2D](./scatter_2D.gif) + + +```{note} +The ScatterWaveform widget only plots the data points if both x and y axis motors are moving. Or more generally, if all signals are of readout type *monitored*. +``` +```` + +````{tab} API +```{eval-rst} +.. include:: /api_reference/_autosummary/bec_widgets.cli.client.ScatterWaveform.rst +``` +```` diff --git a/docs/user/widgets/toggle/toggle.md b/docs/user/widgets/toggle/toggle.md index 41bab87c..06b067ec 100644 --- a/docs/user/widgets/toggle/toggle.md +++ b/docs/user/widgets/toggle/toggle.md @@ -27,12 +27,12 @@ from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget from bec_widgets.widgets.toggle_switch import ToggleSwitch class MyGui(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent=parent) self.setLayout(QVBoxLayout(self)) # Initialize the layout for the widget # Create and add the ToggleSwitch to the layout - self.toggle_switch = ToggleSwitch() + self.toggle_switch = ToggleSwitch(parent=self) self.layout().addWidget(self.toggle_switch) # Example of how this custom GUI might be used: diff --git a/docs/user/widgets/waveform/waveform_widget.md b/docs/user/widgets/waveform/waveform_widget.md index e15daf69..c5422b35 100644 --- a/docs/user/widgets/waveform/waveform_widget.md +++ b/docs/user/widgets/waveform/waveform_widget.md @@ -36,9 +36,9 @@ plt1.plot(x_name='samx', y_name='bpm4i') plt2.plot(x_name='samx', y_name='bpm3i') # set axis labels -plt1.set_title("Gauss plots vs. samx") -plt1.set_x_label("Motor X") -plt1.set_y_label("Gauss Signal (A.U.") +plt1.title = "Gauss plots vs. samx" +plt1.x_label = "Motor X" +plt1.y_label = "Gauss Signal (A.U.)" ``` @@ -97,25 +97,6 @@ print(dap_bpm3a.dap_params) ![Waveform 1D_DAP](./bec_figure_dap.gif) -## Example 3 - 2D ScatterWaveform plot - -The 2D scatter plot widget is designed for more complex data visualization. It employs a false color map to represent a third dimension (z-axis), making it an ideal tool for visualizing multidimensional data sets. - -```python -# Add a new dock_area, a new dock and a BECWaveForm to the dock -plt = gui.new().new().new(gui.available_widgets.ScatterWaveform) -plt.plot(x_name='samx', y_name='samy', z_name='bpm4i') - -plt = gui.add_dock().add_widget('BECFigure').add_plot(x_name='samx', y_name='samy', z_name='bpm4i') -``` - -![Scatter 2D](./scatter_2D.gif) - - -```{note} -The ScatterWaveform widget only plots the data points if both x and y axis motors are moving. Or more generally, if all signals are of readout type *monitored*. -``` - ```` ````{tab} API diff --git a/docs/user/widgets/widgets.md b/docs/user/widgets/widgets.md index 6898c901..21ebd4c8 100644 --- a/docs/user/widgets/widgets.md +++ b/docs/user/widgets/widgets.md @@ -45,7 +45,15 @@ Display 1D detector signals. Display multiple 1D waveforms. ``` -```{grid-item-card} Image widget +```{grid-item-card} Scatter Waveform Widget +:link: user.widgets.scatter_waveform_widget +:link-type: ref +:img-top: /assets/widget_screenshots/scatter_waveform.png + +Display a 1D waveforms with a third device on the z-axis. +``` + +```{grid-item-card} Image Widget :link: user.widgets.image_widget :link-type: ref :img-top: /assets/widget_screenshots/image_widget.png @@ -256,6 +264,7 @@ hidden: true dock_area/bec_dock_area.md waveform/waveform_widget.md +scatter_waveform/scatter_waveform.md multi_waveform/multi_waveform.md image/image_widget.md motor_map/motor_map.md