bec-widgets 0.109.1__tar.gz → 0.111.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 (259) hide show
  1. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/CHANGELOG.md +26 -30
  2. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/PKG-INFO +1 -1
  3. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/client.py +42 -0
  4. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/generate_cli.py +1 -0
  5. bec_widgets-0.111.0/bec_widgets/qt_utils/palette_viewer.py +183 -0
  6. bec_widgets-0.111.0/bec_widgets/widgets/position_indicator/position_indicator.py +291 -0
  7. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_box.py +6 -2
  8. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_box.ui +14 -1
  9. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -2
  10. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +41 -23
  11. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/pyproject.toml +1 -1
  12. bec_widgets-0.109.1/bec_widgets/widgets/position_indicator/position_indicator.py +0 -73
  13. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.git_hooks/pre-commit +0 -0
  14. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.gitignore +0 -0
  15. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.gitlab/issue_templates/bug_report_template.md +0 -0
  16. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  17. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.gitlab/issue_templates/feature_request_template.md +0 -0
  18. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.gitlab/merge_request_templates/default.md +0 -0
  19. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.gitlab-ci.yml +0 -0
  20. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.pylintrc +0 -0
  21. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/.readthedocs.yaml +0 -0
  22. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/LICENSE +0 -0
  23. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/README.md +0 -0
  24. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/__init__.py +0 -0
  25. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  26. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  27. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/status_icons/error.svg +0 -0
  28. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/status_icons/not_connected.svg +0 -0
  29. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/status_icons/refresh.svg +0 -0
  30. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/status_icons/running.svg +0 -0
  31. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/assets/status_icons/warning.svg +0 -0
  32. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/__init__.py +0 -0
  33. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/auto_updates.py +0 -0
  34. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/client_utils.py +0 -0
  35. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/rpc_register.py +0 -0
  36. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  37. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/cli/server.py +0 -0
  38. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/__init__.py +0 -0
  39. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  40. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  41. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  42. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  43. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  44. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  45. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  46. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  47. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  48. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  49. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  50. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  51. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  52. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/qt_utils/__init__.py +0 -0
  53. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/qt_utils/error_popups.py +0 -0
  54. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
  55. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/qt_utils/settings_dialog.py +0 -0
  56. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/qt_utils/toolbar.py +0 -0
  57. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/__init__.py +0 -0
  58. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/bec_connector.py +0 -0
  59. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/bec_designer.py +0 -0
  60. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  61. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/bec_table.py +0 -0
  62. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/bec_widget.py +0 -0
  63. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/colors.py +0 -0
  64. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/container_utils.py +0 -0
  65. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/crosshair.py +0 -0
  66. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/entry_validator.py +0 -0
  67. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  68. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/layout_manager.py +0 -0
  69. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/linear_region_selector.py +0 -0
  70. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  71. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  72. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/plugin_utils.py +0 -0
  73. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/reference_utils.py +0 -0
  74. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  75. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/thread_checker.py +0 -0
  76. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/ui_loader.py +0 -0
  77. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/validator_delegate.py +0 -0
  78. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/widget_io.py +0 -0
  79. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  80. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/__init__.py +0 -0
  81. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/base_classes/__init__.py +0 -0
  82. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
  83. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_progressbar/__init__.py +0 -0
  84. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_progressbar/bec_progress_bar.pyproject +0 -0
  85. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  86. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_progressbar/bec_progressbar.py +0 -0
  87. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_progressbar/register_bec_progress_bar.py +0 -0
  88. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
  89. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_queue/bec_queue.py +0 -0
  90. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
  91. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
  92. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
  93. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  94. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
  95. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
  96. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
  97. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
  98. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  99. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_abort/__init__.py +0 -0
  100. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_abort/abort_button.pyproject +0 -0
  101. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_abort/abort_button_plugin.py +0 -0
  102. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_abort/button_abort.py +0 -0
  103. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_abort/register_abort_button.py +0 -0
  104. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_reset/__init__.py +0 -0
  105. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_reset/button_reset.py +0 -0
  106. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_reset/register_reset_button.py +0 -0
  107. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_reset/reset_button.pyproject +0 -0
  108. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_reset/reset_button_plugin.py +0 -0
  109. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_resume/__init__.py +0 -0
  110. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_resume/button_resume.py +0 -0
  111. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_resume/register_resume_button.py +0 -0
  112. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_resume/resume_button.pyproject +0 -0
  113. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/button_resume/resume_button_plugin.py +0 -0
  114. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/color_button/__init__.py +0 -0
  115. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/color_button/color_button.py +0 -0
  116. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
  117. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
  118. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
  119. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
  120. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
  121. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
  122. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
  123. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
  124. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/console/console.py +0 -0
  125. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dap_combo_box/__init__.py +0 -0
  126. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.py +0 -0
  127. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box.pyproject +0 -0
  128. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dap_combo_box/dap_combo_box_plugin.py +0 -0
  129. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dap_combo_box/register_dap_combo_box.py +0 -0
  130. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dark_mode_button/__init__.py +0 -0
  131. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.py +0 -0
  132. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject +0 -0
  133. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +0 -0
  134. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py +0 -0
  135. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/__init__.py +0 -0
  136. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
  137. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
  138. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
  139. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
  140. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
  141. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
  142. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
  143. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_combobox/__init__.py +0 -0
  144. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
  145. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
  146. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
  147. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
  148. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_line_edit/__init__.py +0 -0
  149. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
  150. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
  151. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
  152. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
  153. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dock/__init__.py +0 -0
  154. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dock/dock.py +0 -0
  155. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dock/dock_area.py +0 -0
  156. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
  157. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
  158. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
  159. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/__init__.py +0 -0
  160. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/figure.py +0 -0
  161. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  162. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
  163. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
  164. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  165. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  166. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  167. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  168. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  169. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  170. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/plot_base.py +0 -0
  171. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  172. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  173. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  174. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/image/__init__.py +0 -0
  175. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
  176. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
  177. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/image/image_widget.py +0 -0
  178. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
  179. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  180. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  181. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/__init__.py +0 -0
  182. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  183. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  184. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog.py +0 -0
  185. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  186. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  187. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  188. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/__init__.py +0 -0
  189. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
  190. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
  191. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py +0 -0
  192. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
  193. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
  194. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
  195. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
  196. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/position_indicator/__init__.py +0 -0
  197. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
  198. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
  199. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
  200. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/__init__.py +0 -0
  201. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
  202. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
  203. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
  204. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
  205. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
  206. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
  207. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
  208. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
  209. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
  210. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
  211. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  212. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  213. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  214. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
  215. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  216. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
  217. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
  218. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  219. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/spinner/__init__.py +0 -0
  220. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
  221. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/spinner/spinner.py +0 -0
  222. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
  223. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
  224. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/stop_button/__init__.py +0 -0
  225. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
  226. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
  227. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
  228. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
  229. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/text_box/__init__.py +0 -0
  230. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
  231. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/text_box/text_box.py +0 -0
  232. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
  233. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
  234. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/toggle/__init__.py +0 -0
  235. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
  236. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/toggle/toggle.py +0 -0
  237. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
  238. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
  239. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/vscode/__init__.py +0 -0
  240. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
  241. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
  242. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
  243. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/vscode/vscode.py +0 -0
  244. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/__init__.py +0 -0
  245. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
  246. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
  247. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
  248. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
  249. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
  250. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
  251. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  252. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
  253. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
  254. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/waveform/waveform_widget.py +0 -0
  255. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/website/__init__.py +0 -0
  256. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/website/register_website_widget.py +0 -0
  257. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/website/website.py +0 -0
  258. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
  259. {bec_widgets-0.109.1 → bec_widgets-0.111.0}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
