bec-widgets 0.115.0__tar.gz → 0.116.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/CHANGELOG.md +20 -19
  2. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/PKG-INFO +2 -2
  3. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/applications/alignment/alignment_1d/alignment_1d.ui +96 -42
  4. bec_widgets-0.116.0/bec_widgets/qt_utils/compact_popup.py +223 -0
  5. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_queue/bec_queue.py +22 -7
  6. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_status_box/bec_status_box.py +11 -7
  7. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/pyproject.toml +2 -2
  8. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.git_hooks/pre-commit +0 -0
  9. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.gitignore +0 -0
  10. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.gitlab/issue_templates/bug_report_template.md +0 -0
  11. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  12. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.gitlab/issue_templates/feature_request_template.md +0 -0
  13. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.gitlab/merge_request_templates/default.md +0 -0
  14. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.gitlab-ci.yml +0 -0
  15. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.pylintrc +0 -0
  16. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/.readthedocs.yaml +0 -0
  17. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/LICENSE +0 -0
  18. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/README.md +0 -0
  19. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/__init__.py +0 -0
  20. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/applications/__init__.py +0 -0
  21. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/applications/alignment/__init__.py +0 -0
  22. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/applications/alignment/alignment_1d/__init__.py +0 -0
  23. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/applications/alignment/alignment_1d/alignment_1d.py +0 -0
  24. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/applications/bec_app.py +0 -0
  25. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  26. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  27. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  28. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/__init__.py +0 -0
  29. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/auto_updates.py +0 -0
  30. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/client.py +0 -0
  31. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/client_utils.py +0 -0
  32. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/generate_cli.py +0 -0
  33. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/rpc_register.py +0 -0
  34. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  35. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/cli/server.py +0 -0
  36. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/__init__.py +0 -0
  37. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  38. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  39. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  40. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  41. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  42. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  43. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  44. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  45. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  46. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  47. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  48. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  49. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  50. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/qt_utils/__init__.py +0 -0
  51. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/qt_utils/error_popups.py +0 -0
  52. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/qt_utils/palette_viewer.py +0 -0
  53. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
  54. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/qt_utils/settings_dialog.py +0 -0
  55. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/qt_utils/toolbar.py +0 -0
  56. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/__init__.py +0 -0
  57. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/bec_connector.py +0 -0
  58. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/bec_designer.py +0 -0
  59. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  60. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  61. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/bec_table.py +0 -0
  62. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/bec_widget.py +0 -0
  63. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/colors.py +0 -0
  64. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/container_utils.py +0 -0
  65. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/crosshair.py +0 -0
  66. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/entry_validator.py +0 -0
  67. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  68. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/layout_manager.py +0 -0
  69. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/linear_region_selector.py +0 -0
  70. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/plot_indicator_items.py +0 -0
  71. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  72. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  73. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/plugin_utils.py +0 -0
  74. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/reference_utils.py +0 -0
  75. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  76. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/thread_checker.py +0 -0
  77. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/ui_loader.py +0 -0
  78. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/validator_delegate.py +0 -0
  79. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/widget_io.py +0 -0
  80. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  81. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/__init__.py +0 -0
  82. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/base_classes/__init__.py +0 -0
  83. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
  84. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_progressbar/__init__.py +0 -0
  85. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_progressbar/bec_progress_bar.pyproject +0 -0
  86. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  87. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_progressbar/bec_progressbar.py +0 -0
  88. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_progressbar/register_bec_progress_bar.py +0 -0
  89. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
  90. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
  91. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
  92. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
  93. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  94. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
  95. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
  96. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
  97. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  98. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_abort/__init__.py +0 -0
  99. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_abort/abort_button.pyproject +0 -0
  100. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_abort/abort_button_plugin.py +0 -0
  101. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_abort/button_abort.py +0 -0
  102. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_abort/register_abort_button.py +0 -0
  103. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_reset/__init__.py +0 -0
  104. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_reset/button_reset.py +0 -0
  105. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_reset/register_reset_button.py +0 -0
  106. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_reset/reset_button.pyproject +0 -0
  107. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_reset/reset_button_plugin.py +0 -0
  108. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_resume/__init__.py +0 -0
  109. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_resume/button_resume.py +0 -0
  110. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_resume/register_resume_button.py +0 -0
  111. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_resume/resume_button.pyproject +0 -0
  112. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/button_resume/resume_button_plugin.py +0 -0
  113. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/color_button/__init__.py +0 -0
  114. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/color_button/color_button.py +0 -0
  115. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
  116. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
  117. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
  118. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
  119. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
  120. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
  121. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
  122. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
  123. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/console/console.py +0 -0
  124. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/console/console.pyproject +0 -0
  125. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/console/console_plugin.py +0 -0
  126. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/console/register_console.py +0 -0
  127. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dap_combo_box/__init__.py +0 -0
  128. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.py +0 -0
  129. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.pyproject +0 -0
  130. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box_plugin.py +0 -0
  131. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dap_combo_box/register_dap_combo_box.py +0 -0
  132. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dark_mode_button/__init__.py +0 -0
  133. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.py +0 -0
  134. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject +0 -0
  135. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +0 -0
  136. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py +0 -0
  137. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/__init__.py +0 -0
  138. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
  139. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
  140. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
  141. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
  142. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
  143. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
  144. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
  145. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_combobox/__init__.py +0 -0
  146. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
  147. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
  148. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
  149. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
  150. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_line_edit/__init__.py +0 -0
  151. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
  152. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
  153. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
  154. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
  155. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dock/__init__.py +0 -0
  156. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dock/dock.py +0 -0
  157. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dock/dock_area.py +0 -0
  158. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
  159. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
  160. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
  161. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/__init__.py +0 -0
  162. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/figure.py +0 -0
  163. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  164. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
  165. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
  166. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  167. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  168. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  169. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  170. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  171. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  172. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  173. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  174. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  175. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  176. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/image/__init__.py +0 -0
  177. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
  178. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
  179. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/image/image_widget.py +0 -0
  180. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
  181. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  182. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  183. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/__init__.py +0 -0
  184. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  185. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  186. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog.py +0 -0
  187. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  188. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  189. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  190. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/__init__.py +0 -0
  191. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
  192. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
  193. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py +0 -0
  194. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
  195. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
  196. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
  197. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
  198. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/position_indicator/__init__.py +0 -0
  199. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
  200. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
  201. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
  202. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
  203. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/__init__.py +0 -0
  204. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_box.py +0 -0
  205. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
  206. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_box.ui +0 -0
  207. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
  208. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -0
  209. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
  210. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +0 -0
  211. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
  212. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
  213. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
  214. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
  215. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
  216. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
  217. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
  218. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  219. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  220. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  221. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
  222. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  223. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
  224. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
  225. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  226. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/spinner/__init__.py +0 -0
  227. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
  228. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/spinner/spinner.py +0 -0
  229. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
  230. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
  231. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/stop_button/__init__.py +0 -0
  232. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
  233. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
  234. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
  235. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
  236. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/text_box/__init__.py +0 -0
  237. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
  238. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/text_box/text_box.py +0 -0
  239. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
  240. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
  241. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/toggle/__init__.py +0 -0
  242. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
  243. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/toggle/toggle.py +0 -0
  244. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
  245. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
  246. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/vscode/__init__.py +0 -0
  247. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
  248. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
  249. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
  250. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/vscode/vscode.py +0 -0
  251. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/__init__.py +0 -0
  252. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
  253. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
  254. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
  255. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
  256. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
  257. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
  258. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  259. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
  260. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
  261. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/waveform/waveform_widget.py +0 -0
  262. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/website/__init__.py +0 -0
  263. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/website/register_website_widget.py +0 -0
  264. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/website/website.py +0 -0
  265. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
  266. {bec_widgets-0.115.0 → bec_widgets-0.116.0}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
