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.
- CHANGELOG.md +32 -25
- PKG-INFO +1 -1
- bec_widgets/applications/alignment/alignment_1d/alignment_1d.py +7 -20
- bec_widgets/cli/client.py +430 -32
- bec_widgets/cli/generate_cli.py +2 -2
- bec_widgets/cli/rpc_register.py +2 -0
- bec_widgets/cli/rpc_wigdet_handler.py +5 -3
- bec_widgets/cli/server.py +2 -3
- bec_widgets/examples/jupyter_console/jupyter_console_window.py +10 -8
- bec_widgets/qt_utils/palette_viewer.py +1 -1
- bec_widgets/utils/crosshair.py +88 -35
- bec_widgets/utils/generate_designer_plugin.py +1 -1
- bec_widgets/utils/plugin_utils.py +14 -5
- bec_widgets/utils/ui_loader.py +2 -2
- bec_widgets/widgets/{dock → containers/dock}/dock_area.py +21 -11
- bec_widgets/widgets/{dock → containers/dock}/dock_area_plugin.py +1 -1
- bec_widgets/widgets/{dock → containers/dock}/register_dock_area.py +1 -1
- bec_widgets/widgets/{figure → containers/figure}/figure.py +41 -7
- bec_widgets/widgets/{figure → containers/figure}/plots/image/image.py +7 -4
- bec_widgets/widgets/{figure → containers/figure}/plots/image/image_item.py +5 -2
- bec_widgets/widgets/{figure → containers/figure}/plots/motor_map/motor_map.py +2 -2
- bec_widgets/widgets/containers/figure/plots/multi_waveform/multi_waveform.py +353 -0
- bec_widgets/widgets/{figure → containers/figure}/plots/waveform/waveform.py +2 -2
- bec_widgets/widgets/{figure → containers/figure}/plots/waveform/waveform_curve.py +2 -2
- bec_widgets/widgets/{button_abort → control/buttons/button_abort}/abort_button_plugin.py +1 -1
- bec_widgets/widgets/{button_abort → control/buttons/button_abort}/button_abort.py +1 -0
- bec_widgets/widgets/{button_abort → control/buttons/button_abort}/register_abort_button.py +3 -1
- bec_widgets/widgets/{button_reset → control/buttons/button_reset}/button_reset.py +1 -0
- bec_widgets/widgets/{button_reset → control/buttons/button_reset}/register_reset_button.py +3 -1
- bec_widgets/widgets/{button_reset → control/buttons/button_reset}/reset_button_plugin.py +1 -1
- bec_widgets/widgets/{button_resume → control/buttons/button_resume}/button_resume.py +1 -0
- bec_widgets/widgets/{button_resume → control/buttons/button_resume}/register_resume_button.py +3 -1
- bec_widgets/widgets/{button_resume → control/buttons/button_resume}/resume_button_plugin.py +1 -1
- bec_widgets/widgets/{stop_button → control/buttons/stop_button}/register_stop_button.py +1 -1
- bec_widgets/widgets/{stop_button → control/buttons/stop_button}/stop_button.py +1 -0
- bec_widgets/widgets/{stop_button → control/buttons/stop_button}/stop_button_plugin.py +1 -1
- bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/position_indicator.py +1 -1
- bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/position_indicator_plugin.py +3 -1
- bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/register_position_indicator.py +1 -1
- bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.py +6 -3
- bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box_plugin.py +1 -1
- bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line.py +2 -1
- bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line_plugin.py +3 -1
- bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/register_positioner_box.py +3 -1
- bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/register_positioner_control_line.py +1 -1
- bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group.py +3 -3
- bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group_plugin.py +3 -1
- bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/register_positioner_group.py +3 -1
- bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/device_combo_box_plugin.py +1 -1
- bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/device_combobox.py +2 -1
- bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/register_device_combo_box.py +3 -1
- bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/device_line_edit.py +5 -2
- bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/device_line_edit_plugin.py +3 -1
- bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/register_device_line_edit.py +3 -1
- bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/register_signal_combobox.py +3 -1
- bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/signal_combobox.py +4 -1
- bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/signal_combobox_plugin.py +1 -1
- bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/register_signal_line_edit.py +3 -1
- bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/signal_line_edit.py +4 -1
- bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/signal_line_edit_plugin.py +3 -1
- bec_widgets/widgets/{scan_control → control/scan_control}/register_scan_control.py +1 -1
- bec_widgets/widgets/{scan_control → control/scan_control}/scan_control.py +5 -4
- bec_widgets/widgets/{scan_control → control/scan_control}/scan_control_plugin.py +1 -1
- bec_widgets/widgets/{scan_control → control/scan_control}/scan_group_box.py +4 -2
- bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/dap_combo_box.py +1 -1
- bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/dap_combo_box_plugin.py +1 -1
- bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/register_dap_combo_box.py +1 -1
- bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lm_fit_dialog_plugin.py +1 -1
- bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lmfit_dialog.py +1 -0
- bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/register_lm_fit_dialog.py +1 -1
- bec_widgets/widgets/{console → editors/console}/console.py +1 -0
- bec_widgets/widgets/{console → editors/console}/console_plugin.py +1 -1
- bec_widgets/widgets/{console → editors/console}/register_console.py +1 -1
- bec_widgets/widgets/{text_box → editors/text_box}/register_text_box.py +1 -1
- bec_widgets/widgets/{text_box → editors/text_box}/text_box.py +1 -0
- bec_widgets/widgets/{text_box → editors/text_box}/text_box_plugin.py +1 -1
- bec_widgets/widgets/{vscode → editors/vscode}/register_vs_code_editor.py +1 -1
- bec_widgets/widgets/{vscode → editors/vscode}/vs_code_editor_plugin.py +1 -1
- bec_widgets/widgets/{vscode → editors/vscode}/vscode.py +2 -2
- bec_widgets/widgets/{website → editors/website}/register_website_widget.py +1 -1
- bec_widgets/widgets/{website → editors/website}/website.py +1 -0
- bec_widgets/widgets/{website → editors/website}/website_widget_plugin.py +1 -1
- bec_widgets/widgets/{image → plots/image}/bec_image_widget_plugin.py +1 -1
- bec_widgets/widgets/{image → plots/image}/image_widget.py +7 -6
- bec_widgets/widgets/{image → plots/image}/register_bec_image_widget.py +1 -1
- bec_widgets/widgets/{motor_map → plots/motor_map}/bec_motor_map_widget_plugin.py +1 -1
- bec_widgets/widgets/{motor_map → plots/motor_map}/motor_map_widget.py +6 -6
- bec_widgets/widgets/{motor_map → plots/motor_map}/register_bec_motor_map_widget.py +3 -1
- bec_widgets/widgets/plots/multi_waveform/bec_multi_waveform_widget.pyproject +1 -0
- bec_widgets/widgets/plots/multi_waveform/bec_multi_waveform_widget_plugin.py +54 -0
- bec_widgets/widgets/plots/multi_waveform/multi_waveform_controls.ui +99 -0
- bec_widgets/widgets/plots/multi_waveform/multi_waveform_widget.py +535 -0
- bec_widgets/widgets/plots/multi_waveform/register_bec_multi_waveform_widget.py +17 -0
- bec_widgets/widgets/{waveform → plots/waveform}/bec_waveform_widget_plugin.py +1 -1
- bec_widgets/widgets/{waveform → plots/waveform}/register_bec_waveform_widget.py +3 -1
- bec_widgets/widgets/{waveform → plots/waveform}/waveform_popups/curve_dialog/curve_dialog.py +5 -3
- bec_widgets/widgets/plots/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
- bec_widgets/widgets/{waveform → plots/waveform}/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +2 -6
- bec_widgets/widgets/{waveform → plots/waveform}/waveform_widget.py +9 -6
- bec_widgets/widgets/progress/__init__.py +0 -0
- bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
- bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/bec_progress_bar_plugin.py +1 -1
- bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/bec_progressbar.py +1 -0
- bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/register_bec_progress_bar.py +3 -1
- bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/register_ring_progress_bar.py +3 -1
- bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring_progress_bar.py +2 -1
- bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring_progress_bar_plugin.py +1 -1
- bec_widgets/widgets/services/__init__.py +0 -0
- bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
- bec_widgets/widgets/{bec_queue → services/bec_queue}/bec_queue.py +5 -4
- bec_widgets/widgets/{bec_queue → services/bec_queue}/bec_queue_plugin.py +1 -1
- bec_widgets/widgets/{bec_queue → services/bec_queue}/register_bec_queue.py +1 -1
- bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
- bec_widgets/widgets/{bec_status_box → services/bec_status_box}/bec_status_box.py +3 -3
- bec_widgets/widgets/{bec_status_box → services/bec_status_box}/bec_status_box_plugin.py +1 -1
- bec_widgets/widgets/{bec_status_box → services/bec_status_box}/register_bec_status_box.py +1 -1
- bec_widgets/widgets/services/device_browser/__init__.py +0 -0
- bec_widgets/widgets/{device_browser → services/device_browser}/device_browser.py +3 -3
- bec_widgets/widgets/{device_browser → services/device_browser}/device_browser_plugin.py +1 -1
- bec_widgets/widgets/{device_browser → services/device_browser}/register_device_browser.py +3 -1
- bec_widgets/widgets/utility/__init__.py +0 -0
- bec_widgets/widgets/utility/spinner/__init__.py +0 -0
- bec_widgets/widgets/{spinner → utility/spinner}/register_spinner_widget.py +1 -1
- bec_widgets/widgets/{spinner → utility/spinner}/spinner.py +1 -0
- bec_widgets/widgets/{spinner → utility/spinner}/spinner_widget_plugin.py +1 -1
- bec_widgets/widgets/utility/toggle/__init__.py +0 -0
- bec_widgets/widgets/{toggle → utility/toggle}/register_toggle_switch.py +1 -1
- bec_widgets/widgets/{toggle → utility/toggle}/toggle.py +1 -0
- bec_widgets/widgets/{toggle → utility/toggle}/toggle_switch_plugin.py +1 -1
- bec_widgets/widgets/utility/visual/__init__.py +0 -0
- bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
- bec_widgets/widgets/{color_button → utility/visual/color_button}/color_button.py +1 -0
- bec_widgets/widgets/{color_button → utility/visual/color_button}/color_button_plugin.py +1 -1
- bec_widgets/widgets/{color_button → utility/visual/color_button}/register_color_button.py +3 -1
- bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
- bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/colormap_selector.py +1 -0
- bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/colormap_selector_plugin.py +1 -1
- bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/register_colormap_selector.py +1 -1
- bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
- bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/bec_color_map_widget_plugin.py +1 -1
- bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/colormap_widget.py +1 -0
- bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/register_bec_color_map_widget.py +1 -1
- bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
- bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/dark_mode_button.py +1 -0
- bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/dark_mode_button_plugin.py +1 -1
- bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/register_dark_mode_button.py +3 -1
- {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/METADATA +1 -1
- bec_widgets-1.5.1.dist-info/RECORD +318 -0
- {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/WHEEL +1 -1
- pyproject.toml +1 -1
- bec_widgets-1.4.1.dist-info/RECORD +0 -297
- /bec_widgets/widgets/{base_classes → containers}/__init__.py +0 -0
- /bec_widgets/widgets/{dock → containers/dock}/__init__.py +0 -0
- /bec_widgets/widgets/{dock → containers/dock}/dock.py +0 -0
- /bec_widgets/widgets/{dock → containers/dock}/dock_area.pyproject +0 -0
- /bec_widgets/widgets/{figure → containers/figure}/__init__.py +0 -0
- /bec_widgets/widgets/{bec_progressbar → containers/figure/plots}/__init__.py +0 -0
- /bec_widgets/widgets/{figure → containers/figure}/plots/axis_settings.py +0 -0
- /bec_widgets/widgets/{figure → containers/figure}/plots/axis_settings.ui +0 -0
- /bec_widgets/widgets/{bec_queue → containers/figure/plots/image}/__init__.py +0 -0
- /bec_widgets/widgets/{figure → containers/figure}/plots/image/image_processor.py +0 -0
- /bec_widgets/widgets/{bec_status_box → containers/figure/plots/motor_map}/__init__.py +0 -0
- /bec_widgets/widgets/{button_abort → containers/figure/plots/multi_waveform}/__init__.py +0 -0
- /bec_widgets/widgets/{figure → containers/figure}/plots/plot_base.py +0 -0
- /bec_widgets/widgets/{button_reset → containers/figure/plots/waveform}/__init__.py +0 -0
- /bec_widgets/widgets/{button_resume → control}/__init__.py +0 -0
- /bec_widgets/widgets/{color_button → control/buttons}/__init__.py +0 -0
- /bec_widgets/widgets/{colormap_selector → control/buttons/button_abort}/__init__.py +0 -0
- /bec_widgets/widgets/{button_abort → control/buttons/button_abort}/abort_button.pyproject +0 -0
- /bec_widgets/widgets/{colormap_widget → control/buttons/button_reset}/__init__.py +0 -0
- /bec_widgets/widgets/{button_reset → control/buttons/button_reset}/reset_button.pyproject +0 -0
- /bec_widgets/widgets/{dap_combo_box → control/buttons/button_resume}/__init__.py +0 -0
- /bec_widgets/widgets/{button_resume → control/buttons/button_resume}/resume_button.pyproject +0 -0
- /bec_widgets/widgets/{dark_mode_button → control/buttons/stop_button}/__init__.py +0 -0
- /bec_widgets/widgets/{stop_button → control/buttons/stop_button}/stop_button.pyproject +0 -0
- /bec_widgets/widgets/{device_browser → control/device_control}/__init__.py +0 -0
- /bec_widgets/widgets/{device_combobox → control/device_control/position_indicator}/__init__.py +0 -0
- /bec_widgets/widgets/{position_indicator → control/device_control/position_indicator}/position_indicator.pyproject +0 -0
- /bec_widgets/widgets/{device_line_edit → control/device_control/positioner_box}/__init__.py +0 -0
- /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.pyproject +0 -0
- /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.ui +0 -0
- /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line.pyproject +0 -0
- /bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_control_line.ui +0 -0
- /bec_widgets/widgets/{figure/plots → control/device_control/positioner_group}/__init__.py +0 -0
- /bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group.pyproject +0 -0
- /bec_widgets/widgets/{figure/plots/image → control/device_input}/__init__.py +0 -0
- /bec_widgets/widgets/{figure/plots/motor_map → control/device_input/base_classes}/__init__.py +0 -0
- /bec_widgets/widgets/{base_classes → control/device_input/base_classes}/device_input_base.py +0 -0
- /bec_widgets/widgets/{base_classes → control/device_input/base_classes}/device_signal_input_base.py +0 -0
- /bec_widgets/widgets/{figure/plots/waveform → control/device_input/device_combobox}/__init__.py +0 -0
- /bec_widgets/widgets/{device_combobox → control/device_input/device_combobox}/device_combo_box.pyproject +0 -0
- /bec_widgets/widgets/{image → control/device_input/device_line_edit}/__init__.py +0 -0
- /bec_widgets/widgets/{device_line_edit → control/device_input/device_line_edit}/device_line_edit.pyproject +0 -0
- /bec_widgets/widgets/{jupyter_console → control/device_input/signal_combobox}/__init__.py +0 -0
- /bec_widgets/widgets/{signal_combobox → control/device_input/signal_combobox}/signal_combobox.pyproject +0 -0
- /bec_widgets/widgets/{lmfit_dialog → control/device_input/signal_line_edit}/__init__.py +0 -0
- /bec_widgets/widgets/{signal_line_edit → control/device_input/signal_line_edit}/signal_line_edit.pyproject +0 -0
- /bec_widgets/widgets/{scan_control → control/scan_control}/__init__.py +0 -0
- /bec_widgets/widgets/{scan_control → control/scan_control}/scan_control.pyproject +0 -0
- /bec_widgets/widgets/{motor_map → dap}/__init__.py +0 -0
- /bec_widgets/widgets/{motor_map/motor_map_dialog → dap/dap_combo_box}/__init__.py +0 -0
- /bec_widgets/widgets/{dap_combo_box → dap/dap_combo_box}/dap_combo_box.pyproject +0 -0
- /bec_widgets/widgets/{position_indicator → dap/lmfit_dialog}/__init__.py +0 -0
- /bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lm_fit_dialog.pyproject +0 -0
- /bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lmfit_dialog_compact.ui +0 -0
- /bec_widgets/widgets/{lmfit_dialog → dap/lmfit_dialog}/lmfit_dialog_vertical.ui +0 -0
- /bec_widgets/widgets/{positioner_box → editors}/__init__.py +0 -0
- /bec_widgets/widgets/{positioner_group → editors/console}/__init__.py +0 -0
- /bec_widgets/widgets/{console → editors/console}/console.pyproject +0 -0
- /bec_widgets/widgets/{signal_combobox → editors/jupyter_console}/__init__.py +0 -0
- /bec_widgets/widgets/{jupyter_console → editors/jupyter_console}/jupyter_console.py +0 -0
- /bec_widgets/widgets/{signal_line_edit → editors/text_box}/__init__.py +0 -0
- /bec_widgets/widgets/{text_box → editors/text_box}/text_box.pyproject +0 -0
- /bec_widgets/widgets/{spinner → editors/vscode}/__init__.py +0 -0
- /bec_widgets/widgets/{vscode → editors/vscode}/vs_code_editor.pyproject +0 -0
- /bec_widgets/widgets/{stop_button → editors/website}/__init__.py +0 -0
- /bec_widgets/widgets/{website → editors/website}/website_widget.pyproject +0 -0
- /bec_widgets/widgets/{text_box → plots}/__init__.py +0 -0
- /bec_widgets/widgets/{toggle → plots/image}/__init__.py +0 -0
- /bec_widgets/widgets/{image → plots/image}/bec_image_widget.pyproject +0 -0
- /bec_widgets/widgets/{vscode → plots/motor_map}/__init__.py +0 -0
- /bec_widgets/widgets/{motor_map → plots/motor_map}/bec_motor_map_widget.pyproject +0 -0
- /bec_widgets/widgets/{waveform → plots/motor_map/motor_map_dialog}/__init__.py +0 -0
- /bec_widgets/widgets/{motor_map → plots/motor_map}/motor_map_dialog/motor_map_settings.py +0 -0
- /bec_widgets/widgets/{motor_map → plots/motor_map}/motor_map_dialog/motor_map_settings.ui +0 -0
- /bec_widgets/widgets/{waveform/waveform_popups → plots/multi_waveform}/__init__.py +0 -0
- /bec_widgets/widgets/{waveform/waveform_popups/curve_dialog → plots/waveform}/__init__.py +0 -0
- /bec_widgets/widgets/{waveform → plots/waveform}/bec_waveform_widget.pyproject +0 -0
- /bec_widgets/widgets/{waveform/waveform_popups/dap_summary_dialog → plots/waveform/waveform_popups}/__init__.py +0 -0
- /bec_widgets/widgets/{website → plots/waveform/waveform_popups/curve_dialog}/__init__.py +0 -0
- /bec_widgets/widgets/{waveform → plots/waveform}/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
- /bec_widgets/widgets/{bec_progressbar → progress/bec_progressbar}/bec_progress_bar.pyproject +0 -0
- /bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/__init__.py +0 -0
- /bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring.py +0 -0
- /bec_widgets/widgets/{ring_progress_bar → progress/ring_progress_bar}/ring_progress_bar.pyproject +0 -0
- /bec_widgets/widgets/{bec_queue → services/bec_queue}/bec_queue.pyproject +0 -0
- /bec_widgets/widgets/{bec_status_box → services/bec_status_box}/bec_status_box.pyproject +0 -0
- /bec_widgets/widgets/{bec_status_box → services/bec_status_box}/status_item.py +0 -0
- /bec_widgets/widgets/{device_browser → services/device_browser}/device_browser.pyproject +0 -0
- /bec_widgets/widgets/{device_browser → services/device_browser}/device_browser.ui +0 -0
- /bec_widgets/widgets/{device_browser → services/device_browser}/device_item/__init__.py +0 -0
- /bec_widgets/widgets/{device_browser → services/device_browser}/device_item/device_item.py +0 -0
- /bec_widgets/widgets/{spinner → utility/spinner}/spinner_widget.pyproject +0 -0
- /bec_widgets/widgets/{toggle → utility/toggle}/toggle_switch.pyproject +0 -0
- /bec_widgets/widgets/{color_button → utility/visual/color_button}/color_button.pyproject +0 -0
- /bec_widgets/widgets/{colormap_selector → utility/visual/colormap_selector}/colormap_selector.pyproject +0 -0
- /bec_widgets/widgets/{colormap_widget → utility/visual/colormap_widget}/bec_color_map_widget.pyproject +0 -0
- /bec_widgets/widgets/{dark_mode_button → utility/visual/dark_mode_button}/dark_mode_button.pyproject +0 -0
- {bec_widgets-1.4.1.dist-info → bec_widgets-1.5.1.dist-info}/entry_points.txt +0 -0
- {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,
|
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++'>
|
@@ -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
|
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
|
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):
|
bec_widgets/widgets/{button_resume → control/buttons/button_resume}/register_resume_button.py
RENAMED
@@ -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
|
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
|
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
|
|
bec_widgets/widgets/{positioner_box → control/device_control/positioner_box}/positioner_box.py
RENAMED
@@ -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
|
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
|
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
|
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
|
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
|
|
bec_widgets/widgets/{positioner_group → control/device_control/positioner_group}/positioner_group.py
RENAMED
@@ -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,
|
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
|
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++'>
|