bec-widgets 2.18.0__tar.gz → 2.19.1__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 (422) hide show
  1. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/formatter.yml +1 -1
  2. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/CHANGELOG.md +27 -0
  3. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/PKG-INFO +1 -1
  4. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/applications/launch_window.py +1 -1
  5. bec_widgets-2.19.1/bec_widgets/widgets/containers/main_window/addons/hover_widget.py +115 -0
  6. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/main_window/main_window.py +59 -29
  7. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +25 -5
  8. bec_widgets-2.19.1/bec_widgets/widgets/services/device_browser/device_item/device_signal_display.py +102 -0
  9. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/signal_label/signal_label.py +24 -10
  10. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/pyproject.toml +1 -1
  11. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.git_hooks/pre-commit +0 -0
  12. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  13. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
  14. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  15. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/actions/bw_install/action.yml +0 -0
  16. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/pull_request_template.md +0 -0
  17. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
  18. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
  19. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/check_pr.yml +0 -0
  20. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/ci.yml +0 -0
  21. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/end2end-conda.yml +0 -0
  22. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/generate-cli-check.yml +0 -0
  23. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/pytest-matrix.yml +0 -0
  24. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/pytest.yml +0 -0
  25. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/semantic_release.yml +0 -0
  26. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/stale-issues.yml +0 -0
  27. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.github/workflows/sync-issues-pr.yml +0 -0
  28. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.gitignore +0 -0
  29. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.gitlab-ci.yml +0 -0
  30. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.pylintrc +0 -0
  31. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/.readthedocs.yaml +0 -0
  32. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/LICENSE +0 -0
  33. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/README.md +0 -0
  34. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/__init__.py +0 -0
  35. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/applications/__init__.py +0 -0
  36. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/applications/bw_launch.py +0 -0
  37. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  38. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  39. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/assets/app_icons/auto_update.png +0 -0
  40. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  41. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
  42. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
  43. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/__init__.py +0 -0
  44. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/client.py +0 -0
  45. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/client_utils.py +0 -0
  46. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/generate_cli.py +0 -0
  47. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/rpc/__init__.py +0 -0
  48. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/rpc/rpc_base.py +0 -0
  49. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/rpc/rpc_register.py +0 -0
  50. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/rpc/rpc_widget_handler.py +0 -0
  51. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/cli/server.py +0 -0
  52. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/__init__.py +0 -0
  53. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/general_app/__init__.py +0 -0
  54. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/general_app/general_app.py +0 -0
  55. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/general_app/general_app.ui +0 -0
  56. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/general_app/web_links.py +0 -0
  57. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  58. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  59. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  60. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  61. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  62. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  63. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  64. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  65. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  66. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/tests/__init__.py +0 -0
  67. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/tests/utils.py +0 -0
  68. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/__init__.py +0 -0
  69. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_connector.py +0 -0
  70. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_designer.py +0 -0
  71. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_dispatcher.py +0 -0
  72. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_plugin_helper.py +0 -0
  73. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  74. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_table.py +0 -0
  75. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/bec_widget.py +0 -0
  76. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/clickable_label.py +0 -0
  77. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
  78. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/colors.py +0 -0
  79. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/compact_popup.py +0 -0
  80. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/container_utils.py +0 -0
  81. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/crosshair.py +0 -0
  82. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/entry_validator.py +0 -0
  83. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/error_popups.py +0 -0
  84. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/expandable_frame.py +0 -0
  85. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/filter_io.py +0 -0
  86. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
  87. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/forms_from_types/forms.py +0 -0
  88. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/forms_from_types/items.py +0 -0
  89. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/forms_from_types/styles.py +0 -0
  90. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/fps_counter.py +0 -0
  91. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  92. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/layout_manager.py +0 -0
  93. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/linear_region_selector.py +0 -0
  94. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/name_utils.py +0 -0
  95. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/ophyd_kind_util.py +0 -0
  96. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/palette_viewer.py +0 -0
  97. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/plot_indicator_items.py +0 -0
  98. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  99. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/plugin_templates/register.template +0 -0
  100. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/plugin_utils.py +0 -0
  101. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/redis_message_waiter.py +0 -0
  102. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/reference_utils.py +0 -0
  103. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/round_frame.py +0 -0
  104. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/rpc_decorator.py +0 -0
  105. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/rpc_server.py +0 -0
  106. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/serialization.py +0 -0
  107. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/settings_dialog.py +0 -0
  108. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/side_panel.py +0 -0
  109. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/thread_checker.py +0 -0
  110. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/toolbar.py +0 -0
  111. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/ui_loader.py +0 -0
  112. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/validator_delegate.py +0 -0
  113. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/widget_io.py +0 -0
  114. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/widget_state_manager.py +0 -0
  115. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/utils/yaml_dialog.py +0 -0
  116. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/__init__.py +0 -0
  117. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/__init__.py +0 -0
  118. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
  119. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
  120. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
  121. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/dock/dock.py +0 -0
  122. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
  123. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
  124. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
  125. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
  126. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
  127. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
  128. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
  129. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
  130. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/main_window/addons/scroll_label.py +0 -0
  131. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
  132. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/__init__.py +0 -0
  133. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
  134. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
  135. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
  136. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
  137. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
  138. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
  139. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
  140. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
  141. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
  142. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
  143. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
  144. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
  145. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
  146. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
  147. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
  148. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
  149. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
  150. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
  151. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
  152. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
  153. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
  154. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
  155. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
  156. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
  157. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
  158. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
  159. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
  160. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
  161. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
  162. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
  163. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
  164. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
  165. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
  166. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
  167. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
  168. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
  169. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
  170. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
  171. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
  172. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
  173. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
  174. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
  175. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
  176. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
  177. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
  178. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
  179. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
  180. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
  181. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
  182. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
  183. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
  184. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
  185. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
  186. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
  187. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +0 -0
  188. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +0 -0
  189. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
  190. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
  191. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
  192. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +0 -0
  193. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
  194. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
  195. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
  196. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
  197. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
  198. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
  199. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
  200. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
  201. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
  202. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
  203. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +0 -0
  204. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
  205. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
  206. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
  207. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
  208. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
  209. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
  210. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
  211. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
  212. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
  213. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
  214. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
  215. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/__init__.py +0 -0
  216. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
  217. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
  218. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
  219. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
  220. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
  221. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
  222. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  223. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  224. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
  225. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  226. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  227. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  228. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/__init__.py +0 -0
  229. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
  230. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
  231. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
  232. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
  233. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
  234. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
  235. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
  236. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
  237. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
  238. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
  239. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
  240. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
  241. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
  242. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
  243. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
  244. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
  245. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
  246. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
  247. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
  248. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
  249. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
  250. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
  251. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
  252. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/website/__init__.py +0 -0
  253. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
  254. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/website/website.py +0 -0
  255. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
  256. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
  257. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/games/__init__.py +0 -0
  258. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/games/minesweeper.py +0 -0
  259. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
  260. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
  261. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
  262. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/__init__.py +0 -0
  263. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/__init__.py +0 -0
  264. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image.py +0 -0
  265. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
  266. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image_base.py +0 -0
  267. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image_item.py +0 -0
  268. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
  269. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
  270. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/image_roi_plot.py +0 -0
  271. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/register_image.py +0 -0
  272. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
  273. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +0 -0
  274. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
  275. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +0 -0
  276. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
  277. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
  278. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
  279. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
  280. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
  281. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
  282. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
  283. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
  284. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
  285. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
  286. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
  287. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
  288. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +0 -0
  289. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
  290. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
  291. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
  292. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
  293. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
  294. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
  295. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
  296. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
  297. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/plot_base.py +0 -0
  298. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
  299. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/roi/image_roi.py +0 -0
  300. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
  301. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
  302. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
  303. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +0 -0
  304. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
  305. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
  306. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
  307. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
  308. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
  309. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
  310. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
  311. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +0 -0
  312. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +0 -0
  313. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +0 -0
  314. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
  315. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +0 -0
  316. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
  317. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
  318. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
  319. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
  320. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
  321. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
  322. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
  323. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
  324. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +0 -0
  325. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +0 -0
  326. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
  327. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
  328. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/waveform.py +0 -0
  329. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
  330. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
  331. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/__init__.py +0 -0
  332. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
  333. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
  334. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  335. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
  336. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
  337. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
  338. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
  339. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
  340. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
  341. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  342. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  343. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/__init__.py +0 -0
  344. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/register_scan_progress_bar.py +0 -0
  345. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/scan_progress_bar.pyproject +0 -0
  346. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/scan_progress_bar_plugin.py +0 -0
  347. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/scan_progressbar.py +0 -0
  348. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/scan_progressbar.ui +0 -0
  349. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/progress/scan_progressbar/scan_progressbar_one_line.ui +0 -0
  350. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/__init__.py +0 -0
  351. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
  352. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
  353. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
  354. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
  355. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
  356. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
  357. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
  358. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
  359. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
  360. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
  361. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
  362. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
  363. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
  364. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
  365. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
  366. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
  367. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
  368. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_item/device_config_dialog.py +0 -0
  369. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/device_item/device_config_form.py +0 -0
  370. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
  371. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/services/device_browser/util.py +0 -0
  372. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/__init__.py +0 -0
  373. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
  374. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
  375. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
  376. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
  377. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
  378. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
  379. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/signal_label/register_signal_label.py +0 -0
  380. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/signal_label/signal_label.pyproject +0 -0
  381. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/signal_label/signal_label_plugin.py +0 -0
  382. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
  383. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
  384. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
  385. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
  386. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
  387. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
  388. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
  389. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
  390. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
  391. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
  392. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
  393. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
  394. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
  395. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
  396. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
  397. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
  398. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
  399. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
  400. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
  401. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
  402. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
  403. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
  404. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +0 -0
  405. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
  406. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
  407. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
  408. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
  409. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
  410. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
  411. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
  412. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
  413. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
  414. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
  415. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
  416. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
  417. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
  418. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
  419. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
  420. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
  421. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
  422. {bec_widgets-2.18.0 → bec_widgets-2.19.1}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -21,7 +21,7 @@ jobs:
21
21
  isort --check --diff ./
22
22
 
23
23
  - name: Check for disallowed imports from PySide
24
- run: '! grep -re "from PySide6\." bec_widgets/ | grep -v -e "PySide6.QtDesigner" -e "PySide6.scripts"'
24
+ run: '! grep -re "from PySide6\." bec_widgets/ tests/ | grep -v -e "PySide6.QtDesigner" -e "PySide6.scripts"'
25
25
 
26
26
  Pylint:
27
27
  runs-on: ubuntu-latest
@@ -1,6 +1,33 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.19.1 (2025-06-23)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **launch_window**: Number of remaining connections extended to 4
9
+ ([`7484f51`](https://github.com/bec-project/bec_widgets/commit/7484f5160c8c6d632fd27996035ff6c0dda2e657))
10
+
11
+
12
+ ## v2.19.0 (2025-06-23)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **ci**: Extend check for pyside import to tests
17
+ ([`d5a40da`](https://github.com/bec-project/bec_widgets/commit/d5a40dabc74753acad05e3eb6b121499fc1e03d7))
18
+
19
+ ### Features
20
+
21
+ - (#494) add signal display to device browser
22
+ ([`f3da6e9`](https://github.com/bec-project/bec_widgets/commit/f3da6e959e0416827ee5d02e34e6ad0ecfc8e5e7))
23
+
24
+ - (#494) add tabbed layout for device item
25
+ ([`3378051`](https://github.com/bec-project/bec_widgets/commit/337805125098c3e028a17b74ef6d9ae4b9ba3d6d))
26
+
27
+ - (#494) display device signals
28
+ ([`3a10341`](https://github.com/bec-project/bec_widgets/commit/3a103410e7448256a56b59bb3276fee056ec42a0))
29
+
30
+
4
31
  ## v2.18.0 (2025-06-22)
5
32
 
6
33
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.18.0
3
+ Version: 2.19.1
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
@@ -542,7 +542,7 @@ class LaunchWindow(BECMainWindow):
542
542
  remaining_connections = [
543
543
  connection for connection in connections.values() if connection.parent_id != self.gui_id
544
544
  ]
545
- return len(remaining_connections) <= 2
545
+ return len(remaining_connections) <= 4
546
546
 
547
547
  def _turn_off_the_lights(self, connections: dict):
548
548
  """
@@ -0,0 +1,115 @@
1
+ import sys
2
+
3
+ from qtpy.QtCore import QPoint, Qt
4
+ from qtpy.QtWidgets import QApplication, QHBoxLayout, QLabel, QProgressBar, QVBoxLayout, QWidget
5
+
6
+
7
+ class WidgetTooltip(QWidget):
8
+ """Frameless, always-on-top window that behaves like a tooltip."""
9
+
10
+ def __init__(self, content: QWidget) -> None:
11
+ super().__init__(None, Qt.ToolTip | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
12
+ self.setAttribute(Qt.WA_ShowWithoutActivating)
13
+ self.setMouseTracking(True)
14
+ self.content = content
15
+
16
+ layout = QVBoxLayout(self)
17
+ layout.setContentsMargins(6, 6, 6, 6)
18
+ layout.addWidget(self.content)
19
+ self.adjustSize()
20
+
21
+ def leaveEvent(self, _event) -> None:
22
+ self.hide()
23
+
24
+ def show_above(self, global_pos: QPoint, offset: int = 8) -> None:
25
+ self.adjustSize()
26
+ screen = QApplication.screenAt(global_pos) or QApplication.primaryScreen()
27
+ screen_geo = screen.availableGeometry()
28
+ geom = self.geometry()
29
+
30
+ x = global_pos.x() - geom.width() // 2
31
+ y = global_pos.y() - geom.height() - offset
32
+
33
+ x = max(screen_geo.left(), min(x, screen_geo.right() - geom.width()))
34
+ y = max(screen_geo.top(), min(y, screen_geo.bottom() - geom.height()))
35
+
36
+ self.move(x, y)
37
+ self.show()
38
+
39
+
40
+ class HoverWidget(QWidget):
41
+
42
+ def __init__(self, parent: QWidget | None = None, *, simple: QWidget, full: QWidget):
43
+ super().__init__(parent)
44
+ self._simple = simple
45
+ self._full = full
46
+ self._full.setVisible(False)
47
+ self._tooltip = None
48
+
49
+ lay = QVBoxLayout(self)
50
+ lay.setContentsMargins(0, 0, 0, 0)
51
+ lay.addWidget(simple)
52
+
53
+ def enterEvent(self, event):
54
+ # suppress empty-label tooltips for labels
55
+ if isinstance(self._full, QLabel) and not self._full.text():
56
+ return
57
+
58
+ if self._tooltip is None: # first time only
59
+ self._tooltip = WidgetTooltip(self._full)
60
+ self._full.setVisible(True)
61
+
62
+ centre = self.mapToGlobal(self.rect().center())
63
+ self._tooltip.show_above(centre)
64
+ super().enterEvent(event)
65
+
66
+ def leaveEvent(self, event):
67
+ if self._tooltip and self._tooltip.isVisible():
68
+ self._tooltip.hide()
69
+ super().leaveEvent(event)
70
+
71
+ def close(self):
72
+ if self._tooltip:
73
+ self._tooltip.close()
74
+ self._tooltip.deleteLater()
75
+ self._tooltip = None
76
+ super().close()
77
+
78
+
79
+ ################################################################################
80
+ # Demo
81
+ # Just a simple example to show how the HoverWidget can be used to display
82
+ # a tooltip with a full widget inside (two different widgets are used
83
+ # for the simple and full versions).
84
+ ################################################################################
85
+
86
+
87
+ class DemoSimpleWidget(QLabel): # pragma: no cover
88
+ """A simple widget to be used as a trigger for the tooltip."""
89
+
90
+ def __init__(self) -> None:
91
+ super().__init__()
92
+ self.setText("Hover me for a preview!")
93
+
94
+
95
+ class DemoFullWidget(QProgressBar): # pragma: no cover
96
+ """A full widget to be shown in the tooltip."""
97
+
98
+ def __init__(self) -> None:
99
+ super().__init__()
100
+ self.setRange(0, 100)
101
+ self.setValue(75)
102
+ self.setFixedWidth(320)
103
+ self.setFixedHeight(30)
104
+
105
+
106
+ if __name__ == "__main__": # pragma: no cover
107
+ app = QApplication(sys.argv)
108
+
109
+ window = QWidget()
110
+ window.layout = QHBoxLayout(window)
111
+ hover_widget = HoverWidget(simple=DemoSimpleWidget(), full=DemoFullWidget())
112
+ window.layout.addWidget(hover_widget)
113
+ window.show()
114
+
115
+ sys.exit(app.exec_())
@@ -3,15 +3,7 @@ from __future__ import annotations
3
3
  import os
4
4
 
5
5
  from bec_lib.endpoints import MessageEndpoints
6
- from qtpy.QtCore import (
7
- QAbstractAnimation,
8
- QEasingCurve,
9
- QEvent,
10
- QPropertyAnimation,
11
- QSize,
12
- Qt,
13
- QTimer,
14
- )
6
+ from qtpy.QtCore import QEasingCurve, QEvent, QPropertyAnimation, QSize, Qt, QTimer
15
7
  from qtpy.QtGui import QAction, QActionGroup, QIcon
16
8
  from qtpy.QtWidgets import (
17
9
  QApplication,
@@ -30,6 +22,7 @@ from bec_widgets.utils.bec_widget import BECWidget
30
22
  from bec_widgets.utils.colors import apply_theme
31
23
  from bec_widgets.utils.error_popups import SafeSlot
32
24
  from bec_widgets.utils.widget_io import WidgetHierarchy
25
+ from bec_widgets.widgets.containers.main_window.addons.hover_widget import HoverWidget
33
26
  from bec_widgets.widgets.containers.main_window.addons.scroll_label import ScrollLabel
34
27
  from bec_widgets.widgets.containers.main_window.addons.web_links import BECWebLinksMixin
35
28
  from bec_widgets.widgets.progress.scan_progressbar.scan_progressbar import ScanProgressBar
@@ -96,33 +89,60 @@ class BECMainWindow(BECWidget, QMainWindow):
96
89
  self._add_separator()
97
90
 
98
91
  # Centre: Client‑info label (stretch=1 so it expands)
99
- self._client_info_label = ScrollLabel()
92
+ self._add_client_info_label()
93
+
94
+ # Add scan_progress bar with display logic
95
+ self._add_scan_progress_bar()
96
+
97
+ ################################################################################
98
+ # Client message status bar widget helpers
99
+
100
+ def _add_client_info_label(self):
101
+ """
102
+ Add a client info label to the status bar.
103
+ This label will display messages from the BEC dispatcher.
104
+ """
105
+
106
+ # Scroll label for client info in Status Bar
107
+ self._client_info_label = ScrollLabel(self)
100
108
  self._client_info_label.setAlignment(
101
109
  Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter
102
110
  )
103
- self.status_bar.addWidget(self._client_info_label, 1)
111
+ # Full label used in the hover widget
112
+ self._client_info_label_full = QLabel(self)
113
+ self._client_info_label_full.setAlignment(
114
+ Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter
115
+ )
116
+ # Hover widget to show the full client info label
117
+ self._client_info_hover = HoverWidget(
118
+ self, simple=self._client_info_label, full=self._client_info_label_full
119
+ )
120
+ self.status_bar.addWidget(self._client_info_hover, 1)
104
121
 
105
122
  # Timer to automatically clear client messages once they expire
106
123
  self._client_info_expire_timer = QTimer(self)
107
124
  self._client_info_expire_timer.setSingleShot(True)
108
125
  self._client_info_expire_timer.timeout.connect(lambda: self._client_info_label.setText(""))
109
-
110
- # Add scan_progress bar with display logic
111
- self._add_scan_progress_bar()
126
+ self._client_info_expire_timer.timeout.connect(
127
+ lambda: self._client_info_label_full.setText("")
128
+ )
112
129
 
113
130
  ################################################################################
114
131
  # Progress‑bar helpers
115
132
  def _add_scan_progress_bar(self):
116
133
 
117
- # --- Progress bar -------------------------------------------------
118
- # Scan progress bar minimalistic design setup
119
- self._scan_progress_bar = ScanProgressBar(self, one_line_design=True)
120
- self._scan_progress_bar.show_elapsed_time = False
121
- self._scan_progress_bar.show_remaining_time = False
122
- self._scan_progress_bar.show_source_label = False
123
- self._scan_progress_bar.progressbar.label_template = ""
124
- self._scan_progress_bar.progressbar.setFixedHeight(8)
125
- self._scan_progress_bar.progressbar.setFixedWidth(80)
134
+ # Setting HoverWidget for the scan progress bar - minimal and full version
135
+ self._scan_progress_bar_simple = ScanProgressBar(self, one_line_design=True)
136
+ self._scan_progress_bar_simple.show_elapsed_time = False
137
+ self._scan_progress_bar_simple.show_remaining_time = False
138
+ self._scan_progress_bar_simple.show_source_label = False
139
+ self._scan_progress_bar_simple.progressbar.label_template = ""
140
+ self._scan_progress_bar_simple.progressbar.setFixedHeight(8)
141
+ self._scan_progress_bar_simple.progressbar.setFixedWidth(80)
142
+ self._scan_progress_bar_full = ScanProgressBar(self)
143
+ self._scan_progress_hover = HoverWidget(
144
+ self, simple=self._scan_progress_bar_simple, full=self._scan_progress_bar_full
145
+ )
126
146
 
127
147
  # Bundle the progress bar with a separator
128
148
  separator = self._add_separator(separate_object=True)
@@ -133,7 +153,7 @@ class BECMainWindow(BECWidget, QMainWindow):
133
153
  self._scan_progress_bar_with_separator.layout.setContentsMargins(0, 0, 0, 0)
134
154
  self._scan_progress_bar_with_separator.layout.setSpacing(0)
135
155
  self._scan_progress_bar_with_separator.layout.addWidget(separator)
136
- self._scan_progress_bar_with_separator.layout.addWidget(self._scan_progress_bar)
156
+ self._scan_progress_bar_with_separator.layout.addWidget(self._scan_progress_hover)
137
157
 
138
158
  # Set Size
139
159
  self._scan_progress_bar_target_width = self.SCAN_PROGRESS_WIDTH
@@ -152,8 +172,8 @@ class BECMainWindow(BECWidget, QMainWindow):
152
172
  self._scan_progress_hide_timer.timeout.connect(self._animate_hide_scan_progress_bar)
153
173
 
154
174
  # Show / hide behaviour
155
- self._scan_progress_bar.progress_started.connect(self._show_scan_progress_bar)
156
- self._scan_progress_bar.progress_finished.connect(self._delay_hide_scan_progress_bar)
175
+ self._scan_progress_bar_simple.progress_started.connect(self._show_scan_progress_bar)
176
+ self._scan_progress_bar_simple.progress_finished.connect(self._delay_hide_scan_progress_bar)
157
177
 
158
178
  def _show_scan_progress_bar(self):
159
179
  if self._scan_progress_hide_timer.isActive():
@@ -342,10 +362,10 @@ class BECMainWindow(BECWidget, QMainWindow):
342
362
  msg(dict): The message to display, should contain:
343
363
  meta(dict): Metadata about the message, usually empty.
344
364
  """
345
- # self._client_info_label.setText("")
346
365
  message = msg.get("message", "")
347
366
  expiration = msg.get("expire", 0) # 0 → never expire
348
367
  self._client_info_label.setText(message)
368
+ self._client_info_label_full.setText(message)
349
369
 
350
370
  # Restart the expiration timer if necessary
351
371
  if hasattr(self, "_client_info_expire_timer") and self._client_info_expire_timer.isActive():
@@ -393,10 +413,20 @@ class BECMainWindow(BECWidget, QMainWindow):
393
413
  if hasattr(self, "_scan_progress_hide_timer") and self._scan_progress_hide_timer.isActive():
394
414
  self._scan_progress_hide_timer.stop()
395
415
 
416
+ ########################################
396
417
  # Status bar widgets cleanup
418
+
419
+ # Client info label cleanup
397
420
  self._client_info_label.cleanup()
398
- self._scan_progress_bar.close()
399
- self._scan_progress_bar.deleteLater()
421
+ self._client_info_hover.close()
422
+ self._client_info_hover.deleteLater()
423
+ # Scan progress bar cleanup
424
+ self._scan_progress_bar_simple.close()
425
+ self._scan_progress_bar_simple.deleteLater()
426
+ self._scan_progress_bar_full.close()
427
+ self._scan_progress_bar_full.deleteLater()
428
+ self._scan_progress_hover.close()
429
+ self._scan_progress_hover.deleteLater()
400
430
  super().cleanup()
401
431
 
402
432
 
@@ -8,7 +8,7 @@ from bec_lib.logger import bec_logger
8
8
  from bec_qthemes import material_icon
9
9
  from qtpy.QtCore import QMimeData, QSize, Qt, Signal
10
10
  from qtpy.QtGui import QDrag
11
- from qtpy.QtWidgets import QApplication, QHBoxLayout, QToolButton, QWidget
11
+ from qtpy.QtWidgets import QApplication, QHBoxLayout, QTabWidget, QToolButton, QVBoxLayout, QWidget
12
12
 
13
13
  from bec_widgets.utils.error_popups import SafeSlot
14
14
  from bec_widgets.utils.expandable_frame import ExpandableGroupFrame
@@ -18,6 +18,9 @@ from bec_widgets.widgets.services.device_browser.device_item.device_config_dialo
18
18
  from bec_widgets.widgets.services.device_browser.device_item.device_config_form import (
19
19
  DeviceConfigForm,
20
20
  )
21
+ from bec_widgets.widgets.services.device_browser.device_item.device_signal_display import (
22
+ SignalDisplay,
23
+ )
21
24
 
22
25
  if TYPE_CHECKING: # pragma: no cover
23
26
  from qtpy.QtGui import QMouseEvent
@@ -38,10 +41,25 @@ class DeviceItem(ExpandableGroupFrame):
38
41
  self._expanded_first_time = False
39
42
  self._data = None
40
43
  self.device = device
41
- layout = QHBoxLayout()
42
- layout.setContentsMargins(0, 0, 0, 0)
43
- self.set_layout(layout)
44
44
 
45
+ self._layout = QHBoxLayout()
46
+ self._layout.setContentsMargins(0, 0, 0, 0)
47
+ self._tab_widget = QTabWidget(tabShape=QTabWidget.TabShape.Rounded)
48
+ self._tab_widget.setDocumentMode(True)
49
+ self._layout.addWidget(self._tab_widget)
50
+
51
+ self.set_layout(self._layout)
52
+
53
+ self._form_page = QWidget()
54
+ self._form_page_layout = QVBoxLayout()
55
+ self._form_page.setLayout(self._form_page_layout)
56
+
57
+ self._signal_page = QWidget()
58
+ self._signal_page_layout = QVBoxLayout()
59
+ self._signal_page.setLayout(self._signal_page_layout)
60
+
61
+ self._tab_widget.addTab(self._form_page, "Configuration")
62
+ self._tab_widget.addTab(self._signal_page, "Signals")
45
63
  self.adjustSize()
46
64
 
47
65
  def _create_title_layout(self, title: str, icon: str):
@@ -64,7 +82,9 @@ class DeviceItem(ExpandableGroupFrame):
64
82
  if not self.expanded and not self._expanded_first_time:
65
83
  self._expanded_first_time = True
66
84
  self.form = DeviceConfigForm(parent=self, pretty_display=True)
67
- self._contents.layout().addWidget(self.form)
85
+ self._form_page_layout.addWidget(self.form)
86
+ self.signals = SignalDisplay(parent=self, device=self.device)
87
+ self._signal_page_layout.addWidget(self.signals)
68
88
  self._reload_config()
69
89
  self.broadcast_size_hint.emit(self.sizeHint())
70
90
  super().switch_expanded_state()
@@ -0,0 +1,102 @@
1
+ from bec_qthemes import material_icon
2
+ from qtpy.QtCore import Qt
3
+ from qtpy.QtWidgets import QHBoxLayout, QLabel, QToolButton, QVBoxLayout, QWidget
4
+
5
+ from bec_widgets.utils.bec_connector import ConnectionConfig
6
+ from bec_widgets.utils.bec_widget import BECWidget
7
+ from bec_widgets.utils.error_popups import SafeProperty, SafeSlot
8
+ from bec_widgets.widgets.containers.dock.dock import BECDock
9
+ from bec_widgets.widgets.utility.signal_label.signal_label import SignalLabel
10
+
11
+
12
+ class SignalDisplay(BECWidget, QWidget):
13
+ RPC = False
14
+
15
+ def __init__(
16
+ self,
17
+ client=None,
18
+ device: str = "",
19
+ config: ConnectionConfig = None,
20
+ gui_id: str | None = None,
21
+ theme_update: bool = False,
22
+ parent_dock: BECDock | None = None,
23
+ **kwargs,
24
+ ):
25
+ """A widget to display all the signals from a given device, and allow getting
26
+ a fresh reading."""
27
+ super().__init__(client, config, gui_id, theme_update, parent_dock, **kwargs)
28
+ self.get_bec_shortcuts()
29
+ self._layout = QVBoxLayout()
30
+ self.setLayout(self._layout)
31
+ self._content = QWidget()
32
+ self._layout.addWidget(self._content)
33
+ self._device = device
34
+ self.device = device
35
+
36
+ @SafeSlot()
37
+ def _refresh(self):
38
+ if self.device in self.dev:
39
+ self.dev.get(self.device).read(cached=False)
40
+ self.dev.get(self.device).read_configuration(cached=False)
41
+
42
+ def _add_refresh_button(self):
43
+ button_holder = QWidget()
44
+ button_holder.setLayout(QHBoxLayout())
45
+ button_holder.layout().setAlignment(Qt.AlignmentFlag.AlignRight)
46
+ button_holder.layout().setContentsMargins(0, 0, 0, 0)
47
+ refresh_button = QToolButton()
48
+ refresh_button.setIcon(
49
+ material_icon(icon_name="refresh", size=(20, 20), convert_to_pixmap=False)
50
+ )
51
+ refresh_button.clicked.connect(self._refresh)
52
+ button_holder.layout().addWidget(refresh_button)
53
+ self._content_layout.addWidget(button_holder)
54
+
55
+ def _populate(self):
56
+ self._content.deleteLater()
57
+ self._content = QWidget()
58
+ self._layout.addWidget(self._content)
59
+ self._content_layout = QVBoxLayout()
60
+ self._content_layout.setContentsMargins(0, 0, 0, 0)
61
+ self._content.setLayout(self._content_layout)
62
+
63
+ self._add_refresh_button()
64
+
65
+ if self._device in self.dev:
66
+ for sig in self.dev[self.device]._info.get("signals", {}).keys():
67
+ self._content_layout.addWidget(
68
+ SignalLabel(
69
+ device=self._device,
70
+ signal=sig,
71
+ show_select_button=False,
72
+ show_default_units=True,
73
+ )
74
+ )
75
+ self._content_layout.addStretch(1)
76
+ else:
77
+ self._content_layout.addWidget(
78
+ QLabel(f"Device {self.device} not found in device manager!")
79
+ )
80
+
81
+ @SafeProperty(str)
82
+ def device(self):
83
+ return self._device
84
+
85
+ @device.setter
86
+ def device(self, value: str):
87
+ self._device = value
88
+ self._populate()
89
+
90
+
91
+ if __name__ == "__main__": # pragma: no cover
92
+ import sys
93
+
94
+ from qtpy.QtWidgets import QApplication
95
+
96
+ from bec_widgets.utils.colors import set_theme
97
+
98
+ app = QApplication(sys.argv)
99
+ set_theme("light")
100
+ widget = SignalDisplay(device="samx")
101
+ widget.show()
102
+ sys.exit(app.exec_())
@@ -16,7 +16,6 @@ from qtpy.QtWidgets import (
16
16
  QGroupBox,
17
17
  QHBoxLayout,
18
18
  QLabel,
19
- QLineEdit,
20
19
  QToolButton,
21
20
  QVBoxLayout,
22
21
  QWidget,
@@ -180,6 +179,7 @@ class SignalLabel(BECWidget, QWidget):
180
179
  self._custom_units: str = custom_units
181
180
  self._show_default_units: bool = show_default_units
182
181
  self._decimal_places = 3
182
+ self._dtype = None
183
183
 
184
184
  self._show_hinted_signals: bool = True
185
185
  self._show_normal_signals: bool = False
@@ -241,8 +241,10 @@ class SignalLabel(BECWidget, QWidget):
241
241
  """Subscribe to the Redis topic for the device to display"""
242
242
  if not self._connected and self._device and self._device in self.dev:
243
243
  self._connected = True
244
- self._readback_endpoint = MessageEndpoints.device_readback(self._device)
245
- self.bec_dispatcher.connect_slot(self.on_device_readback, self._readback_endpoint)
244
+ self._read_endpoint = MessageEndpoints.device_read(self._device)
245
+ self._read_config_endpoint = MessageEndpoints.device_read_configuration(self._device)
246
+ self.bec_dispatcher.connect_slot(self.on_device_readback, self._read_endpoint)
247
+ self.bec_dispatcher.connect_slot(self.on_device_readback, self._read_config_endpoint)
246
248
  self._manual_read()
247
249
  self.set_display_value(self._value)
248
250
 
@@ -250,7 +252,8 @@ class SignalLabel(BECWidget, QWidget):
250
252
  """Unsubscribe from the Redis topic for the device to display"""
251
253
  if self._connected:
252
254
  self._connected = False
253
- self.bec_dispatcher.disconnect_slot(self.on_device_readback, self._readback_endpoint)
255
+ self.bec_dispatcher.disconnect_slot(self.on_device_readback, self._read_endpoint)
256
+ self.bec_dispatcher.disconnect_slot(self.on_device_readback, self._read_config_endpoint)
254
257
 
255
258
  def _manual_read(self):
256
259
  if self._device is None or not isinstance(
@@ -259,8 +262,13 @@ class SignalLabel(BECWidget, QWidget):
259
262
  self._units = ""
260
263
  self._value = "__"
261
264
  return
262
- signal: Signal = (
263
- getattr(device, self.signal, None) if isinstance(device, Device) else device
265
+ signal, info = (
266
+ (
267
+ getattr(device, self.signal, None),
268
+ device._info.get("signals", {}).get(self._signal, {}).get("describe", {}),
269
+ )
270
+ if isinstance(device, Device)
271
+ else (device, device.describe().get(self._device))
264
272
  )
265
273
  if not isinstance(signal, Signal): # Avoid getting other attributes of device, e.g. methods
266
274
  signal = None
@@ -269,7 +277,8 @@ class SignalLabel(BECWidget, QWidget):
269
277
  self._value = "__"
270
278
  return
271
279
  self._value = signal.get()
272
- self._units = signal.get_device_config().get("egu", "")
280
+ self._units = info.get("egu", "")
281
+ self._dtype = info.get("dtype", "float")
273
282
 
274
283
  @SafeSlot(dict, dict)
275
284
  def on_device_readback(self, msg: dict, metadata: dict) -> None:
@@ -278,8 +287,10 @@ class SignalLabel(BECWidget, QWidget):
278
287
  """
279
288
  try:
280
289
  signal_to_read = self._patch_hinted_signal()
281
- self._value = msg["signals"][signal_to_read]["value"]
282
- self.set_display_value(self._value)
290
+ _value = msg["signals"].get(signal_to_read, {}).get("value")
291
+ if _value is not None:
292
+ self._value = _value
293
+ self.set_display_value(self._value)
283
294
  except Exception as e:
284
295
  self._display.setText("ERROR!")
285
296
  self._display.setToolTip(
@@ -401,7 +412,10 @@ class SignalLabel(BECWidget, QWidget):
401
412
  if self._decimal_places == 0:
402
413
  return value
403
414
  try:
404
- return f"{float(value):0.{self._decimal_places}f}"
415
+ if self._dtype in ("integer", "float"):
416
+ return f"{float(value):0.{self._decimal_places}f}"
417
+ else:
418
+ return str(value)
405
419
  except ValueError:
406
420
  return value
407
421
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "2.18.0"
7
+ version = "2.19.1"
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