bec-widgets 0.93.3__tar.gz → 0.93.4__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.93.3 → bec_widgets-0.93.4}/CHANGELOG.md +8 -6
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/PKG-INFO +1 -1
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/client.py +9 -16
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/dock/dock_area.py +4 -4
- bec_widgets-0.93.3/bec_widgets/widgets/device_box/device_box.py → bec_widgets-0.93.4/bec_widgets/widgets/positioner_box/positioner_box.py +88 -11
- bec_widgets-0.93.4/bec_widgets/widgets/positioner_box/positioner_box.pyproject +1 -0
- bec_widgets-0.93.3/bec_widgets/widgets/device_box/device_box.ui → bec_widgets-0.93.4/bec_widgets/widgets/positioner_box/positioner_box.ui +20 -3
- bec_widgets-0.93.4/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +54 -0
- bec_widgets-0.93.4/bec_widgets/widgets/positioner_box/register_positioner_box.py +15 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/pyproject.toml +1 -1
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_dock.py +6 -4
- bec_widgets-0.93.4/tests/unit_tests/test_positioner_box.py +104 -0
- bec_widgets-0.93.3/bec_widgets/widgets/device_box/device_box.pyproject +0 -1
- bec_widgets-0.93.3/bec_widgets/widgets/device_box/device_box_plugin.py +0 -59
- bec_widgets-0.93.3/bec_widgets/widgets/device_box/register_device_box.py +0 -15
- bec_widgets-0.93.3/tests/unit_tests/test_device_box.py +0 -98
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.git_hooks/pre-commit +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.gitignore +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.gitlab/issue_templates/bug_report_template.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.gitlab/issue_templates/documentation_update_template.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.gitlab/issue_templates/feature_request_template.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.gitlab/merge_request_templates/default.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.gitlab-ci.yml +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.pylintrc +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/.readthedocs.yaml +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/LICENSE +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/README.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/app_icons/BEC-Dark.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/app_icons/terminal_icon.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/code.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/color_button.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/colormap_selector.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/device_box.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/device_combo_box.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/device_line_edit.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/dock_area.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/games.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/image.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/motor_map.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/position_indicator.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/queue.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/ring_progress.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/scan_control.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/spinner.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/status.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/stop.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/text.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/toggle.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/waveform.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/designer_icons/web.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/status_icons/error.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/status_icons/not_connected.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/status_icons/refresh.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/status_icons/running.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/status_icons/warning.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/add.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/attach_all.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/auto_range.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/compare.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/connection.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/device_box.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/drag_pan_mode.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/export.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/fft.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/fitting_parameters.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/history.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/image.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/image_autorange.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/import.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/line_axis.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/line_curve.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/lock_aspect_ratio.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/log_scale.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/motor_map.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/photo_library.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/progress.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/queue.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/rectangle_mode.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/remove.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/reset_settings.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/restore_state.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/ring_progress.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/rotate_left.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/rotate_right.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/save.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/save_state.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/scan_control.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/settings.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/status.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/terminal.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/transform.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/assets/toolbar_icons/waveform.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/auto_updates.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/client_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/generate_cli.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/rpc_register.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/cli/server.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/general_app/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/general_app/general_app.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/general_app/general_app.ui +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/general_app/web_links.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/qt_utils/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/qt_utils/error_popups.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/qt_utils/settings_dialog.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/qt_utils/toolbar.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/bec_connector.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/bec_designer.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/bec_dispatcher.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/bec_table.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/bec_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/colors.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/container_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/crosshair.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/entry_validator.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/generate_designer_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/layout_manager.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/plugin_templates/register.template +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/plugin_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/reference_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/rpc_decorator.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/thread_checker.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/ui_loader.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/validator_delegate.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/widget_io.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/utils/yaml_dialog.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/base_classes/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_queue/bec_queue.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/color_button/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/color_button/color_button.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/console/console.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/device_box → bec_widgets-0.93.4/bec_widgets/widgets/device_combobox}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/device_combobox → bec_widgets-0.93.4/bec_widgets/widgets/device_line_edit}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/dock/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/dock/dock.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/figure.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/device_line_edit → bec_widgets-0.93.4/bec_widgets/widgets/figure/plots}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/figure/plots → bec_widgets-0.93.4/bec_widgets/widgets/figure/plots/image}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/figure/plots/image → bec_widgets-0.93.4/bec_widgets/widgets/figure/plots/motor_map}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/figure/plots/motor_map → bec_widgets-0.93.4/bec_widgets/widgets/figure/plots/waveform}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/figure/plots/waveform → bec_widgets-0.93.4/bec_widgets/widgets/image}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/image/image_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/image → bec_widgets-0.93.4/bec_widgets/widgets/jupyter_console}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/jupyter_console → bec_widgets-0.93.4/bec_widgets/widgets/motor_map}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/motor_map → bec_widgets-0.93.4/bec_widgets/widgets/motor_map/motor_map_dialog}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/motor_map/motor_map_dialog → bec_widgets-0.93.4/bec_widgets/widgets/position_indicator}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
- {bec_widgets-0.93.3/bec_widgets/widgets/position_indicator → bec_widgets-0.93.4/bec_widgets/widgets/positioner_box}/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/scan_control/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/spinner/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/spinner/spinner.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/stop_button/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/text_box/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/text_box/text_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/toggle/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/toggle/toggle.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/vscode/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/vscode/vscode.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary.ui +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/waveform/waveform_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/website/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/website/register_website_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/website/website.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/Makefile +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/_static/custom.css +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/_templates/custom-class-template.rst +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/_templates/custom-module-template.rst +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/api_reference/api_reference.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/apps_48dp.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/display_settings_48dp.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/index_api.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/index_contribute.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/index_getting_started.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/index_user_guide.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/assets/rocket_launch_48dp.svg +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/conf.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/developer/developer.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/developer/getting_started/development.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/developer/getting_started/getting_started.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/developer/widgets/widgets.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/index.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/introduction/introduction.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/make.bat +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/requirements.txt +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/api_reference/api_reference.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/applications/applications.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/customisation.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/BECDockArea.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/auto_updates.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/getting_started.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/gui_complex_gui.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/installation.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/quick_start.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/getting_started/video_tutorials.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/user.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/BECFigure.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/bec_figure.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/bec_figure_dap.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/bec_status_box.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/bec_status_box.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/buttons.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/image_plot.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/motor.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/progress_bar.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/ring_progress_bar.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/scan_control.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/scan_control.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/scatter_2D.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/text_box.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/w1D.gif +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/website.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/docs/user/widgets/widgets.md +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/end-2-end/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/end-2-end/conftest.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/end-2-end/test_bec_dock_rpc_e2e.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/end-2-end/test_scan_control_e2e.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/references/SpinnerWidget/SpinnerWidget_darwin.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/references/SpinnerWidget/SpinnerWidget_linux.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/references/SpinnerWidget/SpinnerWidget_started_darwin.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/references/SpinnerWidget/SpinnerWidget_started_linux.png +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/client_mocks.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/conftest.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_connector.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_dispatcher.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_figure.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_image.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_image_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_motor_map.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_queue.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_bec_status_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_client_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_color_map_selector.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_color_validation.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_configs/config_device.yaml +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_crosshair.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_device_input_base.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_device_input_widgets.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_error_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_generate_cli_client.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_generate_plugin.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_motor_map_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_msgs/__init__.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_plot_base.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_plugin_utils.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_ring_progress_bar.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_rpc_register.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_rpc_server.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_rpc_widget_handler.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_scan_control.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_scan_control_group_box.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_setting_dialog.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_spinner.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_stop_button.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_text_box_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_toggle.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_vscode_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_waveform1d.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_waveform_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_website_widget.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_widget_io.py +0 -0
- {bec_widgets-0.93.3 → bec_widgets-0.93.4}/tests/unit_tests/test_yaml_dialog.py +0 -0
@@ -1,5 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## v0.93.4 (2024-08-07)
|
4
|
+
|
5
|
+
### Fix
|
6
|
+
|
7
|
+
* fix: rename DeviceBox to PositionerBox, fix test for validation ([`37aa371`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/37aa371e7c4c62d70abf37abc125db0c088790fe))
|
8
|
+
|
9
|
+
* fix: add validation for bec_lib.device.Positioner; closes #268 ([`eb54e9f`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/eb54e9f788e97af23db8fe0c78f8facb8688bb99))
|
10
|
+
|
3
11
|
## v0.93.3 (2024-08-07)
|
4
12
|
|
5
13
|
### Fix
|
@@ -128,10 +136,6 @@ This reverts commit fd6ae91993a23a7b8dbb2cf3c4b7c3eda6d2b0f6 ([`5aad401`](https:
|
|
128
136
|
|
129
137
|
* feat(dock_area): plugin added ([`a16b87a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a16b87ac28d164230dd2e8020f50ff3a63cd407e))
|
130
138
|
|
131
|
-
* feat(dock_area): Added toolbar to dock area to add widgets without CLI interactions ([`cce1367`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cce1367a72fca7206d351894bd1831b7bbfa7ec6))
|
132
|
-
|
133
|
-
* feat(toolbar): expandable menu actions ([`28f26e9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/28f26e92a46063db1a194be552156a5d3b2c43e7))
|
134
|
-
|
135
139
|
### Fix
|
136
140
|
|
137
141
|
* fix(status_item): icons changed to material design ([`1b9c55a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1b9c55a46a0dfd8678c8e95ff64dd6e8cfb9233e))
|
@@ -141,5 +145,3 @@ This reverts commit fd6ae91993a23a7b8dbb2cf3c4b7c3eda6d2b0f6 ([`5aad401`](https:
|
|
141
145
|
### Test
|
142
146
|
|
143
147
|
* test(dock_area): tests extended ([`06fab0e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/06fab0eab926cef5677d4988fd1fce09da342dd8))
|
144
|
-
|
145
|
-
## v0.90.0 (2024-07-23)
|
@@ -21,9 +21,9 @@ class Widgets(str, enum.Enum):
|
|
21
21
|
BECQueue = "BECQueue"
|
22
22
|
BECStatusBox = "BECStatusBox"
|
23
23
|
BECWaveformWidget = "BECWaveformWidget"
|
24
|
-
DeviceBox = "DeviceBox"
|
25
24
|
DeviceComboBox = "DeviceComboBox"
|
26
25
|
DeviceLineEdit = "DeviceLineEdit"
|
26
|
+
PositionerBox = "PositionerBox"
|
27
27
|
RingProgressBar = "RingProgressBar"
|
28
28
|
ScanControl = "ScanControl"
|
29
29
|
StopButton = "StopButton"
|
@@ -2287,7 +2287,7 @@ class BECWaveformWidget(RPCBase):
|
|
2287
2287
|
"""
|
2288
2288
|
|
2289
2289
|
|
2290
|
-
class
|
2290
|
+
class DeviceComboBox(RPCBase):
|
2291
2291
|
@property
|
2292
2292
|
@rpc_call
|
2293
2293
|
def _config_dict(self) -> "dict":
|
@@ -2305,7 +2305,7 @@ class DeviceBox(RPCBase):
|
|
2305
2305
|
"""
|
2306
2306
|
|
2307
2307
|
|
2308
|
-
class
|
2308
|
+
class DeviceInputBase(RPCBase):
|
2309
2309
|
@property
|
2310
2310
|
@rpc_call
|
2311
2311
|
def _config_dict(self) -> "dict":
|
@@ -2323,7 +2323,7 @@ class DeviceComboBox(RPCBase):
|
|
2323
2323
|
"""
|
2324
2324
|
|
2325
2325
|
|
2326
|
-
class
|
2326
|
+
class DeviceLineEdit(RPCBase):
|
2327
2327
|
@property
|
2328
2328
|
@rpc_call
|
2329
2329
|
def _config_dict(self) -> "dict":
|
@@ -2341,21 +2341,14 @@ class DeviceInputBase(RPCBase):
|
|
2341
2341
|
"""
|
2342
2342
|
|
2343
2343
|
|
2344
|
-
class
|
2345
|
-
@property
|
2344
|
+
class PositionerBox(RPCBase):
|
2346
2345
|
@rpc_call
|
2347
|
-
def
|
2348
|
-
"""
|
2349
|
-
Get the configuration of the widget.
|
2350
|
-
|
2351
|
-
Returns:
|
2352
|
-
dict: The configuration of the widget.
|
2346
|
+
def set_positioner(self, positioner: str):
|
2353
2347
|
"""
|
2348
|
+
Set the device
|
2354
2349
|
|
2355
|
-
|
2356
|
-
|
2357
|
-
"""
|
2358
|
-
Get all registered RPC objects.
|
2350
|
+
Args:
|
2351
|
+
positioner (Positioner | str) : Positioner to set, accepts str or the device
|
2359
2352
|
"""
|
2360
2353
|
|
2361
2354
|
|
@@ -83,8 +83,8 @@ class BECDockArea(BECWidget, QWidget):
|
|
83
83
|
"scan_control": IconAction(
|
84
84
|
icon_path="scan_control.svg", tooltip="Add Scan Control"
|
85
85
|
),
|
86
|
-
"
|
87
|
-
icon_path="
|
86
|
+
"positioner_box": IconAction(
|
87
|
+
icon_path="positioner_box.svg", tooltip="Add Device Box"
|
88
88
|
),
|
89
89
|
},
|
90
90
|
),
|
@@ -132,8 +132,8 @@ class BECDockArea(BECWidget, QWidget):
|
|
132
132
|
self.toolbar.widgets["menu_devices"].widgets["scan_control"].triggered.connect(
|
133
133
|
lambda: self.add_dock(widget="ScanControl", prefix="scan_control")
|
134
134
|
)
|
135
|
-
self.toolbar.widgets["menu_devices"].widgets["
|
136
|
-
lambda: self.add_dock(widget="
|
135
|
+
self.toolbar.widgets["menu_devices"].widgets["positioner_box"].triggered.connect(
|
136
|
+
lambda: self.add_dock(widget="PositionerBox", prefix="positioner_box")
|
137
137
|
)
|
138
138
|
|
139
139
|
# Menu Utils
|
@@ -1,7 +1,11 @@
|
|
1
|
+
""" Module for a PositionerBox widget to control a positioner device."""
|
2
|
+
|
1
3
|
import os
|
2
4
|
import uuid
|
3
5
|
|
6
|
+
from bec_lib.device import Positioner
|
4
7
|
from bec_lib.endpoints import MessageEndpoints
|
8
|
+
from bec_lib.logger import bec_logger
|
5
9
|
from bec_lib.messages import ScanQueueMessage
|
6
10
|
from qtpy.QtCore import Property, Signal, Slot
|
7
11
|
from qtpy.QtGui import QDoubleValidator
|
@@ -11,12 +15,23 @@ from bec_widgets.utils import UILoader
|
|
11
15
|
from bec_widgets.utils.bec_widget import BECWidget
|
12
16
|
from bec_widgets.utils.colors import apply_theme
|
13
17
|
|
18
|
+
logger = bec_logger.logger
|
19
|
+
|
20
|
+
|
21
|
+
class PositionerBox(BECWidget, QWidget):
|
22
|
+
"""Simple Widget to control a positioner in box form"""
|
14
23
|
|
15
|
-
|
24
|
+
USER_ACCESS = ["set_positioner"]
|
16
25
|
device_changed = Signal(str, str)
|
17
26
|
|
18
|
-
def __init__(self, parent=None, device=None, *args, **kwargs):
|
19
|
-
|
27
|
+
def __init__(self, parent=None, device: Positioner = None, *args, **kwargs):
|
28
|
+
"""Initialize the PositionerBox widget.
|
29
|
+
|
30
|
+
Args:
|
31
|
+
parent: The parent widget.
|
32
|
+
device (Positioner): The device to control.
|
33
|
+
"""
|
34
|
+
super().__init__(**kwargs)
|
20
35
|
QWidget.__init__(self, parent=parent)
|
21
36
|
self.get_bec_shortcuts()
|
22
37
|
self._device = ""
|
@@ -29,10 +44,11 @@ class DeviceBox(BECWidget, QWidget):
|
|
29
44
|
self.init_device()
|
30
45
|
|
31
46
|
def init_ui(self):
|
47
|
+
"""Init the ui"""
|
32
48
|
self.device_changed.connect(self.on_device_change)
|
33
49
|
|
34
50
|
current_path = os.path.dirname(__file__)
|
35
|
-
self.ui = UILoader(self).loader(os.path.join(current_path, "
|
51
|
+
self.ui = UILoader(self).loader(os.path.join(current_path, "positioner_box.ui"))
|
36
52
|
|
37
53
|
self.layout = QVBoxLayout(self)
|
38
54
|
self.layout.addWidget(self.ui)
|
@@ -57,28 +73,73 @@ class DeviceBox(BECWidget, QWidget):
|
|
57
73
|
self.ui.spinner_widget.start()
|
58
74
|
|
59
75
|
def init_device(self):
|
60
|
-
|
76
|
+
"""Init the device view and readback"""
|
77
|
+
if self._check_device_is_valid(self.device):
|
61
78
|
data = self.dev[self.device].read()
|
62
79
|
self.on_device_readback({"signals": data}, {})
|
63
80
|
|
81
|
+
def _toogle_enable_buttons(self, enable: bool) -> None:
|
82
|
+
"""Toogle enable/disable on available buttons
|
83
|
+
|
84
|
+
Args:
|
85
|
+
enable (bool): Enable buttons
|
86
|
+
"""
|
87
|
+
self.ui.tweak_left.setEnabled(enable)
|
88
|
+
self.ui.tweak_right.setEnabled(enable)
|
89
|
+
self.ui.stop.setEnabled(enable)
|
90
|
+
self.ui.setpoint.setEnabled(enable)
|
91
|
+
self.ui.step_size.setEnabled(enable)
|
92
|
+
|
64
93
|
@Property(str)
|
65
94
|
def device(self):
|
95
|
+
"""Property to set the device"""
|
66
96
|
return self._device
|
67
97
|
|
68
98
|
@device.setter
|
69
|
-
def device(self, value):
|
99
|
+
def device(self, value: str):
|
100
|
+
"""Setter, checks if device is a string"""
|
70
101
|
if not value or not isinstance(value, str):
|
71
102
|
return
|
72
103
|
old_device = self._device
|
73
104
|
self._device = value
|
74
105
|
self.device_changed.emit(old_device, value)
|
75
106
|
|
107
|
+
def set_positioner(self, positioner: str):
|
108
|
+
"""Set the device
|
109
|
+
|
110
|
+
Args:
|
111
|
+
positioner (Positioner | str) : Positioner to set, accepts str or the device
|
112
|
+
"""
|
113
|
+
if isinstance(positioner, Positioner):
|
114
|
+
positioner = positioner.name
|
115
|
+
self.device = positioner
|
116
|
+
|
117
|
+
def _check_device_is_valid(self, device: str):
|
118
|
+
"""Check if the device is a positioner
|
119
|
+
|
120
|
+
Args:
|
121
|
+
device (str): The device name
|
122
|
+
"""
|
123
|
+
if device not in self.dev:
|
124
|
+
logger.info(f"Device {device} not found in the device list")
|
125
|
+
return False
|
126
|
+
if not isinstance(self.dev[device], Positioner):
|
127
|
+
logger.info(f"Device {device} is not a positioner")
|
128
|
+
return False
|
129
|
+
return True
|
130
|
+
|
76
131
|
@Slot(str, str)
|
77
132
|
def on_device_change(self, old_device: str, new_device: str):
|
78
|
-
if
|
79
|
-
|
133
|
+
"""Upon changing the device, a check will be performed if the device is a Positioner.
|
134
|
+
|
135
|
+
Args:
|
136
|
+
old_device (str): The old device name.
|
137
|
+
new_device (str): The new device name.
|
138
|
+
"""
|
139
|
+
if not self._check_device_is_valid(new_device):
|
80
140
|
return
|
81
|
-
|
141
|
+
logger.info(f"Device changed from {old_device} to {new_device}")
|
142
|
+
self._toogle_enable_buttons(True)
|
82
143
|
self.init_device()
|
83
144
|
self.bec_dispatcher.disconnect_slot(
|
84
145
|
self.on_device_readback, MessageEndpoints.device_readback(old_device)
|
@@ -98,6 +159,12 @@ class DeviceBox(BECWidget, QWidget):
|
|
98
159
|
|
99
160
|
@Slot(dict, dict)
|
100
161
|
def on_device_readback(self, msg_content: dict, metadata: dict):
|
162
|
+
"""Callback for device readback.
|
163
|
+
|
164
|
+
Args:
|
165
|
+
msg_content (dict): The message content.
|
166
|
+
metadata (dict): The message metadata.
|
167
|
+
"""
|
101
168
|
signals = msg_content.get("signals", {})
|
102
169
|
# pylint: disable=protected-access
|
103
170
|
hinted_signals = self.dev[self.device]._hints
|
@@ -134,7 +201,12 @@ class DeviceBox(BECWidget, QWidget):
|
|
134
201
|
pos = (readback_val - limits[0]) / (limits[1] - limits[0])
|
135
202
|
self.ui.position_indicator.on_position_update(pos)
|
136
203
|
|
137
|
-
def update_limits(self, limits):
|
204
|
+
def update_limits(self, limits: tuple):
|
205
|
+
"""Update limits
|
206
|
+
|
207
|
+
Args:
|
208
|
+
limits (tuple): Limits of the positioner
|
209
|
+
"""
|
138
210
|
if limits == self._limits:
|
139
211
|
return
|
140
212
|
self._limits = limits
|
@@ -147,6 +219,7 @@ class DeviceBox(BECWidget, QWidget):
|
|
147
219
|
|
148
220
|
@Slot()
|
149
221
|
def on_stop(self):
|
222
|
+
"""Stop call"""
|
150
223
|
request_id = str(uuid.uuid4())
|
151
224
|
params = {
|
152
225
|
"device": self.device,
|
@@ -165,18 +238,22 @@ class DeviceBox(BECWidget, QWidget):
|
|
165
238
|
|
166
239
|
@property
|
167
240
|
def step_size(self):
|
241
|
+
"""Step size for tweak"""
|
168
242
|
return self.ui.step_size.value()
|
169
243
|
|
170
244
|
@Slot()
|
171
245
|
def on_tweak_right(self):
|
246
|
+
"""Tweak motor right"""
|
172
247
|
self.dev[self.device].move(self.step_size, relative=True)
|
173
248
|
|
174
249
|
@Slot()
|
175
250
|
def on_tweak_left(self):
|
251
|
+
"""Tweak motor left"""
|
176
252
|
self.dev[self.device].move(-self.step_size, relative=True)
|
177
253
|
|
178
254
|
@Slot()
|
179
255
|
def on_setpoint_change(self):
|
256
|
+
"""Change the setpoint for the motor"""
|
180
257
|
self.ui.setpoint.clearFocus()
|
181
258
|
setpoint = self.ui.setpoint.text()
|
182
259
|
self.dev[self.device].move(float(setpoint), relative=False)
|
@@ -191,7 +268,7 @@ if __name__ == "__main__": # pragma: no cover
|
|
191
268
|
|
192
269
|
app = QApplication(sys.argv)
|
193
270
|
apply_theme("light")
|
194
|
-
widget =
|
271
|
+
widget = PositionerBox(device="bpm4i")
|
195
272
|
|
196
273
|
widget.show()
|
197
274
|
sys.exit(app.exec_())
|
@@ -0,0 +1 @@
|
|
1
|
+
{'files': ['positioner_box.py']}
|
@@ -29,17 +29,24 @@
|
|
29
29
|
<item>
|
30
30
|
<widget class="QGroupBox" name="device_box">
|
31
31
|
<property name="title">
|
32
|
-
<string>
|
32
|
+
<string>No positioner selected</string>
|
33
33
|
</property>
|
34
34
|
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0">
|
35
35
|
<property name="topMargin">
|
36
36
|
<number>0</number>
|
37
37
|
</property>
|
38
38
|
<item row="3" column="1">
|
39
|
-
<widget class="QDoubleSpinBox" name="step_size"
|
39
|
+
<widget class="QDoubleSpinBox" name="step_size">
|
40
|
+
<property name="enabled">
|
41
|
+
<bool>false</bool>
|
42
|
+
</property>
|
43
|
+
</widget>
|
40
44
|
</item>
|
41
45
|
<item row="3" column="2">
|
42
46
|
<widget class="QToolButton" name="tweak_right">
|
47
|
+
<property name="enabled">
|
48
|
+
<bool>false</bool>
|
49
|
+
</property>
|
43
50
|
<property name="minimumSize">
|
44
51
|
<size>
|
45
52
|
<width>50</width>
|
@@ -67,10 +74,17 @@
|
|
67
74
|
</widget>
|
68
75
|
</item>
|
69
76
|
<item row="2" column="0" colspan="3">
|
70
|
-
<widget class="QLineEdit" name="setpoint"
|
77
|
+
<widget class="QLineEdit" name="setpoint">
|
78
|
+
<property name="enabled">
|
79
|
+
<bool>false</bool>
|
80
|
+
</property>
|
81
|
+
</widget>
|
71
82
|
</item>
|
72
83
|
<item row="3" column="0">
|
73
84
|
<widget class="QToolButton" name="tweak_left">
|
85
|
+
<property name="enabled">
|
86
|
+
<bool>false</bool>
|
87
|
+
</property>
|
74
88
|
<property name="minimumSize">
|
75
89
|
<size>
|
76
90
|
<width>50</width>
|
@@ -99,6 +113,9 @@
|
|
99
113
|
</item>
|
100
114
|
<item row="4" column="0" colspan="3">
|
101
115
|
<widget class="QPushButton" name="stop">
|
116
|
+
<property name="enabled">
|
117
|
+
<bool>false</bool>
|
118
|
+
</property>
|
102
119
|
<property name="text">
|
103
120
|
<string>Stop</string>
|
104
121
|
</property>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright (C) 2022 The Qt Company Ltd.
|
2
|
+
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
3
|
+
|
4
|
+
from qtpy.QtDesigner import QDesignerCustomWidgetInterface
|
5
|
+
from qtpy.QtGui import QIcon
|
6
|
+
|
7
|
+
from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox
|
8
|
+
|
9
|
+
DOM_XML = """
|
10
|
+
<ui language='c++'>
|
11
|
+
<widget class='PositionerBox' name='positioner_box'>
|
12
|
+
</widget>
|
13
|
+
</ui>
|
14
|
+
"""
|
15
|
+
|
16
|
+
|
17
|
+
class PositionerBoxPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
|
18
|
+
def __init__(self):
|
19
|
+
super().__init__()
|
20
|
+
self._form_editor = None
|
21
|
+
|
22
|
+
def createWidget(self, parent):
|
23
|
+
t = PositionerBox(parent)
|
24
|
+
return t
|
25
|
+
|
26
|
+
def domXml(self):
|
27
|
+
return DOM_XML
|
28
|
+
|
29
|
+
def group(self):
|
30
|
+
return ""
|
31
|
+
|
32
|
+
def icon(self):
|
33
|
+
return QIcon()
|
34
|
+
|
35
|
+
def includeFile(self):
|
36
|
+
return "positioner_box"
|
37
|
+
|
38
|
+
def initialize(self, form_editor):
|
39
|
+
self._form_editor = form_editor
|
40
|
+
|
41
|
+
def isContainer(self):
|
42
|
+
return False
|
43
|
+
|
44
|
+
def isInitialized(self):
|
45
|
+
return self._form_editor is not None
|
46
|
+
|
47
|
+
def name(self):
|
48
|
+
return "PositionerBox"
|
49
|
+
|
50
|
+
def toolTip(self):
|
51
|
+
return "Simple Widget to control a positioner in box form"
|
52
|
+
|
53
|
+
def whatsThis(self):
|
54
|
+
return self.toolTip()
|
@@ -0,0 +1,15 @@
|
|
1
|
+
def main(): # pragma: no cover
|
2
|
+
from qtpy import PYSIDE6
|
3
|
+
|
4
|
+
if not PYSIDE6:
|
5
|
+
print("PYSIDE6 is not available in the environment. Cannot patch designer.")
|
6
|
+
return
|
7
|
+
from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
|
8
|
+
|
9
|
+
from bec_widgets.widgets.positioner_box.positioner_box_plugin import PositionerBoxPlugin
|
10
|
+
|
11
|
+
QPyDesignerCustomWidgetCollection.addCustomWidget(PositionerBoxPlugin())
|
12
|
+
|
13
|
+
|
14
|
+
if __name__ == "__main__": # pragma: no cover
|
15
|
+
main()
|
@@ -127,10 +127,12 @@ def test_toolbar_add_plot_motor_map(bec_dock_area):
|
|
127
127
|
assert bec_dock_area.panels["motor_map_1"].widgets[0].config.widget_class == "BECMotorMapWidget"
|
128
128
|
|
129
129
|
|
130
|
-
def
|
131
|
-
bec_dock_area.toolbar.widgets["menu_devices"].widgets["
|
132
|
-
assert "
|
133
|
-
assert
|
130
|
+
def test_toolbar_add_device_positioner_box(bec_dock_area):
|
131
|
+
bec_dock_area.toolbar.widgets["menu_devices"].widgets["positioner_box"].trigger()
|
132
|
+
assert "positioner_box_1" in bec_dock_area.panels
|
133
|
+
assert (
|
134
|
+
bec_dock_area.panels["positioner_box_1"].widgets[0].config.widget_class == "PositionerBox"
|
135
|
+
)
|
134
136
|
|
135
137
|
|
136
138
|
def test_toolbar_add_utils_queue(bec_dock_area):
|
@@ -0,0 +1,104 @@
|
|
1
|
+
from unittest import mock
|
2
|
+
|
3
|
+
import pytest
|
4
|
+
from bec_lib.device import Positioner
|
5
|
+
from bec_lib.endpoints import MessageEndpoints
|
6
|
+
from bec_lib.messages import ScanQueueMessage
|
7
|
+
from qtpy.QtGui import QValidator
|
8
|
+
|
9
|
+
from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox
|
10
|
+
|
11
|
+
from .client_mocks import mocked_client
|
12
|
+
|
13
|
+
|
14
|
+
@pytest.fixture
|
15
|
+
def positioner_box(qtbot, mocked_client):
|
16
|
+
with mock.patch("bec_widgets.widgets.positioner_box.positioner_box.uuid.uuid4") as mock_uuid:
|
17
|
+
mock_uuid.return_value = "fake_uuid"
|
18
|
+
with mock.patch(
|
19
|
+
"bec_widgets.widgets.positioner_box.positioner_box.PositionerBox._check_device_is_valid",
|
20
|
+
return_value=True,
|
21
|
+
):
|
22
|
+
db = PositionerBox(device="samx", client=mocked_client)
|
23
|
+
qtbot.addWidget(db)
|
24
|
+
yield db
|
25
|
+
|
26
|
+
|
27
|
+
def test_positioner_box(positioner_box):
|
28
|
+
assert positioner_box.device == "samx"
|
29
|
+
data = positioner_box.dev["samx"].read()
|
30
|
+
# Avoid check for Positioner class from BEC in _init_device
|
31
|
+
|
32
|
+
setpoint_text = positioner_box.ui.setpoint.text()
|
33
|
+
# check that the setpoint is taken correctly after init
|
34
|
+
assert float(setpoint_text) == data["samx_setpoint"]["value"]
|
35
|
+
|
36
|
+
# check that the precision is taken correctly after isnit
|
37
|
+
precision = positioner_box.dev["samx"].precision
|
38
|
+
assert setpoint_text == f"{data['samx_setpoint']['value']:.{precision}f}"
|
39
|
+
|
40
|
+
# check that the step size is set according to the device precision
|
41
|
+
assert positioner_box.ui.step_size.value() == 10**-precision * 10
|
42
|
+
|
43
|
+
|
44
|
+
def test_positioner_box_update_limits(positioner_box):
|
45
|
+
positioner_box._limits = None
|
46
|
+
positioner_box.update_limits([0, 10])
|
47
|
+
assert positioner_box._limits == [0, 10]
|
48
|
+
assert positioner_box.setpoint_validator.bottom() == 0
|
49
|
+
assert positioner_box.setpoint_validator.top() == 10
|
50
|
+
assert positioner_box.setpoint_validator.validate("100", 0) == (
|
51
|
+
QValidator.State.Intermediate,
|
52
|
+
"100",
|
53
|
+
0,
|
54
|
+
)
|
55
|
+
|
56
|
+
positioner_box.update_limits(None)
|
57
|
+
assert positioner_box._limits is None
|
58
|
+
assert positioner_box.setpoint_validator.validate("100", 0) == (
|
59
|
+
QValidator.State.Acceptable,
|
60
|
+
"100",
|
61
|
+
0,
|
62
|
+
)
|
63
|
+
|
64
|
+
|
65
|
+
def test_positioner_box_on_stop(positioner_box):
|
66
|
+
with mock.patch.object(positioner_box.client.connector, "send") as mock_send:
|
67
|
+
positioner_box.on_stop()
|
68
|
+
params = {"device": "samx", "rpc_id": "fake_uuid", "func": "stop", "args": [], "kwargs": {}}
|
69
|
+
msg = ScanQueueMessage(
|
70
|
+
scan_type="device_rpc",
|
71
|
+
parameter=params,
|
72
|
+
queue="emergency",
|
73
|
+
metadata={"RID": "fake_uuid", "response": False},
|
74
|
+
)
|
75
|
+
mock_send.assert_called_once_with(MessageEndpoints.scan_queue_request(), msg)
|
76
|
+
|
77
|
+
|
78
|
+
def test_positioner_box_setpoint_change(positioner_box):
|
79
|
+
with mock.patch.object(positioner_box.dev["samx"], "move") as mock_move:
|
80
|
+
positioner_box.ui.setpoint.setText("100")
|
81
|
+
positioner_box.on_setpoint_change()
|
82
|
+
mock_move.assert_called_once_with(100, relative=False)
|
83
|
+
|
84
|
+
|
85
|
+
def test_positioner_box_on_tweak_right(positioner_box):
|
86
|
+
with mock.patch.object(positioner_box.dev["samx"], "move") as mock_move:
|
87
|
+
positioner_box.ui.step_size.setValue(0.1)
|
88
|
+
positioner_box.on_tweak_right()
|
89
|
+
mock_move.assert_called_once_with(0.1, relative=True)
|
90
|
+
|
91
|
+
|
92
|
+
def test_positioner_box_on_tweak_left(positioner_box):
|
93
|
+
with mock.patch.object(positioner_box.dev["samx"], "move") as mock_move:
|
94
|
+
positioner_box.ui.step_size.setValue(0.1)
|
95
|
+
positioner_box.on_tweak_left()
|
96
|
+
mock_move.assert_called_once_with(-0.1, relative=True)
|
97
|
+
|
98
|
+
|
99
|
+
def test_positioner_box_setpoint_out_of_range(positioner_box):
|
100
|
+
positioner_box.update_limits([0, 10])
|
101
|
+
positioner_box.ui.setpoint.setText("100")
|
102
|
+
positioner_box.on_setpoint_change()
|
103
|
+
assert positioner_box.ui.setpoint.text() == "100"
|
104
|
+
assert positioner_box.ui.setpoint.hasAcceptableInput() == False
|
@@ -1 +0,0 @@
|
|
1
|
-
{'files': ['device_box.py']}
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# Copyright (C) 2022 The Qt Company Ltd.
|
2
|
-
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
3
|
-
import os
|
4
|
-
|
5
|
-
from qtpy.QtDesigner import QDesignerCustomWidgetInterface
|
6
|
-
from qtpy.QtGui import QIcon
|
7
|
-
|
8
|
-
import bec_widgets
|
9
|
-
from bec_widgets.widgets.device_box.device_box import DeviceBox
|
10
|
-
|
11
|
-
DOM_XML = """
|
12
|
-
<ui language='c++'>
|
13
|
-
<widget class='DeviceBox' name='device_box'>
|
14
|
-
</widget>
|
15
|
-
</ui>
|
16
|
-
"""
|
17
|
-
|
18
|
-
MODULE_PATH = os.path.dirname(bec_widgets.__file__)
|
19
|
-
|
20
|
-
|
21
|
-
class DeviceBoxPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
|
22
|
-
def __init__(self):
|
23
|
-
super().__init__()
|
24
|
-
self._form_editor = None
|
25
|
-
|
26
|
-
def createWidget(self, parent):
|
27
|
-
t = DeviceBox(parent)
|
28
|
-
return t
|
29
|
-
|
30
|
-
def domXml(self):
|
31
|
-
return DOM_XML
|
32
|
-
|
33
|
-
def group(self):
|
34
|
-
return "Device Control"
|
35
|
-
|
36
|
-
def icon(self):
|
37
|
-
icon_path = os.path.join(MODULE_PATH, "assets", "designer_icons", "device_box.png")
|
38
|
-
return QIcon(icon_path)
|
39
|
-
|
40
|
-
def includeFile(self):
|
41
|
-
return "device_box"
|
42
|
-
|
43
|
-
def initialize(self, form_editor):
|
44
|
-
self._form_editor = form_editor
|
45
|
-
|
46
|
-
def isContainer(self):
|
47
|
-
return False
|
48
|
-
|
49
|
-
def isInitialized(self):
|
50
|
-
return self._form_editor is not None
|
51
|
-
|
52
|
-
def name(self):
|
53
|
-
return "DeviceBox"
|
54
|
-
|
55
|
-
def toolTip(self):
|
56
|
-
return "A widget for controlling a single positioner. "
|
57
|
-
|
58
|
-
def whatsThis(self):
|
59
|
-
return self.toolTip()
|
@@ -1,15 +0,0 @@
|
|
1
|
-
def main(): # pragma: no cover
|
2
|
-
from qtpy import PYSIDE6
|
3
|
-
|
4
|
-
if not PYSIDE6:
|
5
|
-
print("PYSIDE6 is not available in the environment. Cannot patch designer.")
|
6
|
-
return
|
7
|
-
from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
|
8
|
-
|
9
|
-
from bec_widgets.widgets.device_box.device_box_plugin import DeviceBoxPlugin
|
10
|
-
|
11
|
-
QPyDesignerCustomWidgetCollection.addCustomWidget(DeviceBoxPlugin())
|
12
|
-
|
13
|
-
|
14
|
-
if __name__ == "__main__": # pragma: no cover
|
15
|
-
main()
|