@@ -1,5 +1,31 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.111.0 (2024-09-17)
4
+
5
+ ### Documentation
6
+
7
+ * docs(position_indicator): updated position indicator documentation and added designer properties ([`60f7d54`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/60f7d54e2b4c3129de6c95729b8b4aea1757174f))
8
+
9
+ ### Feature
10
+
11
+ * feat(position_indicator): improved design and added more customization options ([`d15b222`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d15b22250fbceb708d89872c0380693e04acb107))
12
+
13
+ ### Fix
14
+
15
+ * fix(position_indicator): fixed user access ([`dd932dd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/dd932dd8f3910ab67ec8403124f4e176d048e542))
16
+
17
+ * fix(generate_cli): fixed type annotations ([`d3c1a1b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d3c1a1b2edcba7afea9d369820fa7974ac29c333))
18
+
19
+ * fix(positioner_box): visual improvements to the positioner_box and positioner_control_line ([`7ea4a48`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7ea4a482e7cd9499a7268ac887b345cab01632aa))
20
+
21
+ * fix(palette viewer): fixed background for tool tip ([`9045323`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9045323049d2a39c36fc8845f3b2883d6933436b))
22
+
23
+ ## v0.110.0 (2024-09-12)
24
+
25
+ ### Feature
26
+
27
+ * feat(palette_viewer): added widget to display the current palette and accent colors ([`a8576c1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a8576c164cad17746ec4fcd5c775fb78f70c055c))
28
+
3
29
  ## v0.109.1 (2024-09-09)
4
30
 
5
31
  ### Fix
@@ -130,36 +156,6 @@
130
156
 
131
157
  * docs(buttons): buttons section of docs split to appearance and queue buttons ([`047aa26`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/047aa26a60220c826cc1375cf81daf11d1f3ab5c))
132
158
 
133
- * docs(tests): added tests tutorial for widget ([`18d8561`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/18d8561c965d149a7662085f7dbe2a39a8c4a475))
134
-
135
- ### Feature
136
-
137
- * feat(queue): BECQueue controls extended with Resume, Stop, Abort, Reset buttons ([`0d7c10e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0d7c10e670e4937787e1afaa19ca8259ac752486))
138
-
139
159
  ### Fix
