bec-widgets 2.12.2__tar.gz → 2.12.3__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.12.2 → bec_widgets-2.12.3}/CHANGELOG.md +20 -0
  2. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/PKG-INFO +3 -3
  3. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/client.py +2 -2
  4. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/crosshair.py +1 -1
  5. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +19 -0
  6. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image.py +100 -44
  7. bec_widgets-2.12.3/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +107 -0
  8. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/pyproject.toml +6 -6
  9. bec_widgets-2.12.2/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +0 -60
  10. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.git_hooks/pre-commit +0 -0
  11. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  12. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
  13. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/actions/bw_install/action.yml +0 -0
  15. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/pull_request_template.md +0 -0
  16. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
  17. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
  18. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/check_pr.yml +0 -0
  19. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/ci.yml +0 -0
  20. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/end2end-conda.yml +0 -0
  21. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/formatter.yml +0 -0
  22. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/generate-cli-check.yml +0 -0
  23. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/pytest-matrix.yml +0 -0
  24. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/pytest.yml +0 -0
  25. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/semantic_release.yml +0 -0
  26. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.github/workflows/sync-issues-pr.yml +0 -0
  27. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.gitignore +0 -0
  28. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.gitlab-ci.yml +0 -0
  29. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.pylintrc +0 -0
  30. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/.readthedocs.yaml +0 -0
  31. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/LICENSE +0 -0
  32. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/README.md +0 -0
  33. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/__init__.py +0 -0
  34. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/applications/__init__.py +0 -0
  35. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/applications/bw_launch.py +0 -0
  36. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/applications/launch_window.py +0 -0
  37. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  38. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  39. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/assets/app_icons/auto_update.png +0 -0
  40. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  41. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
  42. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
  43. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/__init__.py +0 -0
  44. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/client_utils.py +0 -0
  45. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/generate_cli.py +0 -0
  46. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/rpc/__init__.py +0 -0
  47. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/rpc/rpc_base.py +0 -0
  48. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/rpc/rpc_register.py +0 -0
  49. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/rpc/rpc_widget_handler.py +0 -0
  50. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/cli/server.py +0 -0
  51. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/__init__.py +0 -0
  52. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/general_app/__init__.py +0 -0
  53. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/general_app/general_app.py +0 -0
  54. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/general_app/general_app.ui +0 -0
  55. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/general_app/web_links.py +0 -0
  56. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  57. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  58. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  59. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  60. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  61. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  62. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  63. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  64. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  65. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/tests/__init__.py +0 -0
  66. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/tests/utils.py +0 -0
  67. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/__init__.py +0 -0
  68. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_connector.py +0 -0
  69. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_designer.py +0 -0
  70. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_dispatcher.py +0 -0
  71. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_plugin_helper.py +0 -0
  72. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  73. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_table.py +0 -0
  74. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/bec_widget.py +0 -0
  75. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/clickable_label.py +0 -0
  76. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
  77. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/colors.py +0 -0
  78. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/compact_popup.py +0 -0
  79. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/container_utils.py +0 -0
  80. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/entry_validator.py +0 -0
  81. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/error_popups.py +0 -0
  82. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/expandable_frame.py +0 -0
  83. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/filter_io.py +0 -0
  84. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
  85. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/forms_from_types/forms.py +0 -0
  86. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/forms_from_types/items.py +0 -0
  87. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/forms_from_types/styles.py +0 -0
  88. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/fps_counter.py +0 -0
  89. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  90. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/layout_manager.py +0 -0
  91. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/linear_region_selector.py +0 -0
  92. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/name_utils.py +0 -0
  93. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/ophyd_kind_util.py +0 -0
  94. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/palette_viewer.py +0 -0
  95. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/plot_indicator_items.py +0 -0
  96. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  97. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/plugin_templates/register.template +0 -0
  98. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/plugin_utils.py +0 -0
  99. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/redis_message_waiter.py +0 -0
  100. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/reference_utils.py +0 -0
  101. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/round_frame.py +0 -0
  102. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/rpc_decorator.py +0 -0
  103. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/rpc_server.py +0 -0
  104. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/serialization.py +0 -0
  105. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/settings_dialog.py +0 -0
  106. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/side_panel.py +0 -0
  107. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/thread_checker.py +0 -0
  108. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/toolbar.py +0 -0
  109. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/ui_loader.py +0 -0
  110. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/validator_delegate.py +0 -0
  111. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/widget_io.py +0 -0
  112. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/widget_state_manager.py +0 -0
  113. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/utils/yaml_dialog.py +0 -0
  114. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/__init__.py +0 -0
  115. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/__init__.py +0 -0
  116. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
  117. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
  118. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
  119. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/dock/dock.py +0 -0
  120. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
  121. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
  122. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
  123. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
  124. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
  125. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
  126. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
  127. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
  128. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
  129. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/containers/main_window/main_window.py +0 -0
  130. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/__init__.py +0 -0
  131. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
  132. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
  133. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
  134. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
  135. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
  136. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
  137. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
  138. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
  139. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
  140. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
  141. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
  142. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
  143. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
  144. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
  145. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
  146. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
  147. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
  148. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
  149. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
  150. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
  151. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
  152. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
  153. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
  154. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
  155. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
  156. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
  157. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
  158. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
  159. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
  160. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
  161. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
  162. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
  163. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
  164. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
  165. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
  166. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
  167. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
  168. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
  169. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
  170. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
  171. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
  172. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
  173. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
  174. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
  175. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
  176. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
  177. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
  178. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
  179. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
  180. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
  181. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
  182. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
  183. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
  184. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
  185. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +0 -0
  186. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +0 -0
  187. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
  188. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
  189. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
  190. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
  191. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
  192. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
  193. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
  194. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
  195. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
  196. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
  197. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
  198. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
  199. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
  200. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +0 -0
  201. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
  202. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
  203. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
  204. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
  205. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
  206. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
  207. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
  208. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
  209. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
  210. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
  211. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
  212. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/__init__.py +0 -0
  213. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
  214. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
  215. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
  216. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
  217. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
  218. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
  219. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  220. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  221. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
  222. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  223. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  224. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  225. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/__init__.py +0 -0
  226. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
  227. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
  228. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
  229. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
  230. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
  231. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
  232. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
  233. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
  234. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
  235. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
  236. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
  237. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
  238. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
  239. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
  240. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
  241. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
  242. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
  243. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
  244. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
  245. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
  246. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
  247. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
  248. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
  249. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/website/__init__.py +0 -0
  250. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
  251. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/website/website.py +0 -0
  252. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
  253. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
  254. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/games/__init__.py +0 -0
  255. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/games/minesweeper.py +0 -0
  256. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
  257. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
  258. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
  259. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/__init__.py +0 -0
  260. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/__init__.py +0 -0
  261. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
  262. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image_base.py +0 -0
  263. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image_item.py +0 -0
  264. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
  265. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
  266. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/image_roi_plot.py +0 -0
  267. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/register_image.py +0 -0
  268. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
  269. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +0 -0
  270. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
  271. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
  272. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
  273. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
  274. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
  275. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
  276. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
  277. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
  278. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
  279. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
  280. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
  281. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
  282. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
  283. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +0 -0
  284. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
  285. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
  286. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
  287. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
  288. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
  289. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
  290. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
  291. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
  292. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/plot_base.py +0 -0
  293. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
  294. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/roi/image_roi.py +0 -0
  295. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
  296. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
  297. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
  298. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +0 -0
  299. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
  300. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
  301. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
  302. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
  303. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
  304. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
  305. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
  306. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +0 -0
  307. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +0 -0
  308. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +0 -0
  309. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
  310. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +0 -0
  311. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
  312. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
  313. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
  314. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
  315. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
  316. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
  317. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
  318. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
  319. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +0 -0
  320. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +0 -0
  321. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
  322. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
  323. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/waveform.py +0 -0
  324. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
  325. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
  326. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/__init__.py +0 -0
  327. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
  328. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
  329. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  330. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
  331. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
  332. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
  333. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
  334. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
  335. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
  336. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  337. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  338. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/__init__.py +0 -0
  339. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
  340. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
  341. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
  342. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
  343. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
  344. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
  345. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
  346. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
  347. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
  348. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
  349. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
  350. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
  351. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
  352. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
  353. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
  354. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
  355. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
  356. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +0 -0
  357. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
  358. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/services/device_browser/util.py +0 -0
  359. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/__init__.py +0 -0
  360. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
  361. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
  362. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
  363. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
  364. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
  365. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
  366. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/signal_label/register_signal_label.py +0 -0
  367. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/signal_label/signal_label.py +0 -0
  368. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/signal_label/signal_label.pyproject +0 -0
  369. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/signal_label/signal_label_plugin.py +0 -0
  370. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
  371. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
  372. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
  373. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
  374. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
  375. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
  376. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
  377. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
  378. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
  379. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
  380. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
  381. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
  382. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
  383. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
  384. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
  385. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
  386. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
  387. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
  388. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
  389. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
  390. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
  391. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
  392. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +0 -0
  393. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
  394. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
  395. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
  396. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
  397. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
  398. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
  399. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
  400. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
  401. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
  402. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
  403. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
  404. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
  405. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
  406. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
  407. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
  408. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
  409. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
  410. {bec_widgets-2.12.2 → bec_widgets-2.12.3}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -1,6 +1,26 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.12.3 (2025-06-05)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **crosshair**: Use objectName instead of config for retrieving the monitor name
