bec-widgets 0.106.0__tar.gz → 0.108.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 (257) hide show
  1. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/CHANGELOG.md +30 -26
  2. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/PKG-INFO +1 -1
  3. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/client.py +90 -1
  4. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/generate_cli.py +20 -3
  5. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/server.py +7 -2
  6. bec_widgets-0.108.0/bec_widgets/utils/linear_region_selector.py +72 -0
  7. bec_widgets-0.108.0/bec_widgets/widgets/bec_progressbar/bec_progress_bar.pyproject +1 -0
  8. bec_widgets-0.108.0/bec_widgets/widgets/bec_progressbar/bec_progress_bar_plugin.py +54 -0
  9. bec_widgets-0.108.0/bec_widgets/widgets/bec_progressbar/bec_progressbar.py +257 -0
  10. bec_widgets-0.108.0/bec_widgets/widgets/bec_progressbar/register_bec_progress_bar.py +15 -0
  11. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/waveform/waveform.py +126 -8
  12. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/waveform_widget.py +69 -4
  13. bec_widgets-0.108.0/bec_widgets/widgets/website/__init__.py +0 -0
  14. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/pyproject.toml +1 -1
  15. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.git_hooks/pre-commit +0 -0
  16. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.gitignore +0 -0
  17. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.gitlab/issue_templates/bug_report_template.md +0 -0
  18. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  19. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.gitlab/issue_templates/feature_request_template.md +0 -0
  20. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.gitlab/merge_request_templates/default.md +0 -0
  21. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.gitlab-ci.yml +0 -0
  22. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.pylintrc +0 -0
  23. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/.readthedocs.yaml +0 -0
  24. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/LICENSE +0 -0
  25. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/README.md +0 -0
  26. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/__init__.py +0 -0
  27. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  28. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  29. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/status_icons/error.svg +0 -0
  30. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/status_icons/not_connected.svg +0 -0
  31. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/status_icons/refresh.svg +0 -0
  32. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/status_icons/running.svg +0 -0
  33. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/assets/status_icons/warning.svg +0 -0
  34. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/__init__.py +0 -0
  35. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/auto_updates.py +0 -0
  36. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/client_utils.py +0 -0
  37. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/rpc_register.py +0 -0
  38. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  39. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/__init__.py +0 -0
  40. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  41. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  42. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  43. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  44. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  45. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  46. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  47. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  48. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  49. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  50. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  51. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  52. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  53. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/qt_utils/__init__.py +0 -0
  54. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/qt_utils/error_popups.py +0 -0
  55. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
  56. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/qt_utils/settings_dialog.py +0 -0
  57. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/qt_utils/toolbar.py +0 -0
  58. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/__init__.py +0 -0
  59. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/bec_connector.py +0 -0
  60. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/bec_designer.py +0 -0
  61. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  62. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/bec_table.py +0 -0
  63. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/bec_widget.py +0 -0
  64. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/colors.py +0 -0
  65. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/container_utils.py +0 -0
  66. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/crosshair.py +0 -0
  67. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/entry_validator.py +0 -0
  68. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  69. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/layout_manager.py +0 -0
  70. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  71. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  72. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/plugin_utils.py +0 -0
  73. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/reference_utils.py +0 -0
  74. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  75. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/thread_checker.py +0 -0
  76. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/ui_loader.py +0 -0
  77. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/validator_delegate.py +0 -0
  78. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/widget_io.py +0 -0
  79. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  80. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/__init__.py +0 -0
  81. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/base_classes/__init__.py +0 -0
  82. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
  83. {bec_widgets-0.106.0/bec_widgets/widgets/bec_queue → bec_widgets-0.108.0/bec_widgets/widgets/bec_progressbar}/__init__.py +0 -0
  84. {bec_widgets-0.106.0/bec_widgets/widgets/bec_status_box → bec_widgets-0.108.0/bec_widgets/widgets/bec_queue}/__init__.py +0 -0
  85. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_queue/bec_queue.py +0 -0
  86. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
  87. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
  88. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
  89. {bec_widgets-0.106.0/bec_widgets/widgets/button_abort → bec_widgets-0.108.0/bec_widgets/widgets/bec_status_box}/__init__.py +0 -0
  90. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
  91. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
  92. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
  93. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
  94. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  95. {bec_widgets-0.106.0/bec_widgets/widgets/button_reset → bec_widgets-0.108.0/bec_widgets/widgets/button_abort}/__init__.py +0 -0
  96. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_abort/abort_button.pyproject +0 -0
  97. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_abort/abort_button_plugin.py +0 -0
  98. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_abort/button_abort.py +0 -0
  99. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_abort/register_abort_button.py +0 -0
  100. {bec_widgets-0.106.0/bec_widgets/widgets/button_resume → bec_widgets-0.108.0/bec_widgets/widgets/button_reset}/__init__.py +0 -0
  101. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_reset/button_reset.py +0 -0
  102. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_reset/register_reset_button.py +0 -0
  103. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_reset/reset_button.pyproject +0 -0
  104. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_reset/reset_button_plugin.py +0 -0
  105. {bec_widgets-0.106.0/bec_widgets/widgets/color_button → bec_widgets-0.108.0/bec_widgets/widgets/button_resume}/__init__.py +0 -0
  106. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_resume/button_resume.py +0 -0
  107. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_resume/register_resume_button.py +0 -0
  108. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_resume/resume_button.pyproject +0 -0
  109. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/button_resume/resume_button_plugin.py +0 -0
  110. {bec_widgets-0.106.0/bec_widgets/widgets/colormap_selector → bec_widgets-0.108.0/bec_widgets/widgets/color_button}/__init__.py +0 -0
  111. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/color_button/color_button.py +0 -0
  112. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
  113. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
  114. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
  115. {bec_widgets-0.106.0/bec_widgets/widgets/dap_combo_box → bec_widgets-0.108.0/bec_widgets/widgets/colormap_selector}/__init__.py +0 -0
  116. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
  117. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
  118. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
  119. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
  120. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/console/console.py +0 -0
  121. {bec_widgets-0.106.0/bec_widgets/widgets/dark_mode_button → bec_widgets-0.108.0/bec_widgets/widgets/dap_combo_box}/__init__.py +0 -0
  122. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.py +0 -0
  123. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.pyproject +0 -0
  124. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box_plugin.py +0 -0
  125. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dap_combo_box/register_dap_combo_box.py +0 -0
  126. {bec_widgets-0.106.0/bec_widgets/widgets/device_browser → bec_widgets-0.108.0/bec_widgets/widgets/dark_mode_button}/__init__.py +0 -0
  127. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.py +0 -0
  128. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject +0 -0
  129. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +0 -0
  130. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py +0 -0
  131. {bec_widgets-0.106.0/bec_widgets/widgets/device_combobox → bec_widgets-0.108.0/bec_widgets/widgets/device_browser}/__init__.py +0 -0
  132. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
  133. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
  134. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
  135. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
  136. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
  137. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
  138. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
  139. {bec_widgets-0.106.0/bec_widgets/widgets/device_line_edit → bec_widgets-0.108.0/bec_widgets/widgets/device_combobox}/__init__.py +0 -0
  140. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
  141. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
  142. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
  143. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
  144. {bec_widgets-0.106.0/bec_widgets/widgets/figure/plots → bec_widgets-0.108.0/bec_widgets/widgets/device_line_edit}/__init__.py +0 -0
  145. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
  146. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
  147. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
  148. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
  149. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dock/__init__.py +0 -0
  150. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dock/dock.py +0 -0
  151. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dock/dock_area.py +0 -0
  152. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
  153. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
  154. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
  155. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/__init__.py +0 -0
  156. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/figure.py +0 -0
  157. {bec_widgets-0.106.0/bec_widgets/widgets/figure/plots/image → bec_widgets-0.108.0/bec_widgets/widgets/figure/plots}/__init__.py +0 -0
  158. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
  159. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
  160. {bec_widgets-0.106.0/bec_widgets/widgets/figure/plots/motor_map → bec_widgets-0.108.0/bec_widgets/widgets/figure/plots/image}/__init__.py +0 -0
  161. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  162. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  163. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  164. {bec_widgets-0.106.0/bec_widgets/widgets/figure/plots/waveform → bec_widgets-0.108.0/bec_widgets/widgets/figure/plots/motor_map}/__init__.py +0 -0
  165. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  166. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  167. {bec_widgets-0.106.0/bec_widgets/widgets/image → bec_widgets-0.108.0/bec_widgets/widgets/figure/plots/waveform}/__init__.py +0 -0
  168. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  169. {bec_widgets-0.106.0/bec_widgets/widgets/jupyter_console → bec_widgets-0.108.0/bec_widgets/widgets/image}/__init__.py +0 -0
  170. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
  171. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
  172. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/image/image_widget.py +0 -0
  173. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
  174. {bec_widgets-0.106.0/bec_widgets/widgets/lmfit_dialog → bec_widgets-0.108.0/bec_widgets/widgets/jupyter_console}/__init__.py +0 -0
  175. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  176. {bec_widgets-0.106.0/bec_widgets/widgets/motor_map → bec_widgets-0.108.0/bec_widgets/widgets/lmfit_dialog}/__init__.py +0 -0
  177. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  178. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  179. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog.py +0 -0
  180. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  181. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  182. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  183. {bec_widgets-0.106.0/bec_widgets/widgets/motor_map/motor_map_dialog → bec_widgets-0.108.0/bec_widgets/widgets/motor_map}/__init__.py +0 -0
  184. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
  185. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
  186. {bec_widgets-0.106.0/bec_widgets/widgets/position_indicator → bec_widgets-0.108.0/bec_widgets/widgets/motor_map/motor_map_dialog}/__init__.py +0 -0
  187. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
  188. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
  189. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
  190. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
  191. {bec_widgets-0.106.0/bec_widgets/widgets/positioner_box → bec_widgets-0.108.0/bec_widgets/widgets/position_indicator}/__init__.py +0 -0
  192. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
  193. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
  194. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
  195. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
  196. {bec_widgets-0.106.0/bec_widgets/widgets/spinner → bec_widgets-0.108.0/bec_widgets/widgets/positioner_box}/__init__.py +0 -0
  197. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_box.py +0 -0
  198. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
  199. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_box.ui +0 -0
  200. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
  201. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -0
  202. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
  203. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +0 -0
  204. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
  205. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
  206. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
  207. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
  208. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
  209. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
  210. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
  211. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  212. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  213. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  214. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
  215. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  216. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
  217. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
  218. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  219. {bec_widgets-0.106.0/bec_widgets/widgets/stop_button → bec_widgets-0.108.0/bec_widgets/widgets/spinner}/__init__.py +0 -0
  220. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
  221. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/spinner/spinner.py +0 -0
  222. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
  223. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
  224. {bec_widgets-0.106.0/bec_widgets/widgets/text_box → bec_widgets-0.108.0/bec_widgets/widgets/stop_button}/__init__.py +0 -0
  225. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
  226. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
  227. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
  228. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
  229. {bec_widgets-0.106.0/bec_widgets/widgets/toggle → bec_widgets-0.108.0/bec_widgets/widgets/text_box}/__init__.py +0 -0
  230. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
  231. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/text_box/text_box.py +0 -0
  232. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
  233. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
  234. {bec_widgets-0.106.0/bec_widgets/widgets/vscode → bec_widgets-0.108.0/bec_widgets/widgets/toggle}/__init__.py +0 -0
  235. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
  236. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/toggle/toggle.py +0 -0
  237. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
  238. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
  239. {bec_widgets-0.106.0/bec_widgets/widgets/waveform → bec_widgets-0.108.0/bec_widgets/widgets/vscode}/__init__.py +0 -0
  240. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
  241. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
  242. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
  243. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/vscode/vscode.py +0 -0
  244. {bec_widgets-0.106.0/bec_widgets/widgets/waveform/waveform_popups → bec_widgets-0.108.0/bec_widgets/widgets/waveform}/__init__.py +0 -0
  245. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
  246. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
  247. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
  248. {bec_widgets-0.106.0/bec_widgets/widgets/waveform/waveform_popups/curve_dialog → bec_widgets-0.108.0/bec_widgets/widgets/waveform/waveform_popups}/__init__.py +0 -0
  249. {bec_widgets-0.106.0/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog → bec_widgets-0.108.0/bec_widgets/widgets/waveform/waveform_popups/curve_dialog}/__init__.py +0 -0
  250. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
  251. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  252. {bec_widgets-0.106.0/bec_widgets/widgets/website → bec_widgets-0.108.0/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog}/__init__.py +0 -0
  253. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
  254. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/website/register_website_widget.py +0 -0
  255. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/website/website.py +0 -0
  256. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
  257. {bec_widgets-0.106.0 → bec_widgets-0.108.0}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
