bec-widgets 2.8.2__tar.gz → 2.8.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-2.8.2 → bec_widgets-2.8.4}/.github/workflows/end2end-conda.yml +4 -2
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/CHANGELOG.md +27 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/PKG-INFO +1 -1
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/applications/launch_window.py +1 -1
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/client.py +57 -1
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/generate_cli.py +1 -1
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/rpc/rpc_widget_handler.py +3 -4
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_plugin_helper.py +29 -16
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/crosshair.py +72 -9
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/plugin_utils.py +27 -26
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/ui_loader.py +3 -6
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/image.py +2 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +2 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/plot_base.py +27 -1
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +2 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +3 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +111 -88
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +74 -43
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/waveform.py +2 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/pyproject.toml +1 -1
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.git_hooks/pre-commit +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/actions/bw_install/action.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/pull_request_template.md +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/check_pr.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/ci.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/formatter.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/generate-cli-check.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/pytest-matrix.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/pytest.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/semantic_release.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.github/workflows/sync-issues-pr.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.gitignore +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.gitlab-ci.yml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.pylintrc +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/.readthedocs.yaml +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/LICENSE +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/README.md +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/applications/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/applications/bw_launch.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/assets/app_icons/auto_update.png +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/client_utils.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/rpc/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/rpc/rpc_base.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/rpc/rpc_register.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/cli/server.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/general_app/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/general_app/general_app.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/general_app/general_app.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/general_app/web_links.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/tests/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/tests/utils.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_connector.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_designer.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_dispatcher.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_signal_proxy.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_table.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/bec_widget.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/colors.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/compact_popup.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/container_utils.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/entry_validator.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/error_popups.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/expandable_frame.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/filter_io.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/forms_from_types/forms.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/forms_from_types/items.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/fps_counter.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/generate_designer_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/layout_manager.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/linear_region_selector.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/name_utils.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/ophyd_kind_util.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/palette_viewer.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/plot_indicator_items.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/plugin_templates/register.template +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/redis_message_waiter.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/reference_utils.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/round_frame.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/rpc_decorator.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/rpc_server.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/serialization.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/settings_dialog.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/side_panel.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/thread_checker.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/toolbar.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/validator_delegate.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/widget_io.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/widget_state_manager.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/utils/yaml_dialog.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/dock/dock.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/containers/main_window/main_window.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/console/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/console/console.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/console/console.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/console/console_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/console/register_console.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/website/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/website/website.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/games/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/games/minesweeper.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/image_item.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/image_roi_plot.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/register_image.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/roi/image_roi.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
- {bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -12,6 +12,7 @@ jobs:
|
|
12
12
|
CHILD_PIPELINE_BRANCH: main # Set the branch you want for ophyd_devices
|
13
13
|
BEC_CORE_BRANCH: main # Set the branch you want for bec
|
14
14
|
OPHYD_DEVICES_BRANCH: main # Set the branch you want for ophyd_devices
|
15
|
+
PLUGIN_REPO_BRANCH: main # Set the branch you want for the plugin repo
|
15
16
|
PROJECT_PATH: ${{ github.repository }}
|
16
17
|
QTWEBENGINE_DISABLE_SANDBOX: 1
|
17
18
|
QT_QPA_PLATFORM: "offscreen"
|
@@ -39,10 +40,11 @@ jobs:
|
|
39
40
|
echo -e "\033[35;1m Using branch $OPHYD_DEVICES_BRANCH of OPHYD_DEVICES \033[0;m";
|
40
41
|
git clone --branch $OPHYD_DEVICES_BRANCH https://github.com/bec-project/ophyd_devices.git
|
41
42
|
export OHPYD_DEVICES_PATH=$PWD/ophyd_devices
|
43
|
+
echo -e "\033[35;1m Using branch $PLUGIN_REPO_BRANCH of bec_testing_plugin \033[0;m";
|
44
|
+
git clone --branch $PLUGIN_REPO_BRANCH https://github.com/bec-project/bec_testing_plugin.git
|
42
45
|
cd ./bec
|
43
46
|
conda create -q -n test-environment python=3.11
|
44
47
|
source ./bin/install_bec_dev.sh -t
|
45
48
|
cd ../
|
46
|
-
pip install -e ./ophyd_devices
|
47
|
-
pip install -e .[dev,pyside6]
|
49
|
+
pip install -e ./ophyd_devices -e .[dev,pyside6] -e ./bec_testing_plugin
|
48
50
|
pytest -v --files-path ./ --start-servers --random-order ./tests/end-2-end
|
@@ -1,6 +1,33 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.8.4 (2025-05-30)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- **crosshair**: Label decimal precision is dynamically scaled with the plot zoom; API of all
|
9
|
+
affected widgets adjusted; option added to PlotBase; closes #637
|
10
|
+
([`c8128fa`](https://github.com/bec-project/bec_widgets/commit/c8128faf79c43487921aada9dbf1869ef5bda93c))
|
11
|
+
|
12
|
+
|
13
|
+
## v2.8.3 (2025-05-30)
|
14
|
+
|
15
|
+
### Bug Fixes
|
16
|
+
|
17
|
+
- Guard plugin repo import in e2e test
|
18
|
+
([`bf172b8`](https://github.com/bec-project/bec_widgets/commit/bf172b8431ec207f39206d2a0446908f7186858a))
|
19
|
+
|
20
|
+
### Refactoring
|
21
|
+
|
22
|
+
- Store modules with widget search
|
23
|
+
([`b225a7c`](https://github.com/bec-project/bec_widgets/commit/b225a7cc90b55697211c28d9411b6f85c8077217))
|
24
|
+
|
25
|
+
### Testing
|
26
|
+
|
27
|
+
- **e2e**: Add tests involving plugin repo
|
28
|
+
([`05329ab`](https://github.com/bec-project/bec_widgets/commit/05329ab50fe10ffc3c19ef3eb408912bb9068de3))
|
29
|
+
|
30
|
+
|
4
31
|
## v2.8.2 (2025-05-27)
|
5
32
|
|
6
33
|
### Bug Fixes
|
@@ -242,7 +242,7 @@ class LaunchWindow(BECMainWindow):
|
|
242
242
|
)
|
243
243
|
|
244
244
|
# plugin widgets
|
245
|
-
self.available_widgets: dict[str, BECWidget] = get_all_plugin_widgets()
|
245
|
+
self.available_widgets: dict[str, type[BECWidget]] = get_all_plugin_widgets().as_dict()
|
246
246
|
if self.available_widgets:
|
247
247
|
plugin_repo_name = next(iter(self.available_widgets.values())).__module__.split(".")[0]
|
248
248
|
plugin_repo_name = plugin_repo_name.removesuffix("_bec").upper()
|
@@ -63,7 +63,7 @@ _Widgets = {
|
|
63
63
|
|
64
64
|
|
65
65
|
try:
|
66
|
-
_plugin_widgets = get_all_plugin_widgets()
|
66
|
+
_plugin_widgets = get_all_plugin_widgets().as_dict()
|
67
67
|
plugin_client = get_plugin_client_module()
|
68
68
|
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
|
69
69
|
|
@@ -1221,6 +1221,20 @@ class Image(RPCBase):
|
|
1221
1221
|
Set auto range for the y-axis.
|
1222
1222
|
"""
|
1223
1223
|
|
1224
|
+
@property
|
1225
|
+
@rpc_call
|
1226
|
+
def minimal_crosshair_precision(self) -> "int":
|
1227
|
+
"""
|
1228
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
1229
|
+
"""
|
1230
|
+
|
1231
|
+
@minimal_crosshair_precision.setter
|
1232
|
+
@rpc_call
|
1233
|
+
def minimal_crosshair_precision(self) -> "int":
|
1234
|
+
"""
|
1235
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
1236
|
+
"""
|
1237
|
+
|
1224
1238
|
@property
|
1225
1239
|
@rpc_call
|
1226
1240
|
def color_map(self) -> "str":
|
@@ -2350,6 +2364,20 @@ class MultiWaveform(RPCBase):
|
|
2350
2364
|
The font size of the legend font.
|
2351
2365
|
"""
|
2352
2366
|
|
2367
|
+
@property
|
2368
|
+
@rpc_call
|
2369
|
+
def minimal_crosshair_precision(self) -> "int":
|
2370
|
+
"""
|
2371
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
2372
|
+
"""
|
2373
|
+
|
2374
|
+
@minimal_crosshair_precision.setter
|
2375
|
+
@rpc_call
|
2376
|
+
def minimal_crosshair_precision(self) -> "int":
|
2377
|
+
"""
|
2378
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
2379
|
+
"""
|
2380
|
+
|
2353
2381
|
@property
|
2354
2382
|
@rpc_call
|
2355
2383
|
def highlighted_index(self):
|
@@ -3315,6 +3343,20 @@ class ScatterWaveform(RPCBase):
|
|
3315
3343
|
The font size of the legend font.
|
3316
3344
|
"""
|
3317
3345
|
|
3346
|
+
@property
|
3347
|
+
@rpc_call
|
3348
|
+
def minimal_crosshair_precision(self) -> "int":
|
3349
|
+
"""
|
3350
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
3351
|
+
"""
|
3352
|
+
|
3353
|
+
@minimal_crosshair_precision.setter
|
3354
|
+
@rpc_call
|
3355
|
+
def minimal_crosshair_precision(self) -> "int":
|
3356
|
+
"""
|
3357
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
3358
|
+
"""
|
3359
|
+
|
3318
3360
|
@property
|
3319
3361
|
@rpc_call
|
3320
3362
|
def main_curve(self) -> "ScatterCurve":
|
@@ -3789,6 +3831,20 @@ class Waveform(RPCBase):
|
|
3789
3831
|
The font size of the legend font.
|
3790
3832
|
"""
|
3791
3833
|
|
3834
|
+
@property
|
3835
|
+
@rpc_call
|
3836
|
+
def minimal_crosshair_precision(self) -> "int":
|
3837
|
+
"""
|
3838
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
3839
|
+
"""
|
3840
|
+
|
3841
|
+
@minimal_crosshair_precision.setter
|
3842
|
+
@rpc_call
|
3843
|
+
def minimal_crosshair_precision(self) -> "int":
|
3844
|
+
"""
|
3845
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
3846
|
+
"""
|
3847
|
+
|
3792
3848
|
@property
|
3793
3849
|
@rpc_call
|
3794
3850
|
def curves(self) -> "list[Curve]":
|
@@ -111,7 +111,7 @@ _Widgets = {
|
|
111
111
|
self.content += """
|
112
112
|
|
113
113
|
try:
|
114
|
-
_plugin_widgets = get_all_plugin_widgets()
|
114
|
+
_plugin_widgets = get_all_plugin_widgets().as_dict()
|
115
115
|
plugin_client = get_plugin_client_module()
|
116
116
|
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
|
117
117
|
|
@@ -31,10 +31,9 @@ class RPCWidgetHandler:
|
|
31
31
|
Returns:
|
32
32
|
None
|
33
33
|
"""
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
}
|
34
|
+
self._widget_classes = (
|
35
|
+
get_custom_classes("bec_widgets") + get_all_plugin_widgets()
|
36
|
+
).as_dict(IGNORE_WIDGETS)
|
38
37
|
|
39
38
|
def create_widget(self, widget_type, **kwargs) -> BECWidget:
|
40
39
|
"""
|
@@ -3,12 +3,17 @@ from __future__ import annotations
|
|
3
3
|
import importlib.metadata
|
4
4
|
import inspect
|
5
5
|
import pkgutil
|
6
|
+
import traceback
|
6
7
|
from importlib import util as importlib_util
|
7
8
|
from importlib.machinery import FileFinder, ModuleSpec, SourceFileLoader
|
8
9
|
from types import ModuleType
|
9
10
|
from typing import Generator
|
10
11
|
|
11
|
-
from
|
12
|
+
from bec_lib.logger import bec_logger
|
13
|
+
|
14
|
+
from bec_widgets.utils.plugin_utils import BECClassContainer, BECClassInfo
|
15
|
+
|
16
|
+
logger = bec_logger.logger
|
12
17
|
|
13
18
|
|
14
19
|
def _submodule_specs(module: ModuleType) -> tuple[ModuleSpec | None, ...]:
|
@@ -30,7 +35,12 @@ def _loaded_submodules_from_specs(
|
|
30
35
|
assert isinstance(
|
31
36
|
submodule.__loader__, SourceFileLoader
|
32
37
|
), "Module found from FileFinder should have SourceFileLoader!"
|
33
|
-
|
38
|
+
try:
|
39
|
+
submodule.__loader__.exec_module(submodule)
|
40
|
+
except Exception as e:
|
41
|
+
logger.error(
|
42
|
+
f"Error loading plugin {submodule}: \n{''.join(traceback.format_exception(e))}"
|
43
|
+
)
|
34
44
|
yield submodule
|
35
45
|
|
36
46
|
|
@@ -41,27 +51,29 @@ def _submodule_by_name(module: ModuleType, name: str):
|
|
41
51
|
return None
|
42
52
|
|
43
53
|
|
44
|
-
def _get_widgets_from_module(module: ModuleType) ->
|
45
|
-
"""Find any BECWidget subclasses in the given module and return them with their
|
54
|
+
def _get_widgets_from_module(module: ModuleType) -> BECClassContainer:
|
55
|
+
"""Find any BECWidget subclasses in the given module and return them with their info."""
|
46
56
|
from bec_widgets.utils.bec_widget import BECWidget # avoid circular import
|
47
57
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
classes = inspect.getmembers(
|
59
|
+
module,
|
60
|
+
predicate=lambda item: inspect.isclass(item)
|
61
|
+
and issubclass(item, BECWidget)
|
62
|
+
and item is not BECWidget,
|
63
|
+
)
|
64
|
+
return BECClassContainer(
|
65
|
+
BECClassInfo(name=k, module=module.__name__, file=module.__loader__.get_filename(), obj=v)
|
66
|
+
for k, v in classes
|
55
67
|
)
|
56
68
|
|
57
69
|
|
58
|
-
def _all_widgets_from_all_submods(module):
|
70
|
+
def _all_widgets_from_all_submods(module) -> BECClassContainer:
|
59
71
|
"""Recursively load submodules, find any BECWidgets, and return them all as a flat dict."""
|
60
72
|
widgets = _get_widgets_from_module(module)
|
61
73
|
if not hasattr(module, "__path__"):
|
62
74
|
return widgets
|
63
75
|
for submod in _loaded_submodules_from_specs(_submodule_specs(module)):
|
64
|
-
widgets
|
76
|
+
widgets += _all_widgets_from_all_submods(submod)
|
65
77
|
return widgets
|
66
78
|
|
67
79
|
|
@@ -75,15 +87,16 @@ def get_plugin_client_module() -> ModuleType | None:
|
|
75
87
|
return _submodule_by_name(plugin, "client") if (plugin := user_widget_plugin()) else None
|
76
88
|
|
77
89
|
|
78
|
-
def get_all_plugin_widgets() ->
|
90
|
+
def get_all_plugin_widgets() -> BECClassContainer:
|
79
91
|
"""If there is a plugin repository installed, load all widgets from it."""
|
80
92
|
if plugin := user_widget_plugin():
|
81
93
|
return _all_widgets_from_all_submods(plugin)
|
82
94
|
else:
|
83
|
-
return
|
95
|
+
return BECClassContainer()
|
84
96
|
|
85
97
|
|
86
98
|
if __name__ == "__main__": # pragma: no cover
|
87
|
-
|
99
|
+
|
88
100
|
client = get_plugin_client_module()
|
101
|
+
print(get_all_plugin_widgets())
|
89
102
|
...
|
@@ -34,13 +34,21 @@ class Crosshair(QObject):
|
|
34
34
|
coordinatesChanged2D = Signal(tuple)
|
35
35
|
coordinatesClicked2D = Signal(tuple)
|
36
36
|
|
37
|
-
def __init__(
|
37
|
+
def __init__(
|
38
|
+
self,
|
39
|
+
plot_item: pg.PlotItem,
|
40
|
+
precision: int | None = None,
|
41
|
+
*,
|
42
|
+
min_precision: int = 2,
|
43
|
+
parent=None,
|
44
|
+
):
|
38
45
|
"""
|
39
46
|
Crosshair for 1D and 2D plots.
|
40
47
|
|
41
48
|
Args:
|
42
49
|
plot_item (pyqtgraph.PlotItem): The plot item to which the crosshair will be attached.
|
43
|
-
precision (int, optional):
|
50
|
+
precision (int | None, optional): Fixed number of decimal places to display. If *None*, precision is chosen dynamically from the current view range.
|
51
|
+
min_precision (int, optional): The lower bound (in decimal places) used when dynamic precision is enabled. Defaults to 2.
|
44
52
|
parent (QObject, optional): Parent object for the QObject. Defaults to None.
|
45
53
|
"""
|
46
54
|
super().__init__(parent)
|
@@ -48,7 +56,9 @@ class Crosshair(QObject):
|
|
48
56
|
self.is_log_x = None
|
49
57
|
self.is_derivative = None
|
50
58
|
self.plot_item = plot_item
|
51
|
-
self.
|
59
|
+
self._precision = precision
|
60
|
+
self._min_precision = max(0, int(min_precision)) # ensure non‑negative
|
61
|
+
|
52
62
|
self.v_line = pg.InfiniteLine(angle=90, movable=False)
|
53
63
|
self.v_line.skip_auto_range = True
|
54
64
|
self.h_line = pg.InfiniteLine(angle=0, movable=False)
|
@@ -93,6 +103,56 @@ class Crosshair(QObject):
|
|
93
103
|
|
94
104
|
self._connect_to_theme_change()
|
95
105
|
|
106
|
+
@property
|
107
|
+
def precision(self) -> int | None:
|
108
|
+
"""Fixed number of decimals; ``None`` enables dynamic mode."""
|
109
|
+
return self._precision
|
110
|
+
|
111
|
+
@precision.setter
|
112
|
+
def precision(self, value: int | None):
|
113
|
+
"""
|
114
|
+
Set the fixed number of decimals to display.
|
115
|
+
|
116
|
+
Args:
|
117
|
+
value(int | None): The number of decimals to display. If `None`, dynamic precision is used based on the view range.
|
118
|
+
"""
|
119
|
+
self._precision = value
|
120
|
+
|
121
|
+
@property
|
122
|
+
def min_precision(self) -> int:
|
123
|
+
"""Lower bound on decimals when dynamic precision is used."""
|
124
|
+
return self._min_precision
|
125
|
+
|
126
|
+
@min_precision.setter
|
127
|
+
def min_precision(self, value: int):
|
128
|
+
"""
|
129
|
+
Set the lower bound on decimals when dynamic precision is used.
|
130
|
+
|
131
|
+
Args:
|
132
|
+
value(int): The minimum number of decimals to display. Must be non-negative.
|
133
|
+
"""
|
134
|
+
self._min_precision = max(0, int(value))
|
135
|
+
|
136
|
+
def _current_precision(self) -> int:
|
137
|
+
"""
|
138
|
+
Get the current precision based on the view range or fixed precision.
|
139
|
+
"""
|
140
|
+
if self._precision is not None:
|
141
|
+
return self._precision
|
142
|
+
|
143
|
+
# Dynamically choose precision from the smaller visible span
|
144
|
+
view_range = self.plot_item.vb.viewRange()
|
145
|
+
x_span = abs(view_range[0][1] - view_range[0][0])
|
146
|
+
y_span = abs(view_range[1][1] - view_range[1][0])
|
147
|
+
|
148
|
+
# Ignore zero spans that can appear during initialisation
|
149
|
+
spans = [s for s in (x_span, y_span) if s > 0]
|
150
|
+
span = min(spans) if spans else 1.0
|
151
|
+
|
152
|
+
exponent = np.floor(np.log10(span)) # order of magnitude
|
153
|
+
decimals = max(0, int(-exponent) + 1)
|
154
|
+
return max(self._min_precision, decimals)
|
155
|
+
|
96
156
|
def _connect_to_theme_change(self):
|
97
157
|
"""Connect to the theme change signal."""
|
98
158
|
qapp = QApplication.instance()
|
@@ -324,6 +384,7 @@ class Crosshair(QObject):
|
|
324
384
|
# not sure how we got here, but just to be safe...
|
325
385
|
return
|
326
386
|
|
387
|
+
precision = self._current_precision()
|
327
388
|
for item in self.items:
|
328
389
|
if isinstance(item, pg.PlotDataItem):
|
329
390
|
name = item.name() or str(id(item))
|
@@ -334,8 +395,8 @@ class Crosshair(QObject):
|
|
334
395
|
x_snapped_scaled, y_snapped_scaled = self.scale_emitted_coordinates(x, y)
|
335
396
|
coordinate_to_emit = (
|
336
397
|
name,
|
337
|
-
round(x_snapped_scaled,
|
338
|
-
round(y_snapped_scaled,
|
398
|
+
round(x_snapped_scaled, precision),
|
399
|
+
round(y_snapped_scaled, precision),
|
339
400
|
)
|
340
401
|
self.coordinatesChanged1D.emit(coordinate_to_emit)
|
341
402
|
elif isinstance(item, pg.ImageItem):
|
@@ -380,6 +441,7 @@ class Crosshair(QObject):
|
|
380
441
|
# not sure how we got here, but just to be safe...
|
381
442
|
return
|
382
443
|
|
444
|
+
precision = self._current_precision()
|
383
445
|
for item in self.items:
|
384
446
|
if isinstance(item, pg.PlotDataItem):
|
385
447
|
name = item.name() or str(id(item))
|
@@ -391,8 +453,8 @@ class Crosshair(QObject):
|
|
391
453
|
x_snapped_scaled, y_snapped_scaled = self.scale_emitted_coordinates(x, y)
|
392
454
|
coordinate_to_emit = (
|
393
455
|
name,
|
394
|
-
round(x_snapped_scaled,
|
395
|
-
round(y_snapped_scaled,
|
456
|
+
round(x_snapped_scaled, precision),
|
457
|
+
round(y_snapped_scaled, precision),
|
396
458
|
)
|
397
459
|
self.coordinatesClicked1D.emit(coordinate_to_emit)
|
398
460
|
elif isinstance(item, pg.ImageItem):
|
@@ -443,7 +505,8 @@ class Crosshair(QObject):
|
|
443
505
|
"""
|
444
506
|
x, y = pos
|
445
507
|
x_scaled, y_scaled = self.scale_emitted_coordinates(x, y)
|
446
|
-
|
508
|
+
precision = self._current_precision()
|
509
|
+
text = f"({x_scaled:.{precision}f}, {y_scaled:.{precision}f})"
|
447
510
|
for item in self.items:
|
448
511
|
if isinstance(item, pg.ImageItem):
|
449
512
|
image = item.image
|
@@ -452,7 +515,7 @@ class Crosshair(QObject):
|
|
452
515
|
ix = int(np.clip(x, 0, image.shape[0] - 1))
|
453
516
|
iy = int(np.clip(y, 0, image.shape[1] - 1))
|
454
517
|
intensity = image[ix, iy]
|
455
|
-
text += f"\nIntensity: {intensity:.{
|
518
|
+
text += f"\nIntensity: {intensity:.{precision}f}"
|
456
519
|
break
|
457
520
|
# Update coordinate label
|
458
521
|
self.coord_label.setText(text)
|
@@ -4,7 +4,7 @@ import importlib
|
|
4
4
|
import inspect
|
5
5
|
import os
|
6
6
|
from dataclasses import dataclass
|
7
|
-
from typing import TYPE_CHECKING
|
7
|
+
from typing import TYPE_CHECKING, Iterable
|
8
8
|
|
9
9
|
from bec_lib.plugin_helper import _get_available_plugins
|
10
10
|
from qtpy.QtWidgets import QGraphicsWidget, QWidget
|
@@ -90,15 +90,15 @@ class BECClassInfo:
|
|
90
90
|
name: str
|
91
91
|
module: str
|
92
92
|
file: str
|
93
|
-
obj: type
|
93
|
+
obj: type[BECWidget]
|
94
94
|
is_connector: bool = False
|
95
95
|
is_widget: bool = False
|
96
96
|
is_plugin: bool = False
|
97
97
|
|
98
98
|
|
99
99
|
class BECClassContainer:
|
100
|
-
def __init__(self):
|
101
|
-
self._collection: list[BECClassInfo] =
|
100
|
+
def __init__(self, initial: Iterable[BECClassInfo] = []):
|
101
|
+
self._collection: list[BECClassInfo] = list(initial)
|
102
102
|
|
103
103
|
def __repr__(self):
|
104
104
|
return str(list(cl.name for cl in self.collection))
|
@@ -106,6 +106,16 @@ class BECClassContainer:
|
|
106
106
|
def __iter__(self):
|
107
107
|
return self._collection.__iter__()
|
108
108
|
|
109
|
+
def __add__(self, other: BECClassContainer):
|
110
|
+
return BECClassContainer((*self, *(c for c in other if c.name not in self.names)))
|
111
|
+
|
112
|
+
def as_dict(self, ignores: list[str] = []) -> dict[str, type[BECWidget]]:
|
113
|
+
"""get a dict of {name: Type} for all the entries in the collection.
|
114
|
+
|
115
|
+
Args:
|
116
|
+
ignores(list[str]): a list of class names to exclude from the dictionary."""
|
117
|
+
return {c.name: c.obj for c in self if c.name not in ignores}
|
118
|
+
|
109
119
|
def add_class(self, class_info: BECClassInfo):
|
110
120
|
"""
|
111
121
|
Add a class to the collection.
|
@@ -115,53 +125,44 @@ class BECClassContainer:
|
|
115
125
|
"""
|
116
126
|
self.collection.append(class_info)
|
117
127
|
|
128
|
+
@property
|
129
|
+
def names(self):
|
130
|
+
"""Return a list of class names"""
|
131
|
+
return [c.name for c in self]
|
132
|
+
|
118
133
|
@property
|
119
134
|
def collection(self):
|
120
|
-
"""
|
121
|
-
Get the collection of classes.
|
122
|
-
"""
|
135
|
+
"""Get the collection of classes."""
|
123
136
|
return self._collection
|
124
137
|
|
125
138
|
@property
|
126
139
|
def connector_classes(self):
|
127
|
-
"""
|
128
|
-
Get all connector classes.
|
129
|
-
"""
|
140
|
+
"""Get all connector classes."""
|
130
141
|
return [info.obj for info in self.collection if info.is_connector]
|
131
142
|
|
132
143
|
@property
|
133
144
|
def top_level_classes(self):
|
134
|
-
"""
|
135
|
-
Get all top-level classes.
|
136
|
-
"""
|
145
|
+
"""Get all top-level classes."""
|
137
146
|
return [info.obj for info in self.collection if info.is_plugin]
|
138
147
|
|
139
148
|
@property
|
140
149
|
def plugins(self):
|
141
|
-
"""
|
142
|
-
Get all plugins. These are all classes that are on the top level and are widgets.
|
143
|
-
"""
|
150
|
+
"""Get all plugins. These are all classes that are on the top level and are widgets."""
|
144
151
|
return [info.obj for info in self.collection if info.is_widget and info.is_plugin]
|
145
152
|
|
146
153
|
@property
|
147
154
|
def widgets(self):
|
148
|
-
"""
|
149
|
-
Get all widgets. These are all classes inheriting from BECWidget.
|
150
|
-
"""
|
155
|
+
"""Get all widgets. These are all classes inheriting from BECWidget."""
|
151
156
|
return [info.obj for info in self.collection if info.is_widget]
|
152
157
|
|
153
158
|
@property
|
154
159
|
def rpc_top_level_classes(self):
|
155
|
-
"""
|
156
|
-
Get all top-level classes that are RPC-enabled. These are all classes that users can choose from.
|
157
|
-
"""
|
160
|
+
"""Get all top-level classes that are RPC-enabled. These are all classes that users can choose from."""
|
158
161
|
return [info.obj for info in self.collection if info.is_plugin and info.is_connector]
|
159
162
|
|
160
163
|
@property
|
161
164
|
def classes(self):
|
162
|
-
"""
|
163
|
-
Get all classes.
|
164
|
-
"""
|
165
|
+
"""Get all classes."""
|
165
166
|
return [info.obj for info in self.collection]
|
166
167
|
|
167
168
|
|
@@ -197,7 +198,7 @@ def get_custom_classes(repo_name: str) -> BECClassContainer:
|
|
197
198
|
if not hasattr(obj, "__module__") or obj.__module__ != module.__name__:
|
198
199
|
continue
|
199
200
|
if isinstance(obj, type):
|
200
|
-
class_info = BECClassInfo(name=name, module=
|
201
|
+
class_info = BECClassInfo(name=name, module=module.__name__, file=path, obj=obj)
|
201
202
|
if issubclass(obj, BECConnector):
|
202
203
|
class_info.is_connector = True
|
203
204
|
if issubclass(obj, BECWidget):
|
@@ -31,12 +31,9 @@ class UILoader:
|
|
31
31
|
def __init__(self, parent=None):
|
32
32
|
self.parent = parent
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
plugin_widgets = get_all_plugin_widgets()
|
39
|
-
self.custom_widgets.update(plugin_widgets)
|
34
|
+
self.custom_widgets = (
|
35
|
+
get_custom_classes("bec_widgets") + get_all_plugin_widgets()
|
36
|
+
).as_dict()
|
40
37
|
|
41
38
|
if PYSIDE6:
|
42
39
|
self.loader = self.load_ui_pyside6
|
{bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py
RENAMED
@@ -91,6 +91,8 @@ class MultiWaveform(PlotBase):
|
|
91
91
|
"y_log.setter",
|
92
92
|
"legend_label_size",
|
93
93
|
"legend_label_size.setter",
|
94
|
+
"minimal_crosshair_precision",
|
95
|
+
"minimal_crosshair_precision.setter",
|
94
96
|
# MultiWaveform Specific RPC Access
|
95
97
|
"highlighted_index",
|
96
98
|
"highlighted_index.setter",
|
@@ -116,6 +116,7 @@ class PlotBase(BECWidget, QWidget):
|
|
116
116
|
self._user_y_label = ""
|
117
117
|
self._y_label_suffix = ""
|
118
118
|
self._y_axis_units = ""
|
119
|
+
self._minimal_crosshair_precision = 3
|
119
120
|
|
120
121
|
# Plot Indicator Items
|
121
122
|
self.tick_item = BECTickItem(parent=self, plot_item=self.plot_item)
|
@@ -978,7 +979,9 @@ class PlotBase(BECWidget, QWidget):
|
|
978
979
|
def hook_crosshair(self) -> None:
|
979
980
|
"""Hook the crosshair to all plots."""
|
980
981
|
if self.crosshair is None:
|
981
|
-
self.crosshair = Crosshair(
|
982
|
+
self.crosshair = Crosshair(
|
983
|
+
self.plot_item, min_precision=self._minimal_crosshair_precision
|
984
|
+
)
|
982
985
|
self.crosshair.crosshairChanged.connect(self.crosshair_position_changed)
|
983
986
|
self.crosshair.crosshairClicked.connect(self.crosshair_position_clicked)
|
984
987
|
self.crosshair.coordinatesChanged1D.connect(self.crosshair_coordinates_changed)
|
@@ -1006,6 +1009,29 @@ class PlotBase(BECWidget, QWidget):
|
|
1006
1009
|
|
1007
1010
|
self.unhook_crosshair()
|
1008
1011
|
|
1012
|
+
@SafeProperty(
|
1013
|
+
int, doc="Minimum decimal places for crosshair when dynamic precision is enabled."
|
1014
|
+
)
|
1015
|
+
def minimal_crosshair_precision(self) -> int:
|
1016
|
+
"""
|
1017
|
+
Minimum decimal places for crosshair when dynamic precision is enabled.
|
1018
|
+
"""
|
1019
|
+
return self._minimal_crosshair_precision
|
1020
|
+
|
1021
|
+
@minimal_crosshair_precision.setter
|
1022
|
+
def minimal_crosshair_precision(self, value: int):
|
1023
|
+
"""
|
1024
|
+
Set the minimum decimal places for crosshair when dynamic precision is enabled.
|
1025
|
+
|
1026
|
+
Args:
|
1027
|
+
value(int): The minimum decimal places to set.
|
1028
|
+
"""
|
1029
|
+
value_int = max(0, int(value))
|
1030
|
+
self._minimal_crosshair_precision = value_int
|
1031
|
+
if self.crosshair is not None:
|
1032
|
+
self.crosshair.min_precision = value_int
|
1033
|
+
self.property_changed.emit("minimal_crosshair_precision", value_int)
|
1034
|
+
|
1009
1035
|
@SafeSlot()
|
1010
1036
|
def reset(self) -> None:
|
1011
1037
|
"""Reset the plot widget."""
|
{bec_widgets-2.8.2 → bec_widgets-2.8.4}/bec_widgets/widgets/plots/setting_menus/axis_settings.py
RENAMED
@@ -60,6 +60,7 @@ class AxisSettings(SettingWidget):
|
|
60
60
|
self.ui.y_grid,
|
61
61
|
self.ui.inner_axes,
|
62
62
|
self.ui.outer_axes,
|
63
|
+
self.ui.minimal_crosshair_precision,
|
63
64
|
]:
|
64
65
|
WidgetIO.connect_widget_change_signal(widget, self.set_property)
|
65
66
|
|
@@ -121,6 +122,7 @@ class AxisSettings(SettingWidget):
|
|
121
122
|
self.ui.y_max,
|
122
123
|
self.ui.y_log,
|
123
124
|
self.ui.y_grid,
|
125
|
+
self.ui.minimal_crosshair_precision,
|
124
126
|
]:
|
125
127
|
property_name = widget.objectName()
|
126
128
|
value = getattr(self.target_widget, property_name)
|
@@ -144,6 +146,7 @@ class AxisSettings(SettingWidget):
|
|
144
146
|
self.ui.y_grid,
|
145
147
|
self.ui.outer_axes,
|
146
148
|
self.ui.inner_axes,
|
149
|
+
self.ui.minimal_crosshair_precision,
|
147
150
|
]:
|
148
151
|
property_name = widget.objectName()
|
149
152
|
value = WidgetIO.get_value(widget)
|