bec-widgets 0.71.1__tar.gz → 0.72.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 (215) hide show
  1. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/CHANGELOG.md +20 -18
  2. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/PKG-INFO +1 -1
  3. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/client.py +21 -21
  4. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +1 -1
  5. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/bec_connector.py +65 -2
  6. bec_widgets-0.72.1/bec_widgets/widgets/__init__.py +1 -0
  7. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/bec_status_box.py +6 -2
  8. bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar/__init__.py +1 -0
  9. {bec_widgets-0.71.1/bec_widgets/widgets/spiral_progress_bar → bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar}/ring.py +16 -6
  10. bec_widgets-0.71.1/bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py → bec_widgets-0.72.1/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +10 -8
  11. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/getting_started/quick_start.md +2 -2
  12. bec_widgets-0.71.1/docs/user/widgets/spiral_progress_bar.md → bec_widgets-0.72.1/docs/user/widgets/ring_progress_bar.md +9 -9
  13. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/widgets.md +1 -1
  14. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/pyproject.toml +1 -1
  15. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/end-2-end/test_bec_dock_rpc_e2e.py +5 -5
  16. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_connector.py +23 -0
  17. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_status_box.py +38 -69
  18. bec_widgets-0.72.1/tests/unit_tests/test_ring_progress_bar.py +338 -0
  19. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_rpc_widget_handler.py +1 -1
  20. bec_widgets-0.71.1/bec_widgets/widgets/__init__.py +0 -5
  21. bec_widgets-0.71.1/bec_widgets/widgets/spiral_progress_bar/__init__.py +0 -1
  22. bec_widgets-0.71.1/tests/unit_tests/test_spiral_progress_bar.py +0 -338
  23. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.git_hooks/pre-commit +0 -0
  24. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.gitignore +0 -0
  25. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.gitlab/issue_templates/bug_report_template.md +0 -0
  26. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  27. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.gitlab/issue_templates/feature_request_template.md +0 -0
  28. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.gitlab/merge_request_templates/default.md +0 -0
  29. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.gitlab-ci.yml +0 -0
  30. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.pylintrc +0 -0
  31. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/.readthedocs.yaml +0 -0
  32. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/LICENSE +0 -0
  33. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/README.md +0 -0
  34. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/__init__.py +0 -0
  35. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/assets/bec_widgets_icon.png +0 -0
  36. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/assets/terminal_icon.png +0 -0
  37. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/__init__.py +0 -0
  38. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/auto_updates.py +0 -0
  39. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/client_utils.py +0 -0
  40. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/generate_cli.py +0 -0
  41. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/rpc_register.py +0 -0
  42. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  43. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/cli/server.py +0 -0
  44. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/__init__.py +0 -0
  45. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  46. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.ui +0 -0
  47. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/__init__.py +0 -0
  48. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/motor_control_compilations.py +0 -0
  49. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/motor_movement/motor_controller.ui +0 -0
  50. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  51. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  52. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  53. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  54. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  55. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  56. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  57. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/__init__.py +0 -0
  58. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/bec_designer.py +0 -0
  59. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/bec_dispatcher.py +0 -0
  60. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/bec_table.py +0 -0
  61. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/colors.py +0 -0
  62. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/container_utils.py +0 -0
  63. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/crosshair.py +0 -0
  64. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/entry_validator.py +0 -0
  65. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/layout_manager.py +0 -0
  66. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/plugin_utils.py +0 -0
  67. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/rpc_decorator.py +0 -0
  68. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/thread_checker.py +0 -0
  69. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/ui_loader.py +0 -0
  70. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/validator_delegate.py +0 -0
  71. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/widget_io.py +0 -0
  72. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/utils/yaml_dialog.py +0 -0
  73. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  74. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  75. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/__init__.py +0 -0
  76. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/stop_button/__init__.py +0 -0
  77. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/buttons/stop_button/stop_button.py +0 -0
  78. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/__init__.py +0 -0
  79. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/__init__.py +0 -0
  80. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.py +0 -0
  81. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox.pyproject +0 -0
  82. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/device_combobox_plugin.py +0 -0
  83. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/launch_device_combobox.py +0 -0
  84. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_combobox/register_device_combobox.py +0 -0
  85. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_input_base.py +0 -0
  86. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/__init__.py +0 -0
  87. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.py +0 -0
  88. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit.pyproject +0 -0
  89. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/device_line_edit_plugin.py +0 -0
  90. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/launch_device_line_edit.py +0 -0
  91. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/device_inputs/device_line_edit/register_device_line_edit.py +0 -0
  92. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/__init__.py +0 -0
  93. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/dock.py +0 -0
  94. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/dock/dock_area.py +0 -0
  95. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/__init__.py +0 -0
  96. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/figure.py +0 -0
  97. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  98. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  99. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  100. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  101. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  102. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  103. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  104. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  105. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  106. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  107. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  108. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  109. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  110. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/__init__.py +0 -0
  111. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_control.py +0 -0
  112. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/__init__.py +0 -0
  113. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/motor_table.py +0 -0
  114. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/motor_table/motor_table.ui +0 -0
  115. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/__init__.py +0 -0
  116. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py +0 -0
  117. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.ui +0 -0
  118. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/__init__.py +0 -0
  119. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.py +0 -0
  120. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/movement_relative/movement_relative.ui +0 -0
  121. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/__init__.py +0 -0
  122. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/selection.py +0 -0
  123. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/motor_control/selection/selection.ui +0 -0
  124. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  125. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  126. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  127. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/text_box/__init__.py +0 -0
  128. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/text_box/text_box.py +0 -0
  129. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/toolbar/__init__.py +0 -0
  130. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/toolbar/toolbar.py +0 -0
  131. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/vscode/__init__.py +0 -0
  132. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/vscode/vscode.py +0 -0
  133. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/website/__init__.py +0 -0
  134. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/bec_widgets/widgets/website/website.py +0 -0
  135. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/Makefile +0 -0
  136. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/_static/custom.css +0 -0
  137. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/_templates/custom-class-template.rst +0 -0
  138. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/_templates/custom-module-template.rst +0 -0
  139. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/api_reference/api_reference.md +0 -0
  140. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/apps_48dp.svg +0 -0
  141. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/display_settings_48dp.svg +0 -0
  142. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/index_api.svg +0 -0
  143. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/index_contribute.svg +0 -0
  144. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/index_getting_started.svg +0 -0
  145. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/index_user_guide.svg +0 -0
  146. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/assets/rocket_launch_48dp.svg +0 -0
  147. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/conf.py +0 -0
  148. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/developer/developer.md +0 -0
  149. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/developer/getting_started/development.md +0 -0
  150. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/developer/getting_started/getting_started.md +0 -0
  151. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/developer/widgets/widgets.md +0 -0
  152. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/index.md +0 -0
  153. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/introduction/introduction.md +0 -0
  154. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/make.bat +0 -0
  155. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/requirements.txt +0 -0
  156. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/api_reference/api_reference.md +0 -0
  157. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/applications/applications.md +0 -0
  158. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/customisation.md +0 -0
  159. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/getting_started/BECDockArea.png +0 -0
  160. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/getting_started/auto_updates.md +0 -0
  161. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/getting_started/getting_started.md +0 -0
  162. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/getting_started/gui_complex_gui.gif +0 -0
  163. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/getting_started/installation.md +0 -0
  164. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/user.md +0 -0
  165. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/BECFigure.png +0 -0
  166. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/bec_figure.md +0 -0
  167. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/bec_status_box.gif +0 -0
  168. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/bec_status_box.md +0 -0
  169. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/buttons.md +0 -0
  170. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/image_plot.gif +0 -0
  171. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/motor.gif +0 -0
  172. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/progress_bar.gif +0 -0
  173. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/scan_control.gif +0 -0
  174. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/scan_control.md +0 -0
  175. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/scatter_2D.gif +0 -0
  176. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/text_box.md +0 -0
  177. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/w1D.gif +0 -0
  178. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/docs/user/widgets/website.md +0 -0
  179. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/__init__.py +0 -0
  180. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/end-2-end/__init__.py +0 -0
  181. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/end-2-end/conftest.py +0 -0
  182. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -0
  183. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/end-2-end/test_rpc_register_e2e.py +0 -0
  184. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/end-2-end/test_scan_control_e2e.py +0 -0
  185. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/__init__.py +0 -0
  186. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/client_mocks.py +0 -0
  187. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/conftest.py +0 -0
  188. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_dispatcher.py +0 -0
  189. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_dock.py +0 -0
  190. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_figure.py +0 -0
  191. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_bec_motor_map.py +0 -0
  192. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_client_utils.py +0 -0
  193. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_color_validation.py +0 -0
  194. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_device.yaml +0 -0
  195. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -0
  196. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_configs/config_scan.yaml +0 -0
  197. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_crosshair.py +0 -0
  198. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_device_input_base.py +0 -0
  199. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_device_input_widgets.py +0 -0
  200. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_generate_cli_client.py +0 -0
  201. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_motor_control.py +0 -0
  202. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_msgs/__init__.py +0 -0
  203. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_msgs/available_scans_message.py +0 -0
  204. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_plot_base.py +0 -0
  205. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_plugin_utils.py +0 -0
  206. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_rpc_register.py +0 -0
  207. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_scan_control.py +0 -0
  208. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_scan_control_group_box.py +0 -0
  209. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_stop_button.py +0 -0
  210. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_text_box_widget.py +0 -0
  211. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_vscode_widget.py +0 -0
  212. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_waveform1d.py +0 -0
  213. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_website_widget.py +0 -0
  214. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_widget_io.py +0 -0
  215. {bec_widgets-0.71.1 → bec_widgets-0.72.1}/tests/unit_tests/test_yaml_dialog.py +0 -0
