bec-widgets 1.4.1__py3-none-any.whl → 1.5.1__py3-none-any.whl

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 (250) hide show
  1. CHANGELOG.md +32 -25
  2. PKG-INFO +1 -1
  3. bec_widgets/applications/alignment/alignment_1d/alignment_1d.py +7 -20
  4. bec_widgets/cli/client.py +430 -32
  5. bec_widgets/cli/generate_cli.py +2 -2
  6. bec_widgets/cli/rpc_register.py +2 -0
  7. bec_widgets/cli/rpc_wigdet_handler.py +5 -3
  8. bec_widgets/cli/server.py +2 -3
  9. bec_widgets/examples/jupyter_console/jupyter_console_window.py +10 -8
  10. bec_widgets/qt_utils/palette_viewer.py +1 -1
  11. bec_widgets/utils/crosshair.py +88 -35
  12. bec_widgets/utils/generate_designer_plugin.py +1 -1
  13. bec_widgets/utils/plugin_utils.py +14 -5
  14. bec_widgets/utils/ui_loader.py +2 -2
  15. bec_widgets/widgets/{dock → containers/dock}/dock_area.py +21 -11
  16. bec_widgets/widgets/{dock → containers/dock}/dock_area_plugin.py +1 -1
  17. bec_widgets/widgets/{dock → containers/dock}/register_dock_area.py +1 -1
  18. bec_widgets/widgets/{figure → containers/figure}/figure.py +41 -7
  19. bec_widgets/widgets/{figure → containers/figure}/plots/image/image.py +7 -4
  20. bec_widgets/widgets/{figure → containers/figure}/plots/image/image_item.py +5 -2
  21. bec_widgets/widgets/{figure → containers/figure}/plots/motor_map/motor_map.py +2 -2
  22. bec_widgets/widgets/containers/figure/plots/multi_waveform/multi_waveform.py +353 -0
  23. bec_widgets/widgets/{figure → containers/figure}/plots/waveform/waveform.py +2 -2
  24. bec_widgets/widgets/{figure → containers/figure}/plots/waveform/waveform_curve.py +2 -2
  25. bec_widgets/widgets/{button_abort → control/buttons/button_abort}/abort_button_plugin.py +1 -1
  26. bec_widgets/widgets/{button_abort → control/buttons/button_abort}/button_abort.py +1 -0
  27. bec_widgets/widgets/{button_abort → control/buttons/button_abort}/register_abort_button.py +3 -1
  28. bec_widgets/widgets/{button_reset → control/buttons/button_reset}/button_reset.py +1 -0
  29. bec_widgets/widgets/{button_reset → control/buttons/button_reset}/register_reset_button.py +3 -1
  30. bec_widgets/widgets/{button_reset → control/buttons/button_reset}/reset_button_plugin.py +1 -1
  31. bec_widgets/widgets/{button_resume → control/buttons/button_resume}/button_resume.py +1 -0
  32. bec_widgets/widgets/{button_resume → control/buttons/button_resume}/register_resume_button.py +3 -1
  33. bec_widgets/widgets/{button_resume → control/buttons/button_resume}/resume_button_plugin.py +1 -1
  34. bec_widgets/widgets/{stop_button → control/buttons/stop_button}/register_stop_button.py +1 -1
  35. bec_widgets/widgets/{stop_button → control/buttons/stop_button}/stop_button.py +1 -0
  36. bec_widgets/widgets/{stop_button → control/buttons/stop_button}/stop_button_plugin.py +1 -1
  37. bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/position_indicator.py +1 -1
  38. bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/position_indicator_plugin.py +3 -1
  39. bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/register_position_indicator.py +1 -1
  40. bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.py +6 -3
  41. bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box_plugin.py +1 -1
  42. bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line.py +2 -1
  43. bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line_plugin.py +3 -1
  44. bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/register_positioner_box.py +3 -1
  45. bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/register_positioner_control_line.py +1 -1
  46. bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group.py +3 -3
  47. bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group_plugin.py +3 -1
  48. bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/register_positioner_group.py +3 -1
  49. bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/device_combo_box_plugin.py +1 -1
  50. bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/device_combobox.py +2 -1
  51. bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/register_device_combo_box.py +3 -1
  52. bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/device_line_edit.py +5 -2
  53. bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/device_line_edit_plugin.py +3 -1
  54. bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/register_device_line_edit.py +3 -1
  55. bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/register_signal_combobox.py +3 -1
  56. bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/signal_combobox.py +4 -1
  57. bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/signal_combobox_plugin.py +1 -1
  58. bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/register_signal_line_edit.py +3 -1
  59. bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/signal_line_edit.py +4 -1
  60. bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/signal_line_edit_plugin.py +3 -1
  61. bec_widgets/widgets/{scan_control → control/scan_control}/register_scan_control.py +1 -1
  62. bec_widgets/widgets/{scan_control → control/scan_control}/scan_control.py +5 -4
  63. bec_widgets/widgets/{scan_control → control/scan_control}/scan_control_plugin.py +1 -1
  64. bec_widgets/widgets/{scan_control → control/scan_control}/scan_group_box.py +4 -2
  65. bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/dap_combo_box.py +1 -1
  66. bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/dap_combo_box_plugin.py +1 -1
  67. bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/register_dap_combo_box.py +1 -1
  68. bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lm_fit_dialog_plugin.py +1 -1
  69. bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lmfit_dialog.py +1 -0
  70. bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/register_lm_fit_dialog.py +1 -1
  71. bec_widgets/widgets/{console → editors/console}/console.py +1 -0
  72. bec_widgets/widgets/{console → editors/console}/console_plugin.py +1 -1
  73. bec_widgets/widgets/{console → editors/console}/register_console.py +1 -1
  74. bec_widgets/widgets/{text_box → editors/text_box}/register_text_box.py +1 -1
  75. bec_widgets/widgets/{text_box → editors/text_box}/text_box.py +1 -0
  76. bec_widgets/widgets/{text_box → editors/text_box}/text_box_plugin.py +1 -1
  77. bec_widgets/widgets/{vscode → editors/vscode}/register_vs_code_editor.py +1 -1
  78. bec_widgets/widgets/{vscode → editors/vscode}/vs_code_editor_plugin.py +1 -1
  79. bec_widgets/widgets/{vscode → editors/vscode}/vscode.py +2 -2
  80. bec_widgets/widgets/{website → editors/website}/register_website_widget.py +1 -1
  81. bec_widgets/widgets/{website → editors/website}/website.py +1 -0
  82. bec_widgets/widgets/{website → editors/website}/website_widget_plugin.py +1 -1
  83. bec_widgets/widgets/{image → plots/image}/bec_image_widget_plugin.py +1 -1
  84. bec_widgets/widgets/{image → plots/image}/image_widget.py +7 -6
  85. bec_widgets/widgets/{image → plots/image}/register_bec_image_widget.py +1 -1
  86. bec_widgets/widgets/{motor_map → plots/motor_map}/bec_motor_map_widget_plugin.py +1 -1
  87. bec_widgets/widgets/{motor_map → plots/motor_map}/motor_map_widget.py +6 -6
  88. bec_widgets/widgets/{motor_map → plots/motor_map}/register_bec_motor_map_widget.py +3 -1
  89. bec_widgets/widgets/plots/multi_waveform/bec_multi_waveform_widget.pyproject +1 -0
  90. bec_widgets/widgets/plots/multi_waveform/bec_multi_waveform_widget_plugin.py +54 -0
  91. bec_widgets/widgets/plots/multi_waveform/multi_waveform_controls.ui +99 -0
  92. bec_widgets/widgets/plots/multi_waveform/multi_waveform_widget.py +535 -0
  93. bec_widgets/widgets/plots/multi_waveform/register_bec_multi_waveform_widget.py +17 -0
  94. bec_widgets/widgets/{waveform → plots/waveform}/bec_waveform_widget_plugin.py +1 -1
  95. bec_widgets/widgets/{waveform → plots/waveform}/register_bec_waveform_widget.py +3 -1
  96. bec_widgets/widgets/{waveform → plots/waveform}/waveform_popups/curve_dialog/curve_dialog.py +5 -3
  97. bec_widgets/widgets/plots/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
  98. bec_widgets/widgets/{waveform → plots/waveform}/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +2 -6
  99. bec_widgets/widgets/{waveform → plots/waveform}/waveform_widget.py +9 -6
  100. bec_widgets/widgets/progress/__init__.py +0 -0
  101. bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
  102. bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/bec_progress_bar_plugin.py +1 -1
  103. bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/bec_progressbar.py +1 -0
  104. bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/register_bec_progress_bar.py +3 -1
  105. bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/register_ring_progress_bar.py +3 -1
  106. bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring_progress_bar.py +2 -1
  107. bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring_progress_bar_plugin.py +1 -1
  108. bec_widgets/widgets/services/__init__.py +0 -0
  109. bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
  110. bec_widgets/widgets/{bec_queue → services/bec_queue}/bec_queue.py +5 -4
  111. bec_widgets/widgets/{bec_queue → services/bec_queue}/bec_queue_plugin.py +1 -1
  112. bec_widgets/widgets/{bec_queue → services/bec_queue}/register_bec_queue.py +1 -1
  113. bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
  114. bec_widgets/widgets/{bec_status_box → services/bec_status_box}/bec_status_box.py +3 -3
  115. bec_widgets/widgets/{bec_status_box → services/bec_status_box}/bec_status_box_plugin.py +1 -1
  116. bec_widgets/widgets/{bec_status_box → services/bec_status_box}/register_bec_status_box.py +1 -1
  117. bec_widgets/widgets/services/device_browser/__init__.py +0 -0
  118. bec_widgets/widgets/{device_browser → services/device_browser}/device_browser.py +3 -3
  119. bec_widgets/widgets/{device_browser → services/device_browser}/device_browser_plugin.py +1 -1
  120. bec_widgets/widgets/{device_browser → services/device_browser}/register_device_browser.py +3 -1
  121. bec_widgets/widgets/utility/__init__.py +0 -0
  122. bec_widgets/widgets/utility/spinner/__init__.py +0 -0
  123. bec_widgets/widgets/{spinner → utility/spinner}/register_spinner_widget.py +1 -1
  124. bec_widgets/widgets/{spinner → utility/spinner}/spinner.py +1 -0
  125. bec_widgets/widgets/{spinner → utility/spinner}/spinner_widget_plugin.py +1 -1
  126. bec_widgets/widgets/utility/toggle/__init__.py +0 -0
  127. bec_widgets/widgets/{toggle → utility/toggle}/register_toggle_switch.py +1 -1
  128. bec_widgets/widgets/{toggle → utility/toggle}/toggle.py +1 -0
  129. bec_widgets/widgets/{toggle → utility/toggle}/toggle_switch_plugin.py +1 -1
  130. bec_widgets/widgets/utility/visual/__init__.py +0 -0
  131. bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
  132. bec_widgets/widgets/{color_button → utility/visual/color_button}/color_button.py +1 -0
  133. bec_widgets/widgets/{color_button → utility/visual/color_button}/color_button_plugin.py +1 -1
  134. bec_widgets/widgets/{color_button → utility/visual/color_button}/register_color_button.py +3 -1
  135. bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
  136. bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/colormap_selector.py +1 -0
  137. bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/colormap_selector_plugin.py +1 -1
  138. bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/register_colormap_selector.py +1 -1
  139. bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
  140. bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/bec_color_map_widget_plugin.py +1 -1
  141. bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/colormap_widget.py +1 -0
  142. bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/register_bec_color_map_widget.py +1 -1
  143. bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
  144. bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/dark_mode_button.py +1 -0
  145. bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/dark_mode_button_plugin.py +1 -1
  146. bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/register_dark_mode_button.py +3 -1
  147. {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/METADATA +1 -1
  148. bec_widgets-1.5.1.dist-info/RECORD +318 -0
  149. {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/WHEEL +1 -1
  150. pyproject.toml +1 -1
  151. bec_widgets-1.4.1.dist-info/RECORD +0 -297
  152. /bec_widgets/widgets/{base_classes → containers}/__init__.py +0 -0
  153. /bec_widgets/widgets/{dock → containers/dock}/__init__.py +0 -0
  154. /bec_widgets/widgets/{dock → containers/dock}/dock.py +0 -0
  155. /bec_widgets/widgets/{dock → containers/dock}/dock_area.pyproject +0 -0
  156. /bec_widgets/widgets/{figure → containers/figure}/__init__.py +0 -0
  157. /bec_widgets/widgets/{bec_progressbar → containers/figure/plots}/__init__.py +0 -0
  158. /bec_widgets/widgets/{figure → containers/figure}/plots/axis_settings.py +0 -0
  159. /bec_widgets/widgets/{figure → containers/figure}/plots/axis_settings.ui +0 -0
  160. /bec_widgets/widgets/{bec_queue → containers/figure/plots/image}/__init__.py +0 -0
  161. /bec_widgets/widgets/{figure → containers/figure}/plots/image/image_processor.py +0 -0
  162. /bec_widgets/widgets/{bec_status_box → containers/figure/plots/motor_map}/__init__.py +0 -0
  163. /bec_widgets/widgets/{button_abort → containers/figure/plots/multi_waveform}/__init__.py +0 -0
  164. /bec_widgets/widgets/{figure → containers/figure}/plots/plot_base.py +0 -0
  165. /bec_widgets/widgets/{button_reset → containers/figure/plots/waveform}/__init__.py +0 -0
  166. /bec_widgets/widgets/{button_resume → control}/__init__.py +0 -0
  167. /bec_widgets/widgets/{color_button → control/buttons}/__init__.py +0 -0
  168. /bec_widgets/widgets/{colormap_selector → control/buttons/button_abort}/__init__.py +0 -0
  169. /bec_widgets/widgets/{button_abort → control/buttons/button_abort}/abort_button.pyproject +0 -0
  170. /bec_widgets/widgets/{colormap_widget → control/buttons/button_reset}/__init__.py +0 -0
  171. /bec_widgets/widgets/{button_reset → control/buttons/button_reset}/reset_button.pyproject +0 -0
  172. /bec_widgets/widgets/{dap_combo_box → control/buttons/button_resume}/__init__.py +0 -0
  173. /bec_widgets/widgets/{button_resume → control/buttons/button_resume}/resume_button.pyproject +0 -0
  174. /bec_widgets/widgets/{dark_mode_button → control/buttons/stop_button}/__init__.py +0 -0
  175. /bec_widgets/widgets/{stop_button → control/buttons/stop_button}/stop_button.pyproject +0 -0
  176. /bec_widgets/widgets/{device_browser → control/device_control}/__init__.py +0 -0
  177. /bec_widgets/widgets/{device_combobox → control/device_control/position_indicator}/__init__.py +0 -0
  178. /bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/position_indicator.pyproject +0 -0
  179. /bec_widgets/widgets/{device_line_edit → control/device_control/positioner_box}/__init__.py +0 -0
  180. /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.pyproject +0 -0
  181. /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.ui +0 -0
  182. /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line.pyproject +0 -0
  183. /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line.ui +0 -0
  184. /bec_widgets/widgets/{figure/plots → control/device_control/positioner_group}/__init__.py +0 -0
  185. /bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group.pyproject +0 -0
  186. /bec_widgets/widgets/{figure/plots/image → control/device_input}/__init__.py +0 -0
  187. /bec_widgets/widgets/{figure/plots/motor_map → control/device_input/base_classes}/__init__.py +0 -0
  188. /bec_widgets/widgets/{base_classes → control/device_input/base_classes}/device_input_base.py +0 -0
  189. /bec_widgets/widgets/{base_classes → control/device_input/base_classes}/device_signal_input_base.py +0 -0
  190. /bec_widgets/widgets/{figure/plots/waveform → control/device_input/device_combobox}/__init__.py +0 -0
  191. /bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/device_combo_box.pyproject +0 -0
  192. /bec_widgets/widgets/{image → control/device_input/device_line_edit}/__init__.py +0 -0
  193. /bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/device_line_edit.pyproject +0 -0
  194. /bec_widgets/widgets/{jupyter_console → control/device_input/signal_combobox}/__init__.py +0 -0
  195. /bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/signal_combobox.pyproject +0 -0
  196. /bec_widgets/widgets/{lmfit_dialog → control/device_input/signal_line_edit}/__init__.py +0 -0
  197. /bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/signal_line_edit.pyproject +0 -0
  198. /bec_widgets/widgets/{scan_control → control/scan_control}/__init__.py +0 -0
  199. /bec_widgets/widgets/{scan_control → control/scan_control}/scan_control.pyproject +0 -0
  200. /bec_widgets/widgets/{motor_map → dap}/__init__.py +0 -0
  201. /bec_widgets/widgets/{motor_map/motor_map_dialog → dap/dap_combo_box}/__init__.py +0 -0
  202. /bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/dap_combo_box.pyproject +0 -0
  203. /bec_widgets/widgets/{position_indicator → dap/lmfit_dialog}/__init__.py +0 -0
  204. /bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lm_fit_dialog.pyproject +0 -0
  205. /bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lmfit_dialog_compact.ui +0 -0
  206. /bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lmfit_dialog_vertical.ui +0 -0
  207. /bec_widgets/widgets/{positioner_box → editors}/__init__.py +0 -0
  208. /bec_widgets/widgets/{positioner_group → editors/console}/__init__.py +0 -0
  209. /bec_widgets/widgets/{console → editors/console}/console.pyproject +0 -0
  210. /bec_widgets/widgets/{signal_combobox → editors/jupyter_console}/__init__.py +0 -0
  211. /bec_widgets/widgets/{jupyter_console → editors/jupyter_console}/jupyter_console.py +0 -0
  212. /bec_widgets/widgets/{signal_line_edit → editors/text_box}/__init__.py +0 -0
  213. /bec_widgets/widgets/{text_box → editors/text_box}/text_box.pyproject +0 -0
  214. /bec_widgets/widgets/{spinner → editors/vscode}/__init__.py +0 -0
  215. /bec_widgets/widgets/{vscode → editors/vscode}/vs_code_editor.pyproject +0 -0
  216. /bec_widgets/widgets/{stop_button → editors/website}/__init__.py +0 -0
  217. /bec_widgets/widgets/{website → editors/website}/website_widget.pyproject +0 -0
  218. /bec_widgets/widgets/{text_box → plots}/__init__.py +0 -0
  219. /bec_widgets/widgets/{toggle → plots/image}/__init__.py +0 -0
  220. /bec_widgets/widgets/{image → plots/image}/bec_image_widget.pyproject +0 -0
  221. /bec_widgets/widgets/{vscode → plots/motor_map}/__init__.py +0 -0
  222. /bec_widgets/widgets/{motor_map → plots/motor_map}/bec_motor_map_widget.pyproject +0 -0
  223. /bec_widgets/widgets/{waveform → plots/motor_map/motor_map_dialog}/__init__.py +0 -0
  224. /bec_widgets/widgets/{motor_map → plots/motor_map}/motor_map_dialog/motor_map_settings.py +0 -0
  225. /bec_widgets/widgets/{motor_map → plots/motor_map}/motor_map_dialog/motor_map_settings.ui +0 -0
  226. /bec_widgets/widgets/{waveform/waveform_popups → plots/multi_waveform}/__init__.py +0 -0
  227. /bec_widgets/widgets/{waveform/waveform_popups/curve_dialog → plots/waveform}/__init__.py +0 -0
  228. /bec_widgets/widgets/{waveform → plots/waveform}/bec_waveform_widget.pyproject +0 -0
  229. /bec_widgets/widgets/{waveform/waveform_popups/dap_summary_dialog → plots/waveform/waveform_popups}/__init__.py +0 -0
  230. /bec_widgets/widgets/{website → plots/waveform/waveform_popups/curve_dialog}/__init__.py +0 -0
  231. /bec_widgets/widgets/{waveform → plots/waveform}/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  232. /bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/bec_progress_bar.pyproject +0 -0
  233. /bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/__init__.py +0 -0
  234. /bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring.py +0 -0
  235. /bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring_progress_bar.pyproject +0 -0
  236. /bec_widgets/widgets/{bec_queue → services/bec_queue}/bec_queue.pyproject +0 -0
  237. /bec_widgets/widgets/{bec_status_box → services/bec_status_box}/bec_status_box.pyproject +0 -0
  238. /bec_widgets/widgets/{bec_status_box → services/bec_status_box}/status_item.py +0 -0
  239. /bec_widgets/widgets/{device_browser → services/device_browser}/device_browser.pyproject +0 -0
  240. /bec_widgets/widgets/{device_browser → services/device_browser}/device_browser.ui +0 -0
  241. /bec_widgets/widgets/{device_browser → services/device_browser}/device_item/__init__.py +0 -0
  242. /bec_widgets/widgets/{device_browser → services/device_browser}/device_item/device_item.py +0 -0
  243. /bec_widgets/widgets/{spinner → utility/spinner}/spinner_widget.pyproject +0 -0
  244. /bec_widgets/widgets/{toggle → utility/toggle}/toggle_switch.pyproject +0 -0
  245. /bec_widgets/widgets/{color_button → utility/visual/color_button}/color_button.pyproject +0 -0
  246. /bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/colormap_selector.pyproject +0 -0
  247. /bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/bec_color_map_widget.pyproject +0 -0
  248. /bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/dark_mode_button.pyproject +0 -0
  249. {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/entry_points.txt +0 -0
  250. {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,353 @@
1
+ from collections import deque
2
+ from typing import Literal, Optional
3
+
4
+ import pyqtgraph as pg
5
+ from bec_lib.endpoints import MessageEndpoints
6
+ from bec_lib.logger import bec_logger
7
+ from pydantic import Field, field_validator
8
+ from pyqtgraph.exporters import MatplotlibExporter
9
+ from qtpy.QtCore import Signal, Slot
10
+ from qtpy.QtWidgets import QWidget
11
+
12
+ from bec_widgets.utils import Colors
13
+ from bec_widgets.widgets.containers.figure.plots.plot_base import BECPlotBase, SubplotConfig
14
+
15
+ logger = bec_logger.logger
16
+
17
+
18
+ class BECMultiWaveformConfig(SubplotConfig):
19
+ color_palette: Optional[str] = Field(
20
+ "magma", description="The color palette of the figure widget.", validate_default=True
21
+ )
22
+ curve_limit: Optional[int] = Field(
23
+ 200, description="The maximum number of curves to display on the plot."
24
+ )
25
+ flush_buffer: Optional[bool] = Field(
26
+ False, description="Flush the buffer of the plot widget when the curve limit is reached."
27
+ )
28
+ monitor: Optional[str] = Field(
29
+ None, description="The monitor to set for the plot widget."
30
+ ) # TODO validate monitor in bec -> maybe make it as SignalData class for validation purpose
31
+ curve_width: Optional[int] = Field(1, description="The width of the curve on the plot.")
32
+ opacity: Optional[int] = Field(50, description="The opacity of the curve on the plot.")
33
+ highlight_last_curve: Optional[bool] = Field(
34
+ True, description="Highlight the last curve on the plot."
35
+ )
36
+
37
+ model_config: dict = {"validate_assignment": True}
38
+ _validate_color_map_z = field_validator("color_palette")(Colors.validate_color_map)
39
+
40
+
41
+ class BECMultiWaveform(BECPlotBase):
42
+ monitor_signal_updated = Signal()
43
+ highlighted_curve_index_changed = Signal(int)
44
+ USER_ACCESS = [
45
+ "_rpc_id",
46
+ "_config_dict",
47
+ "curves",
48
+ "set_monitor",
49
+ "set_opacity",
50
+ "set_curve_limit",
51
+ "set_curve_highlight",
52
+ "set_colormap",
53
+ "set",
54
+ "set_title",
55
+ "set_x_label",
56
+ "set_y_label",
57
+ "set_x_scale",
58
+ "set_y_scale",
59
+ "set_x_lim",
60
+ "set_y_lim",
61
+ "set_grid",
62
+ "set_colormap",
63
+ "enable_fps_monitor",
64
+ "lock_aspect_ratio",
65
+ "export",
66
+ "get_all_data",
67
+ "remove",
68
+ ]
69
+
70
+ def __init__(
71
+ self,
72
+ parent: Optional[QWidget] = None,
73
+ parent_figure=None,
74
+ config: Optional[BECMultiWaveformConfig] = None,
75
+ client=None,
76
+ gui_id: Optional[str] = None,
77
+ ):
78
+ if config is None:
79
+ config = BECMultiWaveformConfig(widget_class=self.__class__.__name__)
80
+ super().__init__(
81
+ parent=parent, parent_figure=parent_figure, config=config, client=client, gui_id=gui_id
82
+ )
83
+ self.old_scan_id = None
84
+ self.scan_id = None
85
+ self.monitor = None
86
+ self.connected = False
87
+ self.current_highlight_index = 0
88
+ self._curves = deque()
89
+ self.visible_curves = []
90
+ self.number_of_visible_curves = 0
91
+
92
+ # Get bec shortcuts dev, scans, queue, scan_storage, dap
93
+ self.get_bec_shortcuts()
94
+
95
+ @property
96
+ def curves(self) -> deque:
97
+ """
98
+ Get the curves of the plot widget as a deque.
99
+ Returns:
100
+ deque: Deque of curves.
101
+ """
102
+ return self._curves
103
+
104
+ @curves.setter
105
+ def curves(self, value: deque):
106
+ self._curves = value
107
+
108
+ @property
109
+ def highlight_last_curve(self) -> bool:
110
+ """
111
+ Get the highlight_last_curve property.
112
+ Returns:
113
+ bool: The highlight_last_curve property.
114
+ """
115
+ return self.config.highlight_last_curve
116
+
117
+ @highlight_last_curve.setter
118
+ def highlight_last_curve(self, value: bool):
119
+ self.config.highlight_last_curve = value
120
+
121
+ def set_monitor(self, monitor: str):
122
+ """
123
+ Set the monitor for the plot widget.
124
+ Args:
125
+ monitor (str): The monitor to set.
126
+ """
127
+ self.config.monitor = monitor
128
+ self._connect_monitor()
129
+
130
+ def _connect_monitor(self):
131
+ """
132
+ Connect the monitor to the plot widget.
133
+ """
134
+ try:
135
+ previous_monitor = self.monitor
136
+ except AttributeError:
137
+ previous_monitor = None
138
+
139
+ if previous_monitor and self.connected is True:
140
+ self.bec_dispatcher.disconnect_slot(
141
+ self.on_monitor_1d_update, MessageEndpoints.device_monitor_1d(previous_monitor)
142
+ )
143
+ if self.config.monitor and self.connected is False:
144
+ self.bec_dispatcher.connect_slot(
145
+ self.on_monitor_1d_update, MessageEndpoints.device_monitor_1d(self.config.monitor)
146
+ )
147
+ self.connected = True
148
+ self.monitor = self.config.monitor
149
+
150
+ @Slot(dict, dict)
151
+ def on_monitor_1d_update(self, msg: dict, metadata: dict):
152
+ """
153
+ Update the plot widget with the monitor data.
154
+
155
+ Args:
156
+ msg(dict): The message data.
157
+ metadata(dict): The metadata of the message.
158
+ """
159
+ data = msg.get("data", None)
160
+ current_scan_id = metadata.get("scan_id", None)
161
+
162
+ if current_scan_id != self.scan_id:
163
+ self.scan_id = current_scan_id
164
+ self.clear_curves()
165
+ self.curves.clear()
166
+ if self.crosshair:
167
+ self.crosshair.clear_markers()
168
+
169
+ # Always create a new curve and add it
170
+ curve = pg.PlotDataItem()
171
+ curve.setData(data)
172
+ self.plot_item.addItem(curve)
173
+ self.curves.append(curve)
174
+
175
+ # Max Trace and scale colors
176
+ self.set_curve_limit(self.config.curve_limit, self.config.flush_buffer)
177
+
178
+ self.monitor_signal_updated.emit()
179
+
180
+ @Slot(int)
181
+ def set_curve_highlight(self, index: int):
182
+ """
183
+ Set the curve highlight based on visible curves.
184
+
185
+ Args:
186
+ index (int): The index of the curve to highlight among visible curves.
187
+ """
188
+ self.plot_item.visible_curves = [curve for curve in self.curves if curve.isVisible()]
189
+ num_visible_curves = len(self.plot_item.visible_curves)
190
+ self.number_of_visible_curves = num_visible_curves
191
+
192
+ if num_visible_curves == 0:
193
+ return # No curves to highlight
194
+
195
+ if index >= num_visible_curves:
196
+ index = num_visible_curves - 1
197
+ elif index < 0:
198
+ index = num_visible_curves + index
199
+ self.current_highlight_index = index
200
+ num_colors = num_visible_curves
201
+ colors = Colors.evenly_spaced_colors(
202
+ colormap=self.config.color_palette, num=num_colors, format="HEX"
203
+ )
204
+ for i, curve in enumerate(self.plot_item.visible_curves):
205
+ curve.setPen()
206
+ if i == self.current_highlight_index:
207
+ curve.setPen(pg.mkPen(color=colors[i], width=5))
208
+ curve.setAlpha(alpha=1, auto=False)
209
+ curve.setZValue(1)
210
+ else:
211
+ curve.setPen(pg.mkPen(color=colors[i], width=1))
212
+ curve.setAlpha(alpha=self.config.opacity / 100, auto=False)
213
+ curve.setZValue(0)
214
+
215
+ self.highlighted_curve_index_changed.emit(self.current_highlight_index)
216
+
217
+ @Slot(int)
218
+ def set_opacity(self, opacity: int):
219
+ """
220
+ Set the opacity of the curve on the plot.
221
+
222
+ Args:
223
+ opacity(int): The opacity of the curve. 0-100.
224
+ """
225
+ self.config.opacity = max(0, min(100, opacity))
226
+ self.set_curve_highlight(self.current_highlight_index)
227
+
228
+ @Slot(int, bool)
229
+ def set_curve_limit(self, max_trace: int, flush_buffer: bool = False):
230
+ """
231
+ Set the maximum number of traces to display on the plot.
232
+
233
+ Args:
234
+ max_trace (int): The maximum number of traces to display.
235
+ flush_buffer (bool): Flush the buffer.
236
+ """
237
+ self.config.curve_limit = max_trace
238
+ self.config.flush_buffer = flush_buffer
239
+
240
+ if self.config.curve_limit is None:
241
+ self.scale_colors()
242
+ return
243
+
244
+ if self.config.flush_buffer:
245
+ # Remove excess curves from the plot and the deque
246
+ while len(self.curves) > self.config.curve_limit:
247
+ curve = self.curves.popleft()
248
+ self.plot_item.removeItem(curve)
249
+ else:
250
+ # Hide or show curves based on the new max_trace
251
+ num_curves_to_show = min(self.config.curve_limit, len(self.curves))
252
+ for i, curve in enumerate(self.curves):
253
+ if i < len(self.curves) - num_curves_to_show:
254
+ curve.hide()
255
+ else:
256
+ curve.show()
257
+ self.scale_colors()
258
+
259
+ def scale_colors(self):
260
+ """
261
+ Scale the colors of the curves based on the current colormap.
262
+ """
263
+ if self.config.highlight_last_curve:
264
+ self.set_curve_highlight(-1) # Use -1 to highlight the last visible curve
265
+ else:
266
+ self.set_curve_highlight(self.current_highlight_index)
267
+
268
+ def set_colormap(self, colormap: str):
269
+ """
270
+ Set the colormap for the curves.
271
+
272
+ Args:
273
+ colormap(str): Colormap for the curves.
274
+ """
275
+ self.config.color_palette = colormap
276
+ self.set_curve_highlight(self.current_highlight_index)
277
+
278
+ def hook_crosshair(self) -> None:
279
+ super().hook_crosshair()
280
+ if self.crosshair:
281
+ self.highlighted_curve_index_changed.connect(self.crosshair.update_highlighted_curve)
282
+ if self.curves:
283
+ self.crosshair.update_highlighted_curve(self.current_highlight_index)
284
+
285
+ def get_all_data(self, output: Literal["dict", "pandas"] = "dict") -> dict:
286
+ """
287
+ Extract all curve data into a dictionary or a pandas DataFrame.
288
+
289
+ Args:
290
+ output (Literal["dict", "pandas"]): Format of the output data.
291
+
292
+ Returns:
293
+ dict | pd.DataFrame: Data of all curves in the specified format.
294
+ """
295
+ data = {}
296
+ try:
297
+ import pandas as pd
298
+ except ImportError:
299
+ pd = None
300
+ if output == "pandas":
301
+ logger.warning(
302
+ "Pandas is not installed. "
303
+ "Please install pandas using 'pip install pandas'."
304
+ "Output will be dictionary instead."
305
+ )
306
+ output = "dict"
307
+
308
+ curve_keys = []
309
+ curves_list = list(self.curves)
310
+ for i, curve in enumerate(curves_list):
311
+ x_data, y_data = curve.getData()
312
+ if x_data is not None or y_data is not None:
313
+ key = f"curve_{i}"
314
+ curve_keys.append(key)
315
+ if output == "dict":
316
+ data[key] = {"x": x_data.tolist(), "y": y_data.tolist()}
317
+ elif output == "pandas" and pd is not None:
318
+ data[key] = pd.DataFrame({"x": x_data, "y": y_data})
319
+
320
+ if output == "pandas" and pd is not None:
321
+ combined_data = pd.concat([data[key] for key in curve_keys], axis=1, keys=curve_keys)
322
+ return combined_data
323
+ return data
324
+
325
+ def clear_curves(self):
326
+ """
327
+ Remove all curves from the plot, excluding crosshair items.
328
+ """
329
+ items_to_remove = []
330
+ for item in self.plot_item.items:
331
+ if not getattr(item, "is_crosshair", False) and isinstance(item, pg.PlotDataItem):
332
+ items_to_remove.append(item)
333
+ for item in items_to_remove:
334
+ self.plot_item.removeItem(item)
335
+
336
+ def export_to_matplotlib(self):
337
+ """
338
+ Export current waveform to matplotlib GUI. Available only if matplotlib is installed in the environment.
339
+ """
340
+ MatplotlibExporter(self.plot_item).export()
341
+
342
+
343
+ if __name__ == "__main__":
344
+ import sys
345
+
346
+ from qtpy.QtWidgets import QApplication
347
+
348
+ from bec_widgets.widgets.containers.figure import BECFigure
349
+
350
+ app = QApplication(sys.argv)
351
+ widget = BECFigure()
352
+ widget.show()
353
+ sys.exit(app.exec_())
@@ -19,8 +19,8 @@ from bec_widgets.qt_utils.error_popups import SafeSlot as Slot
19
19
  from bec_widgets.utils import Colors, EntryValidator
20
20
  from bec_widgets.utils.colors import get_accent_colors
21
21
  from bec_widgets.utils.linear_region_selector import LinearRegionWrapper
22
- from bec_widgets.widgets.figure.plots.plot_base import BECPlotBase, SubplotConfig
23
- from bec_widgets.widgets.figure.plots.waveform.waveform_curve import (
22
+ from bec_widgets.widgets.containers.figure.plots.plot_base import BECPlotBase, SubplotConfig
23
+ from bec_widgets.widgets.containers.figure.plots.waveform.waveform_curve import (
24
24
  BECCurve,
25
25
  CurveConfig,
26
26
  Signal,
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Any, Literal, Optional
3
+ from typing import TYPE_CHECKING, Literal, Optional
4
4
 
5
5
  import numpy as np
6
6
  import pyqtgraph as pg
@@ -11,7 +11,7 @@ from qtpy import QtCore
11
11
  from bec_widgets.utils import BECConnector, Colors, ConnectionConfig
12
12
 
13
13
  if TYPE_CHECKING:
14
- from bec_widgets.widgets.figure.plots.waveform import BECWaveform1D
14
+ from bec_widgets.widgets.containers.figure.plots.waveform import BECWaveform1D
15
15
 
16
16
  logger = bec_logger.logger
17
17
 
@@ -4,7 +4,7 @@
4
4
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
5
5
 
6
6
  from bec_widgets.utils.bec_designer import designer_material_icon
7
- from bec_widgets.widgets.button_abort.button_abort import AbortButton
7
+ from bec_widgets.widgets.control.buttons.button_abort.button_abort import AbortButton
8
8
 
9
9
  DOM_XML = """
10
10
  <ui language='c++'>
@@ -9,6 +9,7 @@ from bec_widgets.utils.bec_widget import BECWidget
9
9
  class AbortButton(BECWidget, QWidget):
10
10
  """A button that abort the scan."""
11
11
 
12
+ PLUGIN = True
12
13
  ICON_NAME = "cancel"
13
14
 
14
15
  def __init__(
@@ -6,7 +6,9 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.button_abort.abort_button_plugin import AbortButtonPlugin
9
+ from bec_widgets.widgets.control.buttons.button_abort.abort_button_plugin import (
10
+ AbortButtonPlugin,
11
+ )
10
12
 
11
13
  QPyDesignerCustomWidgetCollection.addCustomWidget(AbortButtonPlugin())
12
14
 
@@ -9,6 +9,7 @@ from bec_widgets.utils.bec_widget import BECWidget
9
9
  class ResetButton(BECWidget, QWidget):
10
10
  """A button that resets the scan queue."""
11
11
 
12
+ PLUGIN = True
12
13
  ICON_NAME = "restart_alt"
13
14
 
14
15
  def __init__(self, parent=None, client=None, config=None, gui_id=None, toolbar=False):
@@ -6,7 +6,9 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.button_reset.reset_button_plugin import ResetButtonPlugin
9
+ from bec_widgets.widgets.control.buttons.button_reset.reset_button_plugin import (
10
+ ResetButtonPlugin,
11
+ )
10
12
 
11
13
  QPyDesignerCustomWidgetCollection.addCustomWidget(ResetButtonPlugin())
12
14
 
@@ -4,7 +4,7 @@
4
4
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
5
5
 
6
6
  from bec_widgets.utils.bec_designer import designer_material_icon
7
- from bec_widgets.widgets.button_reset.button_reset import ResetButton
7
+ from bec_widgets.widgets.control.buttons.button_reset.button_reset import ResetButton
8
8
 
9
9
  DOM_XML = """
10
10
  <ui language='c++'>
@@ -9,6 +9,7 @@ from bec_widgets.utils.bec_widget import BECWidget
9
9
  class ResumeButton(BECWidget, QWidget):
10
10
  """A button that continue scan queue."""
11
11
 
12
+ PLUGIN = True
12
13
  ICON_NAME = "resume"
13
14
 
14
15
  def __init__(self, parent=None, client=None, config=None, gui_id=None, toolbar=False):
@@ -6,7 +6,9 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.button_resume.resume_button_plugin import ResumeButtonPlugin
9
+ from bec_widgets.widgets.control.buttons.button_resume.resume_button_plugin import (
10
+ ResumeButtonPlugin,
11
+ )
10
12
 
11
13
  QPyDesignerCustomWidgetCollection.addCustomWidget(ResumeButtonPlugin())
12
14
 
@@ -4,7 +4,7 @@
4
4
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
5
5
 
6
6
  from bec_widgets.utils.bec_designer import designer_material_icon
7
- from bec_widgets.widgets.button_resume.button_resume import ResumeButton
7
+ from bec_widgets.widgets.control.buttons.button_resume.button_resume import ResumeButton
8
8
 
9
9
  DOM_XML = """
10
10
  <ui language='c++'>
@@ -6,7 +6,7 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.stop_button.stop_button_plugin import StopButtonPlugin
9
+ from bec_widgets.widgets.control.buttons.stop_button.stop_button_plugin import StopButtonPlugin
10
10
 
11
11
  QPyDesignerCustomWidgetCollection.addCustomWidget(StopButtonPlugin())
12
12
 
@@ -9,6 +9,7 @@ from bec_widgets.utils.bec_widget import BECWidget
9
9
  class StopButton(BECWidget, QWidget):
10
10
  """A button that stops the current scan."""
11
11
 
12
+ PLUGIN = True
12
13
  ICON_NAME = "dangerous"
13
14
 
14
15
  def __init__(self, parent=None, client=None, config=None, gui_id=None, toolbar=False):
@@ -6,7 +6,7 @@ from qtpy.QtDesigner import QDesignerCustomWidgetInterface
6
6
 
7
7
  import bec_widgets
8
8
  from bec_widgets.utils.bec_designer import designer_material_icon
9
- from bec_widgets.widgets.stop_button.stop_button import StopButton
9
+ from bec_widgets.widgets.control.buttons.stop_button.stop_button import StopButton
10
10
 
11
11
  DOM_XML = """
12
12
  <ui language='c++'>
@@ -9,7 +9,7 @@ from bec_widgets.utils.colors import get_accent_colors, get_theme_palette
9
9
 
10
10
  class PositionIndicator(BECWidget, QWidget):
11
11
  USER_ACCESS = ["set_value", "set_range", "vertical", "indicator_width", "rounded_corners"]
12
-
12
+ PLUGIN = True
13
13
  ICON_NAME = "horizontal_distribute"
14
14
 
15
15
  def __init__(self, parent=None, client=None, config=None, gui_id=None):
@@ -6,7 +6,9 @@ from qtpy.QtDesigner import QDesignerCustomWidgetInterface
6
6
 
7
7
  import bec_widgets
8
8
  from bec_widgets.utils.bec_designer import designer_material_icon
9
- from bec_widgets.widgets.position_indicator.position_indicator import PositionIndicator
9
+ from bec_widgets.widgets.control.device_control.position_indicator.position_indicator import (
10
+ PositionIndicator,
11
+ )
10
12
 
11
13
  DOM_XML = """
12
14
  <ui language='c++'>
@@ -6,7 +6,7 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.position_indicator.position_indicator_plugin import (
9
+ from bec_widgets.widgets.control.device_control.position_indicator.position_indicator_plugin import (
10
10
  PositionIndicatorPlugin,
11
11
  )
12
12
 
@@ -12,14 +12,16 @@ from bec_lib.messages import ScanQueueMessage
12
12
  from bec_qthemes import material_icon
13
13
  from qtpy.QtCore import Property, Signal, Slot
14
14
  from qtpy.QtGui import QDoubleValidator
15
- from qtpy.QtWidgets import QDialog, QDoubleSpinBox, QPushButton, QVBoxLayout, QWidget
15
+ from qtpy.QtWidgets import QDialog, QDoubleSpinBox, QPushButton, QVBoxLayout
16
16
 
17
17
  from bec_widgets.qt_utils.compact_popup import CompactPopupWidget
18
18
  from bec_widgets.utils import UILoader
19
19
  from bec_widgets.utils.bec_widget import BECWidget
20
20
  from bec_widgets.utils.colors import get_accent_colors, set_theme
21
- from bec_widgets.widgets.base_classes.device_input_base import BECDeviceFilter
22
- from bec_widgets.widgets.device_line_edit.device_line_edit import DeviceLineEdit
21
+ from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter
22
+ from bec_widgets.widgets.control.device_input.device_line_edit.device_line_edit import (
23
+ DeviceLineEdit,
24
+ )
23
25
 
24
26
  logger = bec_logger.logger
25
27
 
@@ -32,6 +34,7 @@ class PositionerBox(BECWidget, CompactPopupWidget):
32
34
  ui_file = "positioner_box.ui"
33
35
  dimensions = (234, 224)
34
36
 
37
+ PLUGIN = True
35
38
  ICON_NAME = "switch_right"
36
39
  USER_ACCESS = ["set_positioner"]
37
40
  device_changed = Signal(str, str)
@@ -6,7 +6,7 @@ import os
6
6
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
7
 
8
8
  from bec_widgets.utils.bec_designer import designer_material_icon
9
- from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox
9
+ from bec_widgets.widgets.control.device_control.positioner_box.positioner_box import PositionerBox
10
10
 
11
11
  DOM_XML = """
12
12
  <ui language='c++'>
@@ -1,6 +1,6 @@
1
1
  from bec_lib.device import Positioner
2
2
 
3
- from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox
3
+ from bec_widgets.widgets.control.device_control.positioner_box.positioner_box import PositionerBox
4
4
 
5
5
 
6
6
  class PositionerControlLine(PositionerBox):
@@ -9,6 +9,7 @@ class PositionerControlLine(PositionerBox):
9
9
  ui_file = "positioner_control_line.ui"
10
10
  dimensions = (60, 600) # height, width
11
11
 
12
+ PLUGIN = True
12
13
  ICON_NAME = "switch_left"
13
14
 
14
15
  def __init__(self, parent=None, device: Positioner = None, *args, **kwargs):
@@ -6,7 +6,9 @@ import os
6
6
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
7
 
8
8
  from bec_widgets.utils.bec_designer import designer_material_icon
9
- from bec_widgets.widgets.positioner_box.positioner_control_line import PositionerControlLine
9
+ from bec_widgets.widgets.control.device_control.positioner_box.positioner_control_line import (
10
+ PositionerControlLine,
11
+ )
10
12
 
11
13
  DOM_XML = """
12
14
  <ui language='c++'>
@@ -6,7 +6,9 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.positioner_box.positioner_box_plugin import PositionerBoxPlugin
9
+ from bec_widgets.widgets.control.device_control.positioner_box.positioner_box_plugin import (
10
+ PositionerBoxPlugin,
11
+ )
10
12
 
11
13
  QPyDesignerCustomWidgetCollection.addCustomWidget(PositionerBoxPlugin())
12
14
 
@@ -6,7 +6,7 @@ def main(): # pragma: no cover
6
6
  return
7
7
  from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
8
8
 
9
- from bec_widgets.widgets.positioner_box.positioner_control_line_plugin import (
9
+ from bec_widgets.widgets.control.device_control.positioner_box.positioner_control_line_plugin import (
10
10
  PositionerControlLinePlugin,
11
11
  )
12
12
 
@@ -5,16 +5,16 @@ from __future__ import annotations
5
5
  from bec_lib.device import Positioner
6
6
  from bec_lib.logger import bec_logger
7
7
  from qtpy.QtCore import Property, QSize, Signal, Slot
8
- from qtpy.QtWidgets import QGridLayout, QGroupBox, QSizePolicy, QVBoxLayout, QWidget
8
+ from qtpy.QtWidgets import QGridLayout, QGroupBox, QVBoxLayout, QWidget
9
9
 
10
10
  from bec_widgets.utils.bec_widget import BECWidget
11
- from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox
11
+ from bec_widgets.widgets.control.device_control.positioner_box.positioner_box import PositionerBox
12
12
 
13
13
  logger = bec_logger.logger
14
14
 
15
15
 
16
16
  class PositionerGroupBox(QGroupBox):
17
-
17
+ PLUGIN = True
18
18
  position_update = Signal(float)
19
19
 
20
20
  def __init__(self, parent, dev_name):
@@ -6,7 +6,9 @@ import os
6
6
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
7
 
8
8
  from bec_widgets.utils.bec_designer import designer_material_icon
9
- from bec_widgets.widgets.positioner_group.positioner_group import PositionerGroup
9
+ from bec_widgets.widgets.control.device_control.positioner_group.positioner_group import (
10
+ PositionerGroup,
11
+ )
10
12
 
11
13
  DOM_XML = """
12
14
  <ui language='c++'>