bec-widgets 0.96.0__tar.gz → 0.96.2__tar.gz
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.
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.gitlab-ci.yml +2 -2
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/CHANGELOG.md +24 -28
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/PKG-INFO +1 -1
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/qt_utils/toolbar.py +29 -1
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/crosshair.py +115 -74
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/plot_base.py +56 -1
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/waveform/waveform.py +13 -20
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_widget.py +32 -3
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/pyproject.toml +1 -1
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_crosshair.py +40 -47
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.git_hooks/pre-commit +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.gitignore +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.gitlab/issue_templates/bug_report_template.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.gitlab/issue_templates/documentation_update_template.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.gitlab/issue_templates/feature_request_template.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.gitlab/merge_request_templates/default.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.pylintrc +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/.readthedocs.yaml +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/LICENSE +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/README.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/app_icons/BEC-Dark.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/app_icons/terminal_icon.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/status_icons/error.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/status_icons/not_connected.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/status_icons/refresh.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/status_icons/running.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/status_icons/warning.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/add.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/attach_all.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/auto_range.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/compare.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/connection.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/device_line_edit.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/drag_pan_mode.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/export.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/fft.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/fitting_parameters.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/history.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/image.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/image_autorange.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/import.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/line_axis.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/line_curve.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/lock_aspect_ratio.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/log_scale.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/motor_map.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/photo_library.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/positioner_box.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/progress.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/queue.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/rectangle_mode.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/remove.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/reset_settings.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/restore_state.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/ring_progress.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/rotate_left.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/rotate_right.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/save.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/save_state.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/scan_control.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/settings.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/status.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/terminal.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/transform.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/assets/toolbar_icons/waveform.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/auto_updates.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/client.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/client_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/generate_cli.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/rpc_register.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/cli/server.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/general_app/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/general_app/general_app.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/general_app/general_app.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/general_app/web_links.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/qt_utils/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/qt_utils/error_popups.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/qt_utils/settings_dialog.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/bec_connector.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/bec_designer.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/bec_dispatcher.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/bec_table.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/bec_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/colors.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/container_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/entry_validator.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/generate_designer_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/layout_manager.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/plugin_templates/register.template +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/plugin_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/reference_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/rpc_decorator.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/thread_checker.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/ui_loader.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/validator_delegate.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/widget_io.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/utils/yaml_dialog.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/base_classes/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_queue/bec_queue.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/color_button/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/color_button/color_button.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/console/console.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_combobox/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_line_edit/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/dock/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/dock/dock.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/dock/dock_area.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/figure.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/image/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/image/image_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/position_indicator/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_box.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/scan_control/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/spinner/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/spinner/spinner.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/stop_button/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/text_box/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/text_box/text_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/toggle/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/toggle/toggle.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/vscode/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/vscode/vscode.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary.ui +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/website/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/website/register_website_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/website/website.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/Makefile +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/_static/custom.css +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/_templates/custom-class-template.rst +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/_templates/custom-module-template.rst +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/api_reference/api_reference.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/apps_48dp.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/display_settings_48dp.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/index_api.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/index_contribute.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/index_getting_started.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/index_user_guide.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/rocket_launch_48dp.svg +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/buttons.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/device_box.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/device_browser.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/device_inputs.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/dock_area.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/figure.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/image_widget.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/motor_map_widget.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/position_indicator.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/queue.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/ring_progress_bar.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/scan_controller.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/spinner.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/status_box.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/text_box.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/toggle.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/waveform_widget.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/assets/widget_screenshots/website.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/conf.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/developer/developer.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/developer/introduction/concepts.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/developer/introduction/contributing.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/developer/introduction/introduction.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/developer/introduction/useful_links.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/developer/widget_development/widget_development.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/index.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/introduction/introduction.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/make.bat +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/requirements.txt +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/api_reference/api_reference.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/applications/applications.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/customisation.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/BECDockArea.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/auto_updates.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/getting_started.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/gui_complex_gui.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/installation.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/quick_start.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/getting_started/video_tutorials.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/user.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/bec_figure/BECFigure.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/bec_figure/bec_figure.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/bec_status_box/bec_status_box.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/bec_status_box/bec_status_box.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/buttons/buttons.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/device_browser/device_browser.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/device_browser/device_browser.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/device_input/device_input.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/dock_area/BECDockArea.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/dock_area/bec_dock_area.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/image/image_plot.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/image/image_widget.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/motor_map/motor.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/motor_map/motor_map.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/position_indicator/position_indicator.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/positioner_box/positioner_box.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/progress_bar/progress_bar.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/progress_bar/ring_progress_bar.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/queue/queue.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/scan_control/hide_scan_control.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/scan_control/scan_control.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/scan_control/scan_control.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/spinner/spinner.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/text_box/text_box.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/toggle/toggle.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/waveform/bec_figure_dap.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/waveform/scatter_2D.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/waveform/w1D.gif +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/waveform/waveform_widget.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/website/website.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/docs/user/widgets/widgets.md +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/end-2-end/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/end-2-end/conftest.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/end-2-end/test_bec_dock_rpc_e2e.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/end-2-end/test_scan_control_e2e.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/references/SpinnerWidget/SpinnerWidget_darwin.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/references/SpinnerWidget/SpinnerWidget_linux.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/references/SpinnerWidget/SpinnerWidget_started_darwin.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/references/SpinnerWidget/SpinnerWidget_started_linux.png +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/client_mocks.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/conftest.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_connector.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_dispatcher.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_dock.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_figure.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_image.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_image_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_motor_map.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_queue.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_bec_status_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_client_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_color_map_selector.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_color_validation.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_configs/config_device.yaml +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_device_browser.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_device_input_base.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_device_input_widgets.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_error_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_generate_cli_client.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_generate_plugin.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_motor_map_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_msgs/__init__.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_plot_base.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_plugin_utils.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_positioner_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_ring_progress_bar.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_rpc_register.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_rpc_server.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_rpc_widget_handler.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_scan_control.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_scan_control_group_box.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_setting_dialog.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_spinner.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_stop_button.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_text_box_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_toggle.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_vscode_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_waveform1d.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_waveform_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_website_widget.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_widget_io.py +0 -0
- {bec_widgets-0.96.0 → bec_widgets-0.96.2}/tests/unit_tests/test_yaml_dialog.py +0 -0
@@ -140,7 +140,7 @@ tests:
|
|
140
140
|
- *install-os-packages
|
141
141
|
- *install-repos
|
142
142
|
- pip install -e .[dev,pyqt6]
|
143
|
-
- coverage run --source=./bec_widgets -m pytest -v --junitxml=report.xml --random-order --full-trace ./tests/unit_tests
|
143
|
+
- coverage run --source=./bec_widgets -m pytest -v --junitxml=report.xml --maxfail=2 --random-order --full-trace ./tests/unit_tests
|
144
144
|
- coverage report
|
145
145
|
- coverage xml
|
146
146
|
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
|
@@ -177,7 +177,7 @@ test-matrix:
|
|
177
177
|
- *install-os-packages
|
178
178
|
- *install-repos
|
179
179
|
- pip install -e .[dev,$QT_PCKG]
|
180
|
-
- pytest -v --junitxml=report.xml --random-order ./tests/unit_tests
|
180
|
+
- pytest -v --maxfail=2 --junitxml=report.xml --random-order ./tests/unit_tests
|
181
181
|
allow_failure: true
|
182
182
|
|
183
183
|
end-2-end-conda:
|
@@ -1,5 +1,29 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## v0.96.2 (2024-08-22)
|
4
|
+
|
5
|
+
### Fix
|
6
|
+
|
7
|
+
* fix(waveform): validation of custom curves removed ([`af28574`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/af28574bd58457a05f1269f121db01ad627b5769))
|
8
|
+
|
9
|
+
* fix(waveform): skip validation for curves that are not BECCurve instances ([`617db36`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/617db36ed4932c8a0633724079b695bc67d5c77b))
|
10
|
+
|
11
|
+
## v0.96.1 (2024-08-22)
|
12
|
+
|
13
|
+
### Ci
|
14
|
+
|
15
|
+
* ci: fail pytest after 2 failed tests ([`f0203d9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f0203d9bf60c4975ba5ab93a057d9091762454d5))
|
16
|
+
|
17
|
+
### Fix
|
18
|
+
|
19
|
+
* fix(crosshair): update markers if necessary ([`4473805`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/44738057a36f5de2bbb55affdd309f92286d4a0f))
|
20
|
+
|
21
|
+
* fix(waveform_widget): fixed icon appearance ([`f98a9f9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f98a9f9771b93226d47830aa52f45739624f51b4))
|
22
|
+
|
23
|
+
* fix: bubble-up signals ([`2fe72c9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2fe72c9ccb71bcb196a1b78197b73acf9aa3f506))
|
24
|
+
|
25
|
+
* fix(crosshair): fixed crosshair for image and waveforms ([`37835cb`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/37835cbf76ca3ba1081f514ee7793244ac500e7f))
|
26
|
+
|
3
27
|
## v0.96.0 (2024-08-22)
|
4
28
|
|
5
29
|
### Documentation
|
@@ -133,31 +157,3 @@ Terminating client connections has to be done at the application level ([`198c1d
|
|
133
157
|
### Fix
|
134
158
|
|
135
159
|
* fix(positioner_box): icons fixed ([`281633d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/281633deff15b6879dac3a4f0770fa6949aaecdc))
|
136
|
-
|
137
|
-
### Refactor
|
138
|
-
|
139
|
-
* refactor: add button for positioner selection ([`0d190c5`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0d190c5c5996e59fec4bdd44d2003e10e200b009))
|
140
|
-
|
141
|
-
### Test
|
142
|
-
|
143
|
-
* test(dap): wait for fit ([`6269009`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6269009e5451f830cdee58a514c7858483488a8d))
|
144
|
-
|
145
|
-
* test(auto-update): wait for rendering ([`6d2442d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6d2442d23c683fe92af13df982ce681c07e99cde))
|
146
|
-
|
147
|
-
## v0.93.4 (2024-08-07)
|
148
|
-
|
149
|
-
### Fix
|
150
|
-
|
151
|
-
* fix: rename DeviceBox to PositionerBox, fix test for validation ([`37aa371`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/37aa371e7c4c62d70abf37abc125db0c088790fe))
|
152
|
-
|
153
|
-
* fix: add validation for bec_lib.device.Positioner; closes #268 ([`eb54e9f`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/eb54e9f788e97af23db8fe0c78f8facb8688bb99))
|
154
|
-
|
155
|
-
## v0.93.3 (2024-08-07)
|
156
|
-
|
157
|
-
### Fix
|
158
|
-
|
159
|
-
* fix(dock): properly shut down docks and temp areas ([`99ee545`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/99ee545e41c6078654958b668b5b329f85553d16))
|
160
|
-
|
161
|
-
### Test
|
162
|
-
|
163
|
-
* test: removed quit from teardown ([`cf94599`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cf94599c2544d6831c8afbe7b340082077557ed1))
|
@@ -3,8 +3,9 @@ import os
|
|
3
3
|
from abc import ABC, abstractmethod
|
4
4
|
from collections import defaultdict
|
5
5
|
|
6
|
+
from bec_qthemes import material_icon
|
6
7
|
from qtpy.QtCore import QSize
|
7
|
-
from qtpy.QtGui import QAction, QIcon
|
8
|
+
from qtpy.QtGui import QAction, QGuiApplication, QIcon
|
8
9
|
from qtpy.QtWidgets import QHBoxLayout, QLabel, QMenu, QToolBar, QToolButton, QWidget
|
9
10
|
|
10
11
|
import bec_widgets
|
@@ -70,6 +71,33 @@ class IconAction(ToolBarAction):
|
|
70
71
|
toolbar.addAction(self.action)
|
71
72
|
|
72
73
|
|
74
|
+
class MaterialIconAction:
|
75
|
+
"""
|
76
|
+
Abstract base class for toolbar actions.
|
77
|
+
|
78
|
+
Args:
|
79
|
+
icon_path (str, optional): The name of the icon file from `assets/toolbar_icons`. Defaults to None.
|
80
|
+
tooltip (bool, optional): The tooltip for the action. Defaults to None.
|
81
|
+
checkable (bool, optional): Whether the action is checkable. Defaults to False.
|
82
|
+
"""
|
83
|
+
|
84
|
+
def __init__(self, icon_name: str = None, tooltip: str = None, checkable: bool = False):
|
85
|
+
self.icon_name = icon_name
|
86
|
+
self.tooltip = tooltip
|
87
|
+
self.checkable = checkable
|
88
|
+
self.action = None
|
89
|
+
|
90
|
+
def add_to_toolbar(self, toolbar: QToolBar, target: QWidget):
|
91
|
+
palette = QGuiApplication.palette()
|
92
|
+
color = "#FFFFFF" # FIXME: This should be a theme color but the toolbar doesn't respect the theme atm
|
93
|
+
# one fixed, change it to palette.toolTipBase().color()
|
94
|
+
|
95
|
+
icon = material_icon(self.icon_name, size=(20, 20), color=color)
|
96
|
+
self.action = QAction(QIcon(icon), self.tooltip, target)
|
97
|
+
self.action.setCheckable(self.checkable)
|
98
|
+
toolbar.addAction(self.action)
|
99
|
+
|
100
|
+
|
73
101
|
class DeviceSelectionAction(ToolBarAction):
|
74
102
|
"""
|
75
103
|
Action for selecting a device in a combobox.
|
@@ -1,8 +1,10 @@
|
|
1
|
+
from collections import defaultdict
|
2
|
+
|
1
3
|
import numpy as np
|
2
4
|
import pyqtgraph as pg
|
3
5
|
|
4
6
|
# from qtpy.QtCore import QObject, pyqtSignal
|
5
|
-
from qtpy.QtCore import QObject
|
7
|
+
from qtpy.QtCore import QObject, Qt
|
6
8
|
from qtpy.QtCore import Signal as pyqtSignal
|
7
9
|
|
8
10
|
|
@@ -26,10 +28,13 @@ class Crosshair(QObject):
|
|
26
28
|
super().__init__(parent)
|
27
29
|
self.is_log_y = None
|
28
30
|
self.is_log_x = None
|
31
|
+
self.is_derivative = None
|
29
32
|
self.plot_item = plot_item
|
30
33
|
self.precision = precision
|
31
34
|
self.v_line = pg.InfiniteLine(angle=90, movable=False)
|
35
|
+
self.v_line.skip_auto_range = True
|
32
36
|
self.h_line = pg.InfiniteLine(angle=0, movable=False)
|
37
|
+
self.h_line.skip_auto_range = True
|
33
38
|
self.plot_item.addItem(self.v_line, ignoreBounds=True)
|
34
39
|
self.plot_item.addItem(self.h_line, ignoreBounds=True)
|
35
40
|
self.proxy = pg.SignalProxy(
|
@@ -37,74 +42,75 @@ class Crosshair(QObject):
|
|
37
42
|
)
|
38
43
|
self.plot_item.scene().sigMouseClicked.connect(self.mouse_clicked)
|
39
44
|
|
45
|
+
self.plot_item.ctrl.derivativeCheck.checkStateChanged.connect(self.check_derivatives)
|
46
|
+
self.plot_item.ctrl.logXCheck.checkStateChanged.connect(self.check_log)
|
47
|
+
self.plot_item.ctrl.logYCheck.checkStateChanged.connect(self.check_log)
|
48
|
+
|
40
49
|
# Initialize markers
|
41
|
-
self.marker_moved_1d =
|
42
|
-
self.marker_clicked_1d =
|
50
|
+
self.marker_moved_1d = {}
|
51
|
+
self.marker_clicked_1d = {}
|
43
52
|
self.marker_2d = None
|
44
53
|
self.update_markers()
|
45
54
|
|
46
55
|
def update_markers(self):
|
47
56
|
"""Update the markers for the crosshair, creating new ones if necessary."""
|
48
57
|
|
49
|
-
# Clear existing markers
|
50
|
-
for marker in self.marker_moved_1d + self.marker_clicked_1d:
|
51
|
-
self.plot_item.removeItem(marker)
|
52
|
-
if self.marker_2d:
|
53
|
-
self.plot_item.removeItem(self.marker_2d)
|
54
|
-
|
55
58
|
# Create new markers
|
56
|
-
self.marker_moved_1d = []
|
57
|
-
self.marker_clicked_1d = []
|
58
|
-
self.marker_2d = None
|
59
59
|
for item in self.plot_item.items:
|
60
60
|
if isinstance(item, pg.PlotDataItem): # 1D plot
|
61
|
+
if item.name() in self.marker_moved_1d:
|
62
|
+
continue
|
61
63
|
pen = item.opts["pen"]
|
62
64
|
color = pen.color() if hasattr(pen, "color") else pg.mkColor(pen)
|
63
65
|
marker_moved = pg.ScatterPlotItem(
|
64
66
|
size=10, pen=pg.mkPen(color), brush=pg.mkBrush(None)
|
65
67
|
)
|
66
|
-
|
67
|
-
|
68
|
-
)
|
69
|
-
self.marker_moved_1d.append(marker_moved)
|
68
|
+
marker_moved.skip_auto_range = True
|
69
|
+
self.marker_moved_1d[item.name()] = marker_moved
|
70
70
|
self.plot_item.addItem(marker_moved)
|
71
|
+
|
71
72
|
# Create glowing effect markers for clicked events
|
72
|
-
marker_clicked_list = []
|
73
73
|
for size, alpha in [(18, 64), (14, 128), (10, 255)]:
|
74
74
|
marker_clicked = pg.ScatterPlotItem(
|
75
75
|
size=size,
|
76
76
|
pen=pg.mkPen(None),
|
77
77
|
brush=pg.mkBrush(color.red(), color.green(), color.blue(), alpha),
|
78
78
|
)
|
79
|
-
|
79
|
+
marker_clicked.skip_auto_range = True
|
80
|
+
self.marker_clicked_1d[item.name()] = marker_clicked
|
80
81
|
self.plot_item.addItem(marker_clicked)
|
81
82
|
|
82
|
-
self.marker_clicked_1d.append(marker_clicked_list)
|
83
83
|
elif isinstance(item, pg.ImageItem): # 2D plot
|
84
|
+
if self.marker_2d is not None:
|
85
|
+
continue
|
84
86
|
self.marker_2d = pg.ROI(
|
85
87
|
[0, 0], size=[1, 1], pen=pg.mkPen("r", width=2), movable=False
|
86
88
|
)
|
87
89
|
self.plot_item.addItem(self.marker_2d)
|
88
90
|
|
89
|
-
def snap_to_data(self, x, y) -> tuple:
|
91
|
+
def snap_to_data(self, x, y) -> tuple[defaultdict[list], defaultdict[list]]:
|
90
92
|
"""
|
91
93
|
Finds the nearest data points to the given x and y coordinates.
|
92
94
|
|
93
95
|
Args:
|
94
|
-
x: The x-coordinate
|
95
|
-
y: The y-coordinate
|
96
|
+
x: The x-coordinate of the mouse cursor
|
97
|
+
y: The y-coordinate of the mouse cursor
|
96
98
|
|
97
99
|
Returns:
|
98
|
-
tuple:
|
100
|
+
tuple: x and y values snapped to the nearest data
|
99
101
|
"""
|
100
|
-
|
101
|
-
|
102
|
+
y_values = defaultdict(list)
|
103
|
+
x_values = defaultdict(list)
|
102
104
|
image_2d = None
|
103
105
|
|
104
106
|
# Iterate through items in the plot
|
105
107
|
for item in self.plot_item.items:
|
106
108
|
if isinstance(item, pg.PlotDataItem): # 1D plot
|
107
|
-
|
109
|
+
name = item.name()
|
110
|
+
plot_data = item._getDisplayDataset()
|
111
|
+
if plot_data is None:
|
112
|
+
continue
|
113
|
+
x_data, y_data = plot_data.x, plot_data.y
|
108
114
|
if x_data is not None and y_data is not None:
|
109
115
|
if self.is_log_x:
|
110
116
|
min_x_data = np.min(x_data[x_data > 0])
|
@@ -112,25 +118,25 @@ class Crosshair(QObject):
|
|
112
118
|
min_x_data = np.min(x_data)
|
113
119
|
max_x_data = np.max(x_data)
|
114
120
|
if x < min_x_data or x > max_x_data:
|
115
|
-
|
121
|
+
y_values[name] = None
|
122
|
+
x_values[name] = None
|
123
|
+
continue
|
116
124
|
closest_x, closest_y = self.closest_x_y_value(x, x_data, y_data)
|
117
|
-
|
118
|
-
|
125
|
+
y_values[name] = closest_y
|
126
|
+
x_values[name] = closest_x
|
119
127
|
elif isinstance(item, pg.ImageItem): # 2D plot
|
128
|
+
name = item.config.monitor
|
120
129
|
image_2d = item.image
|
130
|
+
# clip the x and y values to the image dimensions to avoid out of bounds errors
|
131
|
+
y_values[name] = int(np.clip(y, 0, image_2d.shape[1] - 1))
|
132
|
+
x_values[name] = int(np.clip(x, 0, image_2d.shape[0] - 1))
|
121
133
|
|
122
|
-
|
123
|
-
|
124
|
-
|
134
|
+
if x_values and y_values:
|
135
|
+
if all(v is None for v in x_values.values()) or all(
|
136
|
+
v is None for v in y_values.values()
|
137
|
+
):
|
125
138
|
return None, None
|
126
|
-
|
127
|
-
return closest_x, y_values_1d
|
128
|
-
|
129
|
-
# Handle 2D plot
|
130
|
-
if image_2d is not None:
|
131
|
-
x_idx = int(np.clip(x, 0, image_2d.shape[0] - 1))
|
132
|
-
y_idx = int(np.clip(y, 0, image_2d.shape[1] - 1))
|
133
|
-
return x_idx, y_idx
|
139
|
+
return x_values, y_values
|
134
140
|
|
135
141
|
return None, None
|
136
142
|
|
@@ -156,8 +162,8 @@ class Crosshair(QObject):
|
|
156
162
|
Args:
|
157
163
|
event: The mouse moved event
|
158
164
|
"""
|
159
|
-
self.check_log()
|
160
165
|
pos = event[0]
|
166
|
+
self.update_markers()
|
161
167
|
if self.plot_item.vb.sceneBoundingRect().contains(pos):
|
162
168
|
mouse_point = self.plot_item.vb.mapSceneToView(pos)
|
163
169
|
self.v_line.setPos(mouse_point.x())
|
@@ -168,27 +174,34 @@ class Crosshair(QObject):
|
|
168
174
|
x = 10**x
|
169
175
|
if self.is_log_y:
|
170
176
|
y = 10**y
|
171
|
-
|
177
|
+
x_snap_values, y_snap_values = self.snap_to_data(x, y)
|
178
|
+
if x_snap_values is None or y_snap_values is None:
|
179
|
+
return
|
180
|
+
if all(v is None for v in x_snap_values.values()) or all(
|
181
|
+
v is None for v in y_snap_values.values()
|
182
|
+
):
|
183
|
+
# not sure how we got here, but just to be safe...
|
184
|
+
return
|
172
185
|
|
173
186
|
for item in self.plot_item.items:
|
174
187
|
if isinstance(item, pg.PlotDataItem):
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
)
|
188
|
+
name = item.name()
|
189
|
+
x, y = x_snap_values[name], y_snap_values[name]
|
190
|
+
if x is None or y is None:
|
191
|
+
continue
|
192
|
+
self.marker_moved_1d[name].setData([x], [y])
|
193
|
+
coordinate_to_emit = (name, round(x, self.precision), round(y, self.precision))
|
181
194
|
self.coordinatesChanged1D.emit(coordinate_to_emit)
|
182
|
-
for i, y_val in enumerate(y_values):
|
183
|
-
self.marker_moved_1d[i].setData(
|
184
|
-
[x if not self.is_log_x else np.log10(x)],
|
185
|
-
[y_val if not self.is_log_y else np.log10(y_val)],
|
186
|
-
)
|
187
195
|
elif isinstance(item, pg.ImageItem):
|
188
|
-
|
189
|
-
|
190
|
-
|
196
|
+
name = item.config.monitor
|
197
|
+
x, y = x_snap_values[name], y_snap_values[name]
|
198
|
+
if x is None or y is None:
|
199
|
+
continue
|
200
|
+
self.marker_2d.setPos([x, y])
|
201
|
+
coordinate_to_emit = (name, x, y)
|
191
202
|
self.coordinatesChanged2D.emit(coordinate_to_emit)
|
203
|
+
else:
|
204
|
+
continue
|
192
205
|
|
193
206
|
def mouse_clicked(self, event):
|
194
207
|
"""Handles the mouse clicked event, updating the crosshair position and emitting signals.
|
@@ -196,7 +209,11 @@ class Crosshair(QObject):
|
|
196
209
|
Args:
|
197
210
|
event: The mouse clicked event
|
198
211
|
"""
|
199
|
-
|
212
|
+
|
213
|
+
# we only accept left mouse clicks
|
214
|
+
if event.button() != Qt.MouseButton.LeftButton:
|
215
|
+
return
|
216
|
+
self.update_markers()
|
200
217
|
if self.plot_item.vb.sceneBoundingRect().contains(event._scenePos):
|
201
218
|
mouse_point = self.plot_item.vb.mapSceneToView(event._scenePos)
|
202
219
|
x, y = mouse_point.x(), mouse_point.y()
|
@@ -205,31 +222,55 @@ class Crosshair(QObject):
|
|
205
222
|
x = 10**x
|
206
223
|
if self.is_log_y:
|
207
224
|
y = 10**y
|
208
|
-
|
225
|
+
x_snap_values, y_snap_values = self.snap_to_data(x, y)
|
226
|
+
|
227
|
+
if x_snap_values is None or y_snap_values is None:
|
228
|
+
return
|
229
|
+
if all(v is None for v in x_snap_values.values()) or all(
|
230
|
+
v is None for v in y_snap_values.values()
|
231
|
+
):
|
232
|
+
# not sure how we got here, but just to be safe...
|
233
|
+
return
|
209
234
|
|
210
235
|
for item in self.plot_item.items:
|
211
236
|
if isinstance(item, pg.PlotDataItem):
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
)
|
237
|
+
name = item.name()
|
238
|
+
x, y = x_snap_values[name], y_snap_values[name]
|
239
|
+
if x is None or y is None:
|
240
|
+
continue
|
241
|
+
self.marker_clicked_1d[name].setData([x], [y])
|
242
|
+
coordinate_to_emit = (name, round(x, self.precision), round(y, self.precision))
|
218
243
|
self.coordinatesClicked1D.emit(coordinate_to_emit)
|
219
|
-
for i, y_val in enumerate(y_values):
|
220
|
-
for marker in self.marker_clicked_1d[i]:
|
221
|
-
marker.setData(
|
222
|
-
[x if not self.is_log_x else np.log10(x)],
|
223
|
-
[y_val if not self.is_log_y else np.log10(y_val)],
|
224
|
-
)
|
225
244
|
elif isinstance(item, pg.ImageItem):
|
226
|
-
|
227
|
-
|
228
|
-
|
245
|
+
name = item.config.monitor
|
246
|
+
x, y = x_snap_values[name], y_snap_values[name]
|
247
|
+
if x is None or y is None:
|
248
|
+
continue
|
249
|
+
self.marker_2d.setPos([x, y])
|
250
|
+
coordinate_to_emit = (name, x, y)
|
229
251
|
self.coordinatesClicked2D.emit(coordinate_to_emit)
|
230
|
-
|
252
|
+
else:
|
253
|
+
continue
|
254
|
+
|
255
|
+
def clear_markers(self):
|
256
|
+
"""Clears the markers from the plot."""
|
257
|
+
for marker in self.marker_moved_1d.values():
|
258
|
+
marker.clear()
|
259
|
+
for marker in self.marker_clicked_1d.values():
|
260
|
+
marker.clear()
|
231
261
|
|
232
262
|
def check_log(self):
|
233
263
|
"""Checks if the x or y axis is in log scale and updates the internal state accordingly."""
|
234
264
|
self.is_log_x = self.plot_item.ctrl.logXCheck.isChecked()
|
235
265
|
self.is_log_y = self.plot_item.ctrl.logYCheck.isChecked()
|
266
|
+
self.clear_markers()
|
267
|
+
|
268
|
+
def check_derivatives(self):
|
269
|
+
"""Checks if the derivatives are enabled and updates the internal state accordingly."""
|
270
|
+
self.is_derivative = self.plot_item.ctrl.derivativeCheck.isChecked()
|
271
|
+
self.clear_markers()
|
272
|
+
|
273
|
+
def cleanup(self):
|
274
|
+
self.v_line.deleteLater()
|
275
|
+
self.h_line.deleteLater()
|
276
|
+
self.clear_markers()
|
@@ -4,9 +4,11 @@ from typing import Literal, Optional
|
|
4
4
|
|
5
5
|
import pyqtgraph as pg
|
6
6
|
from pydantic import BaseModel, Field
|
7
|
+
from qtpy.QtCore import Signal, Slot
|
7
8
|
from qtpy.QtWidgets import QWidget
|
8
9
|
|
9
10
|
from bec_widgets.utils import BECConnector, ConnectionConfig
|
11
|
+
from bec_widgets.utils.crosshair import Crosshair
|
10
12
|
|
11
13
|
|
12
14
|
class AxisConfig(BaseModel):
|
@@ -41,7 +43,21 @@ class SubplotConfig(ConnectionConfig):
|
|
41
43
|
)
|
42
44
|
|
43
45
|
|
46
|
+
class BECViewBox(pg.ViewBox):
|
47
|
+
|
48
|
+
def itemBoundsChanged(self, item):
|
49
|
+
self._itemBoundsCache.pop(item, None)
|
50
|
+
if (self.state["autoRange"][0] is not False) or (self.state["autoRange"][1] is not False):
|
51
|
+
# check if the call is coming from a mouse-move event
|
52
|
+
if hasattr(item, "skip_auto_range") and item.skip_auto_range:
|
53
|
+
return
|
54
|
+
self._autoRangeNeedsUpdate = True
|
55
|
+
self.update()
|
56
|
+
|
57
|
+
|
44
58
|
class BECPlotBase(BECConnector, pg.GraphicsLayout):
|
59
|
+
crosshair_coordinates_changed = Signal(tuple)
|
60
|
+
crosshair_coordinates_clicked = Signal(tuple)
|
45
61
|
USER_ACCESS = [
|
46
62
|
"_config_dict",
|
47
63
|
"set",
|
@@ -73,9 +89,13 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
|
|
73
89
|
pg.GraphicsLayout.__init__(self, parent)
|
74
90
|
|
75
91
|
self.figure = parent_figure
|
76
|
-
|
92
|
+
|
93
|
+
# self.plot_item = self.addPlot(row=0, col=0)
|
94
|
+
self.plot_item = pg.PlotItem(viewBox=BECViewBox(parent=self, enableMenu=True), parent=self)
|
95
|
+
self.addItem(self.plot_item, row=0, col=0)
|
77
96
|
|
78
97
|
self.add_legend()
|
98
|
+
self.crosshair = None
|
79
99
|
|
80
100
|
def set(self, **kwargs) -> None:
|
81
101
|
"""
|
@@ -304,6 +324,40 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
|
|
304
324
|
"""
|
305
325
|
self.plot_item.enableAutoRange(axis, enabled)
|
306
326
|
|
327
|
+
def hook_crosshair(self) -> None:
|
328
|
+
"""Hook the crosshair to all plots."""
|
329
|
+
if self.crosshair is None:
|
330
|
+
self.crosshair = Crosshair(self.plot_item, precision=3)
|
331
|
+
self.crosshair.coordinatesChanged1D.connect(self.crosshair_coordinates_changed)
|
332
|
+
self.crosshair.coordinatesClicked1D.connect(self.crosshair_coordinates_clicked)
|
333
|
+
self.crosshair.coordinatesChanged2D.connect(self.crosshair_coordinates_changed)
|
334
|
+
self.crosshair.coordinatesClicked2D.connect(self.crosshair_coordinates_clicked)
|
335
|
+
|
336
|
+
def unhook_crosshair(self) -> None:
|
337
|
+
"""Unhook the crosshair from all plots."""
|
338
|
+
if self.crosshair is not None:
|
339
|
+
self.crosshair.coordinatesChanged1D.disconnect(self.crosshair_coordinates_changed)
|
340
|
+
self.crosshair.coordinatesClicked1D.disconnect(self.crosshair_coordinates_clicked)
|
341
|
+
self.crosshair.coordinatesChanged2D.disconnect(self.crosshair_coordinates_changed)
|
342
|
+
self.crosshair.coordinatesClicked2D.disconnect(self.crosshair_coordinates_clicked)
|
343
|
+
self.crosshair.cleanup()
|
344
|
+
self.crosshair.deleteLater()
|
345
|
+
self.crosshair = None
|
346
|
+
|
347
|
+
def toggle_crosshair(self) -> None:
|
348
|
+
"""Toggle the crosshair on all plots."""
|
349
|
+
if self.crosshair is None:
|
350
|
+
return self.hook_crosshair()
|
351
|
+
|
352
|
+
self.unhook_crosshair()
|
353
|
+
|
354
|
+
@Slot()
|
355
|
+
def reset(self) -> None:
|
356
|
+
"""Reset the plot widget."""
|
357
|
+
if self.crosshair is not None:
|
358
|
+
self.crosshair.clear_markers()
|
359
|
+
self.crosshair.update_markers()
|
360
|
+
|
307
361
|
def export(self):
|
308
362
|
"""Show the Export Dialog of the plot widget."""
|
309
363
|
scene = self.plot_item.scene()
|
@@ -317,6 +371,7 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
|
|
317
371
|
|
318
372
|
def cleanup_pyqtgraph(self):
|
319
373
|
"""Cleanup pyqtgraph items."""
|
374
|
+
self.unhook_crosshair()
|
320
375
|
item = self.plot_item
|
321
376
|
item.vb.menu.close()
|
322
377
|
item.vb.menu.deleteLater()
|
{bec_widgets-0.96.0 → bec_widgets-0.96.2}/bec_widgets/widgets/figure/plots/waveform/waveform.py
RENAMED
@@ -77,6 +77,7 @@ class BECWaveform(BECPlotBase):
|
|
77
77
|
dap_params_update = pyqtSignal(dict)
|
78
78
|
dap_summary_update = pyqtSignal(dict)
|
79
79
|
autorange_signal = pyqtSignal()
|
80
|
+
new_scan = pyqtSignal()
|
80
81
|
|
81
82
|
def __init__(
|
82
83
|
self,
|
@@ -375,6 +376,10 @@ class BECWaveform(BECPlotBase):
|
|
375
376
|
if len(self.curves) > 0:
|
376
377
|
# validate all curves
|
377
378
|
for curve in self.curves:
|
379
|
+
if not isinstance(curve, BECCurve):
|
380
|
+
continue
|
381
|
+
if curve.config.source == "custom":
|
382
|
+
continue
|
378
383
|
self._validate_x_axis_behaviour(curve.config.signals.y.name, x_name, x_entry, False)
|
379
384
|
self._switch_x_axis_item(
|
380
385
|
f"{x_name}-{x_entry}"
|
@@ -382,9 +387,12 @@ class BECWaveform(BECPlotBase):
|
|
382
387
|
else x_name
|
383
388
|
)
|
384
389
|
for curve_id, curve_config in zip(curve_ids, curve_configs):
|
385
|
-
if curve_config.signals
|
386
|
-
|
387
|
-
|
390
|
+
if curve_config.signals is None:
|
391
|
+
continue
|
392
|
+
if curve_config.signals.x is None:
|
393
|
+
continue
|
394
|
+
curve_config.signals.x.name = x_name
|
395
|
+
curve_config.signals.x.entry = x_entry
|
388
396
|
self.remove_curve(curve_id)
|
389
397
|
self.add_curve_by_config(curve_config)
|
390
398
|
|
@@ -408,23 +416,6 @@ class BECWaveform(BECPlotBase):
|
|
408
416
|
"""
|
409
417
|
self.plot_item.enableAutoRange(axis, enabled)
|
410
418
|
|
411
|
-
@Slot()
|
412
|
-
def auto_range(self):
|
413
|
-
self.plot_item.autoRange()
|
414
|
-
|
415
|
-
def set_auto_range(self, enabled: bool, axis: str = "xy"):
|
416
|
-
"""
|
417
|
-
Set the auto range of the plot widget.
|
418
|
-
|
419
|
-
Args:
|
420
|
-
enabled(bool): If True, enable the auto range.
|
421
|
-
axis(str, optional): The axis to enable the auto range.
|
422
|
-
- "xy": Enable auto range for both x and y axis.
|
423
|
-
- "x": Enable auto range for x axis.
|
424
|
-
- "y": Enable auto range for y axis.
|
425
|
-
"""
|
426
|
-
self.plot_item.enableAutoRange(axis, enabled)
|
427
|
-
|
428
419
|
def add_curve_custom(
|
429
420
|
self,
|
430
421
|
x: list | np.ndarray,
|
@@ -935,6 +926,8 @@ class BECWaveform(BECPlotBase):
|
|
935
926
|
return
|
936
927
|
|
937
928
|
if current_scan_id != self.scan_id:
|
929
|
+
self.reset()
|
930
|
+
self.new_scan.emit()
|
938
931
|
self.set_auto_range(True, "xy")
|
939
932
|
self.old_scan_id = self.scan_id
|
940
933
|
self.scan_id = current_scan_id
|