bec-widgets 0.117.0__tar.gz → 0.117.1__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 (268) hide show
  1. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/CHANGELOG.md +13 -15
  2. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/PKG-INFO +1 -1
  3. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/plot_base.py +3 -1
  4. bec_widgets-0.117.1/bec_widgets/widgets/vscode/vscode.py +203 -0
  5. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/pyproject.toml +1 -1
  6. bec_widgets-0.117.0/bec_widgets/widgets/vscode/vscode.py +0 -96
  7. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.git_hooks/pre-commit +0 -0
  8. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.gitignore +0 -0
  9. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.gitlab/issue_templates/bug_report_template.md +0 -0
  10. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.gitlab/issue_templates/documentation_update_template.md +0 -0
  11. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.gitlab/issue_templates/feature_request_template.md +0 -0
  12. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.gitlab/merge_request_templates/default.md +0 -0
  13. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.gitlab-ci.yml +0 -0
  14. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.pylintrc +0 -0
  15. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/.readthedocs.yaml +0 -0
  16. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/LICENSE +0 -0
  17. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/README.md +0 -0
  18. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/__init__.py +0 -0
  19. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/applications/__init__.py +0 -0
  20. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/applications/alignment/__init__.py +0 -0
  21. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/applications/alignment/alignment_1d/__init__.py +0 -0
  22. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/applications/alignment/alignment_1d/alignment_1d.py +0 -0
  23. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/applications/alignment/alignment_1d/alignment_1d.ui +0 -0
  24. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/applications/bec_app.py +0 -0
  25. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/assets/app_icons/BEC-General-App.png +0 -0
  26. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/assets/app_icons/alignment_1d.png +0 -0
  27. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/assets/app_icons/bec_widgets_icon.png +0 -0
  28. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/__init__.py +0 -0
  29. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/auto_updates.py +0 -0
  30. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/client.py +0 -0
  31. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/client_utils.py +0 -0
  32. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/generate_cli.py +0 -0
  33. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/rpc_register.py +0 -0
  34. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/rpc_wigdet_handler.py +0 -0
  35. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/cli/server.py +0 -0
  36. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/__init__.py +0 -0
  37. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/general_app/__init__.py +0 -0
  38. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/general_app/general_app.py +0 -0
  39. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/general_app/general_app.ui +0 -0
  40. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/general_app/web_links.py +0 -0
  41. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/jupyter_console/__init__.py +0 -0
  42. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/jupyter_console/jupyter_console_window.py +0 -0
  43. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/__init__.py +0 -0
  44. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/main.py +0 -0
  45. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +0 -0
  46. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +0 -0
  47. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/tictactoe.py +0 -0
  48. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +0 -0
  49. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +0 -0
  50. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/__init__.py +0 -0
  51. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/compact_popup.py +0 -0
  52. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/error_popups.py +0 -0
  53. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/palette_viewer.py +0 -0
  54. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/redis_message_waiter.py +0 -0
  55. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/settings_dialog.py +0 -0
  56. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/qt_utils/toolbar.py +0 -0
  57. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/__init__.py +0 -0
  58. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/bec_connector.py +0 -0
  59. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/bec_designer.py +0 -0
  60. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/bec_dispatcher.py +0 -0
  61. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/bec_signal_proxy.py +0 -0
  62. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/bec_table.py +0 -0
  63. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/bec_widget.py +0 -0
  64. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/colors.py +0 -0
  65. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/container_utils.py +0 -0
  66. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/crosshair.py +0 -0
  67. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/entry_validator.py +0 -0
  68. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/fps_counter.py +0 -0
  69. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/generate_designer_plugin.py +0 -0
  70. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/layout_manager.py +0 -0
  71. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/linear_region_selector.py +0 -0
  72. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/plot_indicator_items.py +0 -0
  73. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/plugin_templates/plugin.template +0 -0
  74. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/plugin_templates/register.template +0 -0
  75. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/plugin_utils.py +0 -0
  76. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/reference_utils.py +0 -0
  77. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/rpc_decorator.py +0 -0
  78. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/thread_checker.py +0 -0
  79. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/ui_loader.py +0 -0
  80. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/validator_delegate.py +0 -0
  81. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/widget_io.py +0 -0
  82. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/utils/yaml_dialog.py +0 -0
  83. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/__init__.py +0 -0
  84. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/base_classes/__init__.py +0 -0
  85. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/base_classes/device_input_base.py +0 -0
  86. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_progressbar/__init__.py +0 -0
  87. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_progressbar/bec_progress_bar.pyproject +0 -0
  88. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_progressbar/bec_progress_bar_plugin.py +0 -0
  89. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_progressbar/bec_progressbar.py +0 -0
  90. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_progressbar/register_bec_progress_bar.py +0 -0
  91. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_queue/__init__.py +0 -0
  92. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_queue/bec_queue.py +0 -0
  93. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_queue/bec_queue.pyproject +0 -0
  94. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_queue/bec_queue_plugin.py +0 -0
  95. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_queue/register_bec_queue.py +0 -0
  96. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_status_box/__init__.py +0 -0
  97. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_status_box/bec_status_box.py +0 -0
  98. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_status_box/bec_status_box.pyproject +0 -0
  99. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +0 -0
  100. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_status_box/register_bec_status_box.py +0 -0
  101. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/bec_status_box/status_item.py +0 -0
  102. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_abort/__init__.py +0 -0
  103. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_abort/abort_button.pyproject +0 -0
  104. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_abort/abort_button_plugin.py +0 -0
  105. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_abort/button_abort.py +0 -0
  106. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_abort/register_abort_button.py +0 -0
  107. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_reset/__init__.py +0 -0
  108. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_reset/button_reset.py +0 -0
  109. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_reset/register_reset_button.py +0 -0
  110. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_reset/reset_button.pyproject +0 -0
  111. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_reset/reset_button_plugin.py +0 -0
  112. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_resume/__init__.py +0 -0
  113. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_resume/button_resume.py +0 -0
  114. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_resume/register_resume_button.py +0 -0
  115. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_resume/resume_button.pyproject +0 -0
  116. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/button_resume/resume_button_plugin.py +0 -0
  117. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/color_button/__init__.py +0 -0
  118. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/color_button/color_button.py +0 -0
  119. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/color_button/color_button.pyproject +0 -0
  120. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/color_button/color_button_plugin.py +0 -0
  121. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/color_button/register_color_button.py +0 -0
  122. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/colormap_selector/__init__.py +0 -0
  123. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/colormap_selector/colormap_selector.py +0 -0
  124. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/colormap_selector/colormap_selector.pyproject +0 -0
  125. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +0 -0
  126. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/colormap_selector/register_colormap_selector.py +0 -0
  127. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/console/console.py +0 -0
  128. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/console/console.pyproject +0 -0
  129. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/console/console_plugin.py +0 -0
  130. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/console/register_console.py +0 -0
  131. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dap_combo_box/__init__.py +0 -0
  132. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dap_combo_box/dap_combo_box.py +0 -0
  133. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dap_combo_box/dap_combo_box.pyproject +0 -0
  134. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dap_combo_box/dap_combo_box_plugin.py +0 -0
  135. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dap_combo_box/register_dap_combo_box.py +0 -0
  136. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dark_mode_button/__init__.py +0 -0
  137. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dark_mode_button/dark_mode_button.py +0 -0
  138. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject +0 -0
  139. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +0 -0
  140. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py +0 -0
  141. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/__init__.py +0 -0
  142. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/device_browser.py +0 -0
  143. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/device_browser.pyproject +0 -0
  144. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/device_browser.ui +0 -0
  145. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/device_browser_plugin.py +0 -0
  146. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/device_item/__init__.py +0 -0
  147. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/device_item/device_item.py +0 -0
  148. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_browser/register_device_browser.py +0 -0
  149. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_combobox/__init__.py +0 -0
  150. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_combobox/device_combo_box.pyproject +0 -0
  151. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +0 -0
  152. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_combobox/device_combobox.py +0 -0
  153. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_combobox/register_device_combo_box.py +0 -0
  154. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_line_edit/__init__.py +0 -0
  155. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_line_edit/device_line_edit.py +0 -0
  156. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_line_edit/device_line_edit.pyproject +0 -0
  157. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +0 -0
  158. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/device_line_edit/register_device_line_edit.py +0 -0
  159. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dock/__init__.py +0 -0
  160. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dock/dock.py +0 -0
  161. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dock/dock_area.py +0 -0
  162. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dock/dock_area.pyproject +0 -0
  163. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dock/dock_area_plugin.py +0 -0
  164. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/dock/register_dock_area.py +0 -0
  165. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/__init__.py +0 -0
  166. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/figure.py +0 -0
  167. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/__init__.py +0 -0
  168. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/axis_settings.py +0 -0
  169. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/axis_settings.ui +0 -0
  170. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  171. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/image/image.py +0 -0
  172. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/image/image_item.py +0 -0
  173. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/image/image_processor.py +0 -0
  174. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  175. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/motor_map/motor_map.py +0 -0
  176. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  177. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/waveform/waveform.py +0 -0
  178. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +0 -0
  179. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/image/__init__.py +0 -0
  180. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/image/bec_image_widget.pyproject +0 -0
  181. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/image/bec_image_widget_plugin.py +0 -0
  182. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/image/image_widget.py +0 -0
  183. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/image/register_bec_image_widget.py +0 -0
  184. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/jupyter_console/__init__.py +0 -0
  185. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/jupyter_console/jupyter_console.py +0 -0
  186. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/__init__.py +0 -0
  187. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog.pyproject +0 -0
  188. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/lm_fit_dialog_plugin.py +0 -0
  189. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog.py +0 -0
  190. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_compact.ui +0 -0
  191. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/lmfit_dialog_vertical.ui +0 -0
  192. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/lmfit_dialog/register_lm_fit_dialog.py +0 -0
  193. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/__init__.py +0 -0
  194. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject +0 -0
  195. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +0 -0
  196. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py +0 -0
  197. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.py +0 -0
  198. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui +0 -0
  199. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/motor_map_widget.py +0 -0
  200. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py +0 -0
  201. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/position_indicator/__init__.py +0 -0
  202. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/position_indicator/position_indicator.py +0 -0
  203. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/position_indicator/position_indicator.pyproject +0 -0
  204. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/position_indicator/position_indicator_plugin.py +0 -0
  205. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/position_indicator/register_position_indicator.py +0 -0
  206. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/__init__.py +0 -0
  207. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_box.py +0 -0
  208. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_box.pyproject +0 -0
  209. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_box.ui +0 -0
  210. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_box_plugin.py +0 -0
  211. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_control_line.py +0 -0
  212. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_control_line.pyproject +0 -0
  213. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_control_line.ui +0 -0
  214. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +0 -0
  215. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/register_positioner_box.py +0 -0
  216. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/positioner_box/register_positioner_control_line.py +0 -0
  217. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/ring_progress_bar/__init__.py +0 -0
  218. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +0 -0
  219. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/ring_progress_bar/ring.py +0 -0
  220. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +0 -0
  221. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +0 -0
  222. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +0 -0
  223. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/scan_control/__init__.py +0 -0
  224. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/scan_control/register_scan_control.py +0 -0
  225. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/scan_control/scan_control.py +0 -0
  226. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/scan_control/scan_control.pyproject +0 -0
  227. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/scan_control/scan_control_plugin.py +0 -0
  228. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/scan_control/scan_group_box.py +0 -0
  229. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/spinner/__init__.py +0 -0
  230. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/spinner/register_spinner_widget.py +0 -0
  231. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/spinner/spinner.py +0 -0
  232. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/spinner/spinner_widget.pyproject +0 -0
  233. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/spinner/spinner_widget_plugin.py +0 -0
  234. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/stop_button/__init__.py +0 -0
  235. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/stop_button/register_stop_button.py +0 -0
  236. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/stop_button/stop_button.py +0 -0
  237. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/stop_button/stop_button.pyproject +0 -0
  238. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/stop_button/stop_button_plugin.py +0 -0
  239. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/text_box/__init__.py +0 -0
  240. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/text_box/register_text_box.py +0 -0
  241. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/text_box/text_box.py +0 -0
  242. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/text_box/text_box.pyproject +0 -0
  243. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/text_box/text_box_plugin.py +0 -0
  244. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/toggle/__init__.py +0 -0
  245. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/toggle/register_toggle_switch.py +0 -0
  246. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/toggle/toggle.py +0 -0
  247. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/toggle/toggle_switch.pyproject +0 -0
  248. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/toggle/toggle_switch_plugin.py +0 -0
  249. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/vscode/__init__.py +0 -0
  250. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/vscode/register_vs_code_editor.py +0 -0
  251. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/vscode/vs_code_editor.pyproject +0 -0
  252. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/vscode/vs_code_editor_plugin.py +0 -0
  253. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/__init__.py +0 -0
  254. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/bec_waveform_widget.pyproject +0 -0
  255. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +0 -0
  256. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/register_bec_waveform_widget.py +0 -0
  257. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_popups/__init__.py +0 -0
  258. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py +0 -0
  259. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +0 -0
  260. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.ui +0 -0
  261. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/__init__.py +0 -0
  262. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_popups/dap_summary_dialog/dap_summary_dialog.py +0 -0
  263. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/waveform/waveform_widget.py +0 -0
  264. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/website/__init__.py +0 -0
  265. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/website/register_website_widget.py +0 -0
  266. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/website/website.py +0 -0
  267. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/website/website_widget.pyproject +0 -0
  268. {bec_widgets-0.117.0 → bec_widgets-0.117.1}/bec_widgets/widgets/website/website_widget_plugin.py +0 -0
