bec-widgets 2.6.0__tar.gz → 2.7.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.
Files changed (406) hide show
  1. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/CHANGELOG.md +16 -0
  2. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/PKG-INFO +1 -1
  3. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/crosshair.py +35 -11
  4. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/image.py +147 -11
  5. bec_widgets-2.7.0/bec_widgets/widgets/plots/image/image_roi_plot.py +37 -0
  6. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +4 -3
  7. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +1 -1
  8. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/pyproject.toml +1 -1
  9. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.git_hooks/pre-commit +0 -0
  10. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  11. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
  12. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  13. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/actions/bw_install/action.yml +0 -0
  14. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/pull_request_template.md +0 -0
  15. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
  16. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
  17. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/check_pr.yml +0 -0
  18. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/ci.yml +0 -0
  19. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/end2end-conda.yml +0 -0
  20. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/formatter.yml +0 -0
  21. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/generate-cli-check.yml +0 -0
  22. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/pytest-matrix.yml +0 -0
  23. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/pytest.yml +0 -0
  24. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/semantic_release.yml +0 -0
  25. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.github/workflows/sync-issues-pr.yml +0 -0
  26. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.gitignore +0 -0
  27. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.gitlab-ci.yml +0 -0
  28. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.pylintrc +0 -0
  29. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/.readthedocs.yaml +0 -0
  30. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/LICENSE +0 -0
  31. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/README.md +0 -0
  32. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/__init__.py +0 -0
  33. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/applications/__init__.py +0 -0
  34. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/applications/bw_launch.py +0 -0
  35. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/applications/launch_window.py +0 -0
  36. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  37. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  38. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/assets/app_icons/auto_update.png +0 -0
  39. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  40. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
  41. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
  42. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/__init__.py +0 -0
  43. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/client.py +0 -0
  44. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/client_utils.py +0 -0
  45. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/generate_cli.py +0 -0
  46. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/rpc/__init__.py +0 -0
  47. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/rpc/rpc_base.py +0 -0
  48. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/rpc/rpc_register.py +0 -0
  49. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/rpc/rpc_widget_handler.py +0 -0
  50. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/cli/server.py +0 -0
  51. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/__init__.py +0 -0
  52. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  53. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  54. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  55. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  56. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  57. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  58. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  59. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  60. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  61. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  62. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  63. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  64. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  65. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/tests/__init__.py +0 -0
  66. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/tests/utils.py +0 -0
  67. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/__init__.py +0 -0
  68. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_connector.py +0 -0
  69. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_designer.py +0 -0
  70. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  71. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_plugin_helper.py +0 -0
  72. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  73. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_table.py +0 -0
  74. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/bec_widget.py +0 -0
  75. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
  76. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/colors.py +0 -0
  77. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/compact_popup.py +0 -0
  78. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/container_utils.py +0 -0
  79. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/entry_validator.py +0 -0
  80. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/error_popups.py +0 -0
  81. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/expandable_frame.py +0 -0
  82. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/filter_io.py +0 -0
  83. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
  84. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/forms_from_types/forms.py +0 -0
  85. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/forms_from_types/items.py +0 -0
  86. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/fps_counter.py +0 -0
  87. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  88. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/layout_manager.py +0 -0
  89. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/linear_region_selector.py +0 -0
  90. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/name_utils.py +0 -0
  91. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/ophyd_kind_util.py +0 -0
  92. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/palette_viewer.py +0 -0
  93. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/plot_indicator_items.py +0 -0
  94. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  95. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  96. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/plugin_utils.py +0 -0
  97. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/redis_message_waiter.py +0 -0
  98. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/reference_utils.py +0 -0
  99. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/round_frame.py +0 -0
  100. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  101. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/rpc_server.py +0 -0
  102. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/serialization.py +0 -0
  103. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/settings_dialog.py +0 -0
  104. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/side_panel.py +0 -0
  105. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/thread_checker.py +0 -0
  106. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/toolbar.py +0 -0
  107. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/ui_loader.py +0 -0
  108. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/validator_delegate.py +0 -0
  109. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/widget_io.py +0 -0
  110. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/widget_state_manager.py +0 -0
  111. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  112. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/__init__.py +0 -0
  113. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/__init__.py +0 -0
  114. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
  115. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
  116. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
  117. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/dock/dock.py +0 -0
  118. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
  119. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
  120. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
  121. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
  122. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
  123. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
  124. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
  125. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
  126. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
  127. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/containers/main_window/main_window.py +0 -0
  128. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/__init__.py +0 -0
  129. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
  130. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
  131. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
  132. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
  133. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
  134. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
  135. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
  136. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
  137. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
  138. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
  139. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
  140. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
  141. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
  142. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
  143. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
  144. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
  145. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
  146. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
  147. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
  148. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
  149. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
  150. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
  151. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
  152. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
  153. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
  154. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
  155. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
  156. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
  157. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
  158. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
  159. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
  160. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
  161. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
  162. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
  163. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
  164. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
  165. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
  166. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
  167. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
  168. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
  169. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
  170. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
  171. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
  172. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
  173. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
  174. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
  175. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
  176. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
  177. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
  178. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
  179. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
  180. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
  181. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
  182. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
  183. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +0 -0
  184. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +0 -0
  185. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
  186. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
  187. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
  188. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +0 -0
  189. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
  190. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
  191. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
  192. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
  193. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
  194. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
  195. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
  196. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
  197. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
  198. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
  199. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +0 -0
  200. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
  201. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
  202. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
  203. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
  204. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
  205. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
  206. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
  207. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
  208. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
  209. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
  210. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
  211. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/__init__.py +0 -0
  212. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
  213. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
  214. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
  215. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
  216. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
  217. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
  218. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  219. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  220. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
  221. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  222. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  223. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  224. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/__init__.py +0 -0
  225. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/console/__init__.py +0 -0
  226. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/console/console.py +0 -0
  227. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/console/console.pyproject +0 -0
  228. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/console/console_plugin.py +0 -0
  229. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/console/register_console.py +0 -0
  230. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
  231. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
  232. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
  233. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
  234. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
  235. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
  236. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
  237. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
  238. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
  239. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
  240. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
  241. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
  242. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
  243. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
  244. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
  245. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
  246. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
  247. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
  248. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
  249. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
  250. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
  251. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
  252. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
  253. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/website/__init__.py +0 -0
  254. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
  255. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/website/website.py +0 -0
  256. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
  257. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
  258. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/games/__init__.py +0 -0
  259. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/games/minesweeper.py +0 -0
  260. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
  261. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
  262. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
  263. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/__init__.py +0 -0
  264. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/__init__.py +0 -0
  265. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
  266. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/image_item.py +0 -0
  267. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
  268. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
  269. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/register_image.py +0 -0
  270. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
  271. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +0 -0
  272. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
  273. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
  274. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
  275. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
  276. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
  277. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
  278. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
  279. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
  280. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
  281. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
  282. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
  283. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
  284. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
  285. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +0 -0
  286. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
  287. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
  288. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
  289. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
  290. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
  291. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
  292. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
  293. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
  294. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/plot_base.py +0 -0
  295. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
  296. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/roi/image_roi.py +0 -0
  297. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
  298. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
  299. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
  300. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +0 -0
  301. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
  302. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
  303. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
  304. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
  305. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
  306. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
  307. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
  308. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +0 -0
  309. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +0 -0
  310. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +0 -0
  311. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
  312. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
  313. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
  314. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
  315. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
  316. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
  317. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
  318. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
  319. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
  320. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +0 -0
  321. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +0 -0
  322. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
  323. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
  324. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/waveform.py +0 -0
  325. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
  326. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
  327. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/__init__.py +0 -0
  328. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
  329. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
  330. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  331. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
  332. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
  333. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
  334. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
  335. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
  336. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
  337. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  338. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  339. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/__init__.py +0 -0
  340. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
  341. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
  342. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
  343. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
  344. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
  345. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
  346. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
  347. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
  348. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
  349. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
  350. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
  351. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
  352. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
  353. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
  354. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
  355. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
  356. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
  357. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +0 -0
  358. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
  359. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/__init__.py +0 -0
  360. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
  361. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
  362. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
  363. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
  364. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
  365. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
  366. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
  367. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
  368. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
  369. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
  370. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
  371. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
  372. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
  373. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
  374. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
  375. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
  376. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
  377. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
  378. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
  379. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
  380. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
  381. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
  382. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
  383. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
  384. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
  385. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
  386. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
  387. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
  388. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +0 -0
  389. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
  390. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
  391. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
  392. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
  393. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
  394. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
  395. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
  396. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
  397. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
  398. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
  399. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
  400. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
  401. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
  402. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
  403. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
  404. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
  405. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
  406. {bec_widgets-2.6.0 → bec_widgets-2.7.0}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -1,6 +1,22 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.7.0 (2025-05-26)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **image/image_selecetion**: Toolbar selection tool size adjusted
