bec-widgets 0.101.0__tar.gz → 0.102.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 (247) hide show
  1. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/CHANGELOG.md +20 -16
  2. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/PKG-INFO +1 -1
  3. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/qt_utils/toolbar.py +1 -0
  4. bec_widgets-0.102.0/bec_widgets/widgets/bec_queue/bec_queue.py +244 -0
  5. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_abort/button_abort.py +12 -4
  6. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_reset/button_reset.py +23 -6
  7. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_resume/button_resume.py +3 -3
  8. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/stop_button/stop_button.py +3 -3
  9. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/pyproject.toml +1 -1
  10. bec_widgets-0.101.0/bec_widgets/widgets/bec_queue/bec_queue.py +0 -122
  11. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.git_hooks/pre-commit +0 -0
  12. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.gitignore +0 -0
  13. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.gitlab/issue_templates/bug_report_template.md +0 -0
  14. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  15. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.gitlab/issue_templates/feature_request_template.md +0 -0
  16. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.gitlab/merge_request_templates/default.md +0 -0
  17. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.gitlab-ci.yml +0 -0
  18. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.pylintrc +0 -0
  19. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/.readthedocs.yaml +0 -0
  20. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/LICENSE +0 -0
  21. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/README.md +0 -0
  22. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/__init__.py +0 -0
  23. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  24. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  25. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/status_icons/error.svg +0 -0
  26. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/status_icons/not_connected.svg +0 -0
  27. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/status_icons/refresh.svg +0 -0
  28. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/status_icons/running.svg +0 -0
  29. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/assets/status_icons/warning.svg +0 -0
  30. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/__init__.py +0 -0
  31. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/auto_updates.py +0 -0
  32. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/client.py +0 -0
  33. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/client_utils.py +0 -0
  34. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/generate_cli.py +0 -0
  35. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/rpc_register.py +0 -0
  36. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  37. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/cli/server.py +0 -0
  38. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/__init__.py +0 -0
  39. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  40. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  41. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  42. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  43. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  44. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  45. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  46. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  47. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  48. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  49. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  50. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  51. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  52. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/qt_utils/__init__.py +0 -0
  53. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/qt_utils/error_popups.py +0 -0
  54. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
  55. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/qt_utils/settings_dialog.py +0 -0
  56. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/__init__.py +0 -0
  57. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/bec_connector.py +0 -0
  58. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/bec_designer.py +0 -0
  59. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  60. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/bec_table.py +0 -0
  61. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/bec_widget.py +0 -0
  62. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/colors.py +0 -0
  63. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/container_utils.py +0 -0
  64. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/crosshair.py +0 -0
  65. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/entry_validator.py +0 -0
  66. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  67. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/layout_manager.py +0 -0
  68. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  69. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  70. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/plugin_utils.py +0 -0
  71. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/reference_utils.py +0 -0
  72. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  73. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/thread_checker.py +0 -0
  74. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/ui_loader.py +0 -0
  75. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/validator_delegate.py +0 -0
  76. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/widget_io.py +0 -0
  77. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  78. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/__init__.py +0 -0
  79. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/base_classes/__init__.py +0 -0
  80. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
  81. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
  82. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
  83. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
  84. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
  85. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  86. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
  87. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
  88. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
  89. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
  90. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  91. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_abort/__init__.py +0 -0
  92. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_abort/abort_button.pyproject +0 -0
  93. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_abort/abort_button_plugin.py +0 -0
  94. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_abort/register_abort_button.py +0 -0
  95. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_reset/__init__.py +0 -0
  96. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_reset/register_reset_button.py +0 -0
  97. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_reset/reset_button.pyproject +0 -0
  98. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_reset/reset_button_plugin.py +0 -0
  99. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_resume/__init__.py +0 -0
  100. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_resume/register_resume_button.py +0 -0
  101. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_resume/resume_button.pyproject +0 -0
  102. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/button_resume/resume_button_plugin.py +0 -0
  103. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/color_button/__init__.py +0 -0
  104. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/color_button/color_button.py +0 -0
  105. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
  106. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
  107. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
  108. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
  109. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
  110. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
  111. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
  112. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
  113. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/console/console.py +0 -0
  114. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dark_mode_button/__init__.py +0 -0
  115. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.py +0 -0
  116. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject +0 -0
  117. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +0 -0
  118. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py +0 -0
  119. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/__init__.py +0 -0
  120. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
  121. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
  122. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
  123. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
  124. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
  125. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
  126. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
  127. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_combobox/__init__.py +0 -0
  128. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
  129. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
  130. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
  131. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
  132. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_line_edit/__init__.py +0 -0
  133. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
  134. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
  135. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
  136. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
  137. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dock/__init__.py +0 -0
  138. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dock/dock.py +0 -0
  139. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dock/dock_area.py +0 -0
  140. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
  141. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
  142. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
  143. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/__init__.py +0 -0
  144. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/figure.py +0 -0
  145. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  146. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
  147. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
  148. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  149. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  150. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  151. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  152. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  153. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  154. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  155. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  156. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  157. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  158. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/image/__init__.py +0 -0
  159. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
  160. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
  161. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/image/image_widget.py +0 -0
  162. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
  163. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  164. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  165. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/__init__.py +0 -0
  166. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  167. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  168. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog.py +0 -0
  169. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  170. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  171. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  172. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/__init__.py +0 -0
  173. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
  174. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
  175. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py +0 -0
  176. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
  177. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
  178. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
  179. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
  180. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/position_indicator/__init__.py +0 -0
  181. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
  182. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
  183. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
  184. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
  185. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/__init__.py +0 -0
  186. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_box.py +0 -0
  187. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
  188. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_box.ui +0 -0
  189. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
  190. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -0
  191. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
  192. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +0 -0
  193. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
  194. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
  195. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
  196. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
  197. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
  198. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
  199. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
  200. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  201. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  202. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  203. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
  204. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  205. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
  206. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
  207. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  208. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/spinner/__init__.py +0 -0
  209. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
  210. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/spinner/spinner.py +0 -0
  211. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
  212. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
  213. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/stop_button/__init__.py +0 -0
  214. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
  215. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
  216. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
  217. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/text_box/__init__.py +0 -0
  218. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
  219. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/text_box/text_box.py +0 -0
  220. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
  221. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
  222. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/toggle/__init__.py +0 -0
  223. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
  224. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/toggle/toggle.py +0 -0
  225. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
  226. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
  227. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/vscode/__init__.py +0 -0
  228. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
  229. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
  230. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
  231. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/vscode/vscode.py +0 -0
  232. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/__init__.py +0 -0
  233. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
  234. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
  235. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
  236. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
  237. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
  238. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
  239. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  240. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
  241. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
  242. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/waveform/waveform_widget.py +0 -0
  243. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/website/__init__.py +0 -0
  244. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/website/register_website_widget.py +0 -0
  245. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/website/website.py +0 -0
  246. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
  247. {bec_widgets-0.101.0 → bec_widgets-0.102.0}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
