bec-widgets 0.115.0__tar.gz → 0.117.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 (267) hide show
  1. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/CHANGELOG.md +31 -28
  2. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/PKG-INFO +2 -2
  3. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/applications/alignment/alignment_1d/alignment_1d.ui +96 -42
  4. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/client.py +45 -0
  5. bec_widgets-0.117.0/bec_widgets/qt_utils/compact_popup.py +223 -0
  6. bec_widgets-0.117.0/bec_widgets/utils/fps_counter.py +84 -0
  7. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_queue/bec_queue.py +22 -7
  8. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_status_box/bec_status_box.py +11 -7
  9. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/image/image.py +1 -0
  10. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/image/image_item.py +2 -2
  11. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/plot_base.py +62 -3
  12. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/waveform/waveform.py +1 -0
  13. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/image/image_widget.py +17 -0
  14. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_widget.py +23 -3
  15. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/pyproject.toml +2 -2
  16. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.git_hooks/pre-commit +0 -0
  17. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.gitignore +0 -0
  18. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.gitlab/issue_templates/bug_report_template.md +0 -0
  19. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  20. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.gitlab/issue_templates/feature_request_template.md +0 -0
  21. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.gitlab/merge_request_templates/default.md +0 -0
  22. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.gitlab-ci.yml +0 -0
  23. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.pylintrc +0 -0
  24. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/.readthedocs.yaml +0 -0
  25. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/LICENSE +0 -0
  26. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/README.md +0 -0
  27. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/__init__.py +0 -0
  28. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/applications/__init__.py +0 -0
  29. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/applications/alignment/__init__.py +0 -0
  30. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/applications/alignment/alignment_1d/__init__.py +0 -0
  31. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/applications/alignment/alignment_1d/alignment_1d.py +0 -0
  32. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/applications/bec_app.py +0 -0
  33. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  34. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  35. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  36. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/__init__.py +0 -0
  37. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/auto_updates.py +0 -0
  38. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/client_utils.py +0 -0
  39. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/generate_cli.py +0 -0
  40. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/rpc_register.py +0 -0
  41. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  42. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/cli/server.py +0 -0
  43. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/__init__.py +0 -0
  44. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  45. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  46. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  47. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  48. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  49. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  50. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  51. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  52. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  53. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  54. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  55. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  56. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  57. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/qt_utils/__init__.py +0 -0
  58. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/qt_utils/error_popups.py +0 -0
  59. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/qt_utils/palette_viewer.py +0 -0
  60. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
  61. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/qt_utils/settings_dialog.py +0 -0
  62. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/qt_utils/toolbar.py +0 -0
  63. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/__init__.py +0 -0
  64. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/bec_connector.py +0 -0
  65. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/bec_designer.py +0 -0
  66. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  67. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  68. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/bec_table.py +0 -0
  69. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/bec_widget.py +0 -0
  70. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/colors.py +0 -0
  71. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/container_utils.py +0 -0
  72. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/crosshair.py +0 -0
  73. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/entry_validator.py +0 -0
  74. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  75. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/layout_manager.py +0 -0
  76. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/linear_region_selector.py +0 -0
  77. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/plot_indicator_items.py +0 -0
  78. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  79. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  80. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/plugin_utils.py +0 -0
  81. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/reference_utils.py +0 -0
  82. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  83. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/thread_checker.py +0 -0
  84. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/ui_loader.py +0 -0
  85. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/validator_delegate.py +0 -0
  86. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/widget_io.py +0 -0
  87. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  88. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/__init__.py +0 -0
  89. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/base_classes/__init__.py +0 -0
  90. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
  91. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_progressbar/__init__.py +0 -0
  92. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_progressbar/bec_progress_bar.pyproject +0 -0
  93. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  94. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_progressbar/bec_progressbar.py +0 -0
  95. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_progressbar/register_bec_progress_bar.py +0 -0
  96. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
  97. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
  98. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
  99. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
  100. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  101. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
  102. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
  103. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
  104. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  105. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_abort/__init__.py +0 -0
  106. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_abort/abort_button.pyproject +0 -0
  107. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_abort/abort_button_plugin.py +0 -0
  108. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_abort/button_abort.py +0 -0
  109. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_abort/register_abort_button.py +0 -0
  110. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_reset/__init__.py +0 -0
  111. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_reset/button_reset.py +0 -0
  112. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_reset/register_reset_button.py +0 -0
  113. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_reset/reset_button.pyproject +0 -0
  114. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_reset/reset_button_plugin.py +0 -0
  115. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_resume/__init__.py +0 -0
  116. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_resume/button_resume.py +0 -0
  117. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_resume/register_resume_button.py +0 -0
  118. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_resume/resume_button.pyproject +0 -0
  119. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/button_resume/resume_button_plugin.py +0 -0
  120. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/color_button/__init__.py +0 -0
  121. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/color_button/color_button.py +0 -0
  122. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
  123. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
  124. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
  125. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
  126. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
  127. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
  128. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
  129. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
  130. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/console/console.py +0 -0
  131. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/console/console.pyproject +0 -0
  132. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/console/console_plugin.py +0 -0
  133. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/console/register_console.py +0 -0
  134. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dap_combo_box/__init__.py +0 -0
  135. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.py +0 -0
  136. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.pyproject +0 -0
  137. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box_plugin.py +0 -0
  138. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dap_combo_box/register_dap_combo_box.py +0 -0
  139. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dark_mode_button/__init__.py +0 -0
  140. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.py +0 -0
  141. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject +0 -0
  142. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +0 -0
  143. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py +0 -0
  144. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/__init__.py +0 -0
  145. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
  146. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
  147. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
  148. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
  149. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
  150. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
  151. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
  152. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_combobox/__init__.py +0 -0
  153. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
  154. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
  155. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
  156. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
  157. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_line_edit/__init__.py +0 -0
  158. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
  159. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
  160. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
  161. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
  162. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dock/__init__.py +0 -0
  163. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dock/dock.py +0 -0
  164. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dock/dock_area.py +0 -0
  165. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
  166. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
  167. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
  168. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/__init__.py +0 -0
  169. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/figure.py +0 -0
  170. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  171. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
  172. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
  173. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  174. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  175. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  176. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  177. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  178. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  179. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/image/__init__.py +0 -0
  180. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
  181. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
  182. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
  183. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  184. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  185. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/__init__.py +0 -0
  186. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  187. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  188. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog.py +0 -0
  189. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  190. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  191. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  192. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/__init__.py +0 -0
  193. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
  194. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
  195. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py +0 -0
  196. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
  197. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
  198. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
  199. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
  200. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/position_indicator/__init__.py +0 -0
  201. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
  202. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
  203. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
  204. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
  205. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/__init__.py +0 -0
  206. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_box.py +0 -0
  207. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
  208. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_box.ui +0 -0
  209. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
  210. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -0
  211. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
  212. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +0 -0
  213. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
  214. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
  215. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
  216. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
  217. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
  218. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
  219. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
  220. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  221. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  222. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  223. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
  224. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  225. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
  226. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
  227. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  228. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/spinner/__init__.py +0 -0
  229. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
  230. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/spinner/spinner.py +0 -0
  231. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
  232. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
  233. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/stop_button/__init__.py +0 -0
  234. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
  235. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
  236. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
  237. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
  238. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/text_box/__init__.py +0 -0
  239. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
  240. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/text_box/text_box.py +0 -0
  241. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
  242. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
  243. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/toggle/__init__.py +0 -0
  244. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
  245. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/toggle/toggle.py +0 -0
  246. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
  247. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
  248. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/vscode/__init__.py +0 -0
  249. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
  250. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
  251. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
  252. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/vscode/vscode.py +0 -0
  253. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/__init__.py +0 -0
  254. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
  255. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
  256. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
  257. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
  258. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
  259. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
  260. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  261. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
  262. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
  263. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/website/__init__.py +0 -0
  264. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/website/register_website_widget.py +0 -0
  265. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/website/website.py +0 -0
  266. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
  267. {bec_widgets-0.115.0 → bec_widgets-0.117.0}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
