bec-widgets 2.17.0__tar.gz → 2.19.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/formatter.yml +1 -1
  2. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/CHANGELOG.md +49 -0
  3. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/PKG-INFO +1 -1
  4. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/tests/utils.py +15 -3
  5. bec_widgets-2.19.0/bec_widgets/utils/filter_io.py +272 -0
  6. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/base_classes/device_input_base.py +16 -16
  7. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/base_classes/device_signal_input_base.py +22 -12
  8. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +2 -0
  9. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +9 -5
  10. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_setting.py +7 -2
  11. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/curve_tree.py +62 -19
  12. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/waveform.py +0 -1
  13. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_item/device_item.py +25 -5
  14. bec_widgets-2.19.0/bec_widgets/widgets/services/device_browser/device_item/device_signal_display.py +102 -0
  15. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/signal_label/signal_label.py +24 -10
  16. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/pyproject.toml +1 -1
  17. bec_widgets-2.17.0/bec_widgets/utils/filter_io.py +0 -156
  18. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.git_hooks/pre-commit +0 -0
  19. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  20. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/ISSUE_TEMPLATE/documentation_update.md +0 -0
  21. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  22. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/actions/bw_install/action.yml +0 -0
  23. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/pull_request_template.md +0 -0
  24. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/scripts/pr_issue_sync/pr_issue_sync.py +0 -0
  25. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/scripts/pr_issue_sync/requirements.txt +0 -0
  26. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/check_pr.yml +0 -0
  27. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/ci.yml +0 -0
  28. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/end2end-conda.yml +0 -0
  29. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/generate-cli-check.yml +0 -0
  30. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/pytest-matrix.yml +0 -0
  31. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/pytest.yml +0 -0
  32. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/semantic_release.yml +0 -0
  33. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/stale-issues.yml +0 -0
  34. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.github/workflows/sync-issues-pr.yml +0 -0
  35. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.gitignore +0 -0
  36. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.gitlab-ci.yml +0 -0
  37. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.pylintrc +0 -0
  38. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/.readthedocs.yaml +0 -0
  39. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/LICENSE +0 -0
  40. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/README.md +0 -0
  41. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/__init__.py +0 -0
  42. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/applications/__init__.py +0 -0
  43. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/applications/bw_launch.py +0 -0
  44. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/applications/launch_window.py +0 -0
  45. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  46. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  47. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/assets/app_icons/auto_update.png +0 -0
  48. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  49. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/assets/app_icons/ui_loader_tile.png +0 -0
  50. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/assets/app_icons/widget_launch_tile.png +0 -0
  51. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/__init__.py +0 -0
  52. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/client.py +0 -0
  53. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/client_utils.py +0 -0
  54. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/generate_cli.py +0 -0
  55. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/rpc/__init__.py +0 -0
  56. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/rpc/rpc_base.py +0 -0
  57. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/rpc/rpc_register.py +0 -0
  58. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/rpc/rpc_widget_handler.py +0 -0
  59. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/cli/server.py +0 -0
  60. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/__init__.py +0 -0
  61. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/general_app/__init__.py +0 -0
  62. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/general_app/general_app.py +0 -0
  63. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/general_app/general_app.ui +0 -0
  64. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/general_app/web_links.py +0 -0
  65. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  66. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  67. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  68. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  69. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  70. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  71. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  72. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  73. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  74. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/tests/__init__.py +0 -0
  75. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/__init__.py +0 -0
  76. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_connector.py +0 -0
  77. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_designer.py +0 -0
  78. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_dispatcher.py +0 -0
  79. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_plugin_helper.py +0 -0
  80. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  81. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_table.py +0 -0
  82. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/bec_widget.py +0 -0
  83. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/clickable_label.py +0 -0
  84. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/collapsible_panel_manager.py +0 -0
  85. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/colors.py +0 -0
  86. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/compact_popup.py +0 -0
  87. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/container_utils.py +0 -0
  88. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/crosshair.py +0 -0
  89. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/entry_validator.py +0 -0
  90. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/error_popups.py +0 -0
  91. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/expandable_frame.py +0 -0
  92. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/forms_from_types/__init__.py +0 -0
  93. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/forms_from_types/forms.py +0 -0
  94. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/forms_from_types/items.py +0 -0
  95. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/forms_from_types/styles.py +0 -0
  96. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/fps_counter.py +0 -0
  97. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  98. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/layout_manager.py +0 -0
  99. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/linear_region_selector.py +0 -0
  100. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/name_utils.py +0 -0
  101. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/ophyd_kind_util.py +0 -0
  102. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/palette_viewer.py +0 -0
  103. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/plot_indicator_items.py +0 -0
  104. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  105. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/plugin_templates/register.template +0 -0
  106. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/plugin_utils.py +0 -0
  107. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/redis_message_waiter.py +0 -0
  108. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/reference_utils.py +0 -0
  109. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/round_frame.py +0 -0
  110. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/rpc_decorator.py +0 -0
  111. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/rpc_server.py +0 -0
  112. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/serialization.py +0 -0
  113. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/settings_dialog.py +0 -0
  114. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/side_panel.py +0 -0
  115. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/thread_checker.py +0 -0
  116. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/toolbar.py +0 -0
  117. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/ui_loader.py +0 -0
  118. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/validator_delegate.py +0 -0
  119. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/widget_io.py +0 -0
  120. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/widget_state_manager.py +0 -0
  121. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/utils/yaml_dialog.py +0 -0
  122. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/__init__.py +0 -0
  123. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/__init__.py +0 -0
  124. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/auto_update/__init__.py +0 -0
  125. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/auto_update/auto_updates.py +0 -0
  126. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/dock/__init__.py +0 -0
  127. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/dock/dock.py +0 -0
  128. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/dock/dock_area.py +0 -0
  129. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/dock/dock_area.pyproject +0 -0
  130. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/dock/dock_area_plugin.py +0 -0
  131. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/dock/register_dock_area.py +0 -0
  132. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/layout_manager/__init__.py +0 -0
  133. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/layout_manager/layout_manager.py +0 -0
  134. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/main_window/__init__.py +0 -0
  135. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/main_window/addons/__init__.py +0 -0
  136. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/main_window/addons/scroll_label.py +0 -0
  137. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/main_window/addons/web_links.py +0 -0
  138. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/containers/main_window/main_window.py +0 -0
  139. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/__init__.py +0 -0
  140. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/__init__.py +0 -0
  141. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_abort/__init__.py +0 -0
  142. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button.pyproject +0 -0
  143. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_abort/abort_button_plugin.py +0 -0
  144. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_abort/button_abort.py +0 -0
  145. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_abort/register_abort_button.py +0 -0
  146. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_reset/__init__.py +0 -0
  147. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_reset/button_reset.py +0 -0
  148. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_reset/register_reset_button.py +0 -0
  149. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button.pyproject +0 -0
  150. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_reset/reset_button_plugin.py +0 -0
  151. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_resume/__init__.py +0 -0
  152. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_resume/button_resume.py +0 -0
  153. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_resume/register_resume_button.py +0 -0
  154. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button.pyproject +0 -0
  155. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/button_resume/resume_button_plugin.py +0 -0
  156. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/stop_button/__init__.py +0 -0
  157. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/stop_button/register_stop_button.py +0 -0
  158. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.py +0 -0
  159. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button.pyproject +0 -0
  160. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/buttons/stop_button/stop_button_plugin.py +0 -0
  161. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/__init__.py +0 -0
  162. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/position_indicator/__init__.py +0 -0
  163. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.py +0 -0
  164. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator.pyproject +0 -0
  165. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/position_indicator/position_indicator_plugin.py +0 -0
  166. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py +0 -0
  167. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/__init__.py +0 -0
  168. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py +0 -0
  169. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py +0 -0
  170. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py +0 -0
  171. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py +0 -0
  172. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject +0 -0
  173. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui +0 -0
  174. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py +0 -0
  175. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box/register_positioner_box.py +0 -0
  176. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/__init__.py +0 -0
  177. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d.pyproject +0 -0
  178. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box2_d_plugin.py +0 -0
  179. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.py +0 -0
  180. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/positioner_box_2d.ui +0 -0
  181. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_box_2d/register_positioner_box2_d.py +0 -0
  182. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.py +0 -0
  183. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.pyproject +0 -0
  184. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line.ui +0 -0
  185. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/positioner_control_line_plugin.py +0 -0
  186. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_box/positioner_control_line/register_positioner_control_line.py +0 -0
  187. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_group/__init__.py +0 -0
  188. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.py +0 -0
  189. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group.pyproject +0 -0
  190. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_group/positioner_group_plugin.py +0 -0
  191. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_control/positioner_group/register_positioner_group.py +0 -0
  192. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/__init__.py +0 -0
  193. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/base_classes/__init__.py +0 -0
  194. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_combobox/__init__.py +0 -0
  195. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box.pyproject +0 -0
  196. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_combobox/device_combo_box_plugin.py +0 -0
  197. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_combobox/register_device_combo_box.py +0 -0
  198. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_line_edit/__init__.py +0 -0
  199. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.py +0 -0
  200. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit.pyproject +0 -0
  201. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_line_edit/device_line_edit_plugin.py +0 -0
  202. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/device_line_edit/register_device_line_edit.py +0 -0
  203. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_combobox/__init__.py +0 -0
  204. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_combobox/register_signal_combo_box.py +0 -0
  205. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box.pyproject +0 -0
  206. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_combobox/signal_combo_box_plugin.py +0 -0
  207. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_line_edit/__init__.py +0 -0
  208. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_line_edit/register_signal_line_edit.py +0 -0
  209. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.py +0 -0
  210. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pyproject +0 -0
  211. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py +0 -0
  212. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/scan_control/__init__.py +0 -0
  213. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/scan_control/register_scan_control.py +0 -0
  214. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/scan_control/scan_control.py +0 -0
  215. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/scan_control/scan_control.pyproject +0 -0
  216. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/scan_control/scan_control_plugin.py +0 -0
  217. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/control/scan_control/scan_group_box.py +0 -0
  218. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/__init__.py +0 -0
  219. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/dap_combo_box/__init__.py +0 -0
  220. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.py +0 -0
  221. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box.pyproject +0 -0
  222. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/dap_combo_box/dap_combo_box_plugin.py +0 -0
  223. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/dap_combo_box/register_dap_combo_box.py +0 -0
  224. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/__init__.py +0 -0
  225. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  226. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  227. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py +0 -0
  228. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  229. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  230. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  231. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/__init__.py +0 -0
  232. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/dict_backed_table.py +0 -0
  233. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/jupyter_console/__init__.py +0 -0
  234. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/jupyter_console/jupyter_console.py +0 -0
  235. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/scan_metadata/__init__.py +0 -0
  236. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/scan_metadata/_util.py +0 -0
  237. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py +0 -0
  238. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +0 -0
  239. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject +0 -0
  240. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py +0 -0
  241. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/text_box/__init__.py +0 -0
  242. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/text_box/register_text_box.py +0 -0
  243. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/text_box/text_box.py +0 -0
  244. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/text_box/text_box.pyproject +0 -0
  245. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/text_box/text_box_plugin.py +0 -0
  246. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/vscode/__init__.py +0 -0
  247. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/vscode/register_vs_code_editor.py +0 -0
  248. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/vscode/vs_code_editor.pyproject +0 -0
  249. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/vscode/vs_code_editor_plugin.py +0 -0
  250. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/vscode/vscode.py +0 -0
  251. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/web_console/register_web_console.py +0 -0
  252. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/web_console/web_console.py +0 -0
  253. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/web_console/web_console.pyproject +0 -0
  254. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/web_console/web_console_plugin.py +0 -0
  255. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/website/__init__.py +0 -0
  256. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/website/register_website_widget.py +0 -0
  257. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/website/website.py +0 -0
  258. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/website/website_widget.pyproject +0 -0
  259. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/editors/website/website_widget_plugin.py +0 -0
  260. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/games/__init__.py +0 -0
  261. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/games/minesweeper.py +0 -0
  262. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/games/minesweeper.pyproject +0 -0
  263. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/games/minesweeper_plugin.py +0 -0
  264. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/games/register_minesweeper.py +0 -0
  265. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/__init__.py +0 -0
  266. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/__init__.py +0 -0
  267. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image.py +0 -0
  268. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image.pyproject +0 -0
  269. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image_base.py +0 -0
  270. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image_item.py +0 -0
  271. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image_plugin.py +0 -0
  272. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image_processor.py +0 -0
  273. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/image_roi_plot.py +0 -0
  274. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/register_image.py +0 -0
  275. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/setting_widgets/__init__.py +0 -0
  276. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +0 -0
  277. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py +0 -0
  278. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py +0 -0
  279. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/image/toolbar_bundles/processing.py +0 -0
  280. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/__init__.py +0 -0
  281. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/motor_map.py +0 -0
  282. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/motor_map.pyproject +0 -0
  283. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/motor_map_plugin.py +0 -0
  284. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/register_motor_map.py +0 -0
  285. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/settings/__init__.py +0 -0
  286. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.py +0 -0
  287. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/settings/motor_map_settings.ui +0 -0
  288. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/__init__.py +0 -0
  289. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/motor_map/toolbar_bundles/motor_selection.py +0 -0
  290. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/__init__.py +0 -0
  291. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.py +0 -0
  292. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform.pyproject +0 -0
  293. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/multi_waveform_plugin.py +0 -0
  294. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/register_multi_waveform.py +0 -0
  295. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/settings/__init__.py +0 -0
  296. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/settings/control_panel.py +0 -0
  297. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui +0 -0
  298. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py +0 -0
  299. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py +0 -0
  300. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/plot_base.py +0 -0
  301. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/roi/__init__.py +0 -0
  302. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/roi/image_roi.py +0 -0
  303. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/__init__.py +0 -0
  304. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py +0 -0
  305. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py +0 -0
  306. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.py +0 -0
  307. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform.pyproject +0 -0
  308. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/scatter_waveform_plugin.py +0 -0
  309. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/settings/__init__.py +0 -0
  310. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_setting.py +0 -0
  311. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_horizontal.ui +0 -0
  312. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/scatter_waveform/settings/scatter_curve_settings_vertical.ui +0 -0
  313. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/setting_menus/__init__.py +0 -0
  314. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/setting_menus/axis_settings.py +0 -0
  315. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_horizontal.ui +0 -0
  316. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/setting_menus/axis_settings_vertical.ui +0 -0
  317. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/toolbar_bundles/__init__.py +0 -0
  318. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/toolbar_bundles/mouse_interactions.py +0 -0
  319. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/toolbar_bundles/plot_export.py +0 -0
  320. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/toolbar_bundles/roi_bundle.py +0 -0
  321. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/toolbar_bundles/save_state.py +0 -0
  322. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/__init__.py +0 -0
  323. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/curve.py +0 -0
  324. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/register_waveform.py +0 -0
  325. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/settings/__init__.py +0 -0
  326. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/settings/curve_settings/__init__.py +0 -0
  327. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/utils/__init__.py +0 -0
  328. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/utils/roi_manager.py +0 -0
  329. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/waveform.pyproject +0 -0
  330. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/plots/waveform/waveform_plugin.py +0 -0
  331. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/__init__.py +0 -0
  332. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/bec_progressbar/__init__.py +0 -0
  333. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar.pyproject +0 -0
  334. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  335. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/bec_progressbar/bec_progressbar.py +0 -0
  336. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/bec_progressbar/register_bec_progress_bar.py +0 -0
  337. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/ring_progress_bar/__init__.py +0 -0
  338. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/ring_progress_bar/register_ring_progress_bar.py +0 -0
  339. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/ring_progress_bar/ring.py +0 -0
  340. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +0 -0
  341. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  342. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  343. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/__init__.py +0 -0
  344. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/register_scan_progress_bar.py +0 -0
  345. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/scan_progress_bar.pyproject +0 -0
  346. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/scan_progress_bar_plugin.py +0 -0
  347. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/scan_progressbar.py +0 -0
  348. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/scan_progressbar.ui +0 -0
  349. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/progress/scan_progressbar/scan_progressbar_one_line.ui +0 -0
  350. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/__init__.py +0 -0
  351. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_queue/__init__.py +0 -0
  352. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_queue/bec_queue.py +0 -0
  353. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_queue/bec_queue.pyproject +0 -0
  354. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_queue/bec_queue_plugin.py +0 -0
  355. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_queue/register_bec_queue.py +0 -0
  356. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_status_box/__init__.py +0 -0
  357. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.py +0 -0
  358. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box.pyproject +0 -0
  359. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py +0 -0
  360. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py +0 -0
  361. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/bec_status_box/status_item.py +0 -0
  362. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/__init__.py +0 -0
  363. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_browser.py +0 -0
  364. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_browser.pyproject +0 -0
  365. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_browser.ui +0 -0
  366. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_browser_plugin.py +0 -0
  367. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_item/__init__.py +0 -0
  368. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_item/device_config_dialog.py +0 -0
  369. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/device_item/device_config_form.py +0 -0
  370. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/register_device_browser.py +0 -0
  371. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/services/device_browser/util.py +0 -0
  372. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/__init__.py +0 -0
  373. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/logpanel/__init__.py +0 -0
  374. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/logpanel/_util.py +0 -0
  375. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/logpanel/log_panel.pyproject +0 -0
  376. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/logpanel/log_panel_plugin.py +0 -0
  377. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/logpanel/logpanel.py +0 -0
  378. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/logpanel/register_log_panel.py +0 -0
  379. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/signal_label/register_signal_label.py +0 -0
  380. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/signal_label/signal_label.pyproject +0 -0
  381. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/signal_label/signal_label_plugin.py +0 -0
  382. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinbox/__init__.py +0 -0
  383. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box.pyproject +0 -0
  384. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinbox/bec_spin_box_plugin.py +0 -0
  385. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinbox/decimal_spinbox.py +0 -0
  386. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py +0 -0
  387. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinner/__init__.py +0 -0
  388. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinner/register_spinner_widget.py +0 -0
  389. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinner/spinner.py +0 -0
  390. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinner/spinner_widget.pyproject +0 -0
  391. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py +0 -0
  392. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/toggle/__init__.py +0 -0
  393. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/toggle/register_toggle_switch.py +0 -0
  394. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/toggle/toggle.py +0 -0
  395. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/toggle/toggle_switch.pyproject +0 -0
  396. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/toggle/toggle_switch_plugin.py +0 -0
  397. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/__init__.py +0 -0
  398. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button/__init__.py +0 -0
  399. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button/color_button.py +0 -0
  400. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button/color_button.pyproject +0 -0
  401. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button/color_button_plugin.py +0 -0
  402. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button/register_color_button.py +0 -0
  403. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button_native/__init__.py +0 -0
  404. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.py +0 -0
  405. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native.pyproject +0 -0
  406. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button_native/color_button_native_plugin.py +0 -0
  407. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/color_button_native/register_color_button_native.py +0 -0
  408. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_selector/__init__.py +0 -0
  409. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.py +0 -0
  410. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector.pyproject +0 -0
  411. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_selector/colormap_selector_plugin.py +0 -0
  412. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_selector/register_colormap_selector.py +0 -0
  413. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_widget/__init__.py +0 -0
  414. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget.pyproject +0 -0
  415. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_widget/bec_color_map_widget_plugin.py +0 -0
  416. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_widget/colormap_widget.py +0 -0
  417. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/colormap_widget/register_bec_color_map_widget.py +0 -0
  418. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/dark_mode_button/__init__.py +0 -0
  419. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py +0 -0
  420. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject +0 -0
  421. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py +0 -0
  422. {bec_widgets-2.17.0 → bec_widgets-2.19.0}/bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py +0 -0
@@ -21,7 +21,7 @@ jobs:
21
21
  isort --check --diff ./
22
22
 
23
23
  - name: Check for disallowed imports from PySide
24
- run: '! grep -re "from PySide6\." bec_widgets/ | grep -v -e "PySide6.QtDesigner" -e "PySide6.scripts"'
24
+ run: '! grep -re "from PySide6\." bec_widgets/ tests/ | grep -v -e "PySide6.QtDesigner" -e "PySide6.scripts"'
25
25
 
26
26
  Pylint:
27
27
  runs-on: ubuntu-latest
@@ -1,6 +1,55 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.19.0 (2025-06-23)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **ci**: Extend check for pyside import to tests
9
+ ([`d5a40da`](https://github.com/bec-project/bec_widgets/commit/d5a40dabc74753acad05e3eb6b121499fc1e03d7))
10
+
11
+ ### Features
12
+
13
+ - (#494) add signal display to device browser
14
+ ([`f3da6e9`](https://github.com/bec-project/bec_widgets/commit/f3da6e959e0416827ee5d02e34e6ad0ecfc8e5e7))
15
+
16
+ - (#494) add tabbed layout for device item
17
+ ([`3378051`](https://github.com/bec-project/bec_widgets/commit/337805125098c3e028a17b74ef6d9ae4b9ba3d6d))
18
+
19
+ - (#494) display device signals
20
+ ([`3a10341`](https://github.com/bec-project/bec_widgets/commit/3a103410e7448256a56b59bb3276fee056ec42a0))
21
+
22
+
23
+ ## v2.18.0 (2025-06-22)
24
+
25
+ ### Bug Fixes
26
+
27
+ - Make settings dialog resizable
28
+ ([`5a564a5`](https://github.com/bec-project/bec_widgets/commit/5a564a5f3f3229e6407ea52a59d3e63319dc214a))
29
+
30
+ - **curve settings**: Add initial size hint
31
+ ([`a9708f6`](https://github.com/bec-project/bec_widgets/commit/a9708f6d8f15c42b142488da1e392a8f3179932a))
32
+
33
+ ### Features
34
+
35
+ - **curve settings**: Add combobox selection for device and signal
36
+ ([`eea5f7e`](https://github.com/bec-project/bec_widgets/commit/eea5f7ebbd2b477b3ed19c7efcc76390dd391f26))
37
+
38
+ - **device combobox**: Emit reset event if validation fails
39
+ ([`4c2c0c5`](https://github.com/bec-project/bec_widgets/commit/4c2c0c5525d593d8ec7fd554336cb11adbe32de2))
40
+
41
+ - **FilterIO**: Add support for item data
42
+ ([`8e8acd6`](https://github.com/bec-project/bec_widgets/commit/8e8acd672c0deb8dcd928886fb574452ac956de7))
43
+
44
+ - **signal combobox**: Add reset_selection slot
45
+ ([`b51de1a`](https://github.com/bec-project/bec_widgets/commit/b51de1a00e4b17c44cab23e5097391c6fa8ea0e2))
46
+
47
+ ### Refactoring
48
+
49
+ - **device input**: Refactor to SafeProperty and SafeSlot
50
+ ([`6e2f2ce`](https://github.com/bec-project/bec_widgets/commit/6e2f2cea91ba3af33e9891532506f4b0b65b90c8))
51
+
52
+
4
53
  ## v2.17.0 (2025-06-22)
5
54
 
6
55
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.17.0
3
+ Version: 2.19.0
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -96,9 +96,21 @@ class FakePositioner(BECPositioner):
96
96
  }
97
97
  self._info = {
98
98
  "signals": {
99
- "readback": {"kind_str": "hinted"}, # hinted
100
- "setpoint": {"kind_str": "normal"}, # normal
101
- "velocity": {"kind_str": "config"}, # config
99
+ "readback": {
100
+ "kind_str": "hinted",
101
+ "component_name": "readback",
102
+ "obj_name": self.name,
103
+ }, # hinted
104
+ "setpoint": {
105
+ "kind_str": "normal",
106
+ "component_name": "setpoint",
107
+ "obj_name": f"{self.name}_setpoint",
108
+ }, # normal
109
+ "velocity": {
110
+ "kind_str": "config",
111
+ "component_name": "velocity",
112
+ "obj_name": f"{self.name}_velocity",
113
+ }, # config
102
114
  }
103
115
  }
104
116
  self.signals = {
@@ -0,0 +1,272 @@
1
+ """Module for handling filter I/O operations in BEC Widgets for input fields.
2
+ These operations include filtering device/signal names and/or device types.
3
+ """
4
+
5
+ from abc import ABC, abstractmethod
6
+
7
+ from bec_lib.logger import bec_logger
8
+ from qtpy.QtCore import QStringListModel
9
+ from qtpy.QtWidgets import QComboBox, QCompleter, QLineEdit
10
+
11
+ from bec_widgets.utils.ophyd_kind_util import Kind
12
+
13
+ logger = bec_logger.logger
14
+
15
+
16
+ class WidgetFilterHandler(ABC):
17
+ """Abstract base class for widget filter handlers"""
18
+
19
+ @abstractmethod
20
+ def set_selection(self, widget, selection: list[str | tuple]) -> None:
21
+ """Set the filtered_selection for the widget
22
+
23
+ Args:
24
+ widget: Widget instance
25
+ selection (list[str | tuple]): Filtered selection of items.
26
+ If tuple, it contains (text, data) pairs.
27
+ """
28
+
29
+ @abstractmethod
30
+ def check_input(self, widget, text: str) -> bool:
31
+ """Check if the input text is in the filtered selection
32
+
33
+ Args:
34
+ widget: Widget instance
35
+ text (str): Input text
36
+
37
+ Returns:
38
+ bool: True if the input text is in the filtered selection
39
+ """
40
+
41
+ @abstractmethod
42
+ def update_with_kind(
43
+ self, kind: Kind, signal_filter: set, device_info: dict, device_name: str
44
+ ) -> list[str | tuple]:
45
+ """Update the selection based on the kind of signal.
46
+
47
+ Args:
48
+ kind (Kind): The kind of signal to filter.
49
+ signal_filter (set): Set of signal kinds to filter.
50
+ device_info (dict): Dictionary containing device information.
51
+ device_name (str): Name of the device.
52
+
53
+ Returns:
54
+ list[str | tuple]: A list of filtered signals based on the kind.
55
+ """
56
+ # This method should be implemented in subclasses or extended as needed
57
+
58
+
59
+ class LineEditFilterHandler(WidgetFilterHandler):
60
+ """Handler for QLineEdit widget"""
61
+
62
+ def set_selection(self, widget: QLineEdit, selection: list[str | tuple]) -> None:
63
+ """Set the selection for the widget to the completer model
64
+
65
+ Args:
66
+ widget (QLineEdit): The QLineEdit widget
67
+ selection (list[str | tuple]): Filtered selection of items. If tuple, it contains (text, data) pairs.
68
+ """
69
+ if isinstance(selection, tuple):
70
+ # If selection is a tuple, it contains (text, data) pairs
71
+ selection = [text for text, _ in selection]
72
+ if not isinstance(widget.completer, QCompleter):
73
+ completer = QCompleter(widget)
74
+ widget.setCompleter(completer)
75
+ widget.completer.setModel(QStringListModel(selection, widget))
76
+
77
+ def check_input(self, widget: QLineEdit, text: str) -> bool:
78
+ """Check if the input text is in the filtered selection
79
+
80
+ Args:
81
+ widget (QLineEdit): The QLineEdit widget
82
+ text (str): Input text
83
+
84
+ Returns:
85
+ bool: True if the input text is in the filtered selection
86
+ """
87
+ model = widget.completer.model()
88
+ model_data = [model.data(model.index(i)) for i in range(model.rowCount())]
89
+ return text in model_data
90
+
91
+ def update_with_kind(
92
+ self, kind: Kind, signal_filter: set, device_info: dict, device_name: str
93
+ ) -> list[str | tuple]:
94
+ """Update the selection based on the kind of signal.
95
+
96
+ Args:
97
+ kind (Kind): The kind of signal to filter.
98
+ signal_filter (set): Set of signal kinds to filter.
99
+ device_info (dict): Dictionary containing device information.
100
+ device_name (str): Name of the device.
101
+
102
+ Returns:
103
+ list[str | tuple]: A list of filtered signals based on the kind.
104
+ """
105
+
106
+ return [
107
+ signal
108
+ for signal, signal_info in device_info.items()
109
+ if kind in signal_filter and (signal_info.get("kind_str", None) == str(kind.name))
110
+ ]
111
+
112
+
113
+ class ComboBoxFilterHandler(WidgetFilterHandler):
114
+ """Handler for QComboBox widget"""
115
+
116
+ def set_selection(self, widget: QComboBox, selection: list[str | tuple]) -> None:
117
+ """Set the selection for the widget to the completer model
118
+
119
+ Args:
120
+ widget (QComboBox): The QComboBox widget
121
+ selection (list[str | tuple]): Filtered selection of items. If tuple, it contains (text, data) pairs.
122
+ """
123
+ widget.clear()
124
+ if len(selection) == 0:
125
+ return
126
+ for element in selection:
127
+ if isinstance(element, str):
128
+ widget.addItem(element)
129
+ elif isinstance(element, tuple):
130
+ # If element is a tuple, it contains (text, data) pairs
131
+ widget.addItem(*element)
132
+
133
+ def check_input(self, widget: QComboBox, text: str) -> bool:
134
+ """Check if the input text is in the filtered selection
135
+
136
+ Args:
137
+ widget (QComboBox): The QComboBox widget
138
+ text (str): Input text
139
+
140
+ Returns:
141
+ bool: True if the input text is in the filtered selection
142
+ """
143
+ return text in [widget.itemText(i) for i in range(widget.count())]
144
+
145
+ def update_with_kind(
146
+ self, kind: Kind, signal_filter: set, device_info: dict, device_name: str
147
+ ) -> list[str | tuple]:
148
+ """Update the selection based on the kind of signal.
149
+
150
+ Args:
151
+ kind (Kind): The kind of signal to filter.
152
+ signal_filter (set): Set of signal kinds to filter.
153
+ device_info (dict): Dictionary containing device information.
154
+ device_name (str): Name of the device.
155
+
156
+ Returns:
157
+ list[str | tuple]: A list of filtered signals based on the kind.
158
+ """
159
+ out = []
160
+ for signal, signal_info in device_info.items():
161
+ if kind not in signal_filter or (signal_info.get("kind_str", None) != str(kind.name)):
162
+ continue
163
+ obj_name = signal_info.get("obj_name", "")
164
+ component_name = signal_info.get("component_name", "")
165
+ signal_wo_device = obj_name.removeprefix(f"{device_name}_")
166
+ if not signal_wo_device:
167
+ signal_wo_device = obj_name
168
+
169
+ if signal_wo_device != signal and component_name.replace(".", "_") != signal_wo_device:
170
+ # If the object name is not the same as the signal name, we use the object name
171
+ # to display in the combobox.
172
+ out.append((f"{signal_wo_device} ({signal})", signal_info))
173
+ else:
174
+ # If the object name is the same as the signal name, we do not change it.
175
+ out.append((signal, signal_info))
176
+
177
+ return out
178
+
179
+
180
+ class FilterIO:
181
+ """Public interface to set filters for input widgets.
182
+ It supports the list of widgets stored in class attribute _handlers.
183
+ """
184
+
185
+ _handlers = {QLineEdit: LineEditFilterHandler, QComboBox: ComboBoxFilterHandler}
186
+
187
+ @staticmethod
188
+ def set_selection(widget, selection: list[str | tuple], ignore_errors=True):
189
+ """
190
+ Retrieve value from the widget instance.
191
+
192
+ Args:
193
+ widget: Widget instance.
194
+ selection (list[str | tuple]): Filtered selection of items.
195
+ If tuple, it contains (text, data) pairs.
196
+ ignore_errors(bool, optional): Whether to ignore if no handler is found.
197
+ """
198
+ handler_class = FilterIO._find_handler(widget)
199
+ if handler_class:
200
+ return handler_class().set_selection(widget=widget, selection=selection)
201
+ if not ignore_errors:
202
+ raise ValueError(
203
+ f"No matching handler for widget type: {type(widget)} in handler list {FilterIO._handlers}"
204
+ )
205
+ return None
206
+
207
+ @staticmethod
208
+ def check_input(widget, text: str, ignore_errors=True):
209
+ """
210
+ Check if the input text is in the filtered selection.
211
+
212
+ Args:
213
+ widget: Widget instance.
214
+ text(str): Input text.
215
+ ignore_errors(bool, optional): Whether to ignore if no handler is found.
216
+
217
+ Returns:
218
+ bool: True if the input text is in the filtered selection.
219
+ """
220
+ handler_class = FilterIO._find_handler(widget)
221
+ if handler_class:
222
+ return handler_class().check_input(widget=widget, text=text)
223
+ if not ignore_errors:
224
+ raise ValueError(
225
+ f"No matching handler for widget type: {type(widget)} in handler list {FilterIO._handlers}"
226
+ )
227
+ return None
228
+
229
+ @staticmethod
230
+ def update_with_kind(
231
+ widget, kind: Kind, signal_filter: set, device_info: dict, device_name: str
232
+ ) -> list[str | tuple]:
233
+ """
234
+ Update the selection based on the kind of signal.
235
+
236
+ Args:
237
+ widget: Widget instance.
238
+ kind (Kind): The kind of signal to filter.
239
+ signal_filter (set): Set of signal kinds to filter.
240
+ device_info (dict): Dictionary containing device information.
241
+ device_name (str): Name of the device.
242
+
243
+ Returns:
244
+ list[str | tuple]: A list of filtered signals based on the kind.
245
+ """
246
+ handler_class = FilterIO._find_handler(widget)
247
+ if handler_class:
248
+ return handler_class().update_with_kind(
249
+ kind=kind,
250
+ signal_filter=signal_filter,
251
+ device_info=device_info,
252
+ device_name=device_name,
253
+ )
254
+ raise ValueError(
255
+ f"No matching handler for widget type: {type(widget)} in handler list {FilterIO._handlers}"
256
+ )
257
+
258
+ @staticmethod
259
+ def _find_handler(widget):
260
+ """
261
+ Find the appropriate handler for the widget by checking its base classes.
262
+
263
+ Args:
264
+ widget: Widget instance.
265
+
266
+ Returns:
267
+ handler_class: The handler class if found, otherwise None.
268
+ """
269
+ for base in type(widget).__mro__:
270
+ if base in FilterIO._handlers:
271
+ return FilterIO._handlers[base]
272
+ return None
@@ -6,10 +6,10 @@ from bec_lib.device import ComputedSignal, Device, Positioner, ReadoutPriority
6
6
  from bec_lib.device import Signal as BECSignal
7
7
  from bec_lib.logger import bec_logger
8
8
  from pydantic import field_validator
9
- from qtpy.QtCore import Property, Signal, Slot
10
9
 
11
10
  from bec_widgets.utils import ConnectionConfig
12
11
  from bec_widgets.utils.bec_widget import BECWidget
12
+ from bec_widgets.utils.error_popups import SafeProperty, SafeSlot
13
13
  from bec_widgets.utils.filter_io import FilterIO
14
14
  from bec_widgets.utils.widget_io import WidgetIO
15
15
 
@@ -100,7 +100,7 @@ class DeviceInputBase(BECWidget):
100
100
 
101
101
  ### QtSlots ###
102
102
 
103
- @Slot(str)
103
+ @SafeSlot(str)
104
104
  def set_device(self, device: str):
105
105
  """
106
106
  Set the device.
@@ -114,7 +114,7 @@ class DeviceInputBase(BECWidget):
114
114
  else:
115
115
  logger.warning(f"Device {device} is not in the filtered selection.")
116
116
 
117
- @Slot()
117
+ @SafeSlot()
118
118
  def update_devices_from_filters(self):
119
119
  """Update the devices based on the current filter selection
120
120
  in self.device_filter and self.readout_filter. If apply_filter is False,
@@ -133,7 +133,7 @@ class DeviceInputBase(BECWidget):
133
133
  self.devices = [device.name for device in devs]
134
134
  self.set_device(current_device)
135
135
 
136
- @Slot(list)
136
+ @SafeSlot(list)
137
137
  def set_available_devices(self, devices: list[str]):
138
138
  """
139
139
  Set the devices. If a device in the list is not valid, it will not be considered.
@@ -146,7 +146,7 @@ class DeviceInputBase(BECWidget):
146
146
 
147
147
  ### QtProperties ###
148
148
 
149
- @Property(
149
+ @SafeProperty(
150
150
  "QStringList",
151
151
  doc="List of devices. If updated, it will disable the apply filters property.",
152
152
  )
@@ -165,7 +165,7 @@ class DeviceInputBase(BECWidget):
165
165
  self.config.devices = value
166
166
  FilterIO.set_selection(widget=self, selection=value)
167
167
 
168
- @Property(str)
168
+ @SafeProperty(str)
169
169
  def default(self):
170
170
  """Get the default device name. If set through this property, it will update only if the device is within the filtered selection."""
171
171
  return self.config.default
@@ -177,7 +177,7 @@ class DeviceInputBase(BECWidget):
177
177
  self.config.default = value
178
178
  WidgetIO.set_value(widget=self, value=value)
179
179
 
180
- @Property(bool)
180
+ @SafeProperty(bool)
181
181
  def apply_filter(self):
182
182
  """Apply the filters on the devices."""
183
183
  return self.config.apply_filter
@@ -187,7 +187,7 @@ class DeviceInputBase(BECWidget):
187
187
  self.config.apply_filter = value
188
188
  self.update_devices_from_filters()
189
189
 
190
- @Property(bool)
190
+ @SafeProperty(bool)
191
191
  def filter_to_device(self):
192
192
  """Include devices in filters."""
193
193
  return BECDeviceFilter.DEVICE in self.device_filter
@@ -200,7 +200,7 @@ class DeviceInputBase(BECWidget):
200
200
  self._device_filter.remove(BECDeviceFilter.DEVICE)
201
201
  self.update_devices_from_filters()
202
202
 
203
- @Property(bool)
203
+ @SafeProperty(bool)
204
204
  def filter_to_positioner(self):
205
205
  """Include devices of type Positioner in filters."""
206
206
  return BECDeviceFilter.POSITIONER in self.device_filter
@@ -213,7 +213,7 @@ class DeviceInputBase(BECWidget):
213
213
  self._device_filter.remove(BECDeviceFilter.POSITIONER)
214
214
  self.update_devices_from_filters()
215
215
 
216
- @Property(bool)
216
+ @SafeProperty(bool)
217
217
  def filter_to_signal(self):
218
218
  """Include devices of type Signal in filters."""
219
219
  return BECDeviceFilter.SIGNAL in self.device_filter
@@ -226,7 +226,7 @@ class DeviceInputBase(BECWidget):
226
226
  self._device_filter.remove(BECDeviceFilter.SIGNAL)
227
227
  self.update_devices_from_filters()
228
228
 
229
- @Property(bool)
229
+ @SafeProperty(bool)
230
230
  def filter_to_computed_signal(self):
231
231
  """Include devices of type ComputedSignal in filters."""
232
232
  return BECDeviceFilter.COMPUTED_SIGNAL in self.device_filter
@@ -239,7 +239,7 @@ class DeviceInputBase(BECWidget):
239
239
  self._device_filter.remove(BECDeviceFilter.COMPUTED_SIGNAL)
240
240
  self.update_devices_from_filters()
241
241
 
242
- @Property(bool)
242
+ @SafeProperty(bool)
243
243
  def readout_monitored(self):
244
244
  """Include devices with readout priority Monitored in filters."""
245
245
  return ReadoutPriority.MONITORED in self.readout_filter
@@ -252,7 +252,7 @@ class DeviceInputBase(BECWidget):
252
252
  self._readout_filter.remove(ReadoutPriority.MONITORED)
253
253
  self.update_devices_from_filters()
254
254
 
255
- @Property(bool)
255
+ @SafeProperty(bool)
256
256
  def readout_baseline(self):
257
257
  """Include devices with readout priority Baseline in filters."""
258
258
  return ReadoutPriority.BASELINE in self.readout_filter
@@ -265,7 +265,7 @@ class DeviceInputBase(BECWidget):
265
265
  self._readout_filter.remove(ReadoutPriority.BASELINE)
266
266
  self.update_devices_from_filters()
267
267
 
268
- @Property(bool)
268
+ @SafeProperty(bool)
269
269
  def readout_async(self):
270
270
  """Include devices with readout priority Async in filters."""
271
271
  return ReadoutPriority.ASYNC in self.readout_filter
@@ -278,7 +278,7 @@ class DeviceInputBase(BECWidget):
278
278
  self._readout_filter.remove(ReadoutPriority.ASYNC)
279
279
  self.update_devices_from_filters()
280
280
 
281
- @Property(bool)
281
+ @SafeProperty(bool)
282
282
  def readout_continuous(self):
283
283
  """Include devices with readout priority continuous in filters."""
284
284
  return ReadoutPriority.CONTINUOUS in self.readout_filter
@@ -291,7 +291,7 @@ class DeviceInputBase(BECWidget):
291
291
  self._readout_filter.remove(ReadoutPriority.CONTINUOUS)
292
292
  self.update_devices_from_filters()
293
293
 
294
- @Property(bool)
294
+ @SafeProperty(bool)
295
295
  def readout_on_request(self):
296
296
  """Include devices with readout priority OnRequest in filters."""
297
297
  return ReadoutPriority.ON_REQUEST in self.readout_filter
@@ -6,7 +6,7 @@ from qtpy.QtCore import Property
6
6
  from bec_widgets.utils import ConnectionConfig
7
7
  from bec_widgets.utils.bec_widget import BECWidget
8
8
  from bec_widgets.utils.error_popups import SafeSlot
9
- from bec_widgets.utils.filter_io import FilterIO
9
+ from bec_widgets.utils.filter_io import FilterIO, LineEditFilterHandler
10
10
  from bec_widgets.utils.ophyd_kind_util import Kind
11
11
  from bec_widgets.utils.widget_io import WidgetIO
12
12
 
@@ -108,25 +108,32 @@ class DeviceSignalInputBase(BECWidget):
108
108
  if not self.validate_device(self._device):
109
109
  self._device = None
110
110
  self.config.device = self._device
111
+ self._signals = []
112
+ self._hinted_signals = []
113
+ self._normal_signals = []
114
+ self._config_signals = []
115
+ FilterIO.set_selection(widget=self, selection=self._signals)
111
116
  return
112
117
  device = self.get_device_object(self._device)
118
+ device_info = device._info.get("signals", {})
119
+
113
120
  # See above convention for Signals and ComputedSignals
114
121
  if isinstance(device, Signal):
115
- self._signals = [self._device]
116
- self._hinted_signals = [self._device]
122
+ self._signals = [(self._device, {})]
123
+ self._hinted_signals = [(self._device, {})]
117
124
  self._normal_signals = []
118
125
  self._config_signals = []
119
126
  FilterIO.set_selection(widget=self, selection=self._signals)
120
127
  return
121
- device_info = device._info.get("signals", {})
122
128
 
123
129
  def _update(kind: Kind):
124
- return [
125
- signal
126
- for signal, signal_info in device_info.items()
127
- if kind in self.signal_filter
128
- and (signal_info.get("kind_str", None) == str(kind.name))
129
- ]
130
+ return FilterIO.update_with_kind(
131
+ widget=self,
132
+ kind=kind,
133
+ signal_filter=self.signal_filter,
134
+ device_info=device_info,
135
+ device_name=self._device,
136
+ )
130
137
 
131
138
  self._hinted_signals = _update(Kind.hinted)
132
139
  self._normal_signals = _update(Kind.normal)
@@ -271,8 +278,11 @@ class DeviceSignalInputBase(BECWidget):
271
278
  Args:
272
279
  signal(str): Signal to validate.
273
280
  """
274
- if signal in self.signals:
275
- return True
281
+ for entry in self.signals:
282
+ if isinstance(entry, tuple):
283
+ entry = entry[0]
284
+ if entry == signal:
285
+ return True
276
286
  return False
277
287
 
278
288
  def _process_config_input(self, config: DeviceSignalInputBaseConfig | dict | None):
@@ -34,6 +34,7 @@ class DeviceComboBox(DeviceInputBase, QComboBox):
34
34
  PLUGIN = True
35
35
 
36
36
  device_selected = Signal(str)
37
+ device_reset = Signal()
37
38
  device_config_update = Signal()
38
39
 
39
40
  def __init__(
@@ -147,6 +148,7 @@ class DeviceComboBox(DeviceInputBase, QComboBox):
147
148
  self.device_selected.emit(input_text)
148
149
  else:
149
150
  self._is_valid_input = False
151
+ self.device_reset.emit()
150
152
  self.update()
151
153
 
152
154
  def validate_device(self, device: str) -> bool: # type: ignore[override]
@@ -90,6 +90,14 @@ class SignalComboBox(DeviceSignalInputBase, QComboBox):
90
90
  self.insertItem(0, "Hinted Signals")
91
91
  self.model().item(0).setEnabled(False)
92
92
 
93
+ @SafeSlot()
94
+ def reset_selection(self):
95
+ """Reset the selection of the combobox."""
96
+ self.clear()
97
+ self.setItemText(0, "Select a device")
98
+ self.update_signals_from_filters()
99
+ self.device_signal_changed.emit("")
100
+
93
101
  @SafeSlot(str)
94
102
  def on_text_changed(self, text: str):
95
103
  """Slot for text changed. If a device is selected and the signal is changed and valid it emits a signal.
@@ -102,11 +110,7 @@ class SignalComboBox(DeviceSignalInputBase, QComboBox):
102
110
  return
103
111
  if self.validate_signal(text) is False:
104
112
  return
105
- if text == "readback" and isinstance(self.get_device_object(self.device), Positioner):
106
- device_signal = self.device
107
- else:
108
- device_signal = f"{self.device}_{text}"
109
- self.device_signal_changed.emit(device_signal)
113
+ self.device_signal_changed.emit(text)
110
114
 
111
115
 
112
116
  if __name__ == "__main__": # pragma: no cover
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from qtpy.QtCore import QSize
5
6
  from qtpy.QtWidgets import (
6
7
  QComboBox,
7
8
  QGroupBox,
@@ -35,7 +36,11 @@ class CurveSetting(SettingWidget):
35
36
  self._init_x_box()
36
37
  self._init_y_box()
37
38
 
38
- self.setFixedWidth(580) # TODO height is still debate
39
+ def sizeHint(self) -> QSize:
40
+ """
41
+ Returns the size hint for the settings widget.
42
+ """
43
+ return QSize(800, 500)
39
44
 
40
45
  def _init_x_box(self):
41
46
  self.x_axis_box = QGroupBox("X Axis")
@@ -97,7 +102,7 @@ class CurveSetting(SettingWidget):
97
102
 
98
103
  self.layout.addWidget(self.y_axis_box)
99
104
 
100
- @SafeSlot()
105
+ @SafeSlot(popup_error=True)
101
106
  def accept_changes(self):
102
107
  """
103
108
  Accepts the changes made in the settings widget and applies them to the target widget.