@@ -1,5 +1,25 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.102.0 (2024-09-04)
4
+
5
+ ### Documentation
6
+
7
+ * docs(buttons): buttons section of docs split to appearance and queue buttons ([`047aa26`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/047aa26a60220c826cc1375cf81daf11d1f3ab5c))
8
+
9
+ * docs(tests): added tests tutorial for widget ([`18d8561`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/18d8561c965d149a7662085f7dbe2a39a8c4a475))
10
+
11
+ ### Feature
12
+
13
+ * feat(queue): BECQueue controls extended with Resume, Stop, Abort, Reset buttons ([`0d7c10e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0d7c10e670e4937787e1afaa19ca8259ac752486))
14
+
15
+ ### Fix
16
+
17
+ * fix(queue_reset_button): queue reset has to be confirmed with msgBox ([`9dd43aa`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9dd43aa1fd3991368002605df4389a7a7271011b))
18
+
19
+ ### Refactor
20
+
21
+ * refactor(tests): positioner box test changed to use create_widget fixture ([`df5eff3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/df5eff3147c79ff0278e6a5a09c8f73d5236aed3))
22
+
3
23
  ## v0.101.0 (2024-09-02)
4
24
 
5
25
  ### Feature
@@ -134,22 +154,6 @@
134
154
 