@@ -1,6 +1,26 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.116.0 (2024-10-11)
5
+
6
+ ### Build System
7
+
8
+ * build: fix PySide6 to 6.7.2 ([`908dbc1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/908dbc1760da5b323722207163f00850b84fb90b))
9
+
10
+ ### Features
11
+
12
+ * feat: UI changes to have top toolbar with compact popup widgets (fix issue #360) ([`499b6b9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/499b6b9a12efd931b5728b519404c41a7e29e4d6))
13
+
14
+ * feat: adapt BECQueue and BECStatusBox widgets to use CompactPopupWidget ([`94ce92f`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/94ce92f5b054d25ea3bb7976c1f75e14b78b9edc))
15
+
16
+ * feat: add 'CompactPopupWidget' container widget
17
+
18
+ Makes it easy to write widgets which can have a compact
19
+ representation with LED-like global state indicator,
20
+ with the possibility to display a popup dialog with more
21
+ complete UI ([`49268e3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/49268e3829406d70b09e4d88989812f5578e46f4))
22
+
23
+
4
24
  ## v0.115.0 (2024-10-08)
5
25
 
6
26
  ### Features
@@ -149,25 +169,6 @@ Fixes #361, do not try to change x axis when not permitted ([`efa2763`](https://
149
169
 
150
170
  ## v0.107.0 (2024-09-06)
151
171
 
152
- ### Documentation
153
-
154
- * docs: extend waveform docs ([`e6976dc`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e6976dc15105209852090a00a97b7cda723142e9))
155
-
156
- ### Features
157
-
158
- * feat: add roi select for dap, allow automatic clear curves on plot request ([`7bdca84`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7bdca8431496fe6562d2c28f5a6af869d1a2e654))
159
-
160
172
  ### Refactoring
161
173
 
162
174
  * refactor: change style to bec_accent_colors ([`bd126dd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/bd126dddbbec3e6c448cce263433d328d577c5c0))