9
+ ([`e12e9e5`](https://github.com/bec-project/bec_widgets/commit/e12e9e534d6913223b741bff31bed6674ae4c0e6))
10
+
11
+ - **plot_base/mouse_interactions.py**: Fixed parent
12
+ ([`66e9445`](https://github.com/bec-project/bec_widgets/commit/66e9445760f2796c008d08feba54c3d48e4a9cfb))
13
+
14
+ ### Features
15
+
16
+ - **image**: Roi plots with crosshair cuts added
17
+ ([`ce88787`](https://github.com/bec-project/bec_widgets/commit/ce88787e881d12384dd3a25b75fadda1f2280c81))
18
+
19
+
4
20
  ## v2.6.0 (2025-05-26)
5
21
 
6
22
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.6.0
3
+ Version: 2.7.0
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -85,7 +85,8 @@ class Crosshair(QObject):
85
85
  self.items = []
86
86
  self.marker_moved_1d = {}
87
87
  self.marker_clicked_1d = {}
88
- self.marker_2d = None
88
+ self.marker_2d_row = None
89
+ self.marker_2d_col = None
89
90
  self.update_markers()
90
91
  self.check_log()
91
92
  self.check_derivatives()
@@ -195,13 +196,23 @@ class Crosshair(QObject):
195
196
  marker_clicked_list.append(marker_clicked)
196
197
  self.marker_clicked_1d[name] = marker_clicked_list
197
198
  elif isinstance(item, pg.ImageItem): # 2D plot
198
- if self.marker_2d is not None:
199
+ if self.marker_2d_row is not None and self.marker_2d_col is not None:
199
200
  continue
200
- self.marker_2d = pg.ROI(
201
- [0, 0], size=[1, 1], pen=pg.mkPen("r", width=2), movable=False
201
+ # Create horizontal ROI for row highlighting
202
+ if item.image is None:
203
+ continue
204
+ self.marker_2d_row = pg.ROI(
205
+ [0, 0], size=[item.image.shape[0], 1], pen=pg.mkPen("r", width=2), movable=False
206
+ )
207
+ self.marker_2d_row.skip_auto_range = True
208
+ self.plot_item.addItem(self.marker_2d_row)
209
+
210
+ # Create vertical ROI for column highlighting
211
+ self.marker_2d_col = pg.ROI(
212
+ [0, 0], size=[1, item.image.shape[1]], pen=pg.mkPen("r", width=2), movable=False
202
213
  )
203
- self.marker_2d.skip_auto_range = True
204
- self.plot_item.addItem(self.marker_2d)
214
+ self.marker_2d_col.skip_auto_range = True
215
+ self.plot_item.addItem(self.marker_2d_col)
205
216
 
206
217
  def snap_to_data(
207
218
  self, x: float, y: float
@@ -243,6 +254,8 @@ class Crosshair(QObject):
243
254
  elif isinstance(item, pg.ImageItem): # 2D plot
244
255
  name = item.config.monitor or str(id(item))
245
256
  image_2d = item.image
257
+ if image_2d is None:
258
+ continue
246
259
  # Clip the x and y values to the image dimensions to avoid out of bounds errors
247
260
  y_values[name] = int(np.clip(y, 0, image_2d.shape[1] - 1))
248
261
  x_values[name] = int(np.clip(x, 0, image_2d.shape[0] - 1))
@@ -330,7 +343,10 @@ class Crosshair(QObject):
330
343
  x, y = x_snap_values[name], y_snap_values[name]
331
344
  if x is None or y is None:
332
345
  continue
333
- self.marker_2d.setPos([x, y])
346
+ # Set position of horizontal ROI (row)
347
+ self.marker_2d_row.setPos([0, y])
348
+ # Set position of vertical ROI (column)
349
+ self.marker_2d_col.setPos([x, 0])
334
350
  coordinate_to_emit = (name, x, y)
335
351
  self.coordinatesChanged2D.emit(coordinate_to_emit)
336
352
  else:
@@ -384,7 +400,10 @@ class Crosshair(QObject):
384
400
  x, y = x_snap_values[name], y_snap_values[name]
385
401
  if x is None or y is None:
386
402
  continue
387
- self.marker_2d.setPos([x, y])
403
+ # Set position of horizontal ROI (row)
404
+ self.marker_2d_row.setPos([0, y])
405
+ # Set position of vertical ROI (column)
406
+ self.marker_2d_col.setPos([x, 0])
388
407
  coordinate_to_emit = (name, x, y)
389
408
  self.coordinatesClicked2D.emit(coordinate_to_emit)
390
409
  else:
@@ -428,6 +447,8 @@ class Crosshair(QObject):
428
447
  for item in self.items:
429
448
  if isinstance(item, pg.ImageItem):
430
449
  image = item.image
450
+ if image is None:
451
+ continue
431
452
  ix = int(np.clip(x, 0, image.shape[0] - 1))
432
453
  iy = int(np.clip(y, 0, image.shape[1] - 1))
433
454
  intensity = image[ix, iy]
@@ -450,9 +471,12 @@ class Crosshair(QObject):
450
471
  self.clear_markers()
451
472
 
452
473
  def cleanup(self):
453
- if self.marker_2d is not None:
454
- self.plot_item.removeItem(self.marker_2d)
455
- self.marker_2d = None
474
+ if self.marker_2d_row is not None:
475
+ self.plot_item.removeItem(self.marker_2d_row)
476
+ self.marker_2d_row = None
477
+ if self.marker_2d_col is not None:
478
+ self.plot_item.removeItem(self.marker_2d_col)
479
+ self.marker_2d_col = None
456
480
  self.plot_item.removeItem(self.v_line)
457
481
  self.plot_item.removeItem(self.h_line)
458
482
  self.plot_item.removeItem(self.coord_label)
@@ -13,8 +13,10 @@ from qtpy.QtWidgets import QDialog, QVBoxLayout, QWidget
13
13
  from bec_widgets.utils import ConnectionConfig
14
14
  from bec_widgets.utils.colors import Colors
15
15
  from bec_widgets.utils.error_popups import SafeProperty, SafeSlot
16
+ from bec_widgets.utils.side_panel import SidePanel
16
17
  from bec_widgets.utils.toolbar import MaterialIconAction, SwitchableToolBarAction
17
18
  from bec_widgets.widgets.plots.image.image_item import ImageItem
19
+ from bec_widgets.widgets.plots.image.image_roi_plot import ImageROIPlot
18
20
  from bec_widgets.widgets.plots.image.setting_widgets.image_roi_tree import ROIPropertyTree
19
21
  from bec_widgets.widgets.plots.image.toolbar_bundles.image_selection import (
20
22
  MonitorSelectionToolbarBundle,
@@ -123,6 +125,7 @@ class Image(PlotBase):
123
125
  "rois",
124
126
  ]
125
127
  sync_colorbar_with_autorange = Signal()
128
+ image_updated = Signal()
126
129
 
127
130
  def __init__(
128
131
  self,
@@ -139,6 +142,8 @@ class Image(PlotBase):
139
142
  self._color_bar = None
140
143
  self._main_image = ImageItem()
141
144
  self.roi_controller = ROIController(colormap="viridis")
145
+ self.x_roi = None
146
+ self.y_roi = None
142
147
  super().__init__(
143
148
  parent=parent, config=config, client=client, gui_id=gui_id, popups=popups, **kwargs
144
149
  )
@@ -150,24 +155,60 @@ class Image(PlotBase):
150
155
  # Default Color map to plasma
151
156
  self.color_map = "plasma"
152
157
 
158
+ # Initialize ROI plots and side panels
159
+ self._add_roi_plots()
160
+
153
161
  self.roi_manager_dialog = None
154
162
 
163
+ # Refresh theme for ROI plots
164
+ self._update_theme()
165
+
155
166
  ################################################################################
156
167
  # Widget Specific GUI interactions
157
168
  ################################################################################
169
+ def apply_theme(self, theme: str):
170
+ super().apply_theme(theme)
171
+ if self.x_roi is not None and self.y_roi is not None:
172
+ self.x_roi.apply_theme(theme)
173
+ self.y_roi.apply_theme(theme)
174
+
158
175
  def _init_toolbar(self):
159
176
 
160
177
  # add to the first position
161
178
  self.selection_bundle = MonitorSelectionToolbarBundle(
162
179
  bundle_id="selection", target_widget=self
163
180
  )
164
- self.toolbar.add_bundle(self.selection_bundle, self)
181
+ self.toolbar.add_bundle(bundle=self.selection_bundle, target_widget=self)
165
182
 
166
183
  super()._init_toolbar()
167
184
 
168
185
  # Image specific changes to PlotBase toolbar
169
186
  self.toolbar.widgets["reset_legend"].action.setVisible(False)
170
187
 
188
+ # ROI Bundle replacement with switchable crosshair
189
+ self.toolbar.remove_bundle("roi")
190
+ crosshair = MaterialIconAction(
191
+ icon_name="point_scan", tooltip="Show Crosshair", checkable=True
192
+ )
193
+ crosshair_roi = MaterialIconAction(
194
+ icon_name="my_location",
195
+ tooltip="Show Crosshair with ROI plots",
196
+ checkable=True,
197
+ parent=self,
198
+ )
199
+ crosshair_roi.action.toggled.connect(self.toggle_roi_panels)
200
+ crosshair.action.toggled.connect(self.toggle_crosshair)
201
+ switch_crosshair = SwitchableToolBarAction(
202
+ actions={"crosshair_simple": crosshair, "crosshair_roi": crosshair_roi},
203
+ initial_action="crosshair_simple",
204
+ tooltip="Crosshair",
205
+ checkable=True,
206
+ parent=self,
207
+ )
208
+ self.toolbar.add_action(
209
+ action_id="switch_crosshair", action=switch_crosshair, target_widget=self
210
+ )
211
+
171
212
  # Lock aspect ratio button
172
213
  self.lock_aspect_ratio_action = MaterialIconAction(
173
214
  icon_name="aspect_ratio", tooltip="Lock Aspect Ratio", checkable=True, parent=self
@@ -216,11 +257,8 @@ class Image(PlotBase):
216
257
  parent=self,
217
258
  )
218
259
 
219
- self.toolbar.add_action_to_bundle(
220
- bundle_id="roi",
221
- action_id="autorange_image",
222
- action=self.autorange_switch,
223
- target_widget=self,
260
+ self.toolbar.add_action(
261
+ action_id="autorange_image", action=self.autorange_switch, target_widget=self
224
262
  )
225
263
 
226
264
  self.autorange_mean_action.action.toggled.connect(
@@ -252,11 +290,8 @@ class Image(PlotBase):
252
290
  parent=self,
253
291
  )
254
292
 
255
- self.toolbar.add_action_to_bundle(
256
- bundle_id="roi",
257
- action_id="switch_colorbar",
258
- action=self.colorbar_switch,
259
- target_widget=self,
293
+ self.toolbar.add_action(
294
+ action_id="switch_colorbar", action=self.colorbar_switch, target_widget=self
260
295
  )
261
296
 
262
297
  self.simple_colorbar_action.action.toggled.connect(
@@ -430,6 +465,101 @@ class Image(PlotBase):
430
465
  else:
431
466
  raise ValueError("roi must be an int index or str name")
432
467
 
468
+ def _add_roi_plots(self):
469
+ """
470
+ Initialize the ROI plots and side panels.
471
+ """
472
+ # Create ROI plot widgets
473
+ self.x_roi = ImageROIPlot(parent=self)
474
+ self.y_roi = ImageROIPlot(parent=self)
475
+ self.x_roi.apply_theme("dark")
476
+ self.y_roi.apply_theme("dark")
477
+
478
+ # Set titles for the plots
479
+ self.x_roi.plot_item.setTitle("X ROI")
480
+ self.y_roi.plot_item.setTitle("Y ROI")
481
+
482
+ # Create side panels
483
+ self.side_panel_x = SidePanel(
484
+ parent=self, orientation="bottom", panel_max_width=200, show_toolbar=False
485
+ )
486
+ self.side_panel_y = SidePanel(
487
+ parent=self, orientation="left", panel_max_width=200, show_toolbar=False
488
+ )
489
+
490
+ # Add ROI plots to side panels
491
+ self.x_panel_index = self.side_panel_x.add_menu(widget=self.x_roi)
492
+ self.y_panel_index = self.side_panel_y.add_menu(widget=self.y_roi)
493
+
494
+ # # Add side panels to the layout
495
+ self.layout_manager.add_widget_relative(
496
+ self.side_panel_x, self.round_plot_widget, position="bottom", shift_direction="down"
497
+ )
498
+ self.layout_manager.add_widget_relative(
499
+ self.side_panel_y, self.round_plot_widget, position="left", shift_direction="right"
500
+ )
501
+
502
+ def toggle_roi_panels(self, checked: bool):
503
+ """
504
+ Show or hide the ROI panels based on the test action toggle state.
505
+
506
+ Args:
507
+ checked (bool): Whether the test action is checked.
508
+ """
509
+ if checked:
510
+ # Show the ROI panels
511
+ self.hook_crosshair()
512
+ self.side_panel_x.show_panel(self.x_panel_index)
513
+ self.side_panel_y.show_panel(self.y_panel_index)
514
+ self.crosshair.coordinatesChanged2D.connect(self.update_image_slices)
515
+ self.image_updated.connect(self.update_image_slices)
516
+ else:
517
+ self.unhook_crosshair()
518
+ # Hide the ROI panels
519
+ self.side_panel_x.hide_panel()
520
+ self.side_panel_y.hide_panel()
521
+ self.image_updated.disconnect(self.update_image_slices)
522
+
523
+ @SafeSlot()
524
+ def update_image_slices(self, coordinates: tuple[int, int, int] = None):
525
+ """
526
+ Update the image slices based on the crosshair position.
527
+
528
+ Args:
529
+ coordinates(tuple): The coordinates of the crosshair.
530
+ """
531
+ if coordinates is None:
532
+ # Try to get coordinates from crosshair position (like in crosshair mouse_moved)
533
+ if (
534
+ hasattr(self, "crosshair")
535
+ and hasattr(self.crosshair, "v_line")
536
+ and hasattr(self.crosshair, "h_line")
537
+ ):
538
+ x = int(round(self.crosshair.v_line.value()))
539
+ y = int(round(self.crosshair.h_line.value()))
540
+ else:
541
+ return
542
+ else:
543
+ x = coordinates[1]
544
+ y = coordinates[2]
545
+ image = self._main_image.image
546
+ if image is None:
547
+ return
548
+ max_row, max_col = image.shape[0] - 1, image.shape[1] - 1
549
+ row, col = x, y
550
+ if not (0 <= row <= max_row and 0 <= col <= max_col):
551
+ return
552
+ # Horizontal slice
553
+ h_slice = image[:, col]
554
+ x_axis = np.arange(h_slice.shape[0])
555
+ self.x_roi.plot_item.clear()
556
+ self.x_roi.plot_item.plot(x_axis, h_slice, pen=pg.mkPen(self.x_roi.curve_color, width=3))
557
+ # Vertical slice
558
+ v_slice = image[row, :]
559
+ y_axis = np.arange(v_slice.shape[0])
560
+ self.y_roi.plot_item.clear()
561
+ self.y_roi.plot_item.plot(v_slice, y_axis, pen=pg.mkPen(self.y_roi.curve_color, width=3))
562
+
433
563
  ################################################################################
434
564
  # Widget Specific Properties
435
565
  ################################################################################
@@ -984,6 +1114,7 @@ class Image(PlotBase):
984
1114
  self._main_image.set_data(image_buffer)
985
1115
  if self._color_bar is not None:
986
1116
  self._color_bar.blockSignals(False)
1117
+ self.image_updated.emit()
987
1118
 
988
1119
  def adjust_image_buffer(self, image: ImageItem, new_data: np.ndarray) -> np.ndarray:
989
1120
  """
@@ -1035,6 +1166,7 @@ class Image(PlotBase):
1035
1166
  self._main_image.set_data(data)
1036
1167
  if self._color_bar is not None:
1037
1168
  self._color_bar.blockSignals(False)
1169
+ self.image_updated.emit()
1038
1170
 
1039
1171
  ################################################################################
1040
1172
  # Clean up
@@ -1090,6 +1222,10 @@ class Image(PlotBase):
1090
1222
  self.toolbar.widgets["monitor"].widget.close()
1091
1223
  self.toolbar.widgets["monitor"].widget.deleteLater()
1092
1224
 
1225
+ # ROI plots cleanup
1226
+ self.x_roi.cleanup_pyqtgraph()
1227
+ self.y_roi.cleanup_pyqtgraph()
1228
+
1093
1229
  super().cleanup()
1094
1230
 
1095
1231
 
@@ -0,0 +1,37 @@
1
+ import pyqtgraph as pg
2
+
3
+ from bec_widgets.utils.round_frame import RoundedFrame
4
+ from bec_widgets.widgets.plots.plot_base import BECViewBox
5
+
6
+
7
+ class ImageROIPlot(RoundedFrame):
8
+ """
9
+ A widget for displaying an image with a region of interest (ROI) overlay.
10
+ """
11
+
12
+ def __init__(self, parent=None):
13
+ super().__init__(parent=parent)
14
+
15
+ self.content_widget = pg.GraphicsLayoutWidget(self)
16
+ self.layout.addWidget(self.content_widget)
17
+ self.plot_item = pg.PlotItem(viewBox=BECViewBox(enableMenu=True))
18
+ self.content_widget.addItem(self.plot_item)
19
+ self.curve_color = "w"
20
+
21
+ self.apply_plot_widget_style()
22
+
23
+ def apply_theme(self, theme: str):
24
+ if theme == "dark":
25
+ self.curve_color = "w"
26
+ else:
27
+ self.curve_color = "k"
28
+ for curve in self.plot_item.curves:
29
+ curve.setPen(pg.mkPen(self.curve_color, width=3))
30
+ super().apply_theme(theme)
31
+
32
+ def cleanup_pyqtgraph(self):
33
+ """Cleanup pyqtgraph items."""
34
+ self.plot_item.vb.menu.close()
35
+ self.plot_item.vb.menu.deleteLater()
36
+ self.plot_item.ctrlMenu.close()
37
+ self.plot_item.ctrlMenu.deleteLater()
@@ -35,19 +35,20 @@ class MonitorSelectionToolbarBundle(ToolbarBundle):
35
35
  self.device_combo_box.addItem("", None)
36
36
  self.device_combo_box.setCurrentText("")
37
37
  self.device_combo_box.setToolTip("Select Device")
38
+ self.device_combo_box.setFixedWidth(150)
38
39
  self.device_combo_box.setItemDelegate(NoCheckDelegate(self.device_combo_box))
39
40
 
40
- self.add_action("monitor", WidgetAction(widget=self.device_combo_box, adjust_size=True))
41
+ self.add_action("monitor", WidgetAction(widget=self.device_combo_box, adjust_size=False))
41
42
 
42
43
  # 2) Dimension combo box
43
44
  self.dim_combo_box = QComboBox(parent=self.target_widget)
44
45
  self.dim_combo_box.addItems(["auto", "1d", "2d"])
45
46
  self.dim_combo_box.setCurrentText("auto")
46
47
  self.dim_combo_box.setToolTip("Monitor Dimension")
47
- self.dim_combo_box.setFixedWidth(60)
48
+ self.dim_combo_box.setFixedWidth(100)
48
49
  self.dim_combo_box.setItemDelegate(NoCheckDelegate(self.dim_combo_box))
49
50
 
50
- self.add_action("dim_combo", WidgetAction(widget=self.dim_combo_box, adjust_size=True))
51
+ self.add_action("dim_combo", WidgetAction(widget=self.dim_combo_box, adjust_size=False))
51
52
 
52
53
  # Connect slots, a device will be connected upon change of any combobox
53
54
  self.device_combo_box.currentTextChanged.connect(lambda: self.connect_monitor())
@@ -44,7 +44,7 @@ class MouseInteractionToolbarBundle(ToolbarBundle):
44
44
  initial_action="drag_mode",
45
45
  tooltip="Mouse Modes",
46
46
  checkable=True,
47
- parent=self,
47
+ parent=self.target_widget,
48
48
  )
49
49
 
50
50
  # Add them to the bundle
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "2.6.0"
7
+ version = "2.7.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
File without changes
File without changes
File without changes
File without changes
File without changes