135
155
  * docs(buttons): added missing buttons docs ([`4e5520a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4e5520aee2115d2fc0cebb3865433478a5ec8253))
136
156
 
137
- * docs(developer): tutorial for BECWidget base class ([`ac2cb51`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ac2cb5197deef4d51e26ee5beb070eba3ffc210d))
138
-
139
157
  ### Fix
140
158
 
141
159
  * fix(theme): apply theme to all pyqtgraph widgets on manual updates ([`c550186`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/c5501860e8e07a53f4bce144d44ed39eda6290ef))
142
-
143
- ### Refactor
144
-
145
- * refactor(buttons): changed grid and thumbnail fig in gallery ([`4591ba8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4591ba8f73e22aba7258cad93c073f1387cb74a0))
146
-
147
- * refactor(icons): removed toolbar icons from assets ([`f335763`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f335763280adb1d83ba31f073ce206e4cb5d15ef))
148
-
149
- * refactor(icons): moved widget icons to class attribute ICON_NAME ([`e890091`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e890091d862e42317c7a54fc414ba37c85f268b0))
150
-
151
- ## v0.99.3 (2024-08-27)
152
-
153
- ### Build
154
-
155
- * build: updated min version of bec qthemes ([`d482434`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d48243483ef8228cc5eb85e40a6b8f5da3b45520))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.101.0
3
+ Version: 0.102.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
@@ -162,6 +162,7 @@ class WidgetAction(ToolBarAction):
162
162
  def add_to_toolbar(self, toolbar, target):
163
163
  widget = QWidget()
164
164
  layout = QHBoxLayout(widget)
165
+ layout.setContentsMargins(0, 0, 0, 0)
165
166
  if self.label is not None:
166
167
  label = QLabel(f"{self.label}")
167
168
  layout.addWidget(label)