@@ -1,6 +1,37 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.117.0 (2024-10-11)
5
+
6
+ ### Features
7
+
8
+ * feat(utils): FPS counter utility based on the viewBox updates, integrated to waveform and image widget ([`8c5ef26`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8c5ef268430d5243ac05fcbbdb6b76ad24ac5735))
9
+
10
+ ### Unknown
11
+
12
+ * tests(plot_base): tests extended ([`8dc892d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8dc892df0a47ccbdd812555b7c5775a455a23ede))
13
+
14
+
15
+ ## v0.116.0 (2024-10-11)
16
+
17
+ ### Build System
18
+
19
+ * build: fix PySide6 to 6.7.2 ([`908dbc1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/908dbc1760da5b323722207163f00850b84fb90b))
20
+
21
+ ### Features
22
+
23
+ * feat: UI changes to have top toolbar with compact popup widgets (fix issue #360) ([`499b6b9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/499b6b9a12efd931b5728b519404c41a7e29e4d6))
24
+
25
+ * feat: adapt BECQueue and BECStatusBox widgets to use CompactPopupWidget ([`94ce92f`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/94ce92f5b054d25ea3bb7976c1f75e14b78b9edc))
26
+
27
+ * feat: add 'CompactPopupWidget' container widget
28
+
29
+ Makes it easy to write widgets which can have a compact
30
+ representation with LED-like global state indicator,
31
+ with the possibility to display a popup dialog with more
32
+ complete UI ([`49268e3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/49268e3829406d70b09e4d88989812f5578e46f4))
33
+
34
+
4
35
  ## v0.115.0 (2024-10-08)
5
36
 
6
37
  ### Features
@@ -143,31 +174,3 @@ Fixes #361, do not try to change x axis when not permitted ([`efa2763`](https://
143
174
  ### Features
144
175
 
145
176
  * feat(progressbar): added bec progressbar ([`f6d1d0b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f6d1d0bbe3ba30a3b7291cd36a1f7f8e6bd5b895))
146
-
147
- * feat(generate_cli): added support for property and qproperty setter ([`a52182d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a52182dca978833bfc3fad755c596d3a2ef45c42))
148
-
149
-
150
- ## v0.107.0 (2024-09-06)
151
-
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
- ### Refactoring
161
-
162
- * 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.117.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>
@@ -1135,6 +1135,15 @@ class BECImageShow(RPCBase):
1135
1135
  y(bool): Show grid on the y-axis.
1136
1136
  """
1137
1137
 
1138
+ @rpc_call
1139
+ def enable_fps_monitor(self, enable: "bool" = True):
1140
+ """
1141
+ Enable the FPS monitor.
1142
+
1143
+ Args:
1144
+ enable(bool): True to enable, False to disable.
1145
+ """
1146
+
1138
1147
  @rpc_call
1139
1148
  def lock_aspect_ratio(self, lock):
1140
1149
  """
@@ -1330,6 +1339,15 @@ class BECImageWidget(RPCBase):
1330
1339
  y_grid(bool): Visibility of the y-axis grid.
1331
1340
  """
1332
1341
 
1342
+ @rpc_call
1343
+ def enable_fps_monitor(self, enabled: "bool"):
1344
+ """
1345
+ Enable the FPS monitor of the plot widget.
1346
+
1347
+ Args:
1348
+ enabled(bool): If True, enable the FPS monitor.
1349
+ """
1350
+
1333
1351
  @rpc_call
1334
1352
  def lock_aspect_ratio(self, lock: "bool"):
1335
1353
  """
@@ -1666,6 +1684,15 @@ class BECPlotBase(RPCBase):
1666
1684
  show(bool): Show the outer axes.
1667
1685
  """
1668
1686
 
1687
+ @rpc_call
1688
+ def enable_fps_monitor(self, enable: "bool" = True):
1689
+ """
1690
+ Enable the FPS monitor.
1691
+
1692
+ Args:
1693
+ enable(bool): True to enable, False to disable.
1694
+ """
1695
+
1669
1696
  @rpc_call
1670
1697
  def lock_aspect_ratio(self, lock):
1671
1698
  """
@@ -2069,6 +2096,15 @@ class BECWaveform(RPCBase):
2069
2096
  colormap(str, optional): Scale the colors of curves to colormap. If None, use the default color palette.
2070
2097
  """
2071
2098
 
2099
+ @rpc_call
2100
+ def enable_fps_monitor(self, enable: "bool" = True):
2101
+ """
2102
+ Enable the FPS monitor.
2103
+
2104
+ Args:
2105
+ enable(bool): True to enable, False to disable.
2106
+ """
2107
+
2072
2108
  @rpc_call
2073
2109
  def lock_aspect_ratio(self, lock):
2074
2110
  """
@@ -2374,6 +2410,15 @@ class BECWaveformWidget(RPCBase):
2374
2410
  y_grid(bool): Visibility of the y-axis grid.
2375
2411
  """
2376
2412
 
2413
+ @rpc_call
2414
+ def enable_fps_monitor(self, enabled: "bool"):
2415
+ """
2416
+ Enable the FPS monitor of the plot widget.
2417
+
2418
+ Args:
2419
+ enabled(bool): If True, enable the FPS monitor.
2420
+ """
2421
+
2377
2422
  @rpc_call
2378
2423
  def lock_aspect_ratio(self, lock: "bool"):
2379
2424
  """
@@ -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()
@@ -0,0 +1,84 @@
1
+ """
2
+ This module provides a utility class for counting and reporting frames per second (FPS) in a PyQtGraph application.
3
+
4
+ Classes:
5
+ FPSCounter: A class that monitors the paint events of a `ViewBox` to calculate and emit FPS values.
6
+
7
+ Usage:
8
+ The `FPSCounter` class can be used to monitor the rendering performance of a `ViewBox` in a PyQtGraph application.
9
+ It connects to the `ViewBox`'s paint event and calculates the FPS over a specified interval, emitting the FPS value
10
+ at regular intervals.
11
+
12
+ Example:
13
+ from qtpy import QtWidgets, QtCore
14
+ import pyqtgraph as pg
15
+ from fps_counter import FPSCounter
16
+
17
+ app = pg.mkQApp("FPS Counter Example")
18
+ win = pg.GraphicsLayoutWidget()
19
+ win.show()
20
+
21
+ vb = pg.ViewBox()
22
+ plot_item = pg.PlotItem(viewBox=vb)
23
+ win.addItem(plot_item)
24
+
25
+ fps_counter = FPSCounter(vb)
26
+ fps_counter.sigFpsUpdate.connect(lambda fps: print(f"FPS: {fps:.2f}"))
27
+
28
+ sys.exit(app.exec_())
29
+ """
30
+
31
+ from time import perf_counter
32
+
33
+ import pyqtgraph as pg
34
+ from qtpy import QtCore
35
+
36
+
37
+ class FPSCounter(QtCore.QObject):
38
+ """
39
+ A utility class for counting and reporting frames per second (FPS).
40
+
41
+ This class connects to a `ViewBox`'s paint event to count the number of
42
+ frames rendered and calculates the FPS over a specified interval. It emits
43
+ a signal with the FPS value at regular intervals.
44
+
45
+ Attributes:
46
+ sigFpsUpdate (QtCore.Signal): Signal emitted with the FPS value.
47
+ view_box (pg.ViewBox): The `ViewBox` instance to monitor.
48
+ """
49
+
50
+ sigFpsUpdate = QtCore.Signal(float)
51
+
52
+ def __init__(self, view_box):
53
+ super().__init__()
54
+ self.view_box = view_box
55
+ self.view_box.sigPaint.connect(self.increment_count)
56
+ self.count = 0
57
+ self.last_update = perf_counter()
58
+ self.timer = QtCore.QTimer()
59
+ self.timer.timeout.connect(self.calculate_fps)
60
+ self.timer.start(1000)
61
+
62
+ def increment_count(self):
63
+ """
64
+ Increment the frame count when the `ViewBox` is painted.
65
+ """
66
+ self.count += 1
67
+
68
+ def calculate_fps(self):
69
+ """
70
+ Calculate the frames per second (FPS) based on the number of frames
71
+ """
72
+ now = perf_counter()
73
+ elapsed = now - self.last_update
74
+ fps = self.count / elapsed if elapsed > 0 else 0.0
75
+ self.last_update = now
76
+ self.count = 0
77
+ self.sigFpsUpdate.emit(fps)
78
+
79
+ def cleanup(self):
80
+ """
81
+ Clean up the FPS counter by stopping the timer and disconnecting the signal.
82
+ """
83
+ self.timer.stop()
84
+ self.timer.timeout.disconnect(self.calculate_fps)