@@ -1,5 +1,25 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.72.1 (2024-06-24)
4
+
5
+ ### Fix
6
+
7
+ * fix: renamed spiral progress bar to ring progress bar; closes #235 ([`e5c0087`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e5c0087c9aed831edbe1c172746325a772a3bafa))
8
+
9
+ ### Test
10
+
11
+ * test: bugfix to prohibit leackage of mock ([`4348ed1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4348ed1bb2182da6bdecaf372d6db85279e60af8))
12
+
13
+ ## v0.72.0 (2024-06-24)
14
+
15
+ ### Feature
16
+
17
+ * feat(connector): added threadpool wrapper ([`4ca1efe`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4ca1efeeb8955604069f7b98374c7f82e1a8da67))
18
+
19
+ ### Unknown
20
+
21
+ * tests(status_box_test): temporary disabled tests for status_box due to high rate of failures ([`aa7ce2e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/aa7ce2ea27bb9564d4f5104bbff30725b8656453))
22
+
3
23
  ## v0.71.1 (2024-06-23)
4
24
 
5
25
  ### Fix
@@ -133,21 +153,3 @@ in their parent process ([`ce37416`](https://gitlab.psi.ch/bec/bec_widgets/-/com
133
153
  ### Feature
134
154
 
135
155
  * feat(rpc): discover widgets automatically ([`ef25f56`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ef25f5638032f931ceb292540ada618508bb2aed))
136
-
137
- ## v0.65.2 (2024-06-20)
138
-
139
- ### Fix
140
-
141
- * fix(pyqt): webengine must be imported before qcoreapplication ([`cbbd23a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cbbd23aa33095141e4c265719d176c4aa8c25996))
142
-
143
- ## v0.65.1 (2024-06-20)
144
-
145
- ### Fix
146
-
147
- * fix: prevent segfault by closing the QCoreApplication, if any ([`fa344a5`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/fa344a5799b07a2d8ace63cc7010b69bc4ed6f1d))
148
-
149
- ## v0.65.0 (2024-06-20)
150
-
151
- ### Test
152
-
153
- * test(device_input): tests added ([`1a0a98a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1a0a98a45367db414bed813bbd346b3e1ae8d550))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.71.1
3
+ Version: 0.72.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
@@ -17,8 +17,8 @@ class Widgets(str, enum.Enum):
17
17
  BECDock = "BECDock"
18
18
  BECDockArea = "BECDockArea"
19
19
  BECFigure = "BECFigure"
20
+ RingProgressBar = "RingProgressBar"
20
21
  ScanControl = "ScanControl"
21
- SpiralProgressBar = "SpiralProgressBar"
22
22
  TextBox = "TextBox"
23
23
  VSCodeEditor = "VSCodeEditor"
24
24
  WebsiteWidget = "WebsiteWidget"
@@ -1824,25 +1824,7 @@ class Ring(RPCBase):
1824
1824
  """
1825
1825
 
1826
1826
 
1827
- class ScanControl(RPCBase):
1828
- @property
1829
- @rpc_call
1830
- def config_dict(self) -> "dict":
1831
- """
1832
- Get the configuration of the widget.
1833
-
1834
- Returns:
1835
- dict: The configuration of the widget.
1836
- """
1837
-
1838
- @rpc_call
1839
- def get_all_rpc(self) -> "dict":
1840
- """
1841
- Get all registered RPC objects.
1842
- """
1843
-
1844
-
1845
- class SpiralProgressBar(RPCBase):
1827
+ class RingProgressBar(RPCBase):
1846
1828
  @rpc_call
1847
1829
  def get_all_rpc(self) -> "dict":
1848
1830
  """
@@ -1874,7 +1856,7 @@ class SpiralProgressBar(RPCBase):
1874
1856
  """
1875
1857
 
1876
1858
  @rpc_call
1877
- def update_config(self, config: "SpiralProgressBarConfig | dict"):
1859
+ def update_config(self, config: "RingProgressBarConfig | dict"):
1878
1860
  """
1879
1861
  Update the configuration of the widget.
1880
1862
 
@@ -2021,6 +2003,24 @@ class SpiralProgressBar(RPCBase):
2021
2003
  """
2022
2004
 
2023
2005
 
2006
+ class ScanControl(RPCBase):
2007
+ @property
2008
+ @rpc_call
2009
+ def config_dict(self) -> "dict":
2010
+ """
2011
+ Get the configuration of the widget.
2012
+
2013
+ Returns:
2014
+ dict: The configuration of the widget.
2015
+ """
2016
+
2017
+ @rpc_call
2018
+ def get_all_rpc(self) -> "dict":
2019
+ """
2020
+ Get all registered RPC objects.
2021
+ """
2022
+
2023
+
2024
2024
  class StopButton(RPCBase):
2025
2025
  @property
2026
2026
  @rpc_call
@@ -116,7 +116,7 @@ class JupyterConsoleWindow(QWidget): # pragma: no cover:
116
116
  self.d2 = self.dock.add_dock(name="dock_2", position="bottom")
117
117
  self.fig2 = self.d2.add_widget("BECFigure", row=0, col=0)
118
118
  self.fig2.plot(x_name="samx", y_name="bpm4i")
119
- self.bar = self.d2.add_widget("SpiralProgressBar", row=0, col=1)
119
+ self.bar = self.d2.add_widget("RingProgressBar", row=0, col=1)
120
120
  self.bar.set_diameter(200)
121
121
 
122
122
  self.dock.save_state()
@@ -2,10 +2,11 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  import time
5
- from typing import Optional, Type
5
+ from typing import Optional
6
6
 
7
- from bec_lib.utils.import_utils import lazy_import, lazy_import_from
7
+ from bec_lib.utils.import_utils import lazy_import_from
8
8
  from pydantic import BaseModel, Field, field_validator
9
+ from qtpy.QtCore import QObject, QRunnable, QThreadPool, Signal
9
10
  from qtpy.QtCore import Slot as pyqtSlot
10
11
 
11
12
  from bec_widgets.cli.rpc_register import RPCRegister
@@ -33,6 +34,31 @@ class ConnectionConfig(BaseModel):
33
34
  return v
34
35
 
35
36
 
37
+ class WorkerSignals(QObject):
38
+ progress = Signal(dict)
39
+ completed = Signal()
40
+
41
+
42
+ class Worker(QRunnable):
43
+ """
44
+ Worker class to run a function in a separate thread.
45
+ """
46
+
47
+ def __init__(self, func, *args, **kwargs):
48
+ super().__init__()
49
+ self.signals = WorkerSignals()
50
+ self.func = func
51
+ self.args = args
52
+ self.kwargs = kwargs
53
+
54
+ def run(self):
55
+ """
56
+ Run the specified function in the thread.
57
+ """
58
+ self.func(*self.args, **self.kwargs)
59
+ self.signals.completed.emit()
60
+
61
+
36
62
  class BECConnector:
37
63
  """Connection mixin class for all BEC widgets, to handle BEC client and device manager"""
38
64
 
@@ -63,6 +89,43 @@ class BECConnector:
63
89
  self.rpc_register = RPCRegister()
64
90
  self.rpc_register.add_rpc(self)
65
91
 
92
+ self._thread_pool = QThreadPool.globalInstance()
93
+
94
+ def submit_task(self, fn, *args, on_complete: pyqtSlot = None, **kwargs) -> Worker:
95
+ """
96
+ Submit a task to run in a separate thread. The task will run the specified
97
+ function with the provided arguments and emit the completed signal when done.
98
+
99
+ Use this method if you want to wait for a task to complete without blocking the
100
+ main thread.
101
+
102
+ Args:
103
+ fn: Function to run in a separate thread.
104
+ *args: Arguments for the function.
105
+ on_complete: Slot to run when the task is complete.
106
+ **kwargs: Keyword arguments for the function.
107
+
108
+ Returns:
109
+ worker: The worker object that will run the task.
110
+
111
+ Examples:
112
+ >>> def my_function(a, b):
113
+ >>> print(a + b)
114
+ >>> self.submit_task(my_function, 1, 2)
115
+
116
+ >>> def my_function(a, b):
117
+ >>> print(a + b)
118
+ >>> def on_complete():
119
+ >>> print("Task complete")
120
+ >>> self.submit_task(my_function, 1, 2, on_complete=on_complete)
121
+
122
+ """
123
+ worker = Worker(fn, *args, **kwargs)
124
+ if on_complete:
125
+ worker.signals.completed.connect(on_complete)
126
+ self._thread_pool.start(worker)
127
+ return worker
128
+
66
129
  def get_all_rpc(self) -> dict:
67
130
  """Get all registered RPC objects."""
68
131
  all_connections = self.rpc_register.list_all_connections()
@@ -11,7 +11,7 @@ import qdarktheme
11
11
  from bec_lib.utils.import_utils import lazy_import_from
12
12
  from pydantic import BaseModel, Field, field_validator
13
13
  from qtpy.QtCore import QObject, QTimer, Signal, Slot
14
- from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
14
+ from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem
15
15
 
16
16
  from bec_widgets.utils.bec_connector import BECConnector, ConnectionConfig
17
17
  from bec_widgets.widgets.bec_status_box.status_item import StatusItem
@@ -108,6 +108,7 @@ class BECStatusBox(BECConnector, QTreeWidget):
108
108
  service_name: str = "BEC Server",
109
109
  client: BECClient = None,
110
110
  config: BECStatusBoxConfig | dict = None,
111
+ bec_service_status_mixin: BECServiceStatusMixin = None,
111
112
  gui_id: str = None,
112
113
  ):
113
114
  if config is None:
@@ -124,7 +125,10 @@ class BECStatusBox(BECConnector, QTreeWidget):
124
125
  self.bec_service_info_container = {}
125
126
  self.tree_items = {}
126
127
  self.tree_top_item = None
127
- self.bec_service_status = BECServiceStatusMixin(client=self.client)
128
+
129
+ if not bec_service_status_mixin:
130
+ bec_service_status_mixin = BECServiceStatusMixin(client=self.client)
131
+ self.bec_service_status = bec_service_status_mixin
128
132
 
129
133
  self.init_ui()
130
134
  self.bec_service_status.services_update.connect(self.update_service_status)
@@ -0,0 +1 @@
1
+ from .ring_progress_bar import RingProgressBar
@@ -10,12 +10,13 @@ from qtpy import QtGui
10
10
  from bec_widgets.utils import BECConnector, ConnectionConfig
11
11
 
12
12
 
13
- class RingConnections(BaseModel):
13
+ class ProgressbarConnections(BaseModel):
14
14
  slot: Literal["on_scan_progress", "on_device_readback"] = None
15
15
  endpoint: EndpointInfo | str = None
16
16
  model_config: dict = {"validate_assignment": True}
17
17
 
18
18
  @field_validator("endpoint")
19
+ @classmethod
19
20
  def validate_endpoint(cls, v, values):
20
21
  slot = values.data["slot"]
21
22
  v = v.endpoint if isinstance(v, EndpointInfo) else v
@@ -36,7 +37,7 @@ class RingConnections(BaseModel):
36
37
  return v
37
38
 
38
39
 
39
- class RingConfig(ConnectionConfig):
40
+ class ProgressbarConfig(ConnectionConfig):
40
41
  value: int | float | None = Field(0, description="Value for the progress bars.")
41
42
  direction: int | None = Field(
42
43
  -1, description="Direction of the progress bars. -1 for clockwise, 1 for counter-clockwise."
@@ -62,8 +63,17 @@ class RingConfig(ConnectionConfig):
62
63
  update_behaviour: Literal["manual", "auto"] | None = Field(
63
64
  "auto", description="Update behaviour for the progress bars."
64
65
  )
65
- connections: RingConnections | None = Field(
66
- default_factory=RingConnections, description="Connections for the progress bars."
66
+ connections: ProgressbarConnections | None = Field(
67
+ default_factory=ProgressbarConnections, description="Connections for the progress bars."
68
+ )
69
+
70
+
71
+ class RingConfig(ProgressbarConfig):
72
+ index: int | None = Field(0, description="Index of the progress bar. 0 is outer ring.")
73
+ start_position: int | None = Field(
74
+ 90,
75
+ description="Start position for the progress bars in degrees. Default is 90 degrees - corespons to "
76
+ "the top of the ring.",
67
77
  )
68
78
 
69
79
 
@@ -230,7 +240,7 @@ class Ring(BECConnector):
230
240
  self.bec_dispatcher.disconnect_slot(
231
241
  self.config.connections.slot, self.config.connections.endpoint
232
242
  )
233
- self.config.connections = RingConnections(slot=slot, endpoint=endpoint)
243
+ self.config.connections = ProgressbarConnections(slot=slot, endpoint=endpoint)
234
244
  self.bec_dispatcher.connect_slot(getattr(self, slot), endpoint)
235
245
 
236
246
  def reset_connection(self):
@@ -240,7 +250,7 @@ class Ring(BECConnector):
240
250
  self.bec_dispatcher.disconnect_slot(
241
251
  self.config.connections.slot, self.config.connections.endpoint
242
252
  )
243
- self.config.connections = RingConnections()
253
+ self.config.connections = ProgressbarConnections()
244
254
 
245
255
  def on_scan_progress(self, msg, meta):
246
256
  """
@@ -11,10 +11,10 @@ from qtpy.QtCore import QSize, Slot
11
11
  from qtpy.QtWidgets import QSizePolicy, QWidget
12
12
 
13
13
  from bec_widgets.utils import BECConnector, Colors, ConnectionConfig, EntryValidator
14
- from bec_widgets.widgets.spiral_progress_bar.ring import Ring, RingConfig
14
+ from bec_widgets.widgets.ring_progress_bar.ring import Ring, RingConfig
15
15
 
16
16
 
17
- class SpiralProgressBarConfig(ConnectionConfig):
17
+ class RingProgressBarConfig(ConnectionConfig):
18
18
  color_map: Optional[str] = Field(
19
19
  "magma", description="Color scheme for the progress bars.", validate_default=True
20
20
  )
@@ -32,6 +32,7 @@ class SpiralProgressBarConfig(ConnectionConfig):
32
32
  rings: list[RingConfig] | None = Field([], description="List of ring configurations.")
33
33
 
34
34
  @field_validator("num_bars")
35
+ @classmethod
35
36
  def validate_num_bars(cls, v, values):
36
37
  min_number_of_bars = values.data.get("min_number_of_bars", None)
37
38
  max_number_of_bars = values.data.get("max_number_of_bars", None)
@@ -43,6 +44,7 @@ class SpiralProgressBarConfig(ConnectionConfig):
43
44
  return v
44
45
 
45
46
  @field_validator("rings")
47
+ @classmethod
46
48
  def validate_rings(cls, v, values):
47
49
  if v is not None and v is not []:
48
50
  num_bars = values.data.get("num_bars", None)
@@ -64,7 +66,7 @@ class SpiralProgressBarConfig(ConnectionConfig):
64
66
  _validate_colormap = field_validator("color_map")(Colors.validate_color_map)
65
67
 
66
68
 
67
- class SpiralProgressBar(BECConnector, QWidget):
69
+ class RingProgressBar(BECConnector, QWidget):
68
70
  USER_ACCESS = [
69
71
  "get_all_rpc",
70
72
  "rpc_id",
@@ -89,17 +91,17 @@ class SpiralProgressBar(BECConnector, QWidget):
89
91
  def __init__(
90
92
  self,
91
93
  parent=None,
92
- config: SpiralProgressBarConfig | dict | None = None,
94
+ config: RingProgressBarConfig | dict | None = None,
93
95
  client=None,
94
96
  gui_id: str | None = None,
95
97
  num_bars: int | None = None,
96
98
  ):
97
99
  if config is None:
98
- config = SpiralProgressBarConfig(widget_class=self.__class__.__name__)
100
+ config = RingProgressBarConfig(widget_class=self.__class__.__name__)
99
101
  self.config = config
100
102
  else:
101
103
  if isinstance(config, dict):
102
- config = SpiralProgressBarConfig(**config, widget_class=self.__class__.__name__)
104
+ config = RingProgressBarConfig(**config, widget_class=self.__class__.__name__)
103
105
  self.config = config
104
106
  super().__init__(client=client, config=config, gui_id=gui_id)
105
107
  QWidget.__init__(self, parent=None)
@@ -129,7 +131,7 @@ class SpiralProgressBar(BECConnector, QWidget):
129
131
  def rings(self, value):
130
132
  self._rings = value
131
133
 
132
- def update_config(self, config: SpiralProgressBarConfig | dict):
134
+ def update_config(self, config: RingProgressBarConfig | dict):
133
135
  """
134
136
  Update the configuration of the widget.
135
137
 
@@ -137,7 +139,7 @@ class SpiralProgressBar(BECConnector, QWidget):
137
139
  config(SpiralProgressBarConfig|dict): Configuration to update.
138
140
  """
139
141
  if isinstance(config, dict):
140
- config = SpiralProgressBarConfig(**config, widget_class=self.__class__.__name__)
142
+ config = RingProgressBarConfig(**config, widget_class=self.__class__.__name__)
141
143
  self.config = config
142
144
  self.clear_all()
143
145
 
@@ -97,11 +97,11 @@ Note, we chain commands here which is possible since the `add_dock` and `add_wid
97
97
  cam_widget.set_title("Camera Image Eiger")
98
98
  cam_widget.set_vrange(vmin=0, vmax=100)
99
99
  ```
100
- As a final step, we can now add also a SpiralProgressBar to a new dock, and perform a grid_scan with the motors *samx* and *samy*.
100
+ As a final step, we can now add also a RingProgressBar to a new dock, and perform a grid_scan with the motors *samx* and *samy*.
101
101
  As you see in the example below, all docks are arranged below each other. This is the default behavior of the `add_dock` method. However, the docks can be freely arranged by drag and drop as desired by the user. We invite you to explore this by yourself following the example in the video, and build your custom GUI with BEC Widgets.
102
102
 
103
103
  ```python
104
- prog_bar = gui.add_dock(name="prog_dock").add_widget('SpiralProgressBar')
104
+ prog_bar = gui.add_dock(name="prog_dock").add_widget('RingProgressBar')
105
105
  prog_bar.set_line_widths(15)
106
106
  scans.grid_scan(dev.samy, -2, 2, 10, dev.samx, -5, 5, 10, exp_time=0.1, relative=False)
107
107
  ```
@@ -1,9 +1,9 @@
1
1
  (user.widgets.spiral_progress_bar)=
2
- # [Spiral Progress Bar](/api_reference/_autosummary/bec_widgets.cli.client.SpiralProgressBar)
2
+ # [Ring Progress Bar](/api_reference/_autosummary/bec_widgets.cli.client.RingProgressBar)
3
3
 
4
4
  **Purpose:**
5
5
 
6
- The Spiral Progress Bar widget is a circular progress bar that can be used to visualize the progress of a task. The
6
+ The ring Progress Bar widget is a circular progress bar that can be used to visualize the progress of a task. The
7
7
  widget is designed to be used in applications where the progress of a task is represented as a percentage. The Spiral
8
8
  Progress Bar widget is a part of the BEC Widgets library and can be controlled directly using its API, or hooked up to
9
9
  the progress of a device readback or scan.
@@ -15,22 +15,22 @@ the progress of a device readback or scan.
15
15
  - multiple progress rings to show different tasks in parallel.
16
16
 
17
17
  **Example of Use:**
18
- ![SpiralProgressBar](./progress_bar.gif)
18
+ ![RingProgressBar](./progress_bar.gif)
19
19
 
20
20
  **Code example:**
21
21
 
22
- The following code snipped demonstrates how to create a `SpiralProgressBar` using BEC Widgets within BEC.
22
+ The following code snipped demonstrates how to create a `RingProgressBar` using BEC Widgets within BEC.
23
23
  ```python
24
- # adds a new dock with a spiral progress bar
25
- progress = gui.add_dock().add_widget("SpiralProgressBar")
24
+ # adds a new dock with a ring progress bar
25
+ progress = gui.add_dock().add_widget("RingProgressBar")
26
26
  # customize the size of the ring
27
27
  progress.set_line_width(20)
28
28
  ```
29
29
 
30
- By default, the Spiral Progress Bar widget will display a single ring. To add more rings, use the add_ring method:
30
+ By default, the Ring Progress Bar widget will display a single ring. To add more rings, use the add_ring method:
31
31
 
32
32
  ```python
33
- # adds a new dock with a spiral progress bar
33
+ # adds a new dock with a ring progress bar
34
34
  progress.add_ring()
35
35
  ```
36
36
 
@@ -42,7 +42,7 @@ progress.rings[0].set_line_width(20) # set the width of the first ring
42
42
  progress.rings[1].set_line_width(10) # set the width of the second ring
43
43
  ```
44
44
 
45
- By default, the `SpiralProgressBar` widget is set with `progress.enable_auto_update(True)`, which will automatically
45
+ By default, the `RingProgressBar` widget is set with `progress.enable_auto_update(True)`, which will automatically
46
46
  update the bars in the widget. To manually set updates for each progress bar, use the set_update method. Note that
47
47
  manually updating a ring will disable the automatic update for the whole widget:
48
48
 
@@ -9,7 +9,7 @@ hidden: false
9
9
  ---
10
10
 
11
11
  bec_figure/
12
- spiral_progress_bar/
12
+ ring_progress_bar/
13
13
  website/
14
14
  buttons/
15
15
  text_box/
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.71.1"
7
+ version = "0.72.1"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -151,13 +151,13 @@ def test_dock_manipulations_e2e(rpc_server_dock):
151
151
  assert len(dock.temp_areas) == 0
152
152
 
153
153
 
154
- def test_spiral_bar(rpc_server_dock):
154
+ def test_ring_bar(rpc_server_dock):
155
155
  dock = BECDockArea(rpc_server_dock)
156
156
 
157
157
  d0 = dock.add_dock(name="dock_0")
158
158
 
159
- bar = d0.add_widget("SpiralProgressBar")
160
- assert bar.__class__.__name__ == "SpiralProgressBar"
159
+ bar = d0.add_widget("RingProgressBar")
160
+ assert bar.__class__.__name__ == "RingProgressBar"
161
161
 
162
162
  bar.set_number_of_bars(5)
163
163
  bar.set_colors_from_map("viridis")
@@ -173,12 +173,12 @@ def test_spiral_bar(rpc_server_dock):
173
173
  assert bar_colors == expected_colors
174
174
 
175
175
 
176
- def test_spiral_bar_scan_update(bec_client_lib, rpc_server_dock):
176
+ def test_ring_bar_scan_update(bec_client_lib, rpc_server_dock):
177
177
  dock = BECDockArea(rpc_server_dock)
178
178
 
179
179
  d0 = dock.add_dock("dock_0")
180
180
 
181
- bar = d0.add_widget("SpiralProgressBar")
181
+ bar = d0.add_widget("RingProgressBar")
182
182
 
183
183
  client = bec_client_lib
184
184
  dev = client.device_manager.devices
@@ -1,5 +1,9 @@
1
1
  # pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
2
+ import time
3
+
2
4
  import pytest
5
+ from qtpy.QtCore import Slot
6
+ from qtpy.QtWidgets import QApplication
3
7
 
4
8
  from bec_widgets.utils import BECConnector, ConnectionConfig
5
9
 
@@ -55,3 +59,22 @@ def test_bec_connector_update_client(bec_connector, mocked_client):
55
59
  def test_bec_connector_get_config(bec_connector):
56
60
  assert bec_connector.get_config(dict_output=False) == bec_connector.config
57
61
  assert bec_connector.get_config() == bec_connector.config.model_dump()
62
+
63
+
64
+ def test_bec_connector_submit_task(bec_connector):
65
+ def test_func():
66
+ time.sleep(2)
67
+ print("done")
68
+
69
+ completed = False
70
+
71
+ @Slot()
72
+ def complete_func():
73
+ nonlocal completed
74
+ completed = True
75
+
76
+ bec_connector.submit_task(test_func, on_complete=complete_func)
77
+ assert not completed
78
+ while not completed:
79
+ QApplication.processEvents()
80
+ time.sleep(0.1)