@@ -0,0 +1,244 @@
1
+ from __future__ import annotations
2
+
3
+ from bec_lib.endpoints import MessageEndpoints
4
+ from bec_qthemes import material_icon
5
+ from qtpy.QtCore import Property, Qt, Slot
6
+ from qtpy.QtGui import QColor
7
+ from qtpy.QtWidgets import QHeaderView, QLabel, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
8
+
9
+ from bec_widgets.qt_utils.toolbar import ModularToolBar, SeparatorAction, WidgetAction
10
+ from bec_widgets.utils.bec_connector import ConnectionConfig
11
+ from bec_widgets.utils.bec_widget import BECWidget
12
+ from bec_widgets.widgets.button_abort.button_abort import AbortButton
13
+ from bec_widgets.widgets.button_reset.button_reset import ResetButton
14
+ from bec_widgets.widgets.button_resume.button_resume import ResumeButton
15
+ from bec_widgets.widgets.stop_button.stop_button import StopButton
16
+
17
+
18
+ class BECQueue(BECWidget, QWidget):
19
+ """
20
+ Widget to display the BEC queue.
21
+ """
22
+
23
+ ICON_NAME = "edit_note"
24
+ status_colors = {
25
+ "STOPPED": "red",
26
+ "PENDING": "orange",
27
+ "IDLE": "gray",
28
+ "PAUSED": "yellow",
29
+ "DEFERRED_PAUSE": "lightyellow",
30
+ "RUNNING": "green",
31
+ "COMPLETED": "blue",
32
+ }
33
+
34
+ def __init__(
35
+ self,
36
+ parent: QWidget | None = None,
37
+ client=None,
38
+ config: ConnectionConfig = None,
39
+ gui_id: str = None,
40
+ refresh_upon_start: bool = True,
41
+ ):
42
+ super().__init__(client, config, gui_id)
43
+ QWidget.__init__(self, parent=parent)
44
+ self.layout = QVBoxLayout(self)
45
+ self.layout.setSpacing(0)
46
+ self.layout.setContentsMargins(0, 0, 0, 0)
47
+
48
+ # Set up the toolbar
49
+ self.set_toolbar()
50
+
51
+ # Set up the table
52
+ self.table = QTableWidget(self)
53
+ self.layout.addWidget(self.table)
54
+ self.table.setColumnCount(4)
55
+ self.table.setHorizontalHeaderLabels(["Scan Number", "Type", "Status", "Cancel"])
56
+ header = self.table.horizontalHeader()
57
+ header.setSectionResizeMode(QHeaderView.Stretch)
58
+
59
+ self.bec_dispatcher.connect_slot(self.update_queue, MessageEndpoints.scan_queue_status())
60
+ self.reset_content()
61
+ if refresh_upon_start:
62
+ self.refresh_queue()
63
+
64
+ def set_toolbar(self):
65
+ """
66
+ Set the toolbar.
67
+ """
68
+ widget_label = QLabel("Live Queue")
69
+ widget_label.setStyleSheet("font-weight: bold;")
70
+ self.toolbar = ModularToolBar(
71
+ actions={
72
+ "widget_label": WidgetAction(widget=widget_label),
73
+ "separator_1": SeparatorAction(),
74
+ "resume": WidgetAction(widget=ResumeButton(toolbar=False)),
75
+ "stop": WidgetAction(widget=StopButton(toolbar=False)),
76
+ "reset": WidgetAction(widget=ResetButton(toolbar=False)),
77
+ },
78
+ target_widget=self,
79
+ )
80
+
81
+ self.layout.addWidget(self.toolbar)
82
+
83
+ @Property(bool)
84
+ def hide_toolbar(self):
85
+ """Property to hide the BEC Queue toolbar."""
86
+ return not self.toolbar.isVisible()
87
+
88
+ @hide_toolbar.setter
89
+ def hide_toolbar(self, hide: bool):
90
+ """
91
+ Setters for the hide_toolbar property.
92
+
93
+ Args:
94
+ hide(bool): Whether to hide the toolbar.
95
+ """
96
+ self._hide_toolbar(hide)
97
+
98
+ def _hide_toolbar(self, hide: bool):
99
+ """
100
+ Hide the toolbar.
101
+
102
+ Args:
103
+ hide(bool): Whether to hide the toolbar.
104
+ """
105
+ self.toolbar.setVisible(not hide)
106
+
107
+ def refresh_queue(self):
108
+ """
109
+ Refresh the queue.
110
+ """
111
+ msg = self.client.connector.get(MessageEndpoints.scan_queue_status())
112
+ self.update_queue(msg.content, msg.metadata)
113
+
114
+ @Slot(dict, dict)
115
+ def update_queue(self, content, _metadata):
116
+ """
117
+ Update the queue table with the latest queue information.
118
+
119
+ Args:
120
+ content (dict): The queue content.
121
+ _metadata (dict): The metadata.
122
+ """
123
+ # only show the primary queue for now
124
+ queue_info = content.get("queue", {}).get("primary", {}).get("info", [])
125
+ self.table.setRowCount(len(queue_info))
126
+ self.table.clearContents()
127
+
128
+ if not queue_info:
129
+ self.reset_content()
130
+ return
131
+
132
+ for index, item in enumerate(queue_info):
133
+ blocks = item.get("request_blocks", [])
134
+ scan_types = []
135
+ scan_numbers = []
136
+ scan_ids = []
137
+ status = item.get("status", "")
138
+ for request_block in blocks:
139
+ scan_type = request_block.get("content", {}).get("scan_type", "")
140
+ if scan_type:
141
+ scan_types.append(scan_type)
142
+ scan_number = request_block.get("scan_number", "")
143
+ if scan_number:
144
+ scan_numbers.append(str(scan_number))
145
+ scan_id = request_block.get("scan_id", "")
146
+ if scan_id:
147
+ scan_ids.append(scan_id)
148
+ if scan_types:
149
+ scan_types = ", ".join(scan_types)
150
+ if scan_numbers:
151
+ scan_numbers = ", ".join(scan_numbers)
152
+ if scan_ids:
153
+ scan_ids = ", ".join(scan_ids)
154
+ self.set_row(index, scan_numbers, scan_types, status, scan_ids)
155
+
156
+ def format_item(self, content: str, status=False) -> QTableWidgetItem:
157
+ """
158
+ Format the content of the table item.
159
+
160
+ Args:
161
+ content (str): The content to be formatted.
162
+
163
+ Returns:
164
+ QTableWidgetItem: The formatted item.
165
+ """
166
+ if not content or not isinstance(content, str):
167
+ content = ""
168
+ item = QTableWidgetItem(content)
169
+ item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
170
+ # item.setFlags(item.flags() & ~Qt.ItemFlag.ItemIsEditable)
171
+
172
+ if status:
173
+ try:
174
+ color = self.status_colors.get(content, "black") # Default to black if not found
175
+ item.setForeground(QColor(color))
176
+ except:
177
+ return item
178
+ return item
179
+
180
+ def set_row(self, index: int, scan_number: str, scan_type: str, status: str, scan_id: str):
181
+ """
182
+ Set the row of the table.
183
+
184
+ Args:
185
+ index (int): The index of the row.
186
+ scan_number (str): The scan number.
187
+ scan_type (str): The scan type.
188
+ status (str): The status.
189
+ """
190
+ abort_button = self._create_abort_button(scan_id)
191
+ abort_button.button.clicked.connect(self.delete_selected_row)
192
+
193
+ self.table.setItem(index, 0, self.format_item(scan_number))
194
+ self.table.setItem(index, 1, self.format_item(scan_type))
195
+ self.table.setItem(index, 2, self.format_item(status, status=True))
196
+ self.table.setCellWidget(index, 3, abort_button)
197
+
198
+ def _create_abort_button(self, scan_id: str) -> AbortButton:
199
+ """
200
+ Create an abort button with styling for BEC Queue widget for certain scan_id.
201
+
202
+ Args:
203
+ scan_id(str): The scan id to abort.
204
+
205
+ Returns:
206
+ AbortButton: The abort button.
207
+ """
208
+ abort_button = AbortButton(scan_id=scan_id)
209
+
210
+ abort_button.button.setText("")
211
+ abort_button.button.setIcon(
212
+ material_icon("cancel", color="#cc181e", filled=True, convert_to_pixmap=False)
213
+ )
214
+ abort_button.button.setStyleSheet("background-color: rgba(0,0,0,0) ")
215
+ abort_button.button.setFlat(True)
216
+
217
+ return abort_button
218
+
219
+ def delete_selected_row(self):
220
+
221
+ button = self.sender()
222
+ row = self.table.indexAt(button.pos()).row()
223
+ self.table.removeRow(row)
224
+
225
+ button.deleteLater()
226
+
227
+ def reset_content(self):
228
+ """
229
+ Reset the content of the table.
230
+ """
231
+
232
+ self.table.setRowCount(1)
233
+ self.set_row(0, "", "", "", "")
234
+
235
+
236
+ if __name__ == "__main__": # pragma: no cover
237
+ import sys
238
+
239
+ from qtpy.QtWidgets import QApplication
240
+
241
+ app = QApplication(sys.argv)
242
+ widget = BECQueue()
243
+ widget.show()
244
+ sys.exit(app.exec_())
@@ -11,7 +11,9 @@ class AbortButton(BECWidget, QWidget):
11
11
 