@@ -1,5 +1,35 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.108.0 (2024-09-06)
4
+
5
+ ### Documentation
6
+
7
+ * docs(progressbar): added docs ([`7d07cea`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7d07cea946f9c884477b01bebfb60b332ff09e0a))
8
+
9
+ ### Feature
10
+
11
+ * feat(progressbar): added bec progressbar ([`f6d1d0b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f6d1d0bbe3ba30a3b7291cd36a1f7f8e6bd5b895))
12
+
13
+ * feat(generate_cli): added support for property and qproperty setter ([`a52182d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a52182dca978833bfc3fad755c596d3a2ef45c42))
14
+
15
+ ## v0.107.0 (2024-09-06)
16
+
17
+ ### Documentation
18
+
19
+ * docs: extend waveform docs ([`e6976dc`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e6976dc15105209852090a00a97b7cda723142e9))
20
+
21
+ ### Feature
22
+
23
+ * feat: add roi select for dap, allow automatic clear curves on plot request ([`7bdca84`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7bdca8431496fe6562d2c28f5a6af869d1a2e654))
24
+
25
+ ### Refactor
26
+
27
+ * refactor: change style to bec_accent_colors ([`bd126dd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/bd126dddbbec3e6c448cce263433d328d577c5c0))
28
+
29
+ ### Test
30
+
31
+ * test: add tests, including extension to end-2-end test ([`b1aff6d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b1aff6d791ff847eb2f628e66ccaa4672fdeea08))
32
+
3
33
  ## v0.106.0 (2024-09-05)
