bec-widgets 2.10.2__tar.gz → 2.11.0__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.10.2 → bec_widgets-2.11.0}/CHANGELOG.md +59 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/PKG-INFO +1 -1
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/client.py +5 -5
- bec_widgets-2.11.0/bec_widgets/widgets/plots/image/image.py +524 -0
- bec_widgets-2.10.2/bec_widgets/widgets/plots/image/image.py → bec_widgets-2.11.0/bec_widgets/widgets/plots/image/image_base.py +388 -578
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/image_item.py +7 -6
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +8 -11
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +17 -2
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/pyproject.toml +1 -1
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.git_hooks/pre-commit +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/actions/bw_install/action.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/pull_request_template.md +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/check_pr.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/ci.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/end2end-conda.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/formatter.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/generate-cli-check.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/pytest-matrix.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/pytest.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/semantic_release.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.github/workflows/sync-issues-pr.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.gitignore +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.gitlab-ci.yml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.pylintrc +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/.readthedocs.yaml +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/LICENSE +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/README.md +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/applications/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/applications/bw_launch.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/applications/launch_window.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/assets/app_icons/auto_update.png +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/client_utils.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/generate_cli.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/rpc/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/rpc/rpc_base.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/rpc/rpc_register.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/rpc/rpc_widget_handler.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/cli/server.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/general_app/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/general_app/general_app.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/general_app/web_links.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/tests/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/tests/utils.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_connector.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_designer.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_plugin_helper.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_signal_proxy.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_table.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/bec_widget.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/colors.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/compact_popup.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/container_utils.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/crosshair.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/entry_validator.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/error_popups.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/expandable_frame.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/filter_io.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/forms_from_types/forms.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/forms_from_types/items.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/fps_counter.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/layout_manager.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/linear_region_selector.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/name_utils.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/ophyd_kind_util.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/palette_viewer.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/plot_indicator_items.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/plugin_utils.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/redis_message_waiter.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/reference_utils.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/round_frame.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/rpc_decorator.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/rpc_server.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/serialization.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/settings_dialog.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/side_panel.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/thread_checker.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/toolbar.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/ui_loader.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/validator_delegate.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/widget_io.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/widget_state_manager.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/utils/yaml_dialog.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/dock/dock.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/containers/main_window/main_window.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/website/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/website/website.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/games/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/games/minesweeper.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/image_roi_plot.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/register_image.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/plot_base.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/roi/image_roi.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/waveform.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/signal_label/register_signal_label.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/signal_label/signal_label.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/signal_label/signal_label.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/signal_label/signal_label_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
- {bec_widgets-2.10.2 → bec_widgets-2.11.0}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -1,6 +1,65 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.11.0 (2025-06-04)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- **image item**: Propagate remove call to parent class
|
9
|
+
([`e211e4d`](https://github.com/bec-project/bec_widgets/commit/e211e4d7161cc4fc4b2f7cd18f058e070f5b4b7a))
|
10
|
+
|
11
|
+
- **image layer**: Add layer main if it does not exist
|
12
|
+
([`7eb2f54`](https://github.com/bec-project/bec_widgets/commit/7eb2f54e0ed556e0c30a4e14ded75e32dcf3d531))
|
13
|
+
|
14
|
+
- **image_item**: Do not disconnect the monitor from within the image item
|
15
|
+
([`4c0bd97`](https://github.com/bec-project/bec_widgets/commit/4c0bd977fc2b82680bbace763f5ffb19ed664f72))
|
16
|
+
|
17
|
+
### Features
|
18
|
+
|
19
|
+
- **image_layer**: Add default name for image layers
|
20
|
+
([`4a343b2`](https://github.com/bec-project/bec_widgets/commit/4a343b204112c53e593e9bb43642d21f268dfa85))
|
21
|
+
|
22
|
+
### Refactoring
|
23
|
+
|
24
|
+
- **image**: Disconnect when layer is removed
|
25
|
+
([`8a299a8`](https://github.com/bec-project/bec_widgets/commit/8a299a8268f3c21bbdc6629ad1f1f50a0aa0948b))
|
26
|
+
|
27
|
+
- **image**: Introduce image base and image layer; rename vrange to v_range
|
28
|
+
([`10f292d`](https://github.com/bec-project/bec_widgets/commit/10f292def9d1551bca0d8f63c0a94799c08ff507))
|
29
|
+
|
30
|
+
- **image**: Move image item creation to layer manager
|
31
|
+
([`c2b0c8c`](https://github.com/bec-project/bec_widgets/commit/c2b0c8c4336302ec4a7807c31b3f3b78a413c1aa))
|
32
|
+
|
33
|
+
- **image**: Removed access to image item config
|
34
|
+
([`99ecf6a`](https://github.com/bec-project/bec_widgets/commit/99ecf6a18f2e87d68f3de3abf56d97f7e6467912))
|
35
|
+
|
36
|
+
- **image_base**: Move default color map to image layer
|
37
|
+
([`92b89e7`](https://github.com/bec-project/bec_widgets/commit/92b89e72750fc0ab72ea51f865032133c49a7f18))
|
38
|
+
|
39
|
+
- **image_base**: Renamed layers to layer_manager and added public methods for accessing the layer
|
40
|
+
manager
|
41
|
+
([`92dade0`](https://github.com/bec-project/bec_widgets/commit/92dade09508ff3940e0b5dc99917302d61b03bc8))
|
42
|
+
|
43
|
+
- **image_item**: Emit object name with removed signal
|
44
|
+
([`a4f3117`](https://github.com/bec-project/bec_widgets/commit/a4f311794132c6c24370cb2f5b5e0725b12587fd))
|
45
|
+
|
46
|
+
- **image_item**: Removed outdated image item config
|
47
|
+
([`3e789ca`](https://github.com/bec-project/bec_widgets/commit/3e789ca35b6d0cf2d8ae9677bc65b7f0ca4eabc7))
|
48
|
+
|
49
|
+
### Testing
|
50
|
+
|
51
|
+
- Improve error message for widgets that are not properly cleaned up
|
52
|
+
([`7c47505`](https://github.com/bec-project/bec_widgets/commit/7c47505c5a147885ca2e854e13c1eb3fddaf5489))
|
53
|
+
|
54
|
+
|
55
|
+
## v2.10.3 (2025-06-04)
|
56
|
+
|
57
|
+
### Bug Fixes
|
58
|
+
|
59
|
+
- **color_button_native**: Popup logic to choose color moved to ColorButtonNative
|
60
|
+
([`2d0ed94`](https://github.com/bec-project/bec_widgets/commit/2d0ed94f3feb38dfc9645f2c3b9d6a06b92637bb))
|
61
|
+
|
62
|
+
|
4
63
|
## v2.10.2 (2025-06-03)
|
5
64
|
|
6
65
|
### Bug Fixes
|
@@ -1252,16 +1252,16 @@ class Image(RPCBase):
|
|
1252
1252
|
|
1253
1253
|
@property
|
1254
1254
|
@rpc_call
|
1255
|
-
def
|
1255
|
+
def v_range(self) -> "QPointF":
|
1256
1256
|
"""
|
1257
|
-
|
1257
|
+
Set the v_range of the main image.
|
1258
1258
|
"""
|
1259
1259
|
|
1260
|
-
@
|
1260
|
+
@v_range.setter
|
1261
1261
|
@rpc_call
|
1262
|
-
def
|
1262
|
+
def v_range(self) -> "QPointF":
|
1263
1263
|
"""
|
1264
|
-
|
1264
|
+
Set the v_range of the main image.
|
1265
1265
|
"""
|
1266
1266
|
|
1267
1267
|
@property
|
@@ -0,0 +1,524 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from collections import defaultdict
|
4
|
+
from typing import Literal
|
5
|
+
|
6
|
+
import numpy as np
|
7
|
+
from bec_lib import bec_logger
|
8
|
+
from bec_lib.endpoints import MessageEndpoints
|
9
|
+
from pydantic import BaseModel, Field, field_validator
|
10
|
+
from qtpy.QtWidgets import QWidget
|
11
|
+
|
12
|
+
from bec_widgets.utils import ConnectionConfig
|
13
|
+
from bec_widgets.utils.colors import Colors
|
14
|
+
from bec_widgets.utils.error_popups import SafeProperty, SafeSlot
|
15
|
+
from bec_widgets.widgets.plots.image.image_base import ImageBase
|
16
|
+
from bec_widgets.widgets.plots.image.image_item import ImageItem
|
17
|
+
|
18
|
+
logger = bec_logger.logger
|
19
|
+
|
20
|
+
|
21
|
+
# noinspection PyDataclass
|
22
|
+
class ImageConfig(ConnectionConfig):
|
23
|
+
color_map: str = Field(
|
24
|
+
"plasma", description="The colormap of the figure widget.", validate_default=True
|
25
|
+
)
|
26
|
+
color_bar: Literal["full", "simple"] | None = Field(
|
27
|
+
None, description="The type of the color bar."
|
28
|
+
)
|
29
|
+
lock_aspect_ratio: bool = Field(
|
30
|
+
False, description="Whether to lock the aspect ratio of the image."
|
31
|
+
)
|
32
|
+
|
33
|
+
model_config: dict = {"validate_assignment": True}
|
34
|
+
_validate_color_map = field_validator("color_map")(Colors.validate_color_map)
|
35
|
+
|
36
|
+
|
37
|
+
class ImageLayerConfig(BaseModel):
|
38
|
+
monitor: str | None = Field(None, description="The name of the monitor.")
|
39
|
+
monitor_type: Literal["1d", "2d", "auto"] = Field("auto", description="The type of monitor.")
|
40
|
+
source: Literal["device_monitor_1d", "device_monitor_2d", "auto"] = Field(
|
41
|
+
"auto", description="The source of the image data."
|
42
|
+
)
|
43
|
+
|
44
|
+
|
45
|
+
class Image(ImageBase):
|
46
|
+
"""
|
47
|
+
Image widget for displaying 2D data.
|
48
|
+
"""
|
49
|
+
|
50
|
+
PLUGIN = True
|
51
|
+
RPC = True
|
52
|
+
ICON_NAME = "image"
|
53
|
+
USER_ACCESS = [
|
54
|
+
# General PlotBase Settings
|
55
|
+
"enable_toolbar",
|
56
|
+
"enable_toolbar.setter",
|
57
|
+
"enable_side_panel",
|
58
|
+
"enable_side_panel.setter",
|
59
|
+
"enable_fps_monitor",
|
60
|
+
"enable_fps_monitor.setter",
|
61
|
+
"set",
|
62
|
+
"title",
|
63
|
+
"title.setter",
|
64
|
+
"x_label",
|
65
|
+
"x_label.setter",
|
66
|
+
"y_label",
|
67
|
+
"y_label.setter",
|
68
|
+
"x_limits",
|
69
|
+
"x_limits.setter",
|
70
|
+
"y_limits",
|
71
|
+
"y_limits.setter",
|
72
|
+
"x_grid",
|
73
|
+
"x_grid.setter",
|
74
|
+
"y_grid",
|
75
|
+
"y_grid.setter",
|
76
|
+
"inner_axes",
|
77
|
+
"inner_axes.setter",
|
78
|
+
"outer_axes",
|
79
|
+
"outer_axes.setter",
|
80
|
+
"auto_range_x",
|
81
|
+
"auto_range_x.setter",
|
82
|
+
"auto_range_y",
|
83
|
+
"auto_range_y.setter",
|
84
|
+
"minimal_crosshair_precision",
|
85
|
+
"minimal_crosshair_precision.setter",
|
86
|
+
# ImageView Specific Settings
|
87
|
+
"color_map",
|
88
|
+
"color_map.setter",
|
89
|
+
"v_range",
|
90
|
+
"v_range.setter",
|
91
|
+
"v_min",
|
92
|
+
"v_min.setter",
|
93
|
+
"v_max",
|
94
|
+
"v_max.setter",
|
95
|
+
"lock_aspect_ratio",
|
96
|
+
"lock_aspect_ratio.setter",
|
97
|
+
"autorange",
|
98
|
+
"autorange.setter",
|
99
|
+
"autorange_mode",
|
100
|
+
"autorange_mode.setter",
|
101
|
+
"monitor",
|
102
|
+
"monitor.setter",
|
103
|
+
"enable_colorbar",
|
104
|
+
"enable_simple_colorbar",
|
105
|
+
"enable_simple_colorbar.setter",
|
106
|
+
"enable_full_colorbar",
|
107
|
+
"enable_full_colorbar.setter",
|
108
|
+
"fft",
|
109
|
+
"fft.setter",
|
110
|
+
"log",
|
111
|
+
"log.setter",
|
112
|
+
"num_rotation_90",
|
113
|
+
"num_rotation_90.setter",
|
114
|
+
"transpose",
|
115
|
+
"transpose.setter",
|
116
|
+
"image",
|
117
|
+
"main_image",
|
118
|
+
"add_roi",
|
119
|
+
"remove_roi",
|
120
|
+
"rois",
|
121
|
+
]
|
122
|
+
|
123
|
+
def __init__(
|
124
|
+
self,
|
125
|
+
parent: QWidget | None = None,
|
126
|
+
config: ImageConfig | None = None,
|
127
|
+
client=None,
|
128
|
+
gui_id: str | None = None,
|
129
|
+
popups: bool = True,
|
130
|
+
**kwargs,
|
131
|
+
):
|
132
|
+
if config is None:
|
133
|
+
config = ImageConfig(widget_class=self.__class__.__name__)
|
134
|
+
self.gui_id = config.gui_id
|
135
|
+
self._color_bar = None
|
136
|
+
self.subscriptions: defaultdict[str, ImageLayerConfig] = defaultdict(
|
137
|
+
lambda: ImageLayerConfig(monitor=None, monitor_type="auto", source="auto")
|
138
|
+
)
|
139
|
+
super().__init__(
|
140
|
+
parent=parent, config=config, client=client, gui_id=gui_id, popups=popups, **kwargs
|
141
|
+
)
|
142
|
+
self.layer_removed.connect(self._on_layer_removed)
|
143
|
+
self.scan_id = None
|
144
|
+
|
145
|
+
################################################################################
|
146
|
+
# Data Acquisition
|
147
|
+
|
148
|
+
@SafeProperty(str)
|
149
|
+
def monitor(self) -> str:
|
150
|
+
"""
|
151
|
+
The name of the monitor to use for the image.
|
152
|
+
"""
|
153
|
+
return self.subscriptions["main"].monitor or ""
|
154
|
+
|
155
|
+
@monitor.setter
|
156
|
+
def monitor(self, value: str):
|
157
|
+
"""
|
158
|
+
Set the monitor for the image.
|
159
|
+
|
160
|
+
Args:
|
161
|
+
value(str): The name of the monitor to set.
|
162
|
+
"""
|
163
|
+
if self.subscriptions["main"].monitor == value:
|
164
|
+
return
|
165
|
+
try:
|
166
|
+
self.entry_validator.validate_monitor(value)
|
167
|
+
except ValueError:
|
168
|
+
return
|
169
|
+
self.image(monitor=value)
|
170
|
+
|
171
|
+
@property
|
172
|
+
def main_image(self) -> ImageItem:
|
173
|
+
"""Access the main image item."""
|
174
|
+
return self.layer_manager["main"].image
|
175
|
+
|
176
|
+
################################################################################
|
177
|
+
# High Level methods for API
|
178
|
+
################################################################################
|
179
|
+
@SafeSlot(popup_error=True)
|
180
|
+
def image(
|
181
|
+
self,
|
182
|
+
monitor: str | None = None,
|
183
|
+
monitor_type: Literal["auto", "1d", "2d"] = "auto",
|
184
|
+
color_map: str | None = None,
|
185
|
+
color_bar: Literal["simple", "full"] | None = None,
|
186
|
+
vrange: tuple[int, int] | None = None,
|
187
|
+
) -> ImageItem:
|
188
|
+
"""
|
189
|
+
Set the image source and update the image.
|
190
|
+
|
191
|
+
Args:
|
192
|
+
monitor(str): The name of the monitor to use for the image.
|
193
|
+
monitor_type(str): The type of monitor to use. Options are "1d", "2d", or "auto".
|
194
|
+
color_map(str): The color map to use for the image.
|
195
|
+
color_bar(str): The type of color bar to use. Options are "simple" or "full".
|
196
|
+
vrange(tuple): The range of values to use for the color map.
|
197
|
+
|
198
|
+
Returns:
|
199
|
+
ImageItem: The image object.
|
200
|
+
"""
|
201
|
+
|
202
|
+
if self.subscriptions["main"].monitor:
|
203
|
+
self.disconnect_monitor(self.subscriptions["main"].monitor)
|
204
|
+
self.entry_validator.validate_monitor(monitor)
|
205
|
+
self.subscriptions["main"].monitor = monitor
|
206
|
+
|
207
|
+
if monitor_type == "1d":
|
208
|
+
self.subscriptions["main"].source = "device_monitor_1d"
|
209
|
+
self.subscriptions["main"].monitor_type = "1d"
|
210
|
+
elif monitor_type == "2d":
|
211
|
+
self.subscriptions["main"].source = "device_monitor_2d"
|
212
|
+
self.subscriptions["main"].monitor_type = "2d"
|
213
|
+
elif monitor_type == "auto":
|
214
|
+
self.subscriptions["main"].source = "auto"
|
215
|
+
logger.warning(
|
216
|
+
f"Updates for '{monitor}' will be fetch from both 1D and 2D monitor endpoints."
|
217
|
+
)
|
218
|
+
self.subscriptions["main"].monitor_type = "auto"
|
219
|
+
|
220
|
+
self.set_image_update(monitor=monitor, type=monitor_type)
|
221
|
+
if color_map is not None:
|
222
|
+
self.main_image.color_map = color_map
|
223
|
+
if color_bar is not None:
|
224
|
+
self.enable_colorbar(True, color_bar)
|
225
|
+
if vrange is not None:
|
226
|
+
self.vrange = vrange
|
227
|
+
|
228
|
+
self._sync_device_selection()
|
229
|
+
|
230
|
+
return self.main_image
|
231
|
+
|
232
|
+
def _sync_device_selection(self):
|
233
|
+
"""
|
234
|
+
Synchronize the device selection with the current monitor.
|
235
|
+
"""
|
236
|
+
config = self.subscriptions["main"]
|
237
|
+
if config.monitor is not None:
|
238
|
+
for combo in (
|
239
|
+
self.selection_bundle.device_combo_box,
|
240
|
+
self.selection_bundle.dim_combo_box,
|
241
|
+
):
|
242
|
+
combo.blockSignals(True)
|
243
|
+
self.selection_bundle.device_combo_box.set_device(config.monitor)
|
244
|
+
self.selection_bundle.dim_combo_box.setCurrentText(config.monitor_type)
|
245
|
+
for combo in (
|
246
|
+
self.selection_bundle.device_combo_box,
|
247
|
+
self.selection_bundle.dim_combo_box,
|
248
|
+
):
|
249
|
+
combo.blockSignals(False)
|
250
|
+
else:
|
251
|
+
for combo in (
|
252
|
+
self.selection_bundle.device_combo_box,
|
253
|
+
self.selection_bundle.dim_combo_box,
|
254
|
+
):
|
255
|
+
combo.blockSignals(True)
|
256
|
+
self.selection_bundle.device_combo_box.setCurrentText("")
|
257
|
+
self.selection_bundle.dim_combo_box.setCurrentText("auto")
|
258
|
+
for combo in (
|
259
|
+
self.selection_bundle.device_combo_box,
|
260
|
+
self.selection_bundle.dim_combo_box,
|
261
|
+
):
|
262
|
+
combo.blockSignals(False)
|
263
|
+
|
264
|
+
################################################################################
|
265
|
+
# Post Processing
|
266
|
+
################################################################################
|
267
|
+
|
268
|
+
@SafeProperty(bool)
|
269
|
+
def fft(self) -> bool:
|
270
|
+
"""
|
271
|
+
Whether FFT postprocessing is enabled.
|
272
|
+
"""
|
273
|
+
return self.main_image.fft
|
274
|
+
|
275
|
+
@fft.setter
|
276
|
+
def fft(self, enable: bool):
|
277
|
+
"""
|
278
|
+
Set FFT postprocessing.
|
279
|
+
|
280
|
+
Args:
|
281
|
+
enable(bool): Whether to enable FFT postprocessing.
|
282
|
+
"""
|
283
|
+
self.main_image.fft = enable
|
284
|
+
|
285
|
+
@SafeProperty(bool)
|
286
|
+
def log(self) -> bool:
|
287
|
+
"""
|
288
|
+
Whether logarithmic scaling is applied.
|
289
|
+
"""
|
290
|
+
return self.main_image.log
|
291
|
+
|
292
|
+
@log.setter
|
293
|
+
def log(self, enable: bool):
|
294
|
+
"""
|
295
|
+
Set logarithmic scaling.
|
296
|
+
|
297
|
+
Args:
|
298
|
+
enable(bool): Whether to enable logarithmic scaling.
|
299
|
+
"""
|
300
|
+
self.main_image.log = enable
|
301
|
+
|
302
|
+
@SafeProperty(int)
|
303
|
+
def num_rotation_90(self) -> int:
|
304
|
+
"""
|
305
|
+
The number of 90° rotations to apply counterclockwise.
|
306
|
+
"""
|
307
|
+
return self.main_image.num_rotation_90
|
308
|
+
|
309
|
+
@num_rotation_90.setter
|
310
|
+
def num_rotation_90(self, value: int):
|
311
|
+
"""
|
312
|
+
Set the number of 90° rotations to apply counterclockwise.
|
313
|
+
|
314
|
+
Args:
|
315
|
+
value(int): The number of 90° rotations to apply.
|
316
|
+
"""
|
317
|
+
self.main_image.num_rotation_90 = value
|
318
|
+
|
319
|
+
@SafeProperty(bool)
|
320
|
+
def transpose(self) -> bool:
|
321
|
+
"""
|
322
|
+
Whether the image is transposed.
|
323
|
+
"""
|
324
|
+
return self.main_image.transpose
|
325
|
+
|
326
|
+
@transpose.setter
|
327
|
+
def transpose(self, enable: bool):
|
328
|
+
"""
|
329
|
+
Set the image to be transposed.
|
330
|
+
|
331
|
+
Args:
|
332
|
+
enable(bool): Whether to enable transposing the image.
|
333
|
+
"""
|
334
|
+
self.main_image.transpose = enable
|
335
|
+
|
336
|
+
################################################################################
|
337
|
+
# Image Update Methods
|
338
|
+
################################################################################
|
339
|
+
|
340
|
+
########################################
|
341
|
+
# Connections
|
342
|
+
|
343
|
+
def set_image_update(self, monitor: str, type: Literal["1d", "2d", "auto"]):
|
344
|
+
"""
|
345
|
+
Set the image update method for the given monitor.
|
346
|
+
|
347
|
+
Args:
|
348
|
+
monitor(str): The name of the monitor to use for the image.
|
349
|
+
type(str): The type of monitor to use. Options are "1d", "2d", or "auto".
|
350
|
+
"""
|
351
|
+
|
352
|
+
# TODO consider moving connecting and disconnecting logic to Image itself if multiple images
|
353
|
+
if type == "1d":
|
354
|
+
self.bec_dispatcher.connect_slot(
|
355
|
+
self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
|
356
|
+
)
|
357
|
+
elif type == "2d":
|
358
|
+
self.bec_dispatcher.connect_slot(
|
359
|
+
self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
|
360
|
+
)
|
361
|
+
elif type == "auto":
|
362
|
+
self.bec_dispatcher.connect_slot(
|
363
|
+
self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
|
364
|
+
)
|
365
|
+
self.bec_dispatcher.connect_slot(
|
366
|
+
self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
|
367
|
+
)
|
368
|
+
logger.info(f"Connected to {monitor} with type {type}")
|
369
|
+
self.subscriptions["main"].monitor = monitor
|
370
|
+
|
371
|
+
def disconnect_monitor(self, monitor: str):
|
372
|
+
"""
|
373
|
+
Disconnect the monitor from the image update signals, both 1D and 2D.
|
374
|
+
|
375
|
+
Args:
|
376
|
+
monitor(str): The name of the monitor to disconnect.
|
377
|
+
"""
|
378
|
+
self.bec_dispatcher.disconnect_slot(
|
379
|
+
self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
|
380
|
+
)
|
381
|
+
self.bec_dispatcher.disconnect_slot(
|
382
|
+
self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
|
383
|
+
)
|
384
|
+
self.subscriptions["main"].monitor = None
|
385
|
+
self._sync_device_selection()
|
386
|
+
|
387
|
+
########################################
|
388
|
+
# 1D updates
|
389
|
+
|
390
|
+
@SafeSlot(dict, dict)
|
391
|
+
def on_image_update_1d(self, msg: dict, metadata: dict):
|
392
|
+
"""
|
393
|
+
Update the image with 1D data.
|
394
|
+
|
395
|
+
Args:
|
396
|
+
msg(dict): The message containing the data.
|
397
|
+
metadata(dict): The metadata associated with the message.
|
398
|
+
"""
|
399
|
+
data = msg["data"]
|
400
|
+
current_scan_id = metadata.get("scan_id", None)
|
401
|
+
|
402
|
+
if current_scan_id is None:
|
403
|
+
return
|
404
|
+
if current_scan_id != self.scan_id:
|
405
|
+
self.scan_id = current_scan_id
|
406
|
+
self.main_image.clear()
|
407
|
+
self.main_image.buffer = []
|
408
|
+
self.main_image.max_len = 0
|
409
|
+
image_buffer = self.adjust_image_buffer(self.main_image, data)
|
410
|
+
if self._color_bar is not None:
|
411
|
+
self._color_bar.blockSignals(True)
|
412
|
+
self.main_image.set_data(image_buffer)
|
413
|
+
if self._color_bar is not None:
|
414
|
+
self._color_bar.blockSignals(False)
|
415
|
+
self.image_updated.emit()
|
416
|
+
|
417
|
+
def adjust_image_buffer(self, image: ImageItem, new_data: np.ndarray) -> np.ndarray:
|
418
|
+
"""
|
419
|
+
Adjusts the image buffer to accommodate the new data, ensuring that all rows have the same length.
|
420
|
+
|
421
|
+
Args:
|
422
|
+
image: The image object (used to store a buffer list and max_len).
|
423
|
+
new_data (np.ndarray): The new incoming 1D waveform data.
|
424
|
+
|
425
|
+
Returns:
|
426
|
+
np.ndarray: The updated image buffer with adjusted shapes.
|
427
|
+
"""
|
428
|
+
new_len = new_data.shape[0]
|
429
|
+
if not hasattr(image, "buffer"):
|
430
|
+
image.buffer = []
|
431
|
+
image.max_len = 0
|
432
|
+
|
433
|
+
if new_len > image.max_len:
|
434
|
+
image.max_len = new_len
|
435
|
+
for i in range(len(image.buffer)):
|
436
|
+
wf = image.buffer[i]
|
437
|
+
pad_width = image.max_len - wf.shape[0]
|
438
|
+
if pad_width > 0:
|
439
|
+
image.buffer[i] = np.pad(wf, (0, pad_width), mode="constant", constant_values=0)
|
440
|
+
image.buffer.append(new_data)
|
441
|
+
else:
|
442
|
+
pad_width = image.max_len - new_len
|
443
|
+
if pad_width > 0:
|
444
|
+
new_data = np.pad(new_data, (0, pad_width), mode="constant", constant_values=0)
|
445
|
+
image.buffer.append(new_data)
|
446
|
+
|
447
|
+
image_buffer = np.array(image.buffer)
|
448
|
+
return image_buffer
|
449
|
+
|
450
|
+
########################################
|
451
|
+
# 2D updates
|
452
|
+
|
453
|
+
def on_image_update_2d(self, msg: dict, metadata: dict):
|
454
|
+
"""
|
455
|
+
Update the image with 2D data.
|
456
|
+
|
457
|
+
Args:
|
458
|
+
msg(dict): The message containing the data.
|
459
|
+
metadata(dict): The metadata associated with the message.
|
460
|
+
"""
|
461
|
+
data = msg["data"]
|
462
|
+
if self._color_bar is not None:
|
463
|
+
self._color_bar.blockSignals(True)
|
464
|
+
self.main_image.set_data(data)
|
465
|
+
if self._color_bar is not None:
|
466
|
+
self._color_bar.blockSignals(False)
|
467
|
+
self.image_updated.emit()
|
468
|
+
|
469
|
+
################################################################################
|
470
|
+
# Clean up
|
471
|
+
################################################################################
|
472
|
+
|
473
|
+
@SafeSlot(str)
|
474
|
+
def _on_layer_removed(self, layer_name: str):
|
475
|
+
"""
|
476
|
+
Handle the removal of a layer by disconnecting the monitor.
|
477
|
+
|
478
|
+
Args:
|
479
|
+
layer_name(str): The name of the layer that was removed.
|
480
|
+
"""
|
481
|
+
if layer_name not in self.subscriptions:
|
482
|
+
return
|
483
|
+
config = self.subscriptions[layer_name]
|
484
|
+
if config.monitor is not None:
|
485
|
+
self.disconnect_monitor(config.monitor)
|
486
|
+
config.monitor = None
|
487
|
+
|
488
|
+
def cleanup(self):
|
489
|
+
"""
|
490
|
+
Disconnect the image update signals and clean up the image.
|
491
|
+
"""
|
492
|
+
self.layer_removed.disconnect(self._on_layer_removed)
|
493
|
+
for layer_name in list(self.subscriptions.keys()):
|
494
|
+
config = self.subscriptions[layer_name]
|
495
|
+
if config.monitor is not None:
|
496
|
+
self.disconnect_monitor(config.monitor)
|
497
|
+
del self.subscriptions[layer_name]
|
498
|
+
self.subscriptions.clear()
|
499
|
+
|
500
|
+
# Toolbar cleanup
|
501
|
+
self.toolbar.widgets["monitor"].widget.close()
|
502
|
+
self.toolbar.widgets["monitor"].widget.deleteLater()
|
503
|
+
super().cleanup()
|
504
|
+
|
505
|
+
|
506
|
+
if __name__ == "__main__": # pragma: no cover
|
507
|
+
import sys
|
508
|
+
|
509
|
+
from qtpy.QtWidgets import QApplication, QHBoxLayout
|
510
|
+
|
511
|
+
app = QApplication(sys.argv)
|
512
|
+
win = QWidget()
|
513
|
+
win.setWindowTitle("Image Demo")
|
514
|
+
ml = QHBoxLayout(win)
|
515
|
+
|
516
|
+
image_popup = Image(popups=True)
|
517
|
+
image_side_panel = Image(popups=False)
|
518
|
+
|
519
|
+
ml.addWidget(image_popup)
|
520
|
+
ml.addWidget(image_side_panel)
|
521
|
+
|
522
|
+
win.resize(1500, 800)
|
523
|
+
win.show()
|
524
|
+
sys.exit(app.exec_())
|