12
12
  ICON_NAME = "cancel"
13
13
 
14
- def __init__(self, parent=None, client=None, config=None, gui_id=None, toolbar=False):
14
+ def __init__(
15
+ self, parent=None, client=None, config=None, gui_id=None, toolbar=False, scan_id=None
16
+ ):
15
17
  super().__init__(client=client, config=config, gui_id=gui_id)
16
18
  QWidget.__init__(self, parent=parent)
17
19
 
@@ -25,17 +27,19 @@ class AbortButton(BECWidget, QWidget):
25
27
  if toolbar:
26
28
  icon = material_icon("cancel", color="#666666", filled=True)
27
29
  self.button = QToolButton(icon=icon)
28
- self.button.triggered.connect(self.abort_scan)
30
+ self.button.setToolTip("Abort the scan")
29
31
  else:
30
32
  self.button = QPushButton()
31
33
  self.button.setText("Abort")
32
34
  self.button.setStyleSheet(
33
35
  "background-color: #666666; color: white; font-weight: bold; font-size: 12px;"
34
36
  )
35
- self.button.clicked.connect(self.abort_scan)
37
+ self.button.clicked.connect(self.abort_scan)
36
38
 
37
39
  self.layout.addWidget(self.button)
38
40
 
41
+ self.scan_id = scan_id
42
+
39
43
  @SafeSlot()
