bec-widgets 0.99.1__py3-none-any.whl → 0.99.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- .gitlab-ci.yml +0 -1
- CHANGELOG.md +76 -70
- PKG-INFO +2 -2
- bec_widgets/cli/client.py +3 -3
- bec_widgets/qt_utils/toolbar.py +11 -5
- bec_widgets/utils/bec_widget.py +11 -2
- bec_widgets/utils/colors.py +18 -2
- bec_widgets/utils/plugin_templates/plugin.template +2 -2
- bec_widgets/widgets/bec_queue/bec_queue.py +2 -0
- bec_widgets/widgets/bec_queue/bec_queue_plugin.py +1 -1
- bec_widgets/widgets/bec_status_box/bec_status_box.py +2 -0
- bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +1 -1
- bec_widgets/widgets/color_button/color_button.py +2 -0
- bec_widgets/widgets/color_button/color_button_plugin.py +1 -1
- bec_widgets/widgets/colormap_selector/colormap_selector.py +1 -0
- bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +1 -1
- bec_widgets/widgets/dark_mode_button/dark_mode_button.py +12 -3
- bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +1 -1
- bec_widgets/widgets/device_browser/device_browser.py +2 -0
- bec_widgets/widgets/device_browser/device_browser_plugin.py +1 -1
- bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +1 -1
- bec_widgets/widgets/device_combobox/device_combobox.py +2 -0
- bec_widgets/widgets/device_line_edit/device_line_edit.py +2 -0
- bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +1 -1
- bec_widgets/widgets/dock/dock.py +1 -0
- bec_widgets/widgets/dock/dock_area.py +30 -10
- bec_widgets/widgets/dock/dock_area_plugin.py +1 -1
- bec_widgets/widgets/figure/figure.py +1 -1
- bec_widgets/widgets/figure/plots/waveform/waveform.py +12 -7
- bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +3 -3
- bec_widgets/widgets/image/bec_image_widget_plugin.py +1 -1
- bec_widgets/widgets/image/image_widget.py +1 -0
- bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +1 -1
- bec_widgets/widgets/motor_map/motor_map_widget.py +1 -0
- bec_widgets/widgets/position_indicator/position_indicator.py +2 -0
- bec_widgets/widgets/position_indicator/position_indicator_plugin.py +1 -1
- bec_widgets/widgets/positioner_box/positioner_box.py +1 -0
- bec_widgets/widgets/positioner_box/positioner_box_plugin.py +1 -1
- bec_widgets/widgets/positioner_box/positioner_control_line.py +2 -0
- bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +1 -1
- bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +1 -0
- bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +1 -1
- bec_widgets/widgets/scan_control/scan_control.py +2 -0
- bec_widgets/widgets/scan_control/scan_control_plugin.py +1 -4
- bec_widgets/widgets/spinner/spinner.py +2 -0
- bec_widgets/widgets/spinner/spinner_widget_plugin.py +1 -1
- bec_widgets/widgets/stop_button/stop_button.py +2 -0
- bec_widgets/widgets/stop_button/stop_button_plugin.py +1 -1
- bec_widgets/widgets/text_box/text_box.py +1 -0
- bec_widgets/widgets/text_box/text_box_plugin.py +1 -1
- bec_widgets/widgets/toggle/toggle.py +1 -0
- bec_widgets/widgets/toggle/toggle_switch_plugin.py +1 -1
- bec_widgets/widgets/vscode/vs_code_editor_plugin.py +1 -1
- bec_widgets/widgets/vscode/vscode.py +1 -0
- bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +1 -1
- bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +14 -13
- bec_widgets/widgets/waveform/waveform_widget.py +3 -2
- bec_widgets/widgets/website/website.py +42 -10
- bec_widgets/widgets/website/website_widget_plugin.py +1 -1
- {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/METADATA +2 -2
- bec_widgets-0.99.9.dist-info/RECORD +231 -0
- pyproject.toml +7 -2
- bec_widgets/assets/toolbar_icons/add.svg +0 -3
- bec_widgets/assets/toolbar_icons/attach_all.svg +0 -3
- bec_widgets/assets/toolbar_icons/auto_range.svg +0 -3
- bec_widgets/assets/toolbar_icons/compare.svg +0 -3
- bec_widgets/assets/toolbar_icons/connection.svg +0 -4
- bec_widgets/assets/toolbar_icons/device_line_edit.svg +0 -3
- bec_widgets/assets/toolbar_icons/drag_pan_mode.svg +0 -3
- bec_widgets/assets/toolbar_icons/export.svg +0 -9
- bec_widgets/assets/toolbar_icons/fft.svg +0 -11
- bec_widgets/assets/toolbar_icons/fitting_parameters.svg +0 -3
- bec_widgets/assets/toolbar_icons/history.svg +0 -4
- bec_widgets/assets/toolbar_icons/image.svg +0 -3
- bec_widgets/assets/toolbar_icons/image_autorange.svg +0 -3
- bec_widgets/assets/toolbar_icons/import.svg +0 -9
- bec_widgets/assets/toolbar_icons/line_axis.svg +0 -3
- bec_widgets/assets/toolbar_icons/line_curve.svg +0 -3
- bec_widgets/assets/toolbar_icons/lock_aspect_ratio.svg +0 -3
- bec_widgets/assets/toolbar_icons/log_scale.png +0 -0
- bec_widgets/assets/toolbar_icons/motor_map.svg +0 -3
- bec_widgets/assets/toolbar_icons/photo_library.svg +0 -3
- bec_widgets/assets/toolbar_icons/positioner_box.svg +0 -3
- bec_widgets/assets/toolbar_icons/progress.svg +0 -3
- bec_widgets/assets/toolbar_icons/queue.svg +0 -3
- bec_widgets/assets/toolbar_icons/rectangle_mode.svg +0 -3
- bec_widgets/assets/toolbar_icons/remove.svg +0 -5
- bec_widgets/assets/toolbar_icons/reset_settings.svg +0 -3
- bec_widgets/assets/toolbar_icons/restore_state.svg +0 -3
- bec_widgets/assets/toolbar_icons/ring_progress.svg +0 -3
- bec_widgets/assets/toolbar_icons/rotate_left.svg +0 -3
- bec_widgets/assets/toolbar_icons/rotate_right.svg +0 -3
- bec_widgets/assets/toolbar_icons/save.svg +0 -3
- bec_widgets/assets/toolbar_icons/save_state.svg +0 -3
- bec_widgets/assets/toolbar_icons/scan_control.svg +0 -3
- bec_widgets/assets/toolbar_icons/settings.svg +0 -4
- bec_widgets/assets/toolbar_icons/status.svg +0 -3
- bec_widgets/assets/toolbar_icons/terminal.svg +0 -3
- bec_widgets/assets/toolbar_icons/transform.svg +0 -3
- bec_widgets/assets/toolbar_icons/waveform.svg +0 -3
- bec_widgets-0.99.1.dist-info/RECORD +0 -415
- docs/Makefile +0 -20
- docs/_static/custom.css +0 -170
- docs/_templates/custom-class-template.rst +0 -34
- docs/_templates/custom-module-template.rst +0 -66
- docs/api_reference/api_reference.md +0 -12
- docs/assets/apps_48dp.svg +0 -1
- docs/assets/display_settings_48dp.svg +0 -1
- docs/assets/index_api.svg +0 -97
- docs/assets/index_contribute.svg +0 -76
- docs/assets/index_getting_started.svg +0 -66
- docs/assets/index_user_guide.svg +0 -67
- docs/assets/rocket_launch_48dp.svg +0 -1
- docs/assets/widget_screenshots/buttons.png +0 -0
- docs/assets/widget_screenshots/device_box.png +0 -0
- docs/assets/widget_screenshots/device_browser.png +0 -0
- docs/assets/widget_screenshots/device_inputs.png +0 -0
- docs/assets/widget_screenshots/dock_area.png +0 -0
- docs/assets/widget_screenshots/figure.png +0 -0
- docs/assets/widget_screenshots/image_widget.png +0 -0
- docs/assets/widget_screenshots/motor_map_widget.png +0 -0
- docs/assets/widget_screenshots/position_indicator.png +0 -0
- docs/assets/widget_screenshots/queue.png +0 -0
- docs/assets/widget_screenshots/ring_progress_bar.png +0 -0
- docs/assets/widget_screenshots/scan_controller.png +0 -0
- docs/assets/widget_screenshots/spinner.gif +0 -0
- docs/assets/widget_screenshots/status_box.png +0 -0
- docs/assets/widget_screenshots/text_box.png +0 -0
- docs/assets/widget_screenshots/toggle.png +0 -0
- docs/assets/widget_screenshots/waveform_widget.png +0 -0
- docs/assets/widget_screenshots/website.png +0 -0
- docs/conf.py +0 -82
- docs/developer/developer.md +0 -52
- docs/developer/introduction/concepts.md +0 -14
- docs/developer/introduction/contributing.md +0 -28
- docs/developer/introduction/introduction.md +0 -16
- docs/developer/introduction/useful_links.md +0 -23
- docs/developer/widget_development/bec_dispatcher.md +0 -143
- docs/developer/widget_development/widget_development.md +0 -13
- docs/index.md +0 -74
- docs/introduction/introduction.md +0 -18
- docs/make.bat +0 -35
- docs/requirements.txt +0 -12
- docs/user/api_reference/api_reference.md +0 -11
- docs/user/applications/applications.md +0 -10
- docs/user/customisation.md +0 -123
- docs/user/getting_started/BECDockArea.png +0 -0
- docs/user/getting_started/auto_updates.md +0 -82
- docs/user/getting_started/getting_started.md +0 -15
- docs/user/getting_started/gui_complex_gui.gif +0 -0
- docs/user/getting_started/installation.md +0 -33
- docs/user/getting_started/quick_start.md +0 -110
- docs/user/getting_started/video_tutorials.md +0 -17
- docs/user/user.md +0 -71
- docs/user/widgets/bec_figure/BECFigure.png +0 -0
- docs/user/widgets/bec_figure/bec_figure.md +0 -105
- docs/user/widgets/bec_status_box/bec_status_box.gif +0 -0
- docs/user/widgets/bec_status_box/bec_status_box.md +0 -38
- docs/user/widgets/buttons/buttons.md +0 -63
- docs/user/widgets/buttons/dark_mode_disabled.png +0 -0
- docs/user/widgets/buttons/dark_mode_enabled.png +0 -0
- docs/user/widgets/device_browser/device_browser.md +0 -36
- docs/user/widgets/device_browser/device_browser.png +0 -0
- docs/user/widgets/device_input/device_input.md +0 -100
- docs/user/widgets/dock_area/BECDockArea.png +0 -0
- docs/user/widgets/dock_area/bec_dock_area.md +0 -107
- docs/user/widgets/image/image_plot.gif +0 -0
- docs/user/widgets/image/image_widget.md +0 -84
- docs/user/widgets/motor_map/motor.gif +0 -0
- docs/user/widgets/motor_map/motor_map.md +0 -80
- docs/user/widgets/position_indicator/position_indicator.md +0 -76
- docs/user/widgets/positioner_box/positioner_box.md +0 -63
- docs/user/widgets/progress_bar/progress_bar.gif +0 -0
- docs/user/widgets/progress_bar/ring_progress_bar.md +0 -103
- docs/user/widgets/queue/queue.md +0 -41
- docs/user/widgets/scan_control/hide_scan_control.png +0 -0
- docs/user/widgets/scan_control/scan_control.gif +0 -0
- docs/user/widgets/scan_control/scan_control.md +0 -54
- docs/user/widgets/spinner/spinner.md +0 -75
- docs/user/widgets/text_box/text_box.md +0 -74
- docs/user/widgets/toggle/toggle.md +0 -66
- docs/user/widgets/waveform/bec_figure_dap.gif +0 -0
- docs/user/widgets/waveform/scatter_2D.gif +0 -0
- docs/user/widgets/waveform/w1D.gif +0 -0
- docs/user/widgets/waveform/waveform_widget.md +0 -132
- docs/user/widgets/website/website.md +0 -69
- docs/user/widgets/widgets.md +0 -220
- tests/__init__.py +0 -0
- tests/end-2-end/__init__.py +0 -0
- tests/end-2-end/conftest.py +0 -53
- tests/end-2-end/test_bec_dock_rpc_e2e.py +0 -298
- tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -212
- tests/end-2-end/test_rpc_register_e2e.py +0 -40
- tests/end-2-end/test_scan_control_e2e.py +0 -71
- tests/references/SpinnerWidget/SpinnerWidget_darwin.png +0 -0
- tests/references/SpinnerWidget/SpinnerWidget_linux.png +0 -0
- tests/references/SpinnerWidget/SpinnerWidget_started_darwin.png +0 -0
- tests/references/SpinnerWidget/SpinnerWidget_started_linux.png +0 -0
- tests/unit_tests/__init__.py +0 -0
- tests/unit_tests/client_mocks.py +0 -189
- tests/unit_tests/conftest.py +0 -64
- tests/unit_tests/test_bec_connector.py +0 -80
- tests/unit_tests/test_bec_dispatcher.py +0 -119
- tests/unit_tests/test_bec_dock.py +0 -155
- tests/unit_tests/test_bec_figure.py +0 -270
- tests/unit_tests/test_bec_image.py +0 -63
- tests/unit_tests/test_bec_image_widget.py +0 -217
- tests/unit_tests/test_bec_motor_map.py +0 -282
- tests/unit_tests/test_bec_queue.py +0 -111
- tests/unit_tests/test_bec_status_box.py +0 -123
- tests/unit_tests/test_client_utils.py +0 -76
- tests/unit_tests/test_color_map_selector.py +0 -42
- tests/unit_tests/test_color_validation.py +0 -75
- tests/unit_tests/test_configs/config_device.yaml +0 -33
- tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -27
- tests/unit_tests/test_configs/config_scan.yaml +0 -82
- tests/unit_tests/test_crosshair.py +0 -143
- tests/unit_tests/test_dark_mode_button.py +0 -70
- tests/unit_tests/test_device_browser.py +0 -83
- tests/unit_tests/test_device_input_base.py +0 -76
- tests/unit_tests/test_device_input_widgets.py +0 -178
- tests/unit_tests/test_error_utils.py +0 -63
- tests/unit_tests/test_generate_cli_client.py +0 -123
- tests/unit_tests/test_generate_plugin.py +0 -155
- tests/unit_tests/test_motor_map_widget.py +0 -194
- tests/unit_tests/test_msgs/__init__.py +0 -0
- tests/unit_tests/test_msgs/available_scans_message.py +0 -989
- tests/unit_tests/test_plot_base.py +0 -95
- tests/unit_tests/test_plugin_utils.py +0 -13
- tests/unit_tests/test_positioner_box.py +0 -130
- tests/unit_tests/test_ring_progress_bar.py +0 -337
- tests/unit_tests/test_rpc_register.py +0 -52
- tests/unit_tests/test_rpc_server.py +0 -42
- tests/unit_tests/test_rpc_widget_handler.py +0 -7
- tests/unit_tests/test_scan_control.py +0 -324
- tests/unit_tests/test_scan_control_group_box.py +0 -160
- tests/unit_tests/test_setting_dialog.py +0 -96
- tests/unit_tests/test_spinner.py +0 -31
- tests/unit_tests/test_stop_button.py +0 -27
- tests/unit_tests/test_text_box_widget.py +0 -54
- tests/unit_tests/test_toggle.py +0 -38
- tests/unit_tests/test_vscode_widget.py +0 -75
- tests/unit_tests/test_waveform1d.py +0 -712
- tests/unit_tests/test_waveform_widget.py +0 -462
- tests/unit_tests/test_website_widget.py +0 -25
- tests/unit_tests/test_widget_io.py +0 -90
- tests/unit_tests/test_yaml_dialog.py +0 -163
- {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/WHEEL +0 -0
- {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/entry_points.txt +0 -0
- {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/licenses/LICENSE +0 -0
docs/user/widgets/widgets.md
DELETED
@@ -1,220 +0,0 @@
|
|
1
|
-
(user.widgets)=
|
2
|
-
# Widgets
|
3
|
-
|
4
|
-
BEC Widgets offers a range of tools designed to make data visualization in beamline experiments easier and more
|
5
|
-
interactive. These widgets help users better understand their data by providing clear, intuitive displays that enhance
|
6
|
-
the overall experience.
|
7
|
-
|
8
|
-
## Widget Containers
|
9
|
-
|
10
|
-
Serves as containers to organise and display other widgets.
|
11
|
-
|
12
|
-
````{grid} 3
|
13
|
-
:gutter: 2
|
14
|
-
|
15
|
-
```{grid-item-card} BEC Dock Area
|
16
|
-
:link: user.widgets.bec_dock_area
|
17
|
-
:link-type: ref
|
18
|
-
:img-top: /assets/widget_screenshots/dock_area.png
|
19
|
-
|
20
|
-
Quickly build dynamic GUI.
|
21
|
-
|
22
|
-
```
|
23
|
-
|
24
|
-
```{grid-item-card} BEC Figure
|
25
|
-
:link: user.widgets.bec_figure
|
26
|
-
:link-type: ref
|
27
|
-
:img-top: /assets/widget_screenshots/figure.png
|
28
|
-
|
29
|
-
Display 1D and 2D data.
|
30
|
-
```
|
31
|
-
````
|
32
|
-
|
33
|
-
## Plotting Widgets
|
34
|
-
|
35
|
-
Plotting widgets are used to display data in a graphical format.
|
36
|
-
|
37
|
-
````{grid} 3
|
38
|
-
:gutter: 2
|
39
|
-
|
40
|
-
```{grid-item-card} Waveform Widget
|
41
|
-
:link: user.widgets.waveform_widget
|
42
|
-
:link-type: ref
|
43
|
-
:img-top: /assets/widget_screenshots/waveform_widget.png
|
44
|
-
|
45
|
-
Display 1D detector signals.
|
46
|
-
```
|
47
|
-
|
48
|
-
```{grid-item-card} Image Widget
|
49
|
-
:link: user.widgets.image_widget
|
50
|
-
:link-type: ref
|
51
|
-
:img-top: /assets/widget_screenshots/image_widget.png
|
52
|
-
|
53
|
-
Display signal from 2D detector.
|
54
|
-
```
|
55
|
-
|
56
|
-
```{grid-item-card} Motor Map Widget
|
57
|
-
:link: user.widgets.motor_map
|
58
|
-
:link-type: ref
|
59
|
-
:img-top: /assets/widget_screenshots/motor_map_widget.png
|
60
|
-
|
61
|
-
Track position for motors.
|
62
|
-
```
|
63
|
-
|
64
|
-
````
|
65
|
-
|
66
|
-
## Device Control Widgets
|
67
|
-
|
68
|
-
Control and monitor devices/scan in the BEC environment.
|
69
|
-
|
70
|
-
````{grid} 3
|
71
|
-
:gutter: 2
|
72
|
-
|
73
|
-
```{grid-item-card} Scan Control Widget
|
74
|
-
:link: user.widgets.scan_control
|
75
|
-
:link-type: ref
|
76
|
-
:img-top: /assets/widget_screenshots/scan_controller.png
|
77
|
-
|
78
|
-
Launch scans.
|
79
|
-
```
|
80
|
-
|
81
|
-
```{grid-item-card} Device Browser
|
82
|
-
:link: user.widgets.device_browser
|
83
|
-
:link-type: ref
|
84
|
-
:img-top: /assets/widget_screenshots/device_browser.png
|
85
|
-
|
86
|
-
Find and drag devices.
|
87
|
-
```
|
88
|
-
|
89
|
-
```{grid-item-card} Positioner Box
|
90
|
-
:link: user.widgets.positioner_box
|
91
|
-
:link-type: ref
|
92
|
-
:img-top: /assets/widget_screenshots/device_box.png
|
93
|
-
|
94
|
-
Control individual device.
|
95
|
-
```
|
96
|
-
|
97
|
-
```{grid-item-card} Ring Progress Bar
|
98
|
-
:link: user.widgets.ring_progress_bar
|
99
|
-
:link-type: ref
|
100
|
-
:img-top: /assets/widget_screenshots/ring_progress_bar.png
|
101
|
-
|
102
|
-
Nested progress bar.
|
103
|
-
```
|
104
|
-
|
105
|
-
````
|
106
|
-
|
107
|
-
## BEC Service Widgets
|
108
|
-
|
109
|
-
Visualise the status of BEC services.
|
110
|
-
|
111
|
-
````{grid} 3
|
112
|
-
:gutter: 2
|
113
|
-
|
114
|
-
```{grid-item-card} BEC Status Box
|
115
|
-
:link: user.widgets.bec_status_box
|
116
|
-
:link-type: ref
|
117
|
-
:img-top: /assets/widget_screenshots/status_box.png
|
118
|
-
|
119
|
-
Display status of BEC services.
|
120
|
-
```
|
121
|
-
|
122
|
-
```{grid-item-card} BEC Queue Table
|
123
|
-
:link: user.widgets.bec_queue
|
124
|
-
:link-type: ref
|
125
|
-
:img-top: /assets/widget_screenshots/queue.png
|
126
|
-
|
127
|
-
Display current scan queue.
|
128
|
-
```
|
129
|
-
````
|
130
|
-
|
131
|
-
## BEC Utility Widgets
|
132
|
-
|
133
|
-
Various utility widgets to enhance user experience.
|
134
|
-
|
135
|
-
````{grid} 3
|
136
|
-
:gutter: 2
|
137
|
-
|
138
|
-
```{grid-item-card} Service Buttons
|
139
|
-
:link: user.widgets.buttons
|
140
|
-
:link-type: ref
|
141
|
-
:img-top: /assets/widget_screenshots/buttons.png
|
142
|
-
|
143
|
-
Various service buttons.
|
144
|
-
```
|
145
|
-
|
146
|
-
```{grid-item-card} Device Input Widgets
|
147
|
-
:link: user.widgets.device_input
|
148
|
-
:link-type: ref
|
149
|
-
:img-top: /assets/widget_screenshots/device_inputs.png
|
150
|
-
|
151
|
-
Choose individual device from current session.
|
152
|
-
```
|
153
|
-
|
154
|
-
```{grid-item-card} Text Box Widget
|
155
|
-
:link: user.widgets.text_box
|
156
|
-
:link-type: ref
|
157
|
-
:img-top: /assets/widget_screenshots/text_box.png
|
158
|
-
|
159
|
-
Display custom text or HTML content.
|
160
|
-
```
|
161
|
-
|
162
|
-
```{grid-item-card} Website Widget
|
163
|
-
:link: user.widgets.website
|
164
|
-
:link-type: ref
|
165
|
-
:img-top: /assets/widget_screenshots/website.png
|
166
|
-
|
167
|
-
Display website content.
|
168
|
-
```
|
169
|
-
|
170
|
-
```{grid-item-card} Toogle Widget
|
171
|
-
:link: user.widgets.toggle
|
172
|
-
:link-type: ref
|
173
|
-
:img-top: /assets/widget_screenshots/toggle.png
|
174
|
-
|
175
|
-
Angular like toggle switch.
|
176
|
-
```
|
177
|
-
|
178
|
-
```{grid-item-card} Spinner
|
179
|
-
:link: user.widgets.spinner
|
180
|
-
:link-type: ref
|
181
|
-
:img-top: /assets/widget_screenshots/spinner.gif
|
182
|
-
|
183
|
-
Display spinner widget for loading or device movement.
|
184
|
-
```
|
185
|
-
|
186
|
-
```{grid-item-card} Position Indicator
|
187
|
-
:link: user.widgets.position_indicator
|
188
|
-
:link-type: ref
|
189
|
-
:img-top: /assets/widget_screenshots/position_indicator.png
|
190
|
-
|
191
|
-
Display position of motor withing its limits.
|
192
|
-
```
|
193
|
-
````
|
194
|
-
|
195
|
-
```{toctree}
|
196
|
-
---
|
197
|
-
maxdepth: 1
|
198
|
-
hidden: true
|
199
|
-
---
|
200
|
-
|
201
|
-
dock_area/bec_dock_area.md
|
202
|
-
bec_figure/bec_figure.md
|
203
|
-
waveform/waveform_widget.md
|
204
|
-
image/image_widget.md
|
205
|
-
motor_map/motor_map.md
|
206
|
-
scan_control/scan_control.md
|
207
|
-
progress_bar/ring_progress_bar.md
|
208
|
-
bec_status_box/bec_status_box.md
|
209
|
-
queue/queue.md
|
210
|
-
buttons/buttons.md
|
211
|
-
device_browser/device_browser.md
|
212
|
-
positioner_box/positioner_box.md
|
213
|
-
text_box/text_box.md
|
214
|
-
website/website.md
|
215
|
-
toggle/toggle.md
|
216
|
-
spinner/spinner.md
|
217
|
-
device_input/device_input.md
|
218
|
-
position_indicator/position_indicator.md
|
219
|
-
|
220
|
-
```
|
tests/__init__.py
DELETED
File without changes
|
tests/end-2-end/__init__.py
DELETED
File without changes
|
tests/end-2-end/conftest.py
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
import random
|
2
|
-
import time
|
3
|
-
from contextlib import contextmanager
|
4
|
-
|
5
|
-
import pytest
|
6
|
-
from bec_lib.endpoints import MessageEndpoints
|
7
|
-
|
8
|
-
from bec_widgets.cli.client_utils import _start_plot_process
|
9
|
-
from bec_widgets.cli.rpc_register import RPCRegister
|
10
|
-
from bec_widgets.utils import BECDispatcher
|
11
|
-
from bec_widgets.widgets.dock import BECDockArea
|
12
|
-
from bec_widgets.widgets.figure import BECFigure
|
13
|
-
|
14
|
-
|
15
|
-
# make threads check in autouse, **will be executed at the end**; better than
|
16
|
-
# having it in fixtures for each test, since it prevents from needing to
|
17
|
-
# 'manually' shutdown bec_client_lib (for example) to make it happy, whereas
|
18
|
-
# whereas in fact bec_client_lib makes its on cleanup
|
19
|
-
@pytest.fixture(autouse=True)
|
20
|
-
def threads_check_fixture(threads_check):
|
21
|
-
return
|
22
|
-
|
23
|
-
|
24
|
-
@pytest.fixture
|
25
|
-
def gui_id():
|
26
|
-
return f"figure_{random.randint(0,100)}" # make a new gui id each time, to ensure no 'gui is alive' zombie key can perturbate
|
27
|
-
|
28
|
-
|
29
|
-
@contextmanager
|
30
|
-
def plot_server(gui_id, klass, client_lib):
|
31
|
-
dispatcher = BECDispatcher(client=client_lib) # Has to init singleton with fixture client
|
32
|
-
process, _ = _start_plot_process(gui_id, klass, client_lib._client._service_config.config_path)
|
33
|
-
try:
|
34
|
-
while client_lib._client.connector.get(MessageEndpoints.gui_heartbeat(gui_id)) is None:
|
35
|
-
time.sleep(0.3)
|
36
|
-
yield gui_id
|
37
|
-
finally:
|
38
|
-
process.terminate()
|
39
|
-
process.wait()
|
40
|
-
dispatcher.disconnect_all()
|
41
|
-
dispatcher.reset_singleton()
|
42
|
-
|
43
|
-
|
44
|
-
@pytest.fixture
|
45
|
-
def rpc_server_figure(gui_id, bec_client_lib):
|
46
|
-
with plot_server(gui_id, BECFigure, bec_client_lib) as server:
|
47
|
-
yield server
|
48
|
-
|
49
|
-
|
50
|
-
@pytest.fixture
|
51
|
-
def rpc_server_dock(gui_id, bec_client_lib):
|
52
|
-
with plot_server(gui_id, BECDockArea, bec_client_lib) as server:
|
53
|
-
yield server
|
@@ -1,298 +0,0 @@
|
|
1
|
-
import time
|
2
|
-
|
3
|
-
import numpy as np
|
4
|
-
import pytest
|
5
|
-
from bec_lib.client import BECClient
|
6
|
-
from bec_lib.endpoints import MessageEndpoints
|
7
|
-
|
8
|
-
from bec_widgets.cli.auto_updates import AutoUpdates
|
9
|
-
from bec_widgets.cli.client import BECDockArea, BECFigure, BECImageShow, BECMotorMap, BECWaveform
|
10
|
-
from bec_widgets.utils import Colors
|
11
|
-
|
12
|
-
# pylint: disable=unused-argument
|
13
|
-
# pylint: disable=redefined-outer-name
|
14
|
-
# pylint: disable=too-many-locals
|
15
|
-
|
16
|
-
|
17
|
-
def test_rpc_add_dock_with_figure_e2e(bec_client_lib, rpc_server_dock):
|
18
|
-
# BEC client shortcuts
|
19
|
-
dock = BECDockArea(rpc_server_dock)
|
20
|
-
client = bec_client_lib
|
21
|
-
dev = client.device_manager.devices
|
22
|
-
scans = client.scans
|
23
|
-
queue = client.queue
|
24
|
-
|
25
|
-
# Create 3 docks
|
26
|
-
d0 = dock.add_dock("dock_0")
|
27
|
-
d1 = dock.add_dock("dock_1")
|
28
|
-
d2 = dock.add_dock("dock_2")
|
29
|
-
|
30
|
-
dock_config = dock._config_dict
|
31
|
-
assert len(dock_config["docks"]) == 3
|
32
|
-
# Add 3 figures with some widgets
|
33
|
-
fig0 = d0.add_widget("BECFigure")
|
34
|
-
fig1 = d1.add_widget("BECFigure")
|
35
|
-
fig2 = d2.add_widget("BECFigure")
|
36
|
-
|
37
|
-
dock_config = dock._config_dict
|
38
|
-
assert len(dock_config["docks"]) == 3
|
39
|
-
assert len(dock_config["docks"]["dock_0"]["widgets"]) == 1
|
40
|
-
assert len(dock_config["docks"]["dock_1"]["widgets"]) == 1
|
41
|
-
assert len(dock_config["docks"]["dock_2"]["widgets"]) == 1
|
42
|
-
|
43
|
-
assert fig1.__class__.__name__ == "BECFigure"
|
44
|
-
assert fig1.__class__ == BECFigure
|
45
|
-
assert fig2.__class__.__name__ == "BECFigure"
|
46
|
-
assert fig2.__class__ == BECFigure
|
47
|
-
|
48
|
-
mm = fig0.motor_map("samx", "samy")
|
49
|
-
plt = fig1.plot(x_name="samx", y_name="bpm4i")
|
50
|
-
im = fig2.image("eiger")
|
51
|
-
|
52
|
-
assert mm.__class__.__name__ == "BECMotorMap"
|
53
|
-
assert mm.__class__ == BECMotorMap
|
54
|
-
assert plt.__class__.__name__ == "BECWaveform"
|
55
|
-
assert plt.__class__ == BECWaveform
|
56
|
-
assert im.__class__.__name__ == "BECImageShow"
|
57
|
-
assert im.__class__ == BECImageShow
|
58
|
-
|
59
|
-
assert mm._config_dict["signals"] == {
|
60
|
-
"dap": None,
|
61
|
-
"source": "device_readback",
|
62
|
-
"x": {
|
63
|
-
"name": "samx",
|
64
|
-
"entry": "samx",
|
65
|
-
"unit": None,
|
66
|
-
"modifier": None,
|
67
|
-
"limits": [-50.0, 50.0],
|
68
|
-
},
|
69
|
-
"y": {
|
70
|
-
"name": "samy",
|
71
|
-
"entry": "samy",
|
72
|
-
"unit": None,
|
73
|
-
"modifier": None,
|
74
|
-
"limits": [-50.0, 50.0],
|
75
|
-
},
|
76
|
-
"z": None,
|
77
|
-
}
|
78
|
-
assert plt._config_dict["curves"]["bpm4i-bpm4i"]["signals"] == {
|
79
|
-
"dap": None,
|
80
|
-
"source": "scan_segment",
|
81
|
-
"x": {"name": "samx", "entry": "samx", "unit": None, "modifier": None, "limits": None},
|
82
|
-
"y": {"name": "bpm4i", "entry": "bpm4i", "unit": None, "modifier": None, "limits": None},
|
83
|
-
"z": None,
|
84
|
-
}
|
85
|
-
assert im._config_dict["images"]["eiger"]["monitor"] == "eiger"
|
86
|
-
|
87
|
-
# check initial position of motor map
|
88
|
-
initial_pos_x = dev.samx.read()["samx"]["value"]
|
89
|
-
initial_pos_y = dev.samy.read()["samy"]["value"]
|
90
|
-
|
91
|
-
# Try to make a scan
|
92
|
-
status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
|
93
|
-
|
94
|
-
# wait for scan to finish
|
95
|
-
while not status.status == "COMPLETED":
|
96
|
-
time.sleep(0.2)
|
97
|
-
|
98
|
-
# plot
|
99
|
-
plt_last_scan_data = queue.scan_storage.storage[-1].data
|
100
|
-
plt_data = plt.get_all_data()
|
101
|
-
assert plt_data["bpm4i-bpm4i"]["x"] == plt_last_scan_data["samx"]["samx"].val
|
102
|
-
assert plt_data["bpm4i-bpm4i"]["y"] == plt_last_scan_data["bpm4i"]["bpm4i"].val
|
103
|
-
|
104
|
-
# image
|
105
|
-
last_image_device = client.connector.get_last(MessageEndpoints.device_monitor_2d("eiger"))[
|
106
|
-
"data"
|
107
|
-
].data
|
108
|
-
time.sleep(0.5)
|
109
|
-
last_image_plot = im.images[0].get_data()
|
110
|
-
np.testing.assert_equal(last_image_device, last_image_plot)
|
111
|
-
|
112
|
-
# motor map
|
113
|
-
final_pos_x = dev.samx.read()["samx"]["value"]
|
114
|
-
final_pos_y = dev.samy.read()["samy"]["value"]
|
115
|
-
|
116
|
-
# check final coordinates of motor map
|
117
|
-
motor_map_data = mm.get_data()
|
118
|
-
|
119
|
-
np.testing.assert_equal(
|
120
|
-
[motor_map_data["x"][0], motor_map_data["y"][0]], [initial_pos_x, initial_pos_y]
|
121
|
-
)
|
122
|
-
np.testing.assert_equal(
|
123
|
-
[motor_map_data["x"][-1], motor_map_data["y"][-1]], [final_pos_x, final_pos_y]
|
124
|
-
)
|
125
|
-
|
126
|
-
|
127
|
-
def test_dock_manipulations_e2e(rpc_server_dock):
|
128
|
-
dock = BECDockArea(rpc_server_dock)
|
129
|
-
|
130
|
-
d0 = dock.add_dock("dock_0")
|
131
|
-
d1 = dock.add_dock("dock_1")
|
132
|
-
d2 = dock.add_dock("dock_2")
|
133
|
-
dock_config = dock._config_dict
|
134
|
-
assert len(dock_config["docks"]) == 3
|
135
|
-
|
136
|
-
d0.detach()
|
137
|
-
dock.detach_dock("dock_2")
|
138
|
-
dock_config = dock._config_dict
|
139
|
-
assert len(dock_config["docks"]) == 3
|
140
|
-
assert len(dock.temp_areas) == 2
|
141
|
-
|
142
|
-
d0.attach()
|
143
|
-
dock_config = dock._config_dict
|
144
|
-
assert len(dock_config["docks"]) == 3
|
145
|
-
assert len(dock.temp_areas) == 1
|
146
|
-
|
147
|
-
d2.remove()
|
148
|
-
dock_config = dock._config_dict
|
149
|
-
assert len(dock_config["docks"]) == 2
|
150
|
-
|
151
|
-
assert ["dock_0", "dock_1"] == list(dock_config["docks"])
|
152
|
-
|
153
|
-
dock.clear_all()
|
154
|
-
|
155
|
-
dock_config = dock._config_dict
|
156
|
-
assert len(dock_config["docks"]) == 0
|
157
|
-
assert len(dock.temp_areas) == 0
|
158
|
-
|
159
|
-
|
160
|
-
def test_ring_bar(rpc_server_dock):
|
161
|
-
dock = BECDockArea(rpc_server_dock)
|
162
|
-
|
163
|
-
d0 = dock.add_dock(name="dock_0")
|
164
|
-
|
165
|
-
bar = d0.add_widget("RingProgressBar")
|
166
|
-
assert bar.__class__.__name__ == "RingProgressBar"
|
167
|
-
|
168
|
-
bar.set_number_of_bars(5)
|
169
|
-
bar.set_colors_from_map("viridis")
|
170
|
-
bar.set_value([10, 20, 30, 40, 50])
|
171
|
-
|
172
|
-
bar_config = bar._config_dict
|
173
|
-
|
174
|
-
expected_colors = [list(color) for color in Colors.golden_angle_color("viridis", 5, "RGB")]
|
175
|
-
bar_colors = [ring._config_dict["color"] for ring in bar.rings]
|
176
|
-
bar_values = [ring._config_dict["value"] for ring in bar.rings]
|
177
|
-
assert bar_config["num_bars"] == 5
|
178
|
-
assert bar_values == [10, 20, 30, 40, 50]
|
179
|
-
assert bar_colors == expected_colors
|
180
|
-
|
181
|
-
|
182
|
-
def test_ring_bar_scan_update(bec_client_lib, rpc_server_dock):
|
183
|
-
dock = BECDockArea(rpc_server_dock)
|
184
|
-
|
185
|
-
d0 = dock.add_dock("dock_0")
|
186
|
-
|
187
|
-
bar = d0.add_widget("RingProgressBar")
|
188
|
-
|
189
|
-
client = bec_client_lib
|
190
|
-
dev = client.device_manager.devices
|
191
|
-
dev.samx.tolerance.set(0)
|
192
|
-
dev.samy.tolerance.set(0)
|
193
|
-
scans = client.scans
|
194
|
-
|
195
|
-
status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
|
196
|
-
status.wait()
|
197
|
-
|
198
|
-
bar_config = bar._config_dict
|
199
|
-
assert bar_config["num_bars"] == 1
|
200
|
-
assert bar_config["rings"][0]["value"] == 10
|
201
|
-
assert bar_config["rings"][0]["min_value"] == 0
|
202
|
-
assert bar_config["rings"][0]["max_value"] == 10
|
203
|
-
|
204
|
-
status = scans.grid_scan(dev.samx, -5, 5, 4, dev.samy, -10, 10, 4, relative=True, exp_time=0.1)
|
205
|
-
status.wait()
|
206
|
-
|
207
|
-
bar_config = bar._config_dict
|
208
|
-
assert bar_config["num_bars"] == 1
|
209
|
-
assert bar_config["rings"][0]["value"] == 16
|
210
|
-
assert bar_config["rings"][0]["min_value"] == 0
|
211
|
-
assert bar_config["rings"][0]["max_value"] == 16
|
212
|
-
|
213
|
-
init_samx = dev.samx.read()["samx"]["value"]
|
214
|
-
init_samy = dev.samy.read()["samy"]["value"]
|
215
|
-
final_samx = init_samx + 5
|
216
|
-
final_samy = init_samy + 10
|
217
|
-
|
218
|
-
dev.samx.velocity.put(5)
|
219
|
-
dev.samy.velocity.put(5)
|
220
|
-
|
221
|
-
status = scans.umv(dev.samx, 5, dev.samy, 10, relative=True)
|
222
|
-
status.wait()
|
223
|
-
|
224
|
-
bar_config = bar._config_dict
|
225
|
-
assert bar_config["num_bars"] == 2
|
226
|
-
assert bar_config["rings"][0]["value"] == final_samx
|
227
|
-
assert bar_config["rings"][1]["value"] == final_samy
|
228
|
-
assert bar_config["rings"][0]["min_value"] == init_samx
|
229
|
-
assert bar_config["rings"][0]["max_value"] == final_samx
|
230
|
-
assert bar_config["rings"][1]["min_value"] == init_samy
|
231
|
-
assert bar_config["rings"][1]["max_value"] == final_samy
|
232
|
-
|
233
|
-
|
234
|
-
def test_auto_update(bec_client_lib, rpc_server_dock, qtbot):
|
235
|
-
dock = BECDockArea(rpc_server_dock)
|
236
|
-
|
237
|
-
AutoUpdates.enabled = True
|
238
|
-
AutoUpdates.create_default_dock = True
|
239
|
-
dock.auto_updates = AutoUpdates(gui=dock)
|
240
|
-
dock.auto_updates.start_default_dock()
|
241
|
-
|
242
|
-
def get_default_figure():
|
243
|
-
return dock.auto_updates.get_default_figure()
|
244
|
-
|
245
|
-
qtbot.waitUntil(lambda: get_default_figure() is not None, timeout=10000)
|
246
|
-
plt = get_default_figure()
|
247
|
-
|
248
|
-
dock.selected_device = "bpm4i"
|
249
|
-
|
250
|
-
# we need to start the update script manually; normally this is done when the GUI is started
|
251
|
-
dock._start_update_script()
|
252
|
-
|
253
|
-
client = bec_client_lib
|
254
|
-
dev = client.device_manager.devices
|
255
|
-
scans = client.scans
|
256
|
-
queue = client.queue
|
257
|
-
|
258
|
-
status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
|
259
|
-
status.wait()
|
260
|
-
|
261
|
-
last_scan_data = queue.scan_storage.storage[-1].data
|
262
|
-
|
263
|
-
# get data from curves
|
264
|
-
widgets = plt.widget_list
|
265
|
-
plt_data = widgets[0].get_all_data()
|
266
|
-
|
267
|
-
# check plotted data
|
268
|
-
assert (
|
269
|
-
plt_data[f"Scan {status.scan.scan_number} - bpm4i"]["x"]
|
270
|
-
== last_scan_data["samx"]["samx"].val
|
271
|
-
)
|
272
|
-
assert (
|
273
|
-
plt_data[f"Scan {status.scan.scan_number} - bpm4i"]["y"]
|
274
|
-
== last_scan_data["bpm4i"]["bpm4i"].val
|
275
|
-
)
|
276
|
-
|
277
|
-
status = scans.grid_scan(
|
278
|
-
dev.samx, -10, 10, 5, dev.samy, -5, 5, 5, exp_time=0.05, relative=False
|
279
|
-
)
|
280
|
-
status.wait()
|
281
|
-
|
282
|
-
plt = dock.auto_updates.get_default_figure()
|
283
|
-
widgets = plt.widget_list
|
284
|
-
qtbot.waitUntil(lambda: len(plt.widget_list) > 0, timeout=5000)
|
285
|
-
plt_data = widgets[0].get_all_data()
|
286
|
-
|
287
|
-
last_scan_data = queue.scan_storage.storage[-1].data
|
288
|
-
|
289
|
-
# check plotted data
|
290
|
-
assert (
|
291
|
-
plt_data[f"Scan {status.scan.scan_number} - {dock.selected_device}"]["x"]
|
292
|
-
== last_scan_data["samx"]["samx"].val
|
293
|
-
)
|
294
|
-
assert (
|
295
|
-
plt_data[f"Scan {status.scan.scan_number} - {dock.selected_device}"]["y"]
|
296
|
-
== last_scan_data["samy"]["samy"].val
|
297
|
-
)
|
298
|
-
dock.auto_updates.shutdown()
|