bec-widgets 2.13.1__tar.gz → 2.14.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 (410) hide show
  1. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/CHANGELOG.md +21 -0
  2. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/PKG-INFO +1 -1
  3. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/client.py +123 -1
  4. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/forms_from_types/items.py +2 -2
  5. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image_base.py +12 -1
  6. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +42 -22
  7. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/roi/image_roi.py +86 -0
  8. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/pyproject.toml +1 -1
  9. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.git_hooks/pre-commit +0 -0
  10. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  11. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
  12. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  13. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/actions/bw_install/action.yml +0 -0
  14. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/pull_request_template.md +0 -0
  15. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
  16. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
  17. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/check_pr.yml +0 -0
  18. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/ci.yml +0 -0
  19. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/end2end-conda.yml +0 -0
  20. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/formatter.yml +0 -0
  21. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/generate-cli-check.yml +0 -0
  22. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/pytest-matrix.yml +0 -0
  23. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/pytest.yml +0 -0
  24. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/semantic_release.yml +0 -0
  25. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/stale-issues.yml +0 -0
  26. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.github/workflows/sync-issues-pr.yml +0 -0
  27. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.gitignore +0 -0
  28. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.gitlab-ci.yml +0 -0
  29. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.pylintrc +0 -0
  30. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/.readthedocs.yaml +0 -0
  31. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/LICENSE +0 -0
  32. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/README.md +0 -0
  33. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/__init__.py +0 -0
  34. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/applications/__init__.py +0 -0
  35. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/applications/bw_launch.py +0 -0
  36. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/applications/launch_window.py +0 -0
  37. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  38. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  39. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/assets/app_icons/auto_update.png +0 -0
  40. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  41. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
  42. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
  43. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/__init__.py +0 -0
  44. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/client_utils.py +0 -0
  45. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/generate_cli.py +0 -0
  46. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/rpc/__init__.py +0 -0
  47. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/rpc/rpc_base.py +0 -0
  48. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/rpc/rpc_register.py +0 -0
  49. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/rpc/rpc_widget_handler.py +0 -0
  50. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/cli/server.py +0 -0
  51. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/__init__.py +0 -0
  52. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  53. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  54. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  55. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  56. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  57. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  58. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  59. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  60. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  61. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  62. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  63. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  64. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  65. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/tests/__init__.py +0 -0
  66. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/tests/utils.py +0 -0
  67. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/__init__.py +0 -0
  68. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_connector.py +0 -0
  69. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_designer.py +0 -0
  70. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  71. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_plugin_helper.py +0 -0
  72. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  73. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_table.py +0 -0
  74. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/bec_widget.py +0 -0
  75. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/clickable_label.py +0 -0
  76. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
  77. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/colors.py +0 -0
  78. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/compact_popup.py +0 -0
  79. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/container_utils.py +0 -0
  80. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/crosshair.py +0 -0
  81. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/entry_validator.py +0 -0
  82. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/error_popups.py +0 -0
  83. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/expandable_frame.py +0 -0
  84. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/filter_io.py +0 -0
  85. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
  86. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/forms_from_types/forms.py +0 -0
  87. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/forms_from_types/styles.py +0 -0
  88. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/fps_counter.py +0 -0
  89. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  90. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/layout_manager.py +0 -0
  91. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/linear_region_selector.py +0 -0
  92. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/name_utils.py +0 -0
  93. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/ophyd_kind_util.py +0 -0
  94. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/palette_viewer.py +0 -0
  95. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/plot_indicator_items.py +0 -0
  96. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  97. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  98. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/plugin_utils.py +0 -0
  99. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/redis_message_waiter.py +0 -0
  100. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/reference_utils.py +0 -0
  101. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/round_frame.py +0 -0
  102. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  103. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/rpc_server.py +0 -0
  104. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/serialization.py +0 -0
  105. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/settings_dialog.py +0 -0
  106. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/side_panel.py +0 -0
  107. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/thread_checker.py +0 -0
  108. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/toolbar.py +0 -0
  109. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/ui_loader.py +0 -0
  110. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/validator_delegate.py +0 -0
  111. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/widget_io.py +0 -0
  112. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/widget_state_manager.py +0 -0
  113. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  114. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/__init__.py +0 -0
  115. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/__init__.py +0 -0
  116. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
  117. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
  118. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
  119. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/dock/dock.py +0 -0
  120. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
  121. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
  122. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
  123. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
  124. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
  125. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
  126. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
  127. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
  128. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
  129. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/containers/main_window/main_window.py +0 -0
  130. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/__init__.py +0 -0
  131. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
  132. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
  133. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
  134. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
  135. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
  136. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
  137. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
  138. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
  139. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
  140. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
  141. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
  142. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
  143. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
  144. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
  145. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
  146. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
  147. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
  148. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
  149. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
  150. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
  151. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
  152. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
  153. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
  154. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
  155. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
  156. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
  157. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
  158. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
  159. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
  160. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
  161. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
  162. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
  163. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
  164. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
  165. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
  166. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
  167. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
  168. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
  169. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
  170. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
  171. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
  172. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
  173. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
  174. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
  175. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
  176. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
  177. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
  178. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
  179. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
  180. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
  181. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
  182. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
  183. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
  184. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
  185. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +0 -0
  186. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +0 -0
  187. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
  188. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
  189. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
  190. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +0 -0
  191. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
  192. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
  193. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
  194. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
  195. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
  196. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
  197. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
  198. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
  199. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
  200. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
  201. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +0 -0
  202. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
  203. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
  204. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
  205. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
  206. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
  207. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
  208. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
  209. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
  210. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
  211. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
  212. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
  213. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/__init__.py +0 -0
  214. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
  215. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
  216. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
  217. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
  218. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
  219. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
  220. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  221. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  222. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
  223. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  224. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  225. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  226. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/__init__.py +0 -0
  227. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
  228. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
  229. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
  230. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
  231. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
  232. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
  233. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
  234. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
  235. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
  236. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
  237. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
  238. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
  239. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
  240. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
  241. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
  242. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
  243. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
  244. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
  245. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
  246. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
  247. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
  248. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
  249. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
  250. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/website/__init__.py +0 -0
  251. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
  252. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/website/website.py +0 -0
  253. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
  254. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
  255. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/games/__init__.py +0 -0
  256. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/games/minesweeper.py +0 -0
  257. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
  258. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
  259. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
  260. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/__init__.py +0 -0
  261. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/__init__.py +0 -0
  262. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image.py +0 -0
  263. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
  264. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image_item.py +0 -0
  265. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
  266. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
  267. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/image_roi_plot.py +0 -0
  268. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/register_image.py +0 -0
  269. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
  270. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
  271. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +0 -0
  272. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
  273. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
  274. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
  275. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
  276. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
  277. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
  278. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
  279. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
  280. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
  281. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
  282. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
  283. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
  284. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +0 -0
  285. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
  286. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
  287. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
  288. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
  289. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
  290. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
  291. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
  292. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
  293. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/plot_base.py +0 -0
  294. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
  295. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
  296. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
  297. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
  298. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +0 -0
  299. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
  300. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
  301. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
  302. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
  303. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
  304. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
  305. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
  306. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +0 -0
  307. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +0 -0
  308. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +0 -0
  309. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
  310. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +0 -0
  311. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
  312. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
  313. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
  314. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
  315. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
  316. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
  317. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
  318. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
  319. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +0 -0
  320. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +0 -0
  321. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
  322. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
  323. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/waveform.py +0 -0
  324. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
  325. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
  326. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/__init__.py +0 -0
  327. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
  328. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
  329. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  330. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
  331. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
  332. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
  333. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
  334. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
  335. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
  336. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  337. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  338. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/__init__.py +0 -0
  339. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
  340. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
  341. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
  342. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
  343. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
  344. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
  345. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
  346. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
  347. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
  348. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
  349. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
  350. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
  351. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
  352. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
  353. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
  354. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
  355. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
  356. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +0 -0
  357. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
  358. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/services/device_browser/util.py +0 -0
  359. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/__init__.py +0 -0
  360. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
  361. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
  362. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
  363. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
  364. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
  365. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
  366. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/signal_label/register_signal_label.py +0 -0
  367. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/signal_label/signal_label.py +0 -0
  368. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/signal_label/signal_label.pyproject +0 -0
  369. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/signal_label/signal_label_plugin.py +0 -0
  370. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
  371. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
  372. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
  373. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
  374. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
  375. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
  376. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
  377. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
  378. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
  379. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
  380. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
  381. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
  382. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
  383. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
  384. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
  385. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
  386. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
  387. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
  388. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
  389. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
  390. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
  391. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
  392. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +0 -0
  393. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
  394. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
  395. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
  396. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
  397. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
  398. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
  399. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
  400. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
  401. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
  402. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
  403. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
  404. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
  405. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
  406. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
  407. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
  408. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
  409. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
  410. {bec_widgets-2.13.1 → bec_widgets-2.14.0}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -1,6 +1,27 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.14.0 (2025-06-13)