40
44
  def abort_scan(
41
45
  self,
@@ -46,4 +50,8 @@ class AbortButton(BECWidget, QWidget):
46
50
  Args:
47
51
  scan_id(str|None): The scan id to abort. If None, the current scan will be aborted.
48
52
  """
49
- self.queue.request_scan_abortion()
53
+ if self.scan_id is not None:
54
+ print(f"Aborting scan with scan_id: {self.scan_id}")
55
+ self.queue.request_scan_abortion(scan_id=self.scan_id)
56
+ else:
57
+ self.queue.request_scan_abortion()
@@ -1,13 +1,13 @@
1
1
  from bec_qthemes import material_icon
2
2
  from qtpy.QtCore import Qt
3
- from qtpy.QtWidgets import QHBoxLayout, QPushButton, QToolButton, QWidget
3
+ from qtpy.QtWidgets import QHBoxLayout, QMessageBox, QPushButton, QToolButton, QWidget
4
4
 
5
5
  from bec_widgets.qt_utils.error_popups import SafeSlot
6
6
  from bec_widgets.utils.bec_widget import BECWidget
7
7
 
8
8
 
9
9
  class ResetButton(BECWidget, QWidget):
10
- """A button that reset the scan queue."""
10
+ """A button that resets the scan queue."""
11
11
 
12
12
  ICON_NAME = "restart_alt"
13
13
 
@@ -23,20 +23,37 @@ class ResetButton(BECWidget, QWidget):
23
23
  self.layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
24
24
 
25
25
  if toolbar:
26
- icon = material_icon("restart_alt", color="#F19E39", filled=True)
26
+ icon = material_icon(
27
+ "restart_alt", color="#F19E39", filled=True, convert_to_pixmap=False
28
+ )
27
29
  self.button = QToolButton(icon=icon)
28
- self.button.triggered.connect(self.reset_queue)
30
+ self.button.setToolTip("Reset the scan queue")
29
31
  else:
30
32
  self.button = QPushButton()
31
33
  self.button.setText("Reset Queue")
32
34
  self.button.setStyleSheet(
33
35
  "background-color: #F19E39; color: white; font-weight: bold; font-size: 12px;"
34
36
  )
35
- self.button.clicked.connect(self.reset_queue)
37
+ self.button.clicked.connect(self.confirm_reset_queue)
36
38
 
37
39
  self.layout.addWidget(self.button)
38
40
 
41
+ @SafeSlot()
42
+ def confirm_reset_queue(self):
43
+ """Prompt the user to confirm the queue reset."""
44
+ msg_box = QMessageBox()
45
+ msg_box.setIcon(QMessageBox.Warning)
46
+ msg_box.setWindowTitle("Confirm Reset")
47
+ msg_box.setText(
48
+ "Are you sure you want to reset the scan queue? This action cannot be undone."
49
+ )
50
+ msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
51
+ msg_box.setDefaultButton(QMessageBox.No)
52
+
53
+ if msg_box.exec_() == QMessageBox.Yes:
54
+ self.reset_queue()
55
+
39
56
  @SafeSlot()
40
57
  def reset_queue(self):
41
- """Stop the scan."""
58
+ """Reset the scan queue."""
42
59
  self.queue.request_queue_reset()
@@ -23,16 +23,16 @@ class ResumeButton(BECWidget, QWidget):
23
23
  self.layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
24
24
 
25
25
  if toolbar:
26
- icon = material_icon("resume", color="#2793e8", filled=True)
26
+ icon = material_icon("resume", color="#2793e8", filled=True, convert_to_pixmap=False)
27
27
  self.button = QToolButton(icon=icon)
28
- self.button.triggered.connect(self.continue_scan)
28
+ self.button.setToolTip("Resume the scan queue")
29
29
  else:
30
30
  self.button = QPushButton()
31
31
  self.button.setText("Resume")
32
32
  self.button.setStyleSheet(
33
33
  "background-color: #2793e8; color: white; font-weight: bold; font-size: 12px;"
34
34
  )
35
- self.button.clicked.connect(self.continue_scan)
35
+ self.button.clicked.connect(self.continue_scan)
36
36
 
37
37
  self.layout.addWidget(self.button)
38
38
 
@@ -23,16 +23,16 @@ class StopButton(BECWidget, QWidget):
23
23
  self.layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
24
24
 
25
25
  if toolbar:
26
- icon = material_icon("stop", color="#cc181e", filled=True)
26
+ icon = material_icon("stop", color="#cc181e", filled=True, convert_to_pixmap=False)
27
27
  self.button = QToolButton(icon=icon)
28
- self.button.triggered.connect(self.stop_scan)
28
+ self.button.setToolTip("Stop the scan queue")
29
29
  else:
30
30
  self.button = QPushButton()
31
31
  self.button.setText("Stop")
32
32
  self.button.setStyleSheet(
33
33
  "background-color: #cc181e; color: white; font-weight: bold; font-size: 12px;"
34
34
  )
35
- self.button.clicked.connect(self.stop_scan)
35
+ self.button.clicked.connect(self.stop_scan)
36
36
 
37
37
  self.layout.addWidget(self.button)
38
38
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.101.0"
7
+ version = "0.102.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -1,122 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from bec_lib.endpoints import MessageEndpoints
4
- from qtpy.QtCore import Qt, Slot
5
- from qtpy.QtWidgets import QHBoxLayout, QHeaderView, QTableWidget, QTableWidgetItem, QWidget
6
-
7
- from bec_widgets.utils.bec_connector import ConnectionConfig
8
- from bec_widgets.utils.bec_widget import BECWidget
9
-
10
-
11
- class BECQueue(BECWidget, QWidget):
12
- """
13
- Widget to display the BEC queue.
14
- """
15
-
16
- ICON_NAME = "edit_note"
17
-
18
- def __init__(
19
- self,
20
- parent: QWidget | None = None,
21
- client=None,
22
- config: ConnectionConfig = None,
23
- gui_id: str = None,
24
- ):
25
- super().__init__(client, config, gui_id)
26
- QWidget.__init__(self, parent=parent)
27
- self.table = QTableWidget(self)
28
- self.layout = QHBoxLayout(self)
29
- self.layout.addWidget(self.table)
30
-
31
- self.table.setColumnCount(3)
32
- self.table.setHorizontalHeaderLabels(["Scan Number", "Type", "Status"])
33
- header = self.table.horizontalHeader()
34
- header.setSectionResizeMode(QHeaderView.Stretch)
35
- self.bec_dispatcher.connect_slot(self.update_queue, MessageEndpoints.scan_queue_status())
36
- self.reset_content()
37
-
38
- @Slot(dict, dict)
39
- def update_queue(self, content, _metadata):
40
- """
41
- Update the queue table with the latest queue information.
42
-
43
- Args:
44
- content (dict): The queue content.
45
- _metadata (dict): The metadata.
46
- """
47
- # only show the primary queue for now
48
- queue_info = content.get("queue", {}).get("primary", {}).get("info", [])
49
- self.table.setRowCount(len(queue_info))
50
- self.table.clearContents()
51
-
52
- if not queue_info:
53
- self.reset_content()
54
- return
55
-
56
- for index, item in enumerate(queue_info):
57
- blocks = item.get("request_blocks", [])
58
- scan_types = []
59
- scan_numbers = []
60
- status = item.get("status", "")
61
- for request_block in blocks:
62
- scan_type = request_block.get("content", {}).get("scan_type", "")
63
- if scan_type:
64
- scan_types.append(scan_type)
65
- scan_number = request_block.get("scan_number", "")
66
- if scan_number:
67
- scan_numbers.append(str(scan_number))
68
- if scan_types:
69
- scan_types = ", ".join(scan_types)
70
- if scan_numbers:
71
- scan_numbers = ", ".join(scan_numbers)
72
- self.set_row(index, scan_numbers, scan_types, status)
73
-
74
- def format_item(self, content: str) -> QTableWidgetItem:
75
- """
76
- Format the content of the table item.
77
-
78
- Args:
79
- content (str): The content to be formatted.
80
-
81
- Returns:
82
- QTableWidgetItem: The formatted item.
83
- """
84
- if not content or not isinstance(content, str):
85
- content = ""
86
- item = QTableWidgetItem(content)
87
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
88
- return item
89
-
90
- def set_row(self, index: int, scan_number: str, scan_type: str, status: str):
91
- """
92
- Set the row of the table.
93
-
94
- Args:
95
- index (int): The index of the row.
96
- scan_number (str): The scan number.
97
- scan_type (str): The scan type.
98
- status (str): The status.
99
- """
100
-
101
- self.table.setItem(index, 0, self.format_item(scan_number))
102
- self.table.setItem(index, 1, self.format_item(scan_type))
103
- self.table.setItem(index, 2, self.format_item(status))
104
-
105
- def reset_content(self):
106
- """
107
- Reset the content of the table.
108
- """
109
-
110
- self.table.setRowCount(1)
111
- self.set_row(0, "", "", "")
112
-
113
-
114
- if __name__ == "__main__": # pragma: no cover
115
- import sys
116
-
117
- from qtpy.QtWidgets import QApplication
118
-
119
- app = QApplication(sys.argv)
120
- widget = BECQueue()
121
- widget.show()
122
- sys.exit(app.exec_())
File without changes
File without changes
File without changes
File without changes