163
-
164
- ### Testing
165
-
166
- * test: add tests, including extension to end-2-end test ([`b1aff6d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b1aff6d791ff847eb2f628e66ccaa4672fdeea08))
167
-
168
-
169
- ## v0.106.0 (2024-09-05)
170
-
171
- ### Features
172
-
173
- * feat(plot_base): toggle to switch outer axes for plotting widgets ([`06d7741`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/06d7741622aea8556208cd17cae521c37333f8b6))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.115.0
3
+ Version: 0.116.0
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -32,4 +32,4 @@ Provides-Extra: pyqt6
32
32
  Requires-Dist: pyqt6-webengine>=6.7; extra == 'pyqt6'
33
33
  Requires-Dist: pyqt6>=6.7; extra == 'pyqt6'
34
34
  Provides-Extra: pyside6
35
- Requires-Dist: pyside6>=6.7; extra == 'pyside6'
35
+ Requires-Dist: pyside6~=6.7.2; extra == 'pyside6'
@@ -15,47 +15,65 @@
15
15
  </property>
16
16
  <layout class="QVBoxLayout" name="verticalLayout">
17
17
  <item>
18
- <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0,0,0,0,1">
18
+ <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0,0,0,0,0,0,0,0,0,1">
19
19
  <item>
20
20
  <widget class="DarkModeButton" name="dark_mode_button"/>
21
21
  </item>
22
22
  <item>
23
- <widget class="QRadioButton" name="radioButton_2">
24
- <property name="enabled">
25
- <bool>false</bool>
26
- </property>
27
- <property name="text">
28
- <string>BEC Server State</string>
23
+ <spacer name="horizontalSpacer_6">
24
+ <property name="orientation">
25
+ <enum>Qt::Orientation::Horizontal</enum>
29
26
  </property>
30
- <property name="checkable">
31
- <bool>true</bool>
27
+ <property name="sizeHint" stdset="0">
28
+ <size>
29
+ <width>40</width>
30
+ <height>20</height>
31
+ </size>
32
32
  </property>
33
- <property name="checked">
33
+ </spacer>
34
+ </item>
35
+ <item>
36
+ <widget class="BECStatusBox" name="bec_status_box">
37
+ <property name="compact" stdset="0">
34
38
  <bool>true</bool>
35
39
  </property>
36
- <property name="autoExclusive">
37
- <bool>false</bool>
40
+ <property name="label" stdset="0">
41
+ <string>BEC Servers</string>
38
42
  </property>
39
43
  </widget>
40
44
  </item>
41
45
  <item>
42
- <widget class="QRadioButton" name="radioButton_4">
43
- <property name="enabled">
44
- <bool>false</bool>
46
+ <spacer name="horizontalSpacer_4">
47
+ <property name="orientation">
48
+ <enum>Qt::Orientation::Horizontal</enum>
45
49
  </property>
46
- <property name="text">
47
- <string>BEC Queue</string>
50
+ <property name="sizeHint" stdset="0">
51
+ <size>
52
+ <width>40</width>
53
+ <height>20</height>
54
+ </size>
48
55
  </property>
49
- <property name="checkable">
56
+ </spacer>
57
+ </item>
58
+ <item>
59
+ <widget class="BECQueue" name="bec_queue">
60
+ <property name="compact" stdset="0">
50
61
  <bool>true</bool>
51
62
  </property>
52
- <property name="checked">
53
- <bool>true</bool>
63
+ </widget>
64
+ </item>
65
+ <item>
66
+ <spacer name="horizontalSpacer_3">
67
+ <property name="orientation">
68
+ <enum>Qt::Orientation::Horizontal</enum>
54
69
  </property>
55
- <property name="autoExclusive">
56
- <bool>false</bool>
70
+ <property name="sizeHint" stdset="0">
71
+ <size>
72
+ <width>40</width>
73
+ <height>20</height>
74
+ </size>
57
75
  </property>
58
- </widget>
76
+ </spacer>
59
77
  </item>
60
78
  <item>
61
79
  <widget class="QRadioButton" name="radioButton">
@@ -76,6 +94,19 @@
76
94
  </property>
77
95
  </widget>
78
96
  </item>
97
+ <item>
98
+ <spacer name="horizontalSpacer_5">
99
+ <property name="orientation">
100
+ <enum>Qt::Orientation::Horizontal</enum>
101
+ </property>
102
+ <property name="sizeHint" stdset="0">
103
+ <size>
104
+ <width>40</width>
105
+ <height>20</height>
106
+ </size>
107
+ </property>
108
+ </spacer>
109
+ </item>
79
110
  <item>
80
111
  <widget class="QRadioButton" name="radioButton_3">
81
112
  <property name="enabled">
@@ -95,6 +126,19 @@
95
126
  </property>
96
127
  </widget>
97
128
  </item>
129
+ <item>
130
+ <spacer name="horizontalSpacer_7">
131
+ <property name="orientation">
132
+ <enum>Qt::Orientation::Horizontal</enum>
133
+ </property>
134
+ <property name="sizeHint" stdset="0">
135
+ <size>
136
+ <width>40</width>
137
+ <height>20</height>
138
+ </size>
139
+ </property>
140
+ </spacer>
141
+ </item>
98
142
  <item>
99
143
  <widget class="StopButton" name="stop_button">
100
144
  <property name="sizePolicy">
@@ -652,14 +696,19 @@
652
696
  </widget>
653
697
  <customwidgets>
654
698
  <customwidget>
655
- <class>DapComboBox</class>
699
+ <class>ToggleSwitch</class>
656
700
  <extends>QWidget</extends>
657
- <header>dap_combo_box</header>
701
+ <header>toggle_switch</header>
658
702
  </customwidget>
659
703
  <customwidget>
660
- <class>StopButton</class>
704
+ <class>BECWaveformWidget</class>
661
705
  <extends>QWidget</extends>
662
- <header>stop_button</header>
706
+ <header>bec_waveform_widget</header>
707
+ </customwidget>
708
+ <customwidget>
709
+ <class>BECStatusBox</class>
710
+ <extends>QWidget</extends>
711
+ <header>bec_status_box</header>
663
712
  </customwidget>
664
713
  <customwidget>
665
714
  <class>WebsiteWidget</class>
@@ -667,44 +716,49 @@
667
716
  <header>website_widget</header>
668
717
  </customwidget>
669
718
  <customwidget>
670
- <class>ScanControl</class>
719
+ <class>StopButton</class>
671
720
  <extends>QWidget</extends>
672
- <header>scan_control</header>
721
+ <header>stop_button</header>
673
722
  </customwidget>
674
723
  <customwidget>
675
- <class>ToggleSwitch</class>
724
+ <class>LMFitDialog</class>
676
725
  <extends>QWidget</extends>
677
- <header>toggle_switch</header>
726
+ <header>lm_fit_dialog</header>
678
727
  </customwidget>
679
728
  <customwidget>
680
- <class>PositionerBox</class>
729
+ <class>ScanControl</class>
681
730
  <extends>QWidget</extends>
682
- <header>positioner_box</header>
731
+ <header>scan_control</header>
732
+ </customwidget>
733
+ <customwidget>
734
+ <class>BECQueue</class>
735
+ <extends>QWidget</extends>
736
+ <header>bec_queue</header>
683
737
  </customwidget>
684
738
  <customwidget>
685
739
  <class>BECProgressBar</class>
686
740
  <extends>QWidget</extends>
687
741
  <header>bec_progress_bar</header>
688
742
  </customwidget>
743
+ <customwidget>
744
+ <class>DeviceComboBox</class>
745
+ <extends>QComboBox</extends>
746
+ <header>device_combobox</header>
747
+ </customwidget>
689
748
  <customwidget>
690
749
  <class>DarkModeButton</class>
691
750
  <extends>QWidget</extends>
692
751
  <header>dark_mode_button</header>
693
752
  </customwidget>
694
753
  <customwidget>
695
- <class>BECWaveformWidget</class>
754
+ <class>DapComboBox</class>
696
755
  <extends>QWidget</extends>
697
- <header>bec_waveform_widget</header>
698
- </customwidget>
699
- <customwidget>
700
- <class>DeviceComboBox</class>
701
- <extends>QComboBox</extends>
702
- <header>device_combobox</header>
756
+ <header>dap_combo_box</header>
703
757
  </customwidget>
704
758
  <customwidget>
705
- <class>LMFitDialog</class>
759
+ <class>PositionerBox</class>
706
760
  <extends>QWidget</extends>
707
- <header>lm_fit_dialog</header>
761
+ <header>positioner_box</header>
708
762
  </customwidget>
709
763
  </customwidgets>
710
764
  <tabstops>
@@ -0,0 +1,223 @@
1
+ from types import SimpleNamespace
2
+
3
+ from bec_qthemes import material_icon
4
+ from qtpy.QtCore import Property, Qt
5
+ from qtpy.QtGui import QColor
6
+ from qtpy.QtWidgets import (
7
+ QDialog,
8
+ QHBoxLayout,
9
+ QLabel,
10
+ QPushButton,
11
+ QSizePolicy,
12
+ QVBoxLayout,
13
+ QWidget,
14
+ )
15
+
16
+ from bec_widgets.utils.colors import get_accent_colors
17
+
18
+
19
+ class LedLabel(QLabel):
20
+ success_led = "color: white;border-radius: 10;background-color: qlineargradient(spread:pad, x1:0.145, y1:0.16, x2:1, y2:1, stop:0 %s, stop:1 %s);"
21
+ emergency_led = "color: white;border-radius: 10;background-color: qlineargradient(spread:pad, x1:0.145, y1:0.16, x2:0.92, y2:0.988636, stop:0 %s, stop:1 %s);"
22
+ warning_led = "color: white;border-radius: 10;background-color: qlineargradient(spread:pad, x1:0.232, y1:0.272, x2:0.98, y2:0.959773, stop:0 %s, stop:1 %s);"
23
+ default_led = "color: white;border-radius: 10;background-color: qlineargradient(spread:pad, x1:0.04, y1:0.0565909, x2:0.799, y2:0.795, stop:0 %s, stop:1 %s);"
24
+
25
+ def __init__(self, parent=None):
26
+ super().__init__(parent)
27
+
28
+ self.palette = get_accent_colors()
29
+ if self.palette is None:
30
+ # no theme!
31
+ self.palette = SimpleNamespace(
32
+ default=QColor("blue"),
33
+ success=QColor("green"),
34
+ warning=QColor("orange"),
35
+ emergency=QColor("red"),
36
+ )
37
+ self.setState("default")
38
+ self.setFixedSize(20, 20)
39
+
40
+ def setState(self, state: str):
41
+ match state:
42
+ case "success":
43
+ r, g, b, a = self.palette.success.getRgb()
44
+ self.setStyleSheet(
45
+ LedLabel.success_led
46
+ % (
47
+ f"rgba({r},{g},{b},{a})",
48
+ f"rgba({int(r*0.8)},{int(g*0.8)},{int(b*0.8)},{a})",
49
+ )
50
+ )
51
+ case "default":
52
+ r, g, b, a = self.palette.default.getRgb()
53
+ self.setStyleSheet(
54
+ LedLabel.default_led
55
+ % (
56
+ f"rgba({r},{g},{b},{a})",
57
+ f"rgba({int(r*0.8)},{int(g*0.8)},{int(b*0.8)},{a})",
58
+ )
59
+ )
60
+ case "warning":
61
+ r, g, b, a = self.palette.warning.getRgb()
62
+ self.setStyleSheet(
63
+ LedLabel.warning_led
64
+ % (
65
+ f"rgba({r},{g},{b},{a})",
66
+ f"rgba({int(r*0.8)},{int(g*0.8)},{int(b*0.8)},{a})",
67
+ )
68
+ )
69
+ case "emergency":
70
+ r, g, b, a = self.palette.emergency.getRgb()
71
+ self.setStyleSheet(
72
+ LedLabel.emergency_led
73
+ % (
74
+ f"rgba({r},{g},{b},{a})",
75
+ f"rgba({int(r*0.8)},{int(g*0.8)},{int(b*0.8)},{a})",
76
+ )
77
+ )
78
+ case unknown_state:
79
+ raise ValueError(
80
+ f"Unknown state {repr(unknown_state)}, must be one of default, success, warning or emergency"
81
+ )
82
+
83
+
84
+ class PopupDialog(QDialog):
85
+ def __init__(self, content_widget):
86
+ self.parent = content_widget.parent()
87
+ self.content_widget = content_widget
88
+
89
+ super().__init__(self.parent)
90
+
91
+ self.setAttribute(Qt.WA_DeleteOnClose)
92
+
93
+ self.content_widget.setParent(self)
94
+ QVBoxLayout(self)
95
+ self.layout().addWidget(self.content_widget)
96
+ self.content_widget.setVisible(True)
97
+
98
+ def closeEvent(self, event):
99
+ self.content_widget.setVisible(False)
100
+ self.content_widget.setParent(self.parent)
101
+
102
+
103
+ class CompactPopupWidget(QWidget):
104
+ """Container widget, that can display its content or have a compact form,
105
+ in this case clicking on a small button pops the contained widget up.
106
+
107
+ In the compact form, a LED-like indicator shows a status indicator.
108
+ """
109
+
110
+ def __init__(self, parent=None, layout=QVBoxLayout):
111
+ super().__init__(parent)
112
+
113
+ self._popup_window = None
114
+
115
+ QVBoxLayout(self)
116
+ self.compact_view = QWidget(self)
117
+ self.compact_view.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
118
+ QHBoxLayout(self.compact_view)
119
+ self.compact_view.layout().setSpacing(0)
120
+ self.compact_view.layout().setContentsMargins(0, 0, 0, 0)
121
+ self.compact_label = QLabel(self.compact_view)
122
+ self.compact_status = LedLabel(self.compact_view)
123
+ self.compact_show_popup = QPushButton(self.compact_view)
124
+ self.compact_show_popup.setFlat(True)
125
+ self.compact_show_popup.setIcon(
126
+ material_icon(icon_name="pan_zoom", size=(10, 10), convert_to_pixmap=False)
127
+ )
128
+ self.compact_view.layout().addWidget(self.compact_label)
129
+ self.compact_view.layout().addWidget(self.compact_status)
130
+ self.compact_view.layout().addWidget(self.compact_show_popup)
131
+ self.compact_view.setVisible(False)
132
+ self.layout().addWidget(self.compact_view)
133
+ self.container = QWidget(self)
134
+ self.layout().addWidget(self.container)
135
+ self.container.setVisible(True)
136
+ layout(self.container)
137
+ self.layout = self.container.layout()
138
+
139
+ self.compact_show_popup.clicked.connect(self.show_popup)
140
+
141
+ def set_global_state(self, state: str):
142
+ """Set the LED-indicator state
143
+
144
+ The LED indicator represents the 'global' state. State can be one of the
145
+ following: "default", "success", "warning", "emergency"
146
+ """
147
+ self.compact_status.setState(state)
148
+
149
+ def show_popup(self):
150
+ """Display the contained widgets in a popup dialog"""
151
+ self._popup_window = PopupDialog(self.container)
152
+ self._popup_window.show()
153
+
154
+ def setSizePolicy(self, size_policy1, size_policy2=None):
155
+ # setting size policy on the compact popup widget will set
156
+ # the policy for the container, and for itself
157
+ if size_policy2 is None:
158
+ # assuming first form: setSizePolicy(QSizePolicy)
159
+ self.container.setSizePolicy(size_policy1)
160
+ QWidget.setSizePolicy(self, size_policy1)
161
+ else:
162
+ self.container.setSizePolicy(size_policy1, size_policy2)
163
+ QWidget.setSizePolicy(self, size_policy1, size_policy2)
164
+
165
+ def addWidget(self, widget):
166
+ """Add a widget to the popup container
167
+
168
+ The popup container corresponds to the "full view" (not compact)
169
+ The widget is reparented to the container, and added to the container layout
170
+ """
171
+ widget.setParent(self.container)
172
+ self.container.layout().addWidget(widget)
173
+
174
+ @Property(bool)
175
+ def compact(self):
176
+ return self.compact_view.isVisible()
177
+
178
+ @compact.setter
179
+ def compact(self, set_compact: bool):
180
+ """Sets the compact form
181
+
182
+ If set_compact is True, the compact view is displayed ; otherwise,
183
+ the full view is displayed. This is handled by toggling visibility of
184
+ the container widget or the compact view widget.
185
+ """
186
+ if set_compact:
187
+ self.compact_view.setVisible(True)
188
+ self.container.setVisible(False)
189
+ QWidget.setSizePolicy(self, QSizePolicy.Fixed, QSizePolicy.Fixed)
190
+ else:
191
+ self.compact_view.setVisible(False)
192
+ self.container.setVisible(True)
193
+ QWidget.setSizePolicy(self, self.container.sizePolicy())
194
+ if self.parentWidget():
195
+ self.parentWidget().adjustSize()
196
+ else:
197
+ self.adjustSize()
198
+
199
+ @Property(str)
200
+ def label(self):
201
+ return self.compact_label.text()
202
+
203
+ @label.setter
204
+ def label(self, compact_label_text: str):
205
+ """Set the label text associated to the compact view"""
206
+ self.compact_label.setText(compact_label_text)
207
+
208
+ @Property(str)
209
+ def tooltip(self):
210
+ return self.compact_label.toolTip()
211
+
212
+ @tooltip.setter
213
+ def tooltip(self, tooltip: str):
214
+ """Set the tooltip text associated to the compact view"""
215
+ self.compact_label.setToolTip(tooltip)
216
+ self.compact_status.setToolTip(tooltip)
217
+
218
+ def closeEvent(self, event):
219
+ # Called by Qt, on closing - since the children widgets can be
220
+ # BECWidgets, it is good to explicitely call 'close' on them,
221
+ # to ensure proper resources cleanup
222
+ for child in self.container.findChildren(QWidget, options=Qt.FindDirectChildrenOnly):
223
+ child.close()
@@ -2,10 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from bec_lib.endpoints import MessageEndpoints
4
4
  from bec_qthemes import material_icon
5
- from qtpy.QtCore import Property, Qt, Slot
5
+ from qtpy.QtCore import Property, Qt, Signal, Slot
6
6
  from qtpy.QtGui import QColor
7
7
  from qtpy.QtWidgets import QHeaderView, QLabel, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
8
8
 
9
+ from bec_widgets.qt_utils.compact_popup import CompactPopupWidget
9
10
  from bec_widgets.qt_utils.toolbar import ModularToolBar, SeparatorAction, WidgetAction
10
11
  from bec_widgets.utils.bec_connector import ConnectionConfig
11
12
  from bec_widgets.utils.bec_widget import BECWidget
@@ -15,7 +16,7 @@ from bec_widgets.widgets.button_resume.button_resume import ResumeButton
15
16
  from bec_widgets.widgets.stop_button.stop_button import StopButton
16
17
 
17
18
 
18
- class BECQueue(BECWidget, QWidget):
19
+ class BECQueue(BECWidget, CompactPopupWidget):
19
20
  """
20
21
  Widget to display the BEC queue.
21
22
  """
@@ -31,6 +32,8 @@ class BECQueue(BECWidget, QWidget):
31
32
  "COMPLETED": "blue",
32
33
  }
33
34
 
35
+ queue_busy = Signal(bool)
36
+
34
37
  def __init__(
35
38
  self,
36
39
  parent: QWidget | None = None,
@@ -40,22 +43,24 @@ class BECQueue(BECWidget, QWidget):
40
43
  refresh_upon_start: bool = True,
41
44
  ):
42
45
  super().__init__(client, config, gui_id)
43
- QWidget.__init__(self, parent=parent)
44
- self.layout = QVBoxLayout(self)
46
+ CompactPopupWidget.__init__(self, parent=parent, layout=QVBoxLayout)
45
47
  self.layout.setSpacing(0)
46
48
  self.layout.setContentsMargins(0, 0, 0, 0)
47
49
 
48
50
  # Set up the toolbar
49
51
  self.set_toolbar()
50
-
51
52
  # Set up the table
52
53
  self.table = QTableWidget(self)
53
- self.layout.addWidget(self.table)
54
+ # self.layout.addWidget(self.table)
54
55
  self.table.setColumnCount(4)
55
56
  self.table.setHorizontalHeaderLabels(["Scan Number", "Type", "Status", "Cancel"])
56
57
  header = self.table.horizontalHeader()
57
58
  header.setSectionResizeMode(QHeaderView.Stretch)
58
59
 
60
+ self.addWidget(self.table)
61
+ self.label = "BEC Queue"
62
+ self.tooltip = "BEC Queue status"
63
+
59
64
  self.bec_dispatcher.connect_slot(self.update_queue, MessageEndpoints.scan_queue_status())
60
65
  self.reset_content()
61
66
  if refresh_upon_start:
@@ -78,7 +83,7 @@ class BECQueue(BECWidget, QWidget):
78
83
  target_widget=self,
79
84
  )
80
85
 
81
- self.layout.addWidget(self.toolbar)
86
+ self.addWidget(self.toolbar)
82
87
 
83
88
  @Property(bool)
84
89
  def hide_toolbar(self):
@@ -109,6 +114,9 @@ class BECQueue(BECWidget, QWidget):
109
114
  Refresh the queue.
110
115
  """
111
116
  msg = self.client.connector.get(MessageEndpoints.scan_queue_status())
117
+ if msg is None:
118
+ # msg is None if no scan has been run yet (fresh start)
119
+ return
112
120
  self.update_queue(msg.content, msg.metadata)
113
121
 
114
122
  @Slot(dict, dict)
@@ -152,6 +160,13 @@ class BECQueue(BECWidget, QWidget):
152
160
  if scan_ids:
153
161
  scan_ids = ", ".join(scan_ids)
154
162
  self.set_row(index, scan_numbers, scan_types, status, scan_ids)
163
+ busy = (
164
+ False
165
+ if all(item.get("status") in ("STOPPED", "COMPLETED", "IDLE") for item in queue_info)
166
+ else True
167
+ )
168
+ self.set_global_state("warning" if busy else "default")
169
+ self.queue_busy.emit(busy)
155
170
 
156
171
  def format_item(self, content: str, status=False) -> QTableWidgetItem:
157
172
  """
@@ -13,8 +13,8 @@ from bec_lib.utils.import_utils import lazy_import_from
13
13
  from qtpy.QtCore import QObject, QTimer, Signal, Slot
14
14
  from qtpy.QtWidgets import QHBoxLayout, QTreeWidget, QTreeWidgetItem, QWidget
15
15
 
16
+ from bec_widgets.qt_utils.compact_popup import CompactPopupWidget
16
17
  from bec_widgets.utils.bec_widget import BECWidget
17
- from bec_widgets.utils.colors import set_theme
18
18
  from bec_widgets.widgets.bec_status_box.status_item import StatusItem
19
19
 
20
20
  if TYPE_CHECKING:
@@ -64,7 +64,7 @@ class BECServiceStatusMixin(QObject):
64
64
  self._service_update_timer.deleteLater()
65
65
 
66
66
 
67
- class BECStatusBox(BECWidget, QWidget):
67
+ class BECStatusBox(BECWidget, CompactPopupWidget):
68
68
  """An autonomous widget to display the status of BEC services.
69
69
 
70
70
  Args:
@@ -83,15 +83,13 @@ class BECStatusBox(BECWidget, QWidget):
83
83
  def __init__(
84
84
  self,
85
85
  parent=None,
86
- box_name: str = "BEC Server",
86
+ box_name: str = "BEC Servers",
87
87
  client: BECClient = None,
88
88
  bec_service_status_mixin: BECServiceStatusMixin = None,
89
89
  gui_id: str = None,
90
90
  ):
91
91
  super().__init__(client=client, gui_id=gui_id)
92
- QWidget.__init__(self, parent=parent)
93
- self.tree = QTreeWidget(self)
94
- self.layout = QHBoxLayout(self)
92
+ CompactPopupWidget.__init__(self, parent=parent, layout=QHBoxLayout)
95
93
 
96
94
  self.box_name = box_name
97
95
  self.status_container = defaultdict(lambda: {"info": None, "item": None, "widget": None})
@@ -100,11 +98,13 @@ class BECStatusBox(BECWidget, QWidget):
100
98
  bec_service_status_mixin = BECServiceStatusMixin(self, client=self.client)
101
99
  self.bec_service_status = bec_service_status_mixin
102
100
 
101
+ self.label = box_name
102
+ self.tooltip = "BEC servers health status"
103
103
  self.init_ui()
104
104
  self.bec_service_status.services_update.connect(self.update_service_status)
105
105
  self.bec_core_state.connect(self.update_top_item_status)
106
106
  self.tree.itemDoubleClicked.connect(self.on_tree_item_double_clicked)
107
- self.layout.addWidget(self.tree)
107
+ self.addWidget(self.tree)
108
108
 
109
109
  def init_ui(self) -> None:
110
110
  """Init the UI for the BECStatusBox widget, should only take place once."""
@@ -121,6 +121,7 @@ class BECStatusBox(BECWidget, QWidget):
121
121
 
122
122
  def init_ui_tree_widget(self) -> None:
123
123
  """Initialise the tree widget for the status box."""
124
+ self.tree = QTreeWidget(self)
124
125
  self.tree.setHeaderHidden(True)
125
126
  # TODO probably here is a problem still with setting the stylesheet
126
127
  self.tree.setStyleSheet(
@@ -163,6 +164,7 @@ class BECStatusBox(BECWidget, QWidget):
163
164
  status (BECStatus): The state of the core services.
164
165
  """
165
166
  self.status_container[self.box_name]["info"].status = status
167
+ self.set_global_state("emergency" if status == "NOTCONNECTED" else "success")
166
168
  self.service_update.emit(self.status_container[self.box_name]["info"])
167
169
 
168
170
  def _update_status_container(
@@ -308,6 +310,8 @@ if __name__ == "__main__": # pragma: no cover
308
310
 
309
311
  from qtpy.QtWidgets import QApplication
310
312
 
313
+ from bec_widgets.utils.colors import set_theme
314
+
311
315
  app = QApplication(sys.argv)
312
316
  set_theme("dark")
313
317
  main_window = BECStatusBox()