9
+ ([`edfac87`](https://github.com/bec-project/bec_widgets/commit/edfac87868605b4b755f7732b2841673de53bc3f))
10
+
11
+ - **device_combobox**: Tuple entries of preview signals are checked in DeviceComboBoxes just for the
12
+ relevant device
13
+ ([`12f5233`](https://github.com/bec-project/bec_widgets/commit/12f523374586d55499f80baf56a50b6ef486cd43))
14
+
15
+ - **image**: Preview signals can be used in Image widget; update logic adjusted; closes #683
16
+ ([`2711164`](https://github.com/bec-project/bec_widgets/commit/271116453d1ef5316b19457d04613b6ddc939cdb))
17
+
18
+ ### Build System
19
+
20
+ - Update min dependency of bec to 3.38
21
+ ([`3740ac8`](https://github.com/bec-project/bec_widgets/commit/3740ac8e325a489d59faca648896ffcea29e1a02))
22
+
23
+
4
24
  ## v2.12.2 (2025-06-05)
5
25
 
6
26
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.12.2
3
+ Version: 2.12.3
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
@@ -9,8 +9,8 @@ Classifier: Development Status :: 3 - Alpha
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Topic :: Scientific/Engineering
11
11
  Requires-Python: >=3.10
12
- Requires-Dist: bec-ipython-client<=4.0,>=2.21.4
13
- Requires-Dist: bec-lib<=4.0,>=3.29
12
+ Requires-Dist: bec-ipython-client<=4.0,>=3.38
13
+ Requires-Dist: bec-lib<=4.0,>=3.38
14
14
  Requires-Dist: bec-qthemes>=0.7,~=0.7
15
15
  Requires-Dist: black~=25.0
16
16
  Requires-Dist: isort>=5.13.2,~=5.13
@@ -1459,12 +1459,12 @@ class Image(RPCBase):
1459
1459
  @rpc_call
1460
1460
  def image(
1461
1461
  self,
1462
- monitor: "str | None" = None,
1462
+ monitor: "str | tuple | None" = None,
1463
1463
  monitor_type: "Literal['auto', '1d', '2d']" = "auto",
1464
1464
  color_map: "str | None" = None,
1465
1465
  color_bar: "Literal['simple', 'full'] | None" = None,
1466
1466
  vrange: "tuple[int, int] | None" = None,
1467
- ) -> "ImageItem":
1467
+ ) -> "ImageItem | None":
1468
1468
  """
1469
1469
  Set the image source and update the image.
1470
1470
 
@@ -458,7 +458,7 @@ class Crosshair(QObject):
458
458
  )
459
459
  self.coordinatesClicked1D.emit(coordinate_to_emit)
460
460
  elif isinstance(item, pg.ImageItem):
461
- name = item.config.monitor or str(id(item))
461
+ name = item.objectName() or str(id(item))
462
462
  x, y = x_snap_values[name], y_snap_values[name]
463
463
  if x is None or y is None:
464
464
  continue
@@ -149,6 +149,25 @@ class DeviceComboBox(DeviceInputBase, QComboBox):
149
149
  self._is_valid_input = False
150
150
  self.update()
151
151
 
152
+ def validate_device(self, device: str) -> bool: # type: ignore[override]
153
+ """
154
+ Extend validation so that preview‑signal pseudo‑devices (labels like
155
+ ``"eiger_preview"``) are accepted as valid choices.
156
+
157
+ The validation run only on device not on the preview‑signal.
158
+
159
+ Args:
160
+ device: The text currently entered/selected.
161
+
162
+ Returns:
163
+ True if the device is a genuine BEC device *or* one of the
164
+ whitelisted preview‑signal entries.
165
+ """
166
+ idx = self.findText(device)
167
+ if idx >= 0 and isinstance(self.itemData(idx), tuple):
168
+ device = self.itemData(idx)[0] # type: ignore[assignment]
169
+ return super().validate_device(device)
170
+
152
171
 
153
172
  if __name__ == "__main__": # pragma: no cover
154
173
  # pylint: disable=import-outside-toplevel
@@ -35,7 +35,7 @@ class ImageConfig(ConnectionConfig):
35
35
 
36
36
 
37
37
  class ImageLayerConfig(BaseModel):
38
- monitor: str | None = Field(None, description="The name of the monitor.")
38
+ monitor: str | tuple | None = Field(None, description="The name of the monitor.")
39
39
  monitor_type: Literal["1d", "2d", "auto"] = Field("auto", description="The type of monitor.")
40
40
  source: Literal["device_monitor_1d", "device_monitor_2d", "auto"] = Field(
41
41
  "auto", description="The source of the image data."
@@ -179,12 +179,12 @@ class Image(ImageBase):
179
179
  @SafeSlot(popup_error=True)
180
180
  def image(
181
181
  self,
182
- monitor: str | None = None,
182
+ monitor: str | tuple | None = None,
183
183
  monitor_type: Literal["auto", "1d", "2d"] = "auto",
184
184
  color_map: str | None = None,
185
185
  color_bar: Literal["simple", "full"] | None = None,
186
186
  vrange: tuple[int, int] | None = None,
187
- ) -> ImageItem:
187
+ ) -> ImageItem | None:
188
188
  """
189
189
  Set the image source and update the image.
190
190
 
@@ -201,21 +201,13 @@ class Image(ImageBase):
201
201
 
202
202
  if self.subscriptions["main"].monitor:
203
203
  self.disconnect_monitor(self.subscriptions["main"].monitor)
204
- self.entry_validator.validate_monitor(monitor)
205
- self.subscriptions["main"].monitor = monitor
206
-
207
- if monitor_type == "1d":
208
- self.subscriptions["main"].source = "device_monitor_1d"
209
- self.subscriptions["main"].monitor_type = "1d"
210
- elif monitor_type == "2d":
211
- self.subscriptions["main"].source = "device_monitor_2d"
212
- self.subscriptions["main"].monitor_type = "2d"
213
- elif monitor_type == "auto":
214
- self.subscriptions["main"].source = "auto"
215
- logger.warning(
216
- f"Updates for '{monitor}' will be fetch from both 1D and 2D monitor endpoints."
217
- )
218
- self.subscriptions["main"].monitor_type = "auto"
204
+ if monitor is None or monitor == "":
205
+ logger.warning(f"No monitor specified, cannot set image, old monitor is unsubscribed")
206
+ return None
207
+ if isinstance(monitor, tuple):
208
+ self.entry_validator.validate_monitor(monitor[0])
209
+ else:
210
+ self.entry_validator.validate_monitor(monitor)
219
211
 
220
212
  self.set_image_update(monitor=monitor, type=monitor_type)
221
213
  if color_map is not None:
@@ -240,7 +232,12 @@ class Image(ImageBase):
240
232
  self.selection_bundle.dim_combo_box,
241
233
  ):
242
234
  combo.blockSignals(True)
243
- self.selection_bundle.device_combo_box.set_device(config.monitor)
235
+ if isinstance(config.monitor, tuple):
236
+ self.selection_bundle.device_combo_box.setCurrentText(
237
+ f"{config.monitor[0]}_{config.monitor[1]}"
238
+ )
239
+ else:
240
+ self.selection_bundle.device_combo_box.setCurrentText(config.monitor)
244
241
  self.selection_bundle.dim_combo_box.setCurrentText(config.monitor_type)
245
242
  for combo in (
246
243
  self.selection_bundle.device_combo_box,
@@ -340,7 +337,8 @@ class Image(ImageBase):
340
337
  ########################################
341
338
  # Connections
342
339
 
343
- def set_image_update(self, monitor: str, type: Literal["1d", "2d", "auto"]):
340
+ @SafeSlot()
341
+ def set_image_update(self, monitor: str | tuple, type: Literal["1d", "2d", "auto"]):
344
342
  """
345
343
  Set the image update method for the given monitor.
346
344
 
@@ -350,37 +348,95 @@ class Image(ImageBase):
350
348
  """
351
349
 
352
350
  # TODO consider moving connecting and disconnecting logic to Image itself if multiple images
353
- if type == "1d":
354
- self.bec_dispatcher.connect_slot(
355
- self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
356
- )
357
- elif type == "2d":
358
- self.bec_dispatcher.connect_slot(
359
- self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
360
- )
361
- elif type == "auto":
362
- self.bec_dispatcher.connect_slot(
363
- self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
364
- )
365
- self.bec_dispatcher.connect_slot(
366
- self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
367
- )
351
+ if isinstance(monitor, tuple):
352
+ device = self.dev[monitor[0]]
353
+ signal = monitor[1]
354
+ if len(monitor) == 3:
355
+ signal_config = monitor[2]
356
+ else:
357
+ signal_config = device._info["signals"][signal]
358
+ signal_class = signal_config.get("signal_class", None)
359
+ if signal_class != "PreviewSignal":
360
+ logger.warning(f"Signal '{monitor}' is not a PreviewSignal.")
361
+ return
362
+
363
+ ndim = signal_config.get("describe", None).get("signal_info", None).get("ndim", None)
364
+ if ndim is None:
365
+ logger.warning(
366
+ f"Signal '{monitor}' does not have a valid 'ndim' in its signal_info."
367
+ )
368
+ return
369
+
370
+ if ndim == 1:
371
+ self.bec_dispatcher.connect_slot(
372
+ self.on_image_update_1d, MessageEndpoints.device_preview(device.name, signal)
373
+ )
374
+ self.subscriptions["main"].source = "device_monitor_1d"
375
+ self.subscriptions["main"].monitor_type = "1d"
376
+ elif ndim == 2:
377
+ self.bec_dispatcher.connect_slot(
378
+ self.on_image_update_2d, MessageEndpoints.device_preview(device.name, signal)
379
+ )
380
+ self.subscriptions["main"].source = "device_monitor_2d"
381
+ self.subscriptions["main"].monitor_type = "2d"
382
+
383
+ else: # FIXME old monitor 1d/2d endpoint handling, present for backwards compatibility, will be removed in future versions
384
+ if type == "1d":
385
+ self.bec_dispatcher.connect_slot(
386
+ self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
387
+ )
388
+ self.subscriptions["main"].source = "device_monitor_1d"
389
+ self.subscriptions["main"].monitor_type = "1d"
390
+ elif type == "2d":
391
+ self.bec_dispatcher.connect_slot(
392
+ self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
393
+ )
394
+ self.subscriptions["main"].source = "device_monitor_2d"
395
+ self.subscriptions["main"].monitor_type = "2d"
396
+ elif type == "auto":
397
+ self.bec_dispatcher.connect_slot(
398
+ self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
399
+ )
400
+ self.bec_dispatcher.connect_slot(
401
+ self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
402
+ )
403
+ self.subscriptions["main"].source = "auto"
404
+ logger.warning(
405
+ f"Updates for '{monitor}' will be fetch from both 1D and 2D monitor endpoints."
406
+ )
407
+ self.subscriptions["main"].monitor_type = "auto"
408
+
368
409
  logger.info(f"Connected to {monitor} with type {type}")
369
410
  self.subscriptions["main"].monitor = monitor
370
411
 
371
- def disconnect_monitor(self, monitor: str):
412
+ def disconnect_monitor(self, monitor: str | tuple):
372
413
  """
373
414
  Disconnect the monitor from the image update signals, both 1D and 2D.
374
415
 
375
416
  Args:
376
- monitor(str): The name of the monitor to disconnect.
377
- """
378
- self.bec_dispatcher.disconnect_slot(
379
- self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
380
- )
381
- self.bec_dispatcher.disconnect_slot(
382
- self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
383
- )
417
+ monitor(str|tuple): The name of the monitor to disconnect, or a tuple of (device, signal) for preview signals.
418
+ """
419
+ if isinstance(monitor, tuple):
420
+ if self.subscriptions["main"].source == "device_monitor_1d":
421
+ self.bec_dispatcher.disconnect_slot(
422
+ self.on_image_update_1d, MessageEndpoints.device_preview(monitor[0], monitor[1])
423
+ )
424
+ elif self.subscriptions["main"].source == "device_monitor_2d":
425
+ self.bec_dispatcher.disconnect_slot(
426
+ self.on_image_update_2d, MessageEndpoints.device_preview(monitor[0], monitor[1])
427
+ )
428
+ else:
429
+ logger.warning(
430
+ f"Cannot disconnect monitor {monitor} with source {self.subscriptions['main'].source}"
431
+ )
432
+ return
433
+ else: # FIXME old monitor 1d/2d endpoint handling, present for backwards compatibility, will be removed in future versions
434
+ self.bec_dispatcher.disconnect_slot(
435
+ self.on_image_update_1d, MessageEndpoints.device_monitor_1d(monitor)
436
+ )
437
+ self.bec_dispatcher.disconnect_slot(
438
+ self.on_image_update_2d, MessageEndpoints.device_monitor_2d(monitor)
439
+ )
384
440
  self.subscriptions["main"].monitor = None
385
441
  self._sync_device_selection()
386
442
 
@@ -0,0 +1,107 @@
1
+ from bec_lib.device import ReadoutPriority
2
+ from qtpy.QtCore import Qt, QTimer
3
+ from qtpy.QtWidgets import QComboBox, QStyledItemDelegate
4
+
5
+ from bec_widgets.utils.error_popups import SafeSlot
6
+ from bec_widgets.utils.toolbar import ToolbarBundle, WidgetAction
7
+ from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter
8
+ from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
9
+
10
+
11
+ class NoCheckDelegate(QStyledItemDelegate):
12
+ """To reduce space in combo boxes by removing the checkmark."""
13
+
14
+ def initStyleOption(self, option, index):
15
+ super().initStyleOption(option, index)
16
+ # Remove any check indicator
17
+ option.checkState = Qt.Unchecked
18
+
19
+
20
+ class MonitorSelectionToolbarBundle(ToolbarBundle):
21
+ """
22
+ A bundle of actions for a toolbar that controls monitor selection on a plot.
23
+ """
24
+
25
+ def __init__(self, bundle_id="device_selection", target_widget=None, **kwargs):
26
+ super().__init__(bundle_id=bundle_id, actions=[], **kwargs)
27
+ self.target_widget = target_widget
28
+
29
+ # 1) Device combo box
30
+ self.device_combo_box = DeviceComboBox(
31
+ parent=self.target_widget,
32
+ device_filter=BECDeviceFilter.DEVICE,
33
+ readout_priority_filter=[ReadoutPriority.ASYNC],
34
+ )
35
+ self.device_combo_box.addItem("", None)
36
+ self.device_combo_box.setCurrentText("")
37
+ self.device_combo_box.setToolTip("Select Device")
38
+ self.device_combo_box.setFixedWidth(150)
39
+ self.device_combo_box.setItemDelegate(NoCheckDelegate(self.device_combo_box))
40
+
41
+ self.add_action("monitor", WidgetAction(widget=self.device_combo_box, adjust_size=False))
42
+
43
+ # 2) Dimension combo box
44
+ self.dim_combo_box = QComboBox(parent=self.target_widget)
45
+ self.dim_combo_box.addItems(["auto", "1d", "2d"])
46
+ self.dim_combo_box.setCurrentText("auto")
47
+ self.dim_combo_box.setToolTip("Monitor Dimension")
48
+ self.dim_combo_box.setFixedWidth(100)
49
+ self.dim_combo_box.setItemDelegate(NoCheckDelegate(self.dim_combo_box))
50
+
51
+ self.add_action("dim_combo", WidgetAction(widget=self.dim_combo_box, adjust_size=False))
52
+
53
+ self.device_combo_box.currentTextChanged.connect(self.connect_monitor)
54
+ self.dim_combo_box.currentTextChanged.connect(self.connect_monitor)
55
+
56
+ QTimer.singleShot(0, self._adjust_and_connect)
57
+
58
+ def _adjust_and_connect(self):
59
+ """
60
+ Adjust the size of the device combo box and populate it with preview signals.
61
+ Has to be done with QTimer.singleShot to ensure the UI is fully initialized, needed for testing.
62
+ """
63
+ self._populate_preview_signals()
64
+ self._reverse_device_items()
65
+ self.device_combo_box.setCurrentText("") # set again default to empty string
66
+
67
+ def _populate_preview_signals(self) -> None:
68
+ """
69
+ Populate the device combo box with preview‑signal devices in the
70
+ format '<device>_<signal>' and store the tuple(device, signal) in
71
+ the item's userData for later use.
72
+ """
73
+ preview_signals = self.target_widget.client.device_manager.get_bec_signals("PreviewSignal")
74
+ for device, signal, signal_config in preview_signals:
75
+ label = signal_config.get("obj_name", f"{device}_{signal}")
76
+ self.device_combo_box.addItem(label, (device, signal, signal_config))
77
+
78
+ def _reverse_device_items(self) -> None:
79
+ """
80
+ Reverse the current order of items in the device combo box while
81
+ keeping their userData and restoring the previous selection.
82
+ """
83
+ current_text = self.device_combo_box.currentText()
84
+ items = [
85
+ (self.device_combo_box.itemText(i), self.device_combo_box.itemData(i))
86
+ for i in range(self.device_combo_box.count())
87
+ ]
88
+ self.device_combo_box.clear()
89
+ for text, data in reversed(items):
90
+ self.device_combo_box.addItem(text, data)
91
+ if current_text:
92
+ self.device_combo_box.setCurrentText(current_text)
93
+
94
+ @SafeSlot()
95
+ def connect_monitor(self, *args, **kwargs):
96
+ """
97
+ Connect the target widget to the selected monitor based on the current device and dimension.
98
+
99
+ If the selected device is a preview-signal device, it will use the tuple (device, signal) as the monitor.
100
+ """
101
+ dim = self.dim_combo_box.currentText()
102
+ data = self.device_combo_box.currentData()
103
+
104
+ if isinstance(data, tuple):
105
+ self.target_widget.image(monitor=data, monitor_type="auto")
106
+ else:
107
+ self.target_widget.image(monitor=self.device_combo_box.currentText(), monitor_type=dim)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "2.12.2"
7
+ version = "2.12.3"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -13,15 +13,15 @@ classifiers = [
13
13
  "Topic :: Scientific/Engineering",
14
14
  ]
15
15
  dependencies = [
16
- "bec_ipython_client>=2.21.4, <=4.0", # needed for jupyter console
17
- "bec_lib>=3.29, <=4.0",
16
+ "bec_ipython_client>=3.38, <=4.0", # needed for jupyter console
17
+ "bec_lib>=3.38, <=4.0",
18
18
  "bec_qthemes~=0.7, >=0.7",
19
- "black~=25.0", # needed for bw-generate-cli
20
- "isort~=5.13, >=5.13.2", # needed for bw-generate-cli
19
+ "black~=25.0", # needed for bw-generate-cli
20
+ "isort~=5.13, >=5.13.2", # needed for bw-generate-cli
21
21
  "pydantic~=2.0",
22
22
  "pyqtgraph~=0.13",
23
23
  "PySide6~=6.8.2",
24
- "qtconsole~=5.5, >=5.5.1", # needed for jupyter console
24
+ "qtconsole~=5.5, >=5.5.1", # needed for jupyter console
25
25
  "qtpy~=2.4",
26
26
  ]
27
27
 
@@ -1,60 +0,0 @@
1
- from bec_lib.device import ReadoutPriority
2
- from qtpy.QtCore import Qt
3
- from qtpy.QtWidgets import QComboBox, QStyledItemDelegate
4
-
5
- from bec_widgets.utils.error_popups import SafeSlot
6
- from bec_widgets.utils.toolbar import ToolbarBundle, WidgetAction
7
- from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter
8
- from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
9
-
10
-
11
- class NoCheckDelegate(QStyledItemDelegate):
12
- """To reduce space in combo boxes by removing the checkmark."""
13
-
14
- def initStyleOption(self, option, index):
15
- super().initStyleOption(option, index)
16
- # Remove any check indicator
17
- option.checkState = Qt.Unchecked
18
-
19
-
20
- class MonitorSelectionToolbarBundle(ToolbarBundle):
21
- """
22
- A bundle of actions for a toolbar that controls monitor selection on a plot.
23
- """
24
-
25
- def __init__(self, bundle_id="device_selection", target_widget=None, **kwargs):
26
- super().__init__(bundle_id=bundle_id, actions=[], **kwargs)
27
- self.target_widget = target_widget
28
-
29
- # 1) Device combo box
30
- self.device_combo_box = DeviceComboBox(
31
- parent=self.target_widget,
32
- device_filter=BECDeviceFilter.DEVICE,
33
- readout_priority_filter=[ReadoutPriority.ASYNC],
34
- )
35
- self.device_combo_box.addItem("", None)
36
- self.device_combo_box.setCurrentText("")
37
- self.device_combo_box.setToolTip("Select Device")
38
- self.device_combo_box.setFixedWidth(150)
39
- self.device_combo_box.setItemDelegate(NoCheckDelegate(self.device_combo_box))
40
-
41
- self.add_action("monitor", WidgetAction(widget=self.device_combo_box, adjust_size=False))
42
-
43
- # 2) Dimension combo box
44
- self.dim_combo_box = QComboBox(parent=self.target_widget)
45
- self.dim_combo_box.addItems(["auto", "1d", "2d"])
46
- self.dim_combo_box.setCurrentText("auto")
47
- self.dim_combo_box.setToolTip("Monitor Dimension")
48
- self.dim_combo_box.setFixedWidth(100)
49
- self.dim_combo_box.setItemDelegate(NoCheckDelegate(self.dim_combo_box))
50
-
51
- self.add_action("dim_combo", WidgetAction(widget=self.dim_combo_box, adjust_size=False))
52
-
53
- # Connect slots, a device will be connected upon change of any combobox
54
- self.device_combo_box.currentTextChanged.connect(lambda: self.connect_monitor())
55
- self.dim_combo_box.currentTextChanged.connect(lambda: self.connect_monitor())
56
-
57
- @SafeSlot()
58
- def connect_monitor(self):
59
- dim = self.dim_combo_box.currentText()
60
- self.target_widget.image(monitor=self.device_combo_box.currentText(), monitor_type=dim)
File without changes
File without changes
File without changes
File without changes