5
+
6
+ ### Features
7
+
8
+ - **image_roi**: Added EllipticalROI
9
+ ([`af8db0b`](https://github.com/bec-project/bec_widgets/commit/af8db0bede32dd10ad72671a8c2978ca884f4994))
10
+
11
+ ### Refactoring
12
+
13
+ - **image_roi_tree**: Shape switch logic adjusted to reduce code repetition
14
+ ([`f0d48a0`](https://github.com/bec-project/bec_widgets/commit/f0d48a05085bb8c628e516d4a976d776ee63c7c3))
15
+
16
+
17
+ ## v2.13.2 (2025-06-13)
18
+
19
+ ### Bug Fixes
20
+
21
+ - Allow sets in generated form types
22
+ ([`32fd959`](https://github.com/bec-project/bec_widgets/commit/32fd959e675108265f35139b44d02ba966bd37e2))
23
+
24
+
4
25
  ## v2.13.1 (2025-06-12)
5
26
 
6
27
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.13.1
3
+ Version: 2.14.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
@@ -1044,6 +1044,128 @@ class DeviceLineEdit(RPCBase):
1044
1044
  """
1045
1045
 
1046
1046
 
1047
+ class EllipticalROI(RPCBase):
1048
+ """Elliptical Region of Interest with centre/width/height tracking and auto-labelling."""
1049
+
1050
+ @property
1051
+ @rpc_call
1052
+ def label(self) -> "str":
1053
+ """
1054
+ Gets the display name of this ROI.
1055
+
1056
+ Returns:
1057
+ str: The current name of the ROI.
1058
+ """
1059
+
1060
+ @label.setter
1061
+ @rpc_call
1062
+ def label(self) -> "str":
1063
+ """
1064
+ Gets the display name of this ROI.
1065
+
1066
+ Returns:
1067
+ str: The current name of the ROI.
1068
+ """
1069
+
1070
+ @property
1071
+ @rpc_call
1072
+ def movable(self) -> "bool":
1073
+ """
1074
+ Gets whether this ROI is movable.
1075
+
1076
+ Returns:
1077
+ bool: True if the ROI can be moved, False otherwise.
1078
+ """
1079
+
1080
+ @movable.setter
1081
+ @rpc_call
1082
+ def movable(self) -> "bool":
1083
+ """
1084
+ Gets whether this ROI is movable.
1085
+
1086
+ Returns:
1087
+ bool: True if the ROI can be moved, False otherwise.
1088
+ """
1089
+
1090
+ @property
1091
+ @rpc_call
1092
+ def line_color(self) -> "str":
1093
+ """
1094
+ Gets the current line color of the ROI.
1095
+
1096
+ Returns:
1097
+ str: The current line color as a string (e.g., hex color code).
1098
+ """
1099
+
1100
+ @line_color.setter
1101
+ @rpc_call
1102
+ def line_color(self) -> "str":
1103
+ """
1104
+ Gets the current line color of the ROI.
1105
+
1106
+ Returns:
1107
+ str: The current line color as a string (e.g., hex color code).
1108
+ """
1109
+
1110
+ @property
1111
+ @rpc_call
1112
+ def line_width(self) -> "int":
1113
+ """
1114
+ Gets the current line width of the ROI.
1115
+
1116
+ Returns:
1117
+ int: The current line width in pixels.
1118
+ """
1119
+
1120
+ @line_width.setter
1121
+ @rpc_call
1122
+ def line_width(self) -> "int":
1123
+ """
1124
+ Gets the current line width of the ROI.
1125
+
1126
+ Returns:
1127
+ int: The current line width in pixels.
1128
+ """
1129
+
1130
+ @rpc_call
1131
+ def get_coordinates(self, typed: "bool | None" = None) -> "dict | tuple":
1132
+ """
1133
+ Return the ellipse's centre and size.
1134
+
1135
+ Args:
1136
+ typed (bool | None): If True returns dict; otherwise tuple.
1137
+ """
1138
+
1139
+ @rpc_call
1140
+ def get_data_from_image(
1141
+ self, image_item: "pg.ImageItem | None" = None, returnMappedCoords: "bool" = False, **kwargs
1142
+ ):
1143
+ """
1144
+ Wrapper around `pyqtgraph.ROI.getArrayRegion`.
1145
+
1146
+ Args:
1147
+ image_item (pg.ImageItem or None): The ImageItem to sample. If None, auto-detects
1148
+ the first `ImageItem` in the same GraphicsScene as this ROI.
1149
+ returnMappedCoords (bool): If True, also returns the coordinate array generated by
1150
+ *getArrayRegion*.
1151
+ **kwargs: Additional keyword arguments passed to *getArrayRegion* or *affineSlice*,
1152
+ such as `axes`, `order`, `shape`, etc.
1153
+
1154
+ Returns:
1155
+ ndarray: Pixel data inside the ROI, or (data, coords) if *returnMappedCoords* is True.
1156
+ """
1157
+
1158
+ @rpc_call
1159
+ def set_position(self, x: "float", y: "float"):
1160
+ """
1161
+ Sets the position of the ROI.
1162
+
1163
+ Args:
1164
+ x (float): The x-coordinate of the new position.
1165
+ y (float): The y-coordinate of the new position.
1166
+ """
1167
+
1168
+
1047
1169
  class Image(RPCBase):
1048
1170
  """Image widget for displaying 2D data."""
1049
1171
 
@@ -1529,7 +1651,7 @@ class Image(RPCBase):
1529
1651
  @rpc_call
1530
1652
  def add_roi(
1531
1653
  self,
1532
- kind: "Literal['rect', 'circle']" = "rect",
1654
+ kind: "Literal['rect', 'circle', 'ellipse']" = "rect",
1533
1655
  name: "str | None" = None,
1534
1656
  line_width: "int | None" = 5,
1535
1657
  pos: "tuple[float, float] | None" = (10, 10),
@@ -64,12 +64,12 @@ class FormItemSpec(BaseModel):
64
64
  if isinstance(v, (type, UnionType)):
65
65
  return v
66
66
  if isinstance(v, GenericAlias):
67
- if v.__origin__ in [list, dict] and all(
67
+ if v.__origin__ in [list, dict, set] and all(
68
68
  arg in allowed_primitives for arg in v.__args__
69
69
  ):
70
70
  return v
71
71
  raise ValueError(
72
- f"Generics of type {v} are not supported - only lists and dicts of primitive types {allowed_primitives}"
72
+ f"Generics of type {v} are not supported - only lists, dicts and sets of primitive types {allowed_primitives}"
73
73
  )
74
74
  if type(v) is type(Literal[""]): # _LiteralGenericAlias is not exported from typing
75
75
  arg_types = set(type(arg) for arg in v.__args__)
@@ -24,6 +24,7 @@ from bec_widgets.widgets.plots.plot_base import PlotBase
24
24
  from bec_widgets.widgets.plots.roi.image_roi import (
25
25
  BaseROI,
26
26
  CircularROI,
27
+ EllipticalROI,
27
28
  RectangularROI,
28
29
  ROIController,
29
30
  )
@@ -554,7 +555,7 @@ class ImageBase(PlotBase):
554
555
 
555
556
  def add_roi(
556
557
  self,
557
- kind: Literal["rect", "circle"] = "rect",
558
+ kind: Literal["rect", "circle", "ellipse"] = "rect",
558
559
  name: str | None = None,
559
560
  line_width: int | None = 5,
560
561
  pos: tuple[float, float] | None = (10, 10),
@@ -599,6 +600,16 @@ class ImageBase(PlotBase):
599
600
  movable=movable,
600
601
  **pg_kwargs,
601
602
  )
603
+ elif kind == "ellipse":
604
+ roi = EllipticalROI(
605
+ pos=pos,
606
+ size=size,
607
+ parent_image=self,
608
+ line_width=line_width,
609
+ label=name,
610
+ movable=movable,
611
+ **pg_kwargs,
612
+ )
602
613
  else:
603
614
  raise ValueError("kind must be 'rect' or 'circle'")
604
615
 
@@ -24,6 +24,7 @@ from bec_widgets.utils.toolbar import MaterialIconAction, ModularToolBar
24
24
  from bec_widgets.widgets.plots.roi.image_roi import (
25
25
  BaseROI,
26
26
  CircularROI,
27
+ EllipticalROI,
27
28
  RectangularROI,
28
29
  ROIController,
29
30
  )
@@ -121,11 +122,21 @@ class ROIPropertyTree(BECWidget, QWidget):
121
122
  # --------------------------------------------------------------------- UI
122
123
  def _init_toolbar(self):
123
124
  tb = ModularToolBar(self, self, orientation="horizontal")
125
+ self._draw_actions: dict[str, MaterialIconAction] = {}
124
126
  # --- ROI draw actions (toggleable) ---
125
127
  self.add_rect_action = MaterialIconAction("add_box", "Add Rect ROI", True, self)
126
- self.add_circle_action = MaterialIconAction("add_circle", "Add Circle ROI", True, self)
127
128
  tb.add_action("Add Rect ROI", self.add_rect_action, self)
129
+ self._draw_actions["rect"] = self.add_rect_action
130
+ self.add_circle_action = MaterialIconAction("add_circle", "Add Circle ROI", True, self)
128
131
  tb.add_action("Add Circle ROI", self.add_circle_action, self)
132
+ self._draw_actions["circle"] = self.add_circle_action
133
+ # --- Ellipse ROI draw action ---
134
+ self.add_ellipse_action = MaterialIconAction("vignette", "Add Ellipse ROI", True, self)
135
+ tb.add_action("Add Ellipse ROI", self.add_ellipse_action, self)
136
+ self._draw_actions["ellipse"] = self.add_ellipse_action
137
+
138
+ for mode, act in self._draw_actions.items():
139
+ act.action.toggled.connect(lambda on, m=mode: self._on_draw_action_toggled(m, on))
129
140
 
130
141
  # Expand/Collapse toggle
131
142
  self.expand_toggle = MaterialIconAction(
@@ -174,17 +185,9 @@ class ROIPropertyTree(BECWidget, QWidget):
174
185
  self.controller.paletteChanged.connect(lambda cmap: setattr(self.cmap, "colormap", cmap))
175
186
 
176
187
  # ROI drawing state
177
- self._roi_draw_mode = None # 'rect' | 'circle' | None
188
+ self._roi_draw_mode = None # 'rect' | 'circle' | 'ellipse' | None
178
189
  self._roi_start_pos = None # QPointF in image coords
179
190
  self._temp_roi = None # live ROI being resized while dragging
180
-
181
- # toggle handlers
182
- self.add_rect_action.action.toggled.connect(
183
- lambda on: self._set_roi_draw_mode("rect" if on else None)
184
- )
185
- self.add_circle_action.action.toggled.connect(
186
- lambda on: self._set_roi_draw_mode("circle" if on else None)
187
- )
188
191
  # capture mouse events on the plot scene
189
192
  self.plot.scene().installEventFilter(self)
190
193
 
@@ -214,16 +217,12 @@ class ROIPropertyTree(BECWidget, QWidget):
214
217
  return str(value)
215
218
 
216
219
  def _set_roi_draw_mode(self, mode: str | None):
217
- # Ensure only the selected action is toggled on
218
- if mode == "rect":
219
- self.add_rect_action.action.setChecked(True)
220
- self.add_circle_action.action.setChecked(False)
221
- elif mode == "circle":
222
- self.add_rect_action.action.setChecked(False)
223
- self.add_circle_action.action.setChecked(True)
224
- else:
225
- self.add_rect_action.action.setChecked(False)
226
- self.add_circle_action.action.setChecked(False)
220
+ # Update toolbar actions so that only the selected mode is checked
221
+ for m, act in self._draw_actions.items():
222
+ act.action.blockSignals(True)
223
+ act.action.setChecked(m == mode)
224
+ act.action.blockSignals(False)
225
+
227
226
  self._roi_draw_mode = mode
228
227
  self._roi_start_pos = None
229
228
  # remove any unfinished temp ROI
@@ -231,6 +230,15 @@ class ROIPropertyTree(BECWidget, QWidget):
231
230
  self.plot.removeItem(self._temp_roi)
232
231
  self._temp_roi = None
233
232
 
233
+ def _on_draw_action_toggled(self, mode: str, checked: bool):
234
+ if checked:
235
+ # Activate selected mode
236
+ self._set_roi_draw_mode(mode)
237
+ else:
238
+ # If the active mode is being unchecked, clear mode
239
+ if self._roi_draw_mode == mode:
240
+ self._set_roi_draw_mode(None)
241
+
234
242
  def eventFilter(self, obj, event):
235
243
  if self._roi_draw_mode is None:
236
244
  return super().eventFilter(obj, event)
@@ -243,12 +251,18 @@ class ROIPropertyTree(BECWidget, QWidget):
243
251
  parent_image=self.image_widget,
244
252
  resize_handles=False,
245
253
  )
246
- if self._roi_draw_mode == "circle":
254
+ elif self._roi_draw_mode == "circle":
247
255
  self._temp_roi = CircularROI(
248
256
  pos=[self._roi_start_pos.x() - 2.5, self._roi_start_pos.y() - 2.5],
249
257
  size=[5, 5],
250
258
  parent_image=self.image_widget,
251
259
  )
260
+ elif self._roi_draw_mode == "ellipse":
261
+ self._temp_roi = EllipticalROI(
262
+ pos=[self._roi_start_pos.x() - 2.5, self._roi_start_pos.y() - 2.5],
263
+ size=[5, 5],
264
+ parent_image=self.image_widget,
265
+ )
252
266
  self.plot.addItem(self._temp_roi)
253
267
  return True
254
268
  elif event.type() == QEvent.GraphicsSceneMouseMove and self._temp_roi is not None:
@@ -258,13 +272,19 @@ class ROIPropertyTree(BECWidget, QWidget):
258
272
 
259
273
  if self._roi_draw_mode == "rect":
260
274
  self._temp_roi.setSize([dx, dy])
261
- if self._roi_draw_mode == "circle":
275
+ elif self._roi_draw_mode == "circle":
262
276
  r = max(
263
277
  1, math.hypot(dx, dy)
264
278
  ) # radius never smaller than 1 for safety of handle mapping, otherwise SEGFAULT
265
279
  d = 2 * r # diameter
266
280
  self._temp_roi.setPos(self._roi_start_pos.x() - r, self._roi_start_pos.y() - r)
267
281
  self._temp_roi.setSize([d, d])
282
+ elif self._roi_draw_mode == "ellipse":
283
+ # Safeguard: enforce a minimum ellipse width/height of 2 px
284
+ min_dim = 2.0
285
+ w = dx if abs(dx) >= min_dim else math.copysign(min_dim, dx or 1.0)
286
+ h = dy if abs(dy) >= min_dim else math.copysign(min_dim, dy or 1.0)
287
+ self._temp_roi.setSize([w, h])
268
288
  return True
269
289
  elif (
270
290
  event.type() == QEvent.GraphicsSceneMouseRelease
@@ -750,6 +750,92 @@ class CircularROI(BaseROI, pg.CircleROI):
750
750
  return None
751
751
 
752
752
 
753
+ class EllipticalROI(BaseROI, pg.EllipseROI):
754
+ """
755
+ Elliptical Region of Interest with centre/width/height tracking and auto-labelling.
756
+
757
+ Mirrors the behaviour of ``CircularROI`` but supports independent
758
+ horizontal and vertical radii.
759
+ """
760
+
761
+ centerChanged = Signal(float, float, float, float) # cx, cy, width, height
762
+ centerReleased = Signal(float, float, float, float)
763
+
764
+ def __init__(
765
+ self,
766
+ *,
767
+ pos,
768
+ size,
769
+ pen=None,
770
+ config: ConnectionConfig | None = None,
771
+ gui_id: str | None = None,
772
+ parent_image: Image | None = None,
773
+ label: str | None = None,
774
+ line_color: str | None = None,
775
+ line_width: int = 5,
776
+ movable: bool = True,
777
+ **extra_pg,
778
+ ):
779
+ super().__init__(
780
+ config=config,
781
+ gui_id=gui_id,
782
+ parent_image=parent_image,
783
+ label=label,
784
+ line_color=line_color,
785
+ line_width=line_width,
786
+ pos=pos,
787
+ size=size,
788
+ pen=pen,
789
+ movable=movable,
790
+ **extra_pg,
791
+ )
792
+
793
+ self.sigRegionChanged.connect(self._on_region_changed)
794
+ self._adorner = LabelAdorner(self)
795
+ self.hoverPen = fn.mkPen(color=(255, 0, 0), width=3, style=QtCore.Qt.DashLine)
796
+ self.handleHoverPen = fn.mkPen("lime", width=4)
797
+
798
+ def add_scale_handle(self):
799
+ """Add scale handles to the elliptical ROI."""
800
+ self._addHandles() # delegates to pg.EllipseROI
801
+
802
+ def _on_region_changed(self):
803
+ w = abs(self.state["size"][0])
804
+ h = abs(self.state["size"][1])
805
+ cx = self.pos().x() + w / 2
806
+ cy = self.pos().y() + h / 2
807
+ self.centerChanged.emit(cx, cy, w, h)
808
+ self.parent_plot_item.vb.update()
809
+
810
+ def mouseDragEvent(self, ev):
811
+ super().mouseDragEvent(ev)
812
+ if ev.isFinish():
813
+ w = abs(self.state["size"][0])
814
+ h = abs(self.state["size"][1])
815
+ cx = self.pos().x() + w / 2
816
+ cy = self.pos().y() + h / 2
817
+ self.centerReleased.emit(cx, cy, w, h)
818
+
819
+ def get_coordinates(self, typed: bool | None = None) -> dict | tuple:
820
+ """
821
+ Return the ellipse's centre and size.
822
+
823
+ Args:
824
+ typed (bool | None): If True returns dict; otherwise tuple.
825
+ """
826
+ if typed is None:
827
+ typed = self.description
828
+
829
+ w, h = map(abs, self.state["size"]) # raw diameters
830
+ major, minor = (w, h) if w >= h else (h, w)
831
+ cx = self.pos().x() + w / 2
832
+ cy = self.pos().y() + h / 2
833
+
834
+ if typed:
835
+ return {"center_x": cx, "center_y": cy, "major_axis": major, "minor_axis": minor}
836
+ return (cx, cy, major, minor)
837
+
838
+
753
839
  class ROIController(QObject):
754
840
  """Manages a collection of ROIs (Regions of Interest) with palette-assigned colors.
755
841
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "2.13.1"
7
+ version = "2.14.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