4
34
 
5
35
  ### Feature
@@ -131,29 +161,3 @@
131
161
  * fix(positioner_box): fixed positioner box dialog; added test; closes #332 ([`0bf1cf9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0bf1cf9b8ab2f9171d5ff63d4e3672eb93e9a5fa))
132
162
 
133
163
  ## v0.99.14 (2024-08-30)
134
-
135
- ### Fix
136
-
137
- * fix(color_button): signal and slot added for selecting color and for emitting color after change ([`99a98de`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/99a98de8a3b7a83d71e4b567e865ac6f5c62a754))
138
-
139
- * fix(color_button): inheritance changed to QWidget ([`3c0e501`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3c0e501c56227d4d98ff0ac2186ff5065bff8d7a))
140
-
141
- ## v0.99.13 (2024-08-30)
142
-
143
- ### Documentation
144
-
145
- * docs: minor updates to the widget tutorial ([`ec9c8f2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ec9c8f29633364c45ebd998a5411d428c1ce488d))
146
-
147
- * docs(widget tutorial): step by step guide added ([`b32ced8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b32ced85fff628a9e1303a781630cdae3865238e))
148
-
149
- ### Fix
150
-
151
- * fix(dark mode button): fixed dark mode button state for external updates, including auto ([`a3110d9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a3110d98147295dcb1f9353f9aaf5461cba9232a))
152
-
153
- ## v0.99.12 (2024-08-29)
154
-
155
- ### Fix
156
-
157
- * fix(toolbar): widget action added ([`2efd487`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2efd48736cbe04e84533f7933c552ea8274e2162))
158
-
159
- * fix(reset_button): reset button added ([`6ed1efc`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6ed1efc6af193908f70aa37fb73157d2ca6a62f4))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.106.0
3
+ Version: 0.108.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
@@ -19,6 +19,7 @@ class Widgets(str, enum.Enum):
19
19
  BECFigure = "BECFigure"
20
20
  BECImageWidget = "BECImageWidget"
21
21
  BECMotorMapWidget = "BECMotorMapWidget"
22
+ BECProgressBar = "BECProgressBar"
22
23
  BECQueue = "BECQueue"
23
24
  BECStatusBox = "BECStatusBox"
24
25
  BECWaveformWidget = "BECWaveformWidget"
@@ -1693,6 +1694,57 @@ class BECPlotBase(RPCBase):
1693
1694
  """
1694
1695
 
1695
1696
 
1697
+ class BECProgressBar(RPCBase):
1698
+ @rpc_call
1699
+ def set_value(self, value):
1700
+ """
1701
+ Set the value of the progress bar.
1702
+
1703
+ Args:
1704
+ value (float): The value to set.
1705
+ """
1706
+
1707
+ @rpc_call
1708
+ def set_maximum(self, maximum: float):
1709
+ """
1710
+ Set the maximum value of the progress bar.
1711
+
1712
+ Args:
1713
+ maximum (float): The maximum value.
1714
+ """
1715
+
1716
+ @rpc_call
1717
+ def set_minimum(self, minimum: float):
1718
+ """
1719
+ Set the minimum value of the progress bar.
1720
+
1721
+ Args:
1722
+ minimum (float): The minimum value.
1723
+ """
1724
+
1725
+ @property
1726
+ @rpc_call
1727
+ def label_template(self):
1728
+ """
1729
+ The template for the center label. Use $value, $maximum, and $percentage to insert the values.
1730
+
1731
+ Examples:
1732
+ >>> progressbar.label_template = "$value / $maximum - $percentage %"
1733
+ >>> progressbar.label_template = "$value / $percentage %"
1734
+ """
1735
+
1736
+ @label_template.setter
1737
+ @rpc_call
1738
+ def label_template(self):
1739
+ """
1740
+ The template for the center label. Use $value, $maximum, and $percentage to insert the values.
1741
+
1742
+ Examples:
1743
+ >>> progressbar.label_template = "$value / $maximum - $percentage %"
1744
+ >>> progressbar.label_template = "$value / $percentage %"
1745
+ """
1746
+
1747
+
1696
1748
  class BECQueue(RPCBase):
1697
1749
  @property
1698
1750
  @rpc_call
@@ -1887,7 +1939,7 @@ class BECWaveform(RPCBase):
1887
1939
  """
1888
1940
 
1889
1941
  @rpc_call
1890
- def get_all_data(self, output: "Literal['dict', 'pandas']" = "dict") -> "dict | pd.DataFrame":
1942
+ def get_all_data(self, output: "Literal['dict', 'pandas']" = "dict") -> "dict":
1891
1943
  """
1892
1944
  Extract all curve data into a dictionary or a pandas DataFrame.
1893
1945
 
@@ -2050,6 +2102,25 @@ class BECWaveform(RPCBase):
2050
2102
  size(int): Font size of the legend.
2051
2103
  """
2052
2104
 
2105
+ @rpc_call
2106
+ def toggle_roi(self, toggled: "bool") -> "None":
2107
+ """
2108
+ Toggle the linear region selector on the plot.
2109
+
2110
+ Args:
2111
+ toggled(bool): If True, enable the linear region selector.
2112
+ """
2113
+
2114
+ @rpc_call
2115
+ def select_roi(self, region: "tuple[float, float]"):
2116
+ """
2117
+ Set the fit region of the plot widget. At the moment only a single region is supported.
2118
+ To remove the roi region again, use toggle_roi_region
2119
+
2120
+ Args:
2121
+ region(tuple[float, float]): The fit region.
2122
+ """
2123
+
2053
2124
 
2054
2125
  class BECWaveformWidget(RPCBase):
2055
2126
  @property
@@ -2321,6 +2392,24 @@ class BECWaveformWidget(RPCBase):
2321
2392
  Export the plot widget to Matplotlib.
2322
2393
  """
2323
2394
 
2395
+ @rpc_call
2396
+ def toggle_roi(self, checked: "bool"):
2397
+ """
2398
+ Toggle the linear region selector.
2399
+
2400
+ Args:
2401
+ checked(bool): If True, enable the linear region selector.
2402
+ """
2403
+
2404
+ @rpc_call
2405
+ def select_roi(self, region: "tuple"):
2406
+ """
2407
+ Set the region of interest of the plot widget.
2408
+
2409
+ Args:
2410
+ region(tuple): Region of interest.
2411
+ """
2412
+
2324
2413
 
2325
2414
  class DapComboBox(RPCBase):
2326
2415
  @rpc_call
@@ -8,6 +8,7 @@ import sys
8
8
 
9
9
  import black
10
10
  import isort
11
+ from qtpy.QtCore import Property as QtProperty
11
12
 
12
13
  from bec_widgets.utils.generate_designer_plugin import DesignerPluginGenerator
13
14
  from bec_widgets.utils.plugin_utils import BECClassContainer, get_rpc_classes
@@ -90,11 +91,27 @@ class {class_name}(RPCBase):"""
90
91
  self.content += """...
91
92
  """
92
93
  for method in cls.USER_ACCESS:
93
- obj = getattr(cls, method)
94
- if isinstance(obj, property):
95
- self.content += """
94
+ is_property_setter = False
95
+ obj = getattr(cls, method, None)
96
+ if obj is None:
97
+ obj = getattr(cls, method.split(".setter")[0], None)
98
+ is_property_setter = True
99
+ method = method.split(".setter")[0]
100
+ if obj is None:
101
+ raise AttributeError(
102
+ f"Method {method} not found in class {cls.__name__}. Please check the USER_ACCESS list."
103
+ )
104
+ if isinstance(obj, (property, QtProperty)):
105
+ # for the cli, we can map qt properties to regular properties
106
+ if is_property_setter:
107
+ self.content += f"""
108
+ @{method}.setter
109
+ @rpc_call"""
110
+ else:
111
+ self.content += """
96
112
  @property
97
113
  @rpc_call"""
114
+
98
115
  sig = str(inspect.signature(obj.fget))
99
116
  doc = inspect.getdoc(obj.fget)
100
117
  else:
@@ -86,10 +86,15 @@ class BECWidgetsCLIServer:
86
86
  return obj
87
87
 
88
88
  def run_rpc(self, obj, method, args, kwargs):
89
+ logger.debug(f"Running RPC instruction: {method} with args: {args}, kwargs: {kwargs}")
89
90
  method_obj = getattr(obj, method)
90
91
  # check if the method accepts args and kwargs
91
92
  if not callable(method_obj):
92
- res = method_obj
93
+ if not args:
94
+ res = method_obj
95
+ else:
96
+ setattr(obj, method, args[0])
97
+ res = None
93
98
  else:
94
99
  sig = inspect.signature(method_obj)
95
100
  if sig.parameters:
@@ -245,5 +250,5 @@ def main():
245
250
 
246
251
 
247
252
  if __name__ == "__main__": # pragma: no cover
248
- sys.argv = ["bec_widgets.cli.server", "--id", "test", "--gui_class", "BECDockArea"]
253
+ sys.argv = ["bec_widgets.cli.server", "--id", "e2860", "--gui_class", "BECDockArea"]
249
254
  main()
@@ -0,0 +1,72 @@
1
+ """ Module for a thin wrapper (LinearRegionWrapper) around the LinearRegionItem in pyqtgraph.
2
+ The class is mainly designed for usage with the BECWaveform and 1D plots. """
3
+
4
+ import pyqtgraph as pg
5
+ from qtpy.QtCore import QObject, Signal, Slot
6
+ from qtpy.QtGui import QColor
7
+
8
+
9
+ class LinearRegionWrapper(QObject):
10
+ """Wrapper class for the LinearRegionItem in pyqtgraph for 1D plots (BECWaveform)
11
+
12
+ Args:
13
+ plot_item (pg.PlotItem): The plot item to add the region selector to.
14
+ parent (QObject): The parent object.
15
+ color (QColor): The color of the region selector.
16
+ hover_color (QColor): The color of the region selector when the mouse is over it.
17
+ """
18
+
19
+ # Signal with the region tuble (start, end)
20
+ region_changed = Signal(tuple)
21
+
22
+ def __init__(
23
+ self, plot_item: pg.PlotItem, color: QColor = None, hover_color: QColor = None, parent=None
24
+ ):
25
+ super().__init__(parent)
26
+ self._edge_width = 2
27
+ self.plot_item = plot_item
28
+ self.linear_region_selector = pg.LinearRegionItem()
29
+ self.proxy = None
30
+ self.change_roi_color((color, hover_color))
31
+
32
+ # Slot for changing the color of the region selector (edge and fill)
33
+ @Slot(tuple)
34
+ def change_roi_color(self, colors: tuple[QColor | str | tuple, QColor | str | tuple]):
35
+ """Change the color and hover color of the region selector.
36
+ Hover color means the color when the mouse is over the region.
37
+
38
+ Args:
39
+ colors (tuple): Tuple with the color and hover color
40
+ """
41
+ color, hover_color = colors
42
+ if color is not None:
43
+ self.linear_region_selector.setBrush(pg.mkBrush(color))
44
+ if hover_color is not None:
45
+ self.linear_region_selector.setHoverBrush(pg.mkBrush(hover_color))
46
+
47
+ @Slot()
48
+ def add_region_selector(self):
49
+ """Add the region selector to the plot item"""
50
+ self.plot_item.addItem(self.linear_region_selector)
51
+ # Use proxy to limit the update rate of the region change signal to 10Hz
52
+ self.proxy = pg.SignalProxy(
53
+ self.linear_region_selector.sigRegionChanged,
54
+ rateLimit=10,
55
+ slot=self._region_change_proxy,
56
+ )
57
+
58
+ @Slot()
59
+ def remove_region_selector(self):
60
+ """Remove the region selector from the plot item"""
61
+ self.proxy.disconnect()
62
+ self.proxy = None
63
+ self.plot_item.removeItem(self.linear_region_selector)
64
+
65
+ def _region_change_proxy(self):
66
+ """Emit the region change signal"""
67
+ region = self.linear_region_selector.getRegion()
68
+ self.region_changed.emit(region)
69
+
70
+ def cleanup(self):
71
+ """Cleanup the widget."""
72
+ self.remove_region_selector()
@@ -0,0 +1 @@
1
+ {'files': ['bec_progressbar.py']}
@@ -0,0 +1,54 @@
1
+ # Copyright (C) 2022 The Qt Company Ltd.
2
+ # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
+
4
+ from qtpy.QtDesigner import QDesignerCustomWidgetInterface
5
+
6
+ from bec_widgets.utils.bec_designer import designer_material_icon
7
+ from bec_widgets.widgets.bec_progressbar.bec_progressbar import BECProgressBar
8
+
9
+ DOM_XML = """
10
+ <ui language='c++'>
11
+ <widget class='BECProgressBar' name='bec_progress_bar'>
12
+ </widget>
13
+ </ui>
14
+ """
15
+
16
+
17
+ class BECProgressBarPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
18
+ def __init__(self):
19
+ super().__init__()
20
+ self._form_editor = None
21
+
22
+ def createWidget(self, parent):
23
+ t = BECProgressBar(parent)
24
+ return t
25
+
26
+ def domXml(self):
27
+ return DOM_XML
28
+
29
+ def group(self):
30
+ return "BEC Utils"
31
+
32
+ def icon(self):
33
+ return designer_material_icon(BECProgressBar.ICON_NAME)
34
+
35
+ def includeFile(self):
36
+ return "bec_progress_bar"
37
+
38
+ def initialize(self, form_editor):
39
+ self._form_editor = form_editor
40
+
41
+ def isContainer(self):
42
+ return False
43
+
44
+ def isInitialized(self):
45
+ return self._form_editor is not None
46
+
47
+ def name(self):
48
+ return "BECProgressBar"
49
+
50
+ def toolTip(self):
51
+ return "A custom progress bar with smooth transitions and a modern design."
52
+
53
+ def whatsThis(self):
54
+ return self.toolTip()
@@ -0,0 +1,257 @@
1
+ import sys
2
+ from string import Template
3
+
4
+ from qtpy.QtCore import Property, QEasingCurve, QPropertyAnimation, QRectF, Qt, QTimer, Slot
5
+ from qtpy.QtGui import QColor, QPainter, QPainterPath
6
+ from qtpy.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
7
+
8
+ from bec_widgets.utils.bec_widget import BECWidget
9
+
10
+
11
+ class BECProgressBar(BECWidget, QWidget):
12
+ """
13
+ A custom progress bar with smooth transitions. The displayed text can be customized using a template.
14
+ """
15
+
16
+ USER_ACCESS = [
17
+ "set_value",
18
+ "set_maximum",
19
+ "set_minimum",
20
+ "label_template",
21
+ "label_template.setter",
22
+ ]
23
+ ICON_NAME = "page_control"
24
+
25
+ def __init__(self, parent=None, client=None, config=None, gui_id=None):
26
+ super().__init__(client=client, config=config, gui_id=gui_id)
27
+ QWidget.__init__(self, parent=parent)
28
+
29
+ accent_colors = QApplication.instance().theme.accent_colors
30
+
31
+ # internal values
32
+ self._oversampling_factor = 50
33
+ self._value = 0
34
+ self._target_value = 0
35
+ self._maximum = 100 * self._oversampling_factor
36
+
37
+ # User values
38
+ self._user_value = 0
39
+ self._user_minimum = 0
40
+ self._user_maximum = 100
41
+ self._label_template = "$value / $maximum - $percentage %"
42
+
43
+ # Color settings
44
+ self._background_color = QColor(30, 30, 30)
45
+ self._progress_color = accent_colors.highlight # QColor(210, 55, 130)
46
+
47
+ self._completed_color = accent_colors.success
48
+ self._border_color = QColor(50, 50, 50)
49
+
50
+ # layout settings
51
+ self._value_animation = QPropertyAnimation(self, b"_progressbar_value")
52
+ self._value_animation.setDuration(200)
53
+ self._value_animation.setEasingCurve(QEasingCurve.Type.OutCubic)
54
+
55
+ # label on top of the progress bar
56
+ self.center_label = QLabel(self)
57
+ self.center_label.setAlignment(Qt.AlignCenter)
58
+ self.center_label.setStyleSheet("color: white;")
59
+ self.center_label.setMinimumSize(0, 0)
60
+
61
+ layout = QVBoxLayout(self)
62
+ layout.setContentsMargins(0, 0, 0, 0)
63
+ layout.setSpacing(0)
64
+ layout.addWidget(self.center_label)
65
+ self.setLayout(layout)
66
+
67
+ self.update()
68
+
69
+ @Property(str, doc="The template for the center label. Use $value, $maximum, and $percentage.")
70
+ def label_template(self):
71
+ """
72
+ The template for the center label. Use $value, $maximum, and $percentage to insert the values.
73
+
74
+ Examples:
75
+ >>> progressbar.label_template = "$value / $maximum - $percentage %"
76
+ >>> progressbar.label_template = "$value / $percentage %"
77
+
78
+ """
79
+ return self._label_template
80
+
81
+ @label_template.setter
82
+ def label_template(self, template):
83
+ self._label_template = template
84
+ self.set_value(self._user_value)
85
+ self.update()
86
+
87
+ @Property(float, designable=False)
88
+ def _progressbar_value(self):
89
+ """
90
+ The current value of the progress bar.
91
+ """
92
+ return self._value
93
+
94
+ @_progressbar_value.setter
95
+ def _progressbar_value(self, val):
96
+ self._value = val
97
+ self.update()
98
+
99
+ def _update_template(self):
100
+ template = Template(self._label_template)
101
+ return template.safe_substitute(
102
+ value=self._user_value,
103
+ maximum=self._user_maximum,
104
+ percentage=int((self.map_value(self._user_value) / self._maximum) * 100),
105
+ )
106
+
107
+ @Slot(float)
108
+ @Slot(int)
109
+ def set_value(self, value):
110
+ """
111
+ Set the value of the progress bar.
112
+
113
+ Args:
114
+ value (float): The value to set.
115
+ """
116
+ if value > self._user_maximum:
117
+ value = self._user_maximum
118
+ elif value < self._user_minimum:
119
+ value = self._user_minimum
120
+ self._target_value = self.map_value(value)
121
+ self._user_value = value
122
+ self.center_label.setText(self._update_template())
123
+ self.animate_progress()
124
+
125
+ def paintEvent(self, event):
126
+ painter = QPainter(self)
127
+ painter.setRenderHint(QPainter.Antialiasing)
128
+ rect = self.rect().adjusted(10, 0, -10, -1)
129
+
130
+ # Draw background
131
+ painter.setBrush(self._background_color)
132
+ painter.setPen(Qt.NoPen)
133
+ painter.drawRoundedRect(rect, 10, 10) # Rounded corners
134
+
135
+ # Draw border
136
+ painter.setBrush(Qt.NoBrush)
137
+ painter.setPen(self._border_color)
138
+ painter.drawRoundedRect(rect, 10, 10)
139
+
140
+ # Determine progress color based on completion
141
+ if self._value >= self._maximum:
142
+ current_color = self._completed_color
143
+ else:
144
+ current_color = self._progress_color
145
+
146
+ # Set clipping region to preserve the background's rounded corners
147
+ progress_rect = rect.adjusted(
148
+ 0, 0, int(-rect.width() + (self._value / self._maximum) * rect.width()), 0
149
+ )
150
+ clip_path = QPainterPath()
151
+ clip_path.addRoundedRect(QRectF(rect), 10, 10) # Clip to the background's rounded corners
152
+ painter.setClipPath(clip_path)
153
+
154
+ # Draw progress bar
155
+ painter.setBrush(current_color)
156
+ painter.drawRect(progress_rect) # Less rounded, no additional rounding
157
+
158
+ painter.end()
159
+
160
+ def animate_progress(self):
161
+ """
162
+ Animate the progress bar from the current value to the target value.
163
+ """
164
+ self._value_animation.stop()
165
+ self._value_animation.setStartValue(self._value)
166
+ self._value_animation.setEndValue(self._target_value)
167
+ self._value_animation.start()
168
+
169
+ @Property(float)
170
+ def maximum(self):
171
+ """
172
+ The maximum value of the progress bar.
173
+ """
174
+ return self._user_maximum
175
+
176
+ @maximum.setter
177
+ def maximum(self, maximum: float):
178
+ """
179
+ Set the maximum value of the progress bar.
180
+ """
181
+ self.set_maximum(maximum)
182
+
183
+ @Property(float)
184
+ def minimum(self):
185
+ """
186
+ The minimum value of the progress bar.
187
+ """
188
+ return self._user_minimum
189
+
190
+ @minimum.setter
191
+ def minimum(self, minimum: float):
192
+ self.set_minimum(minimum)
193
+
194
+ @Property(float)
195
+ def initial_value(self):
196
+ """
197
+ The initial value of the progress bar.
198
+ """
199
+ return self._user_value
200
+
201
+ @initial_value.setter
202
+ def initial_value(self, value: float):
203
+ self.set_value(value)
204
+
205
+ @Slot(float)
206
+ def set_maximum(self, maximum: float):
207
+ """
208
+ Set the maximum value of the progress bar.
209
+
210
+ Args:
211
+ maximum (float): The maximum value.
212
+ """
213
+ self._user_maximum = maximum
214
+ self.set_value(self._user_value) # Update the value to fit the new range
215
+ self.update()
216
+
217
+ @Slot(float)
218
+ def set_minimum(self, minimum: float):
219
+ """
220
+ Set the minimum value of the progress bar.
221
+
222
+ Args:
223
+ minimum (float): The minimum value.
224
+ """
225
+ self._user_minimum = minimum
226
+ self.set_value(self._user_value) # Update the value to fit the new range
227
+ self.update()
228
+
229
+ def map_value(self, value: float):
230
+ """
231
+ Map the user value to the range [0, 100*self._oversampling_factor] for the progress
232
+ """
233
+ return (
234
+ (value - self._user_minimum) / (self._user_maximum - self._user_minimum) * self._maximum
235
+ )
236
+
237
+
238
+ if __name__ == "__main__": # pragma: no cover
239
+ app = QApplication(sys.argv)
240
+
241
+ progressBar = BECProgressBar()
242
+ progressBar.show()
243
+ progressBar.set_minimum(-100)
244
+ progressBar.set_maximum(0)
245
+
246
+ # Example of setting values
247
+ def update_progress():
248
+ value = progressBar._user_value + 2.5
249
+ if value > progressBar._user_maximum:
250
+ value = -100 # progressBar._maximum / progressBar._upsampling_factor
251
+ progressBar.set_value(value)
252
+
253
+ timer = QTimer()
254
+ timer.timeout.connect(update_progress)
255
+ timer.start(200) # Update every half second
256
+
257
+ sys.exit(app.exec())
@@ -0,0 +1,15 @@
1
+ def main(): # pragma: no cover
2
+ from qtpy import PYSIDE6
3
+
4
+ if not PYSIDE6:
5
+ print("PYSIDE6 is not available in the environment. Cannot patch designer.")
6
+ return
7
+ from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
+
9
+ from bec_widgets.widgets.bec_progressbar.bec_progress_bar_plugin import BECProgressBarPlugin
10
+
11
+ QPyDesignerCustomWidgetCollection.addCustomWidget(BECProgressBarPlugin())
12
+
13
+
14
+ if __name__ == "__main__": # pragma: no cover
15
+ main()