140
160
 
141
161
  * fix(queue_reset_button): queue reset has to be confirmed with msgBox ([`9dd43aa`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9dd43aa1fd3991368002605df4389a7a7271011b))
142
-
143
- ### Refactor
144
-
145
- * refactor(tests): positioner box test changed to use create_widget fixture ([`df5eff3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/df5eff3147c79ff0278e6a5a09c8f73d5236aed3))
146
-
147
- ## v0.101.0 (2024-09-02)
148
-
149
- ### Feature
150
-
151
- * feat: add Dap dialog widget ([`9781b77`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9781b77de27b2810fbb1047a61b1832dd186db01))
152
-
153
- ### Refactor
154
-
155
- * refactor: add docs, cleanup ([`61ecf49`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/61ecf491e52bfbfa0d5a84764a9095310659043d))
156
-
157
- ## v0.100.0 (2024-09-01)
158
-
159
- ### Documentation
160
-
161
- * docs(becwidget): improvements to the bec widget base class docs; fixed type hint import for sphinx ([`99d5e8e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/99d5e8e71c7f89a53d7967126f4056dde005534c))
162
-
163
- ### Fix
164
-
165
- * fix(pyqt slot): removed slot decorator to avoid problems with pyqt6 ([`6c1f89a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6c1f89ad39b7240ab1d1c1123422b99ae195bf01))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.109.1
3
+ Version: 0.111.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
@@ -1,5 +1,7 @@
1
1
  # This file was automatically generated by generate_cli.py
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  import enum
4
6
  from typing import Literal, Optional, overload
5
7
 
@@ -29,6 +31,7 @@ class Widgets(str, enum.Enum):
29
31
  DeviceComboBox = "DeviceComboBox"
30
32
  DeviceLineEdit = "DeviceLineEdit"
31
33
  LMFitDialog = "LMFitDialog"
34
+ PositionIndicator = "PositionIndicator"
32
35
  PositionerBox = "PositionerBox"
33
36
  PositionerControlLine = "PositionerControlLine"
34
37
  ResetButton = "ResetButton"
@@ -2539,6 +2542,45 @@ class LMFitDialog(RPCBase):
2539
2542
  """
2540
2543
 
2541
2544
 
2545
+ class PositionIndicator(RPCBase):
2546
+ @rpc_call
2547
+ def set_value(self, position: float):
2548
+ """
2549
+ None
2550
+ """
2551
+
2552
+ @rpc_call
2553
+ def set_range(self, min_value: float, max_value: float):
2554
+ """
2555
+ Set the range of the position indicator
2556
+
2557
+ Args:
2558
+ min_value(float): Minimum value of the range
2559
+ max_value(float): Maximum value of the range
2560
+ """
2561
+
2562
+ @property
2563
+ @rpc_call
2564
+ def vertical(self):
2565
+ """
2566
+ Property to determine the orientation of the position indicator
2567
+ """
2568
+
2569
+ @property
2570
+ @rpc_call
2571
+ def indicator_width(self):
2572
+ """
2573
+ Property to get the width of the indicator
2574
+ """
2575
+
2576
+ @property
2577
+ @rpc_call
2578
+ def rounded_corners(self):
2579
+ """
2580
+ Property to get the rounded corners of the position indicator
2581
+ """
2582
+
2583
+
2542
2584
  class PositionerBox(RPCBase):
2543
2585
  @rpc_call
2544
2586
  def set_positioner(self, positioner: "str | Positioner"):
@@ -31,6 +31,7 @@ else:
31
31
  class ClientGenerator:
32
32
  def __init__(self):
33
33
  self.header = """# This file was automatically generated by generate_cli.py\n
34
+ from __future__ import annotations
34
35
  import enum
35
36
  from typing import Literal, Optional, overload
36
37
 
@@ -0,0 +1,183 @@
1
+ from qtpy.QtCore import Qt
2
+ from qtpy.QtWidgets import (
3
+ QApplication,
4
+ QFrame,
5
+ QGridLayout,
6
+ QHBoxLayout,
7
+ QLabel,
8
+ QScrollArea,
9
+ QSizePolicy,
10
+ QVBoxLayout,
11
+ QWidget,
12
+ )
13
+
14
+ from bec_widgets.utils.bec_widget import BECWidget
15
+ from bec_widgets.utils.colors import get_accent_colors, get_theme_palette
16
+ from bec_widgets.widgets.dark_mode_button.dark_mode_button import DarkModeButton
17
+
18
+
19
+ class PaletteViewer(BECWidget, QWidget):
20
+ """
21
+ This class is a widget that displays current palette colors.
22
+ """
23
+
24
+ ICON_NAME = "palette"
25
+
26
+ def __init__(self, *args, parent=None, **kwargs):
27
+ super().__init__(*args, theme_update=True, **kwargs)
28
+ QWidget.__init__(self, parent=parent)
29
+ self.setFixedSize(400, 600)
30
+ layout = QVBoxLayout(self)
31
+ dark_mode_button = DarkModeButton(self)
32
+ layout.addWidget(dark_mode_button)
33
+
34
+ # Create a scroll area to hold the color boxes
35
+ scroll_area = QScrollArea(self)
36
+ scroll_area.setWidgetResizable(True)
37
+ scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
38
+
39
+ # Create a frame to hold the color boxes
40
+ self.frame = QFrame(self)
41
+ self.frame_layout = QGridLayout(self.frame)
42
+ self.frame_layout.setSpacing(0)
43
+ self.frame_layout.setContentsMargins(0, 0, 0, 0)
44
+
45
+ scroll_area.setWidget(self.frame)
46
+ layout.addWidget(scroll_area)
47
+
48
+ self.setLayout(layout)
49
+
50
+ self.update_palette()
51
+
52
+ def apply_theme(self, theme) -> None:
53
+ """
54
+ Apply the theme to the widget.
55
+
56
+ Args:
57
+ theme (str): The theme to apply.
58
+ """
59
+ self.update_palette()
60
+
61
+ def clear_palette(self) -> None:
62
+ """
63
+ Clear the palette colors from the frame.
64
+ Recursively removes all widgets and layouts in the frame layout.
65
+ """
66
+ # Iterate over all items in the layout in reverse to safely remove them
67
+ for i in reversed(range(self.frame_layout.count())):
68
+ item = self.frame_layout.itemAt(i)
69
+
70
+ # If the item is a layout, clear its contents
71
+ if isinstance(item, QHBoxLayout):
72
+ # Recursively remove all widgets from the layout
73
+ for j in reversed(range(item.count())):
74
+ widget = item.itemAt(j).widget()
75
+ if widget:
76
+ item.removeWidget(widget)
77
+ widget.deleteLater()
78
+ self.frame_layout.removeItem(item)
79
+
80
+ # If the item is a widget, remove and delete it
81
+ elif item.widget():
82
+ widget = item.widget()
83
+ self.frame_layout.removeWidget(widget)
84
+ widget.deleteLater()
85
+
86
+ def update_palette(self) -> None:
87
+ """
88
+ Update the palette colors in the frame.
89
+ """
90
+ self.clear_palette()
91
+ palette_label = QLabel("Palette Colors (e.g. palette.windowText().color())")
92
+ palette_label.setStyleSheet("font-weight: bold;")
93
+ self.frame_layout.addWidget(palette_label, 0, 0)
94
+
95
+ palette = get_theme_palette()
96
+ # Add the palette colors (roles) to the frame
97
+ palette_roles = [
98
+ palette.windowText,
99
+ palette.toolTipText,
100
+ palette.placeholderText,
101
+ palette.text,
102
+ palette.buttonText,
103
+ palette.highlight,
104
+ palette.link,
105
+ palette.light,
106
+ palette.midlight,
107
+ palette.mid,
108
+ palette.shadow,
109
+ palette.button,
110
+ palette.brightText,
111
+ palette.toolTipBase,
112
+ palette.alternateBase,
113
+ palette.dark,
114
+ palette.base,
115
+ palette.window,
116
+ palette.highlightedText,
117
+ palette.linkVisited,
118
+ ]
119
+
120
+ offset = 1
121
+ for i, pal in enumerate(palette_roles):
122
+ i += offset
123
+ color = pal().color()
124
+ label_layout = QHBoxLayout()
125
+ color_label = QLabel(f"{pal().color().name()} ({pal.__name__})")
126
+ background_label = self.background_label_with_clipboard(color)
127
+ label_layout.addWidget(color_label)
128
+ label_layout.addWidget(background_label)
129
+ self.frame_layout.addLayout(label_layout, i, 0)
130
+
131
+ # add a horizontal spacer
132
+ spacer = QLabel()
133
+ spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)
134
+ self.frame_layout.addWidget(spacer, i + 1, 0)
135
+
136
+ accent_colors_label = QLabel("Accent Colors (e.g. accent_colors.default)")
137
+ accent_colors_label.setStyleSheet("font-weight: bold;")
138
+ self.frame_layout.addWidget(accent_colors_label, i + 2, 0)
139
+
140
+ accent_colors = get_accent_colors()
141
+ items = [
142
+ (accent_colors.default, "default"),
143
+ (accent_colors.success, "success"),
144
+ (accent_colors.warning, "warning"),
145
+ (accent_colors.emergency, "emergency"),
146
+ (accent_colors.highlight, "highlight"),
147
+ ]
148
+
149
+ offset = len(palette_roles) + 2
150
+ for i, (color, name) in enumerate(items):
151
+ i += offset
152
+ label_layout = QHBoxLayout()
153
+ color_label = QLabel(f"{color.name()} ({name})")
154
+ background_label = self.background_label_with_clipboard(color)
155
+ label_layout.addWidget(color_label)
156
+ label_layout.addWidget(background_label)
157
+ self.frame_layout.addLayout(label_layout, i + 2, 0)
158
+
159
+ def background_label_with_clipboard(self, color) -> QLabel:
160
+ """
161
+ Create a label with a background color that copies the color to the clipboard when clicked.
162
+
163
+ Args:
164
+ color (QColor): The color to display in the background.
165
+
166
+ Returns:
167
+ QLabel: The label with the background color.
168
+ """
169
+ button = QLabel()
170
+ button.setStyleSheet(f"QLabel {{ background-color: {color.name()}; }}")
171
+ button.setToolTip("Click to copy color to clipboard")
172
+ button.setCursor(Qt.PointingHandCursor)
173
+ button.mousePressEvent = lambda event: QApplication.clipboard().setText(color.name())
174
+ return button
175
+
176
+
177
+ if __name__ == "__main__": # pragma: no cover
178
+ import sys
179
+
180
+ app = QApplication(sys.argv)
181
+ viewer = PaletteViewer()
182
+ viewer.show()
183
+ sys.exit(app.exec_())
@@ -0,0 +1,291 @@
1
+ import numpy as np
2
+ from qtpy.QtCore import Property, QSize, Qt, Slot
3
+ from qtpy.QtGui import QBrush, QColor, QPainter, QPainterPath, QPen
4
+ from qtpy.QtWidgets import QWidget
5
+
6
+ from bec_widgets.utils.bec_widget import BECWidget
7
+ from bec_widgets.utils.colors import get_accent_colors, get_theme_palette
8
+
9
+
10
+ class PositionIndicator(BECWidget, QWidget):
11
+ USER_ACCESS = ["set_value", "set_range", "vertical", "indicator_width", "rounded_corners"]
12
+
13
+ ICON_NAME = "horizontal_distribute"
14
+
15
+ def __init__(self, parent=None, client=None, config=None, gui_id=None):
16
+ super().__init__(client=client, config=config, gui_id=gui_id)
17
+ QWidget.__init__(self, parent=parent)
18
+ self.position = 50
19
+ self.min_value = 0
20
+ self.max_value = 100
21
+ self.scaling_factor = 0.5
22
+ self.is_vertical = False
23
+ self._current_indicator_position = 0
24
+ self._draw_position = 0
25
+ self._rounded_corners = 10
26
+ self._indicator_width = 2
27
+ self._indicator_color = get_accent_colors().success
28
+ self._background_color = get_theme_palette().mid().color()
29
+ self._use_color_palette = True
30
+
31
+ def set_range(self, min_value: float, max_value: float):
32
+ """
33
+ Set the range of the position indicator
34
+
35
+ Args:
36
+ min_value(float): Minimum value of the range
37
+ max_value(float): Maximum value of the range
38
+ """
39
+ self.minimum = min_value
40
+ self.maximum = max_value
41
+
42
+ @Property(float)
43
+ def minimum(self):
44
+ """
45
+ Property to get the minimum value of the position indicator
46
+ """
47
+ return self.min_value
48
+
49
+ @minimum.setter
50
+ def minimum(self, min_value: float):
51
+ """
52
+ Setter for the minimum property
53
+
54
+ Args:
55
+ min_value: The minimum value of the position indicator
56
+ """
57
+ self.min_value = min_value
58
+ self.update()
59
+
60
+ @Property(float)
61
+ def maximum(self):
62
+ """
63
+ Property to get the maximum value of the position indicator
64
+ """
65
+ return self.max_value
66
+
67
+ @maximum.setter
68
+ def maximum(self, max_value: float):
69
+ """
70
+ Setter for the maximum property
71
+
72
+ Args:
73
+ max_value: The maximum value of the position indicator
74
+ """
75
+ self.max_value = max_value
76
+ self.update()
77
+
78
+ @Property(bool)
79
+ def vertical(self):
80
+ """
81
+ Property to determine the orientation of the position indicator
82
+ """
83
+ return self.is_vertical
84
+
85
+ @vertical.setter
86
+ def vertical(self, is_vertical: bool):
87
+ """
88
+ Setter for the vertical property
89
+
90
+ Args:
91
+ is_vertical: True if the indicator should be vertical, False if horizontal
92
+ """
93
+
94
+ self.is_vertical = is_vertical
95
+ self.update()
96
+
97
+ @Property(float)
98
+ def value(self):
99
+ """
100
+ Property to get the current value of the position indicator
101
+ """
102
+ return self.position
103
+
104
+ @value.setter
105
+ def value(self, position: float):
106
+ """
107
+ Setter for the value property
108
+
109
+ Args:
110
+ position: The new position of the indicator
111
+ """
112
+ self.set_value(position)
113
+
114
+ @Property(int)
115
+ def indicator_width(self):
116
+ """
117
+ Property to get the width of the indicator
118
+ """
119
+ return self._indicator_width
120
+
121
+ @indicator_width.setter
122
+ def indicator_width(self, width: int):
123
+ """
124
+ Setter for the indicator width property
125
+
126
+ Args:
127
+ width: The new width of the indicator
128
+ """
129
+ self._indicator_width = width
130
+ self.update()
131
+
132
+ @Property(int)
133
+ def rounded_corners(self):
134
+ """
135
+ Property to get the rounded corners of the position indicator
136
+ """
137
+ return self._rounded_corners
138
+
139
+ @rounded_corners.setter
140
+ def rounded_corners(self, value: int):
141
+ """
142
+ Setter for the rounded corners property
143
+
144
+ Args:
145
+ value: The new value for the rounded corners
146
+ """
147
+ self._rounded_corners = value
148
+ self.update()
149
+
150
+ @Property(QColor)
151
+ def indicator_color(self):
152
+ """
153
+ Property to get the color of the indicator
154
+ """
155
+ return self._indicator_color
156
+
157
+ @indicator_color.setter
158
+ def indicator_color(self, color: QColor):
159
+ """
160
+ Setter for the indicator color property
161
+
162
+ Args:
163
+ color: The new color for the indicator
164
+ """
165
+ self._indicator_color = color
166
+ self.update()
167
+
168
+ @Property(QColor)
169
+ def background_color(self):
170
+ """
171
+ Property to get the background color of the position indicator
172
+ """
173
+ return self._background_color
174
+
175
+ @background_color.setter
176
+ def background_color(self, color: QColor):
177
+ """
178
+ Setter for the background color property
179
+
180
+ Args:
181
+ color: The new background color
182
+ """
183
+ self._background_color = color
184
+ self.update()
185
+
186
+ @Property(bool)
187
+ def use_color_palette(self):
188
+ """
189
+ Property to determine if the indicator should use the color palette or the custom color.
190
+ """
191
+ return self._use_color_palette
192
+
193
+ @use_color_palette.setter
194
+ def use_color_palette(self, use_palette: bool):
195
+ """
196
+ Setter for the use color palette property
197
+
198
+ Args:
199
+ use_palette: True if the indicator should use the color palette, False if custom color
200
+ """
201
+ self._use_color_palette = use_palette
202
+ self.update()
203
+
204
+ # @Property(float)
205
+ @Slot(int)
206
+ @Slot(float)
207
+ def set_value(self, position: float):
208
+ self.position = position
209
+ self.update()
210
+
211
+ def _get_indicator_color(self):
212
+ if self._use_color_palette:
213
+ return get_accent_colors().success
214
+ return self._indicator_color
215
+
216
+ def _get_background_brush(self):
217
+ if self._use_color_palette:
218
+ return get_theme_palette().mid()
219
+ return QBrush(self._background_color)
220
+
221
+ def paintEvent(self, event):
222
+ painter = QPainter(self)
223
+ width = self.width()
224
+ height = self.height()
225
+
226
+ # Set up the brush for the background
227
+ painter.setBrush(self._get_background_brush())
228
+
229
+ # Create a QPainterPath with a rounded rectangle for clipping
230
+ path = QPainterPath()
231
+ path.addRoundedRect(0, 0, width, height, self._rounded_corners, self._rounded_corners)
232
+
233
+ # Set clipping to the rounded rectangle
234
+ painter.setClipPath(path)
235
+
236
+ # Draw the rounded rectangle background first
237
+ painter.setPen(Qt.NoPen)
238
+ painter.drawRoundedRect(0, 0, width, height, self._rounded_corners, self._rounded_corners)
239
+
240
+ # get the position scaled to the defined min and max values
241
+ self._current_indicator_position = position = np.interp(
242
+ self.position, [self.min_value, self.max_value], [0, 100]
243
+ )
244
+
245
+ if self.is_vertical:
246
+ # If vertical, rotate the coordinate system by -90 degrees
247
+ painter.translate(width // 2, height // 2) # Move origin to center
248
+ painter.rotate(-90) # Rotate by -90 degrees for vertical drawing
249
+ painter.translate(-height // 2, -width // 2) # Restore the origin for drawing
250
+
251
+ # Switch width and height for the vertical orientation
252
+ width, height = height, width
253
+
254
+ # Draw the moving vertical indicator, respecting the clip path
255
+ self._draw_position = x_pos = round(
256
+ position * width / 100
257
+ ) # Position for the vertical line
258
+
259
+ indicator_pen = QPen(self._get_indicator_color(), self._indicator_width)
260
+ painter.setPen(indicator_pen)
261
+ painter.drawLine(x_pos, 0, x_pos, height)
262
+
263
+ painter.end()
264
+
265
+ def minimumSizeHint(self):
266
+ # Set the smallest possible size
267
+ return QSize(10, 10)
268
+
269
+
270
+ if __name__ == "__main__": # pragma: no cover
271
+ from bec_qthemes import setup_theme
272
+ from qtpy.QtWidgets import QApplication, QSlider, QVBoxLayout
273
+
274
+ app = QApplication([])
275
+ setup_theme("dark")
276
+ # Create position indicator and slider
277
+ position_indicator = PositionIndicator()
278
+ # position_indicator.set_range(0, 1)
279
+ slider = QSlider(Qt.Horizontal)
280
+ slider.valueChanged.connect(lambda value: position_indicator.set_value(value))
281
+ position_indicator.is_vertical = False
282
+ # position_indicator.set_value(100)
283
+ layout = QVBoxLayout()
284
+ layout.addWidget(position_indicator)
285
+ layout.addWidget(slider)
286
+
287
+ widget = QWidget()
288
+ widget.setLayout(layout)
289
+ widget.show()
290
+
291
+ app.exec_()
@@ -16,7 +16,7 @@ from qtpy.QtWidgets import QDialog, QDoubleSpinBox, QPushButton, QVBoxLayout, QW
16
16
 
17
17
  from bec_widgets.utils import UILoader
18
18
  from bec_widgets.utils.bec_widget import BECWidget
19
- from bec_widgets.utils.colors import set_theme
19
+ from bec_widgets.utils.colors import get_accent_colors, set_theme
20
20
  from bec_widgets.widgets.device_line_edit.device_line_edit import DeviceLineEdit
21
21
 
22
22
  logger = bec_logger.logger
@@ -73,6 +73,10 @@ class PositionerBox(BECWidget, QWidget):
73
73
 
74
74
  self.ui.step_size.setStepType(QDoubleSpinBox.AdaptiveDecimalStepType)
75
75
  self.ui.stop.clicked.connect(self.on_stop)
76
+ self.ui.stop.setToolTip("Stop")
77
+ self.ui.stop.setStyleSheet(
78
+ f"QPushButton {{background-color: {get_accent_colors().emergency.name()}; color: white;}}"
79
+ )
76
80
  self.ui.tweak_right.clicked.connect(self.on_tweak_right)
77
81
  self.ui.tweak_right.setToolTip("Tweak right")
78
82
  self.ui.tweak_left.clicked.connect(self.on_tweak_left)
@@ -249,7 +253,7 @@ class PositionerBox(BECWidget, QWidget):
249
253
  self.update_limits(limits)
250
254
  if limits is not None and readback_val is not None and limits[0] != limits[1]:
251
255
  pos = (readback_val - limits[0]) / (limits[1] - limits[0])
252
- self.ui.position_indicator.on_position_update(pos)
256
+ self.ui.position_indicator.set_value(pos)
253
257
 
254
258
  def update_limits(self, limits: tuple):
255
259
  """Update limits
@@ -170,7 +170,20 @@
170
170
  </layout>
171
171
  </item>
172
172
  <item>
173
- <widget class="PositionIndicator" name="position_indicator"/>
173
+ <widget class="PositionIndicator" name="position_indicator">
174
+ <property name="maximum" stdset="0">
175
+ <double>1.000000000000000</double>
176
+ </property>
177
+ <property name="value" stdset="0">
178
+ <double>0.500000000000000</double>
179
+ </property>
180
+ <property name="indicator_width" stdset="0">
181
+ <number>4</number>
182
+ </property>
183
+ <property name="rounded_corners" stdset="0">
184
+ <number>4</number>
185
+ </property>
186
+ </widget>
174
187
  </item>
175
188
  <item>
176
189
  <widget class="QLabel" name="readback">
@@ -24,11 +24,9 @@ class PositionerControlLine(PositionerBox):
24
24
  if __name__ == "__main__": # pragma: no cover
25
25
  import sys
26
26
 
27
- import qdarktheme
28
27
  from qtpy.QtWidgets import QApplication
29
28
 
30
29
  app = QApplication(sys.argv)
31
- qdarktheme.setup_theme("dark")
32
30
  widget = PositionerControlLine(device="samy")
33
31
 
34
32
  widget.show()