@@ -1,6 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.117.1 (2024-10-11)
5
+
6
+ ### Fixes
7
+
8
+ * fix(FPS): qtimer cleanup leaking ([`3a22392`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3a2239278075de7489ad10a58c31d7d89715e221))
9
+
10
+ ### Unknown
11
+
12
+ * feature(vscode): added support for vscode instructions ([`f5f1f6c`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f5f1f6c304b890dc162e8653005233bce4ea82e4))
13
+
14
+ * feature(vscode): support for controlling vscode from widgets ([`9238679`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/923867947f62db026ac0378c30ef62c883596058))
15
+
16
+
4
17
  ## v0.117.0 (2024-10-11)
5
18
 
6
19
  ### Features
@@ -159,18 +172,3 @@ Fixes #361, do not try to change x axis when not permitted ([`efa2763`](https://
159
172
  ### Features
160
173
 
161
174
  * feat(accent colors): added helper function to get all accent colors ([`84a59f7`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/84a59f70eed6d8a3c3aeeabc77a5f9ea4e864f61))
162
-
163
- ### Fixes
164
-
165
- * fix(theme): fixed theme access for themecontainer ([`de303f0`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/de303f0227fc9d3a74a0410f1e7999ac5132273c))
166
-
167
-
168
- ## v0.108.0 (2024-09-06)
169
-
170
- ### Documentation
171
-
172
- * docs(progressbar): added docs ([`7d07cea`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7d07cea946f9c884477b01bebfb60b332ff09e0a))
173
-
174
- ### Features
175
-
176
- * feat(progressbar): added bec progressbar ([`f6d1d0b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f6d1d0bbe3ba30a3b7291cd36a1f7f8e6bd5b895))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.117.0
3
+ Version: 0.117.1
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
@@ -452,13 +452,14 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
452
452
 
453
453
  self.fps_monitor.sigFpsUpdate.connect(self.update_fps_label)
454
454
 
455
- def unhook_fps_monitor(self):
455
+ def unhook_fps_monitor(self, delete_label=True):
456
456
  """Unhook the FPS monitor from the plot."""
457
457
  if self.fps_monitor is not None:
458
458
  # Remove Monitor
459
459
  self.fps_monitor.cleanup()
460
460
  self.fps_monitor.deleteLater()
461
461
  self.fps_monitor = None
462
+ if self.fps_label is not None and delete_label:
462
463
  # Remove Label
463
464
  self.removeItem(self.fps_label)
464
465
  self.fps_label.deleteLater()
@@ -490,6 +491,7 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
490
491
  def cleanup_pyqtgraph(self):
491
492
  """Cleanup pyqtgraph items."""
492
493
  self.unhook_crosshair()
494
+ self.unhook_fps_monitor(delete_label=False)
493
495
  self.tick_item.cleanup()
494
496
  self.arrow_item.cleanup()
495
497
  item = self.plot_item
@@ -0,0 +1,203 @@
1
+ import os
2
+ import select
3
+ import shlex
4
+ import signal
5
+ import socket
6
+ import subprocess
7
+ import sys
8
+ from typing import Literal
9
+
10
+ from pydantic import BaseModel
11
+ from qtpy.QtCore import Signal, Slot
12
+
13
+ from bec_widgets.widgets.website.website import WebsiteWidget
14
+
15
+
16
+ class VSCodeInstructionMessage(BaseModel):
17
+ command: Literal["open", "write", "close", "zenMode", "save", "new", "setCursor"]
18
+ content: str = ""
19
+
20
+
21
+ def get_free_port():
22
+ """
23
+ Get a free port on the local machine.
24
+
25
+ Returns:
26
+ int: The free port number
27
+ """
28
+ sock = socket.socket()
29
+ sock.bind(("", 0))
30
+ port = sock.getsockname()[1]
31
+ sock.close()
32
+ return port
33
+
34
+
35
+ class VSCodeEditor(WebsiteWidget):
36
+ """
37
+ A widget to display the VSCode editor.
38
+ """
39
+
40
+ file_saved = Signal(str)
41
+
42
+ token = "bec"
43
+ host = "127.0.0.1"
44
+
45
+ USER_ACCESS = []
46
+ ICON_NAME = "developer_mode_tv"
47
+
48
+ def __init__(self, parent=None, config=None, client=None, gui_id=None):
49
+
50
+ self.process = None
51
+ self.port = get_free_port()
52
+ self._url = f"http://{self.host}:{self.port}?tkn={self.token}"
53
+ super().__init__(parent=parent, config=config, client=client, gui_id=gui_id)
54
+ self.start_server()
55
+ self.bec_dispatcher.connect_slot(self.on_vscode_event, f"vscode-events/{self.gui_id}")
56
+
57
+ def start_server(self):
58
+ """
59
+ Start the server.
60
+
61
+ This method starts the server for the VSCode editor in a subprocess.
62
+ """
63
+
64
+ env = os.environ.copy()
65
+ env["BEC_Widgets_GUIID"] = self.gui_id
66
+ env["BEC_REDIS_HOST"] = self.client.connector.host
67
+ cmd = shlex.split(
68
+ f"code serve-web --port {self.port} --connection-token={self.token} --accept-server-license-terms"
69
+ )
70
+ self.process = subprocess.Popen(
71
+ cmd,
72
+ text=True,
73
+ stdout=subprocess.PIPE,
74
+ stderr=subprocess.DEVNULL,
75
+ preexec_fn=os.setsid,
76
+ env=env,
77
+ )
78
+
79
+ os.set_blocking(self.process.stdout.fileno(), False)
80
+ while self.process.poll() is None:
81
+ readylist, _, _ = select.select([self.process.stdout], [], [], 1)
82
+ if self.process.stdout in readylist:
83
+ output = self.process.stdout.read(1024)
84
+ if output and f"available at {self._url}" in output:
85
+ break
86
+ self.set_url(self._url)
87
+ self.wait_until_loaded()
88
+
89
+ @Slot(str)
90
+ def open_file(self, file_path: str):
91
+ """
92
+ Open a file in the VSCode editor.
93
+
94
+ Args:
95
+ file_path: The file path to open
96
+ """
97
+ msg = VSCodeInstructionMessage(command="open", content=f"file://{file_path}")
98
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
99
+
100
+ @Slot(dict, dict)
101
+ def on_vscode_event(self, content, _metadata):
102
+ """
103
+ Handle the VSCode event. VSCode events are received as RawMessages.
104
+
105
+ Args:
106
+ content: The content of the event
107
+ metadata: The metadata of the event
108
+ """
109
+
110
+ # the message also contains the content but I think is fine for now to just emit the file path
111
+ if not isinstance(content["data"], dict):
112
+ return
113
+ if "uri" not in content["data"]:
114
+ return
115
+ if not content["data"]["uri"].startswith("file://"):
116
+ return
117
+ file_path = content["data"]["uri"].split("file://")[1]
118
+ self.file_saved.emit(file_path)
119
+
120
+ @Slot()
121
+ def save_file(self):
122
+ """
123
+ Save the file in the VSCode editor.
124
+ """
125
+ msg = VSCodeInstructionMessage(command="save")
126
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
127
+
128
+ @Slot()
129
+ def new_file(self):
130
+ """
131
+ Create a new file in the VSCode editor.
132
+ """
133
+ msg = VSCodeInstructionMessage(command="new")
134
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
135
+
136
+ @Slot()
137
+ def close_file(self):
138
+ """
139
+ Close the file in the VSCode editor.
140
+ """
141
+ msg = VSCodeInstructionMessage(command="close")
142
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
143
+
144
+ @Slot(str)
145
+ def write_file(self, content: str):
146
+ """
147
+ Write content to the file in the VSCode editor.
148
+
149
+ Args:
150
+ content: The content to write
151
+ """
152
+ msg = VSCodeInstructionMessage(command="write", content=content)
153
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
154
+
155
+ @Slot()
156
+ def zen_mode(self):
157
+ """
158
+ Toggle the Zen mode in the VSCode editor.
159
+ """
160
+ msg = VSCodeInstructionMessage(command="zenMode")
161
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
162
+
163
+ @Slot(int, int)
164
+ def set_cursor(self, line: int, column: int):
165
+ """
166
+ Set the cursor in the VSCode editor.
167
+
168
+ Args:
169
+ line: The line number
170
+ column: The column number
171
+ """
172
+ msg = VSCodeInstructionMessage(command="setCursor", content=f"{line},{column}")
173
+ self.client.connector.raw_send(f"vscode-instructions/{self.gui_id}", msg.model_dump_json())
174
+
175
+ def cleanup_vscode(self):
176
+ """
177
+ Cleanup the VSCode editor.
178
+ """
179
+ if not self.process or self.process.poll() is not None:
180
+ return
181
+ os.killpg(os.getpgid(self.process.pid), signal.SIGTERM)
182
+ self.process.wait()
183
+
184
+ def cleanup(self):
185
+ """
186
+ Cleanup the widget. This method is called from the dock area when the widget is removed.
187
+ """
188
+ self.bec_dispatcher.disconnect_slot(self.on_vscode_event, f"vscode-events/{self.gui_id}")
189
+ self.cleanup_vscode()
190
+ return super().cleanup()
191
+
192
+
193
+ if __name__ == "__main__": # pragma: no cover
194
+ import sys
195
+
196
+ from qtpy.QtWidgets import QApplication
197
+
198
+ app = QApplication(sys.argv)
199
+ widget = VSCodeEditor(gui_id="unknown")
200
+ widget.show()
201
+ app.exec_()
202
+ widget.bec_dispatcher.disconnect_all()
203
+ widget.client.shutdown()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.117.0"
7
+ version = "0.117.1"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -1,96 +0,0 @@
1
- import os
2
- import select
3
- import shlex
4
- import signal
5
- import socket
6
- import subprocess
7
- import sys
8
-
9
- from bec_widgets.widgets.website.website import WebsiteWidget
10
-
11
-
12
- def get_free_port():
13
- """
14
- Get a free port on the local machine.
15
-
16
- Returns:
17
- int: The free port number
18
- """
19
- sock = socket.socket()
20
- sock.bind(("", 0))
21
- port = sock.getsockname()[1]
22
- sock.close()
23
- return port
24
-
25
-
26
- class VSCodeEditor(WebsiteWidget):
27
- """
28
- A widget to display the VSCode editor.
29
- """
30
-
31
- token = "bec"
32
- host = "127.0.0.1"
33
-
34
- USER_ACCESS = []
35
- ICON_NAME = "developer_mode_tv"
36
-
37
- def __init__(self, parent=None, config=None, client=None, gui_id=None):
38
-
39
- self.process = None
40
- self.port = get_free_port()
41
- self._url = f"http://{self.host}:{self.port}?tkn={self.token}"
42
- super().__init__(parent=parent, config=config, client=client, gui_id=gui_id)
43
- self.start_server()
44
-
45
- def start_server(self):
46
- """
47
- Start the server.
48
-
49
- This method starts the server for the VSCode editor in a subprocess.
50
- """
51
-
52
- cmd = shlex.split(
53
- f"code serve-web --port {self.port} --connection-token={self.token} --accept-server-license-terms"
54
- )
55
- self.process = subprocess.Popen(
56
- cmd, text=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, preexec_fn=os.setsid
57
- )
58
-
59
- os.set_blocking(self.process.stdout.fileno(), False)
60
- while self.process.poll() is None:
61
- readylist, _, _ = select.select([self.process.stdout], [], [], 1)
62
- if self.process.stdout in readylist:
63
- output = self.process.stdout.read(1024)
64
- if output and f"available at {self._url}" in output:
65
- break
66
- self.set_url(self._url)
67
- self.wait_until_loaded()
68
-
69
- def cleanup_vscode(self):
70
- """
71
- Cleanup the VSCode editor.
72
- """
73
- if not self.process or self.process.poll() is not None:
74
- return
75
- os.killpg(os.getpgid(self.process.pid), signal.SIGTERM)
76
- self.process.wait()
77
-
78
- def cleanup(self):
79
- """
80
- Cleanup the widget. This method is called from the dock area when the widget is removed.
81
- """
82
- self.cleanup_vscode()
83
- return super().cleanup()
84
-
85
-
86
- if __name__ == "__main__": # pragma: no cover
87
- import sys
88
-
89
- from qtpy.QtWidgets import QApplication
90
-
91
- app = QApplication(sys.argv)
92
- widget = VSCodeEditor()
93
- widget.show()
94
- app.exec_()
95
- widget.bec_dispatcher.disconnect_all()
96
- widget.client.shutdown()
File without changes
File without changes
File without changes
File without changes