bec-widgets 0.90.0__py3-none-any.whl → 0.92.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. CHANGELOG.md +34 -34
  2. PKG-INFO +1 -1
  3. bec_widgets/assets/app_icons/BEC-Dark.png +0 -0
  4. bec_widgets/assets/designer_icons/code.png +0 -0
  5. bec_widgets/assets/designer_icons/color_button.png +0 -0
  6. bec_widgets/assets/designer_icons/device_box.png +0 -0
  7. bec_widgets/assets/designer_icons/device_combo_box.png +0 -0
  8. bec_widgets/assets/designer_icons/device_line_edit.png +0 -0
  9. bec_widgets/assets/designer_icons/dock_area.png +0 -0
  10. bec_widgets/assets/designer_icons/games.png +0 -0
  11. bec_widgets/assets/designer_icons/position_indicator.png +0 -0
  12. bec_widgets/assets/designer_icons/queue.png +0 -0
  13. bec_widgets/assets/designer_icons/ring_progress.png +0 -0
  14. bec_widgets/assets/designer_icons/scan_control.png +0 -0
  15. bec_widgets/assets/designer_icons/spinner.png +0 -0
  16. bec_widgets/assets/designer_icons/status.png +0 -0
  17. bec_widgets/assets/designer_icons/stop.png +0 -0
  18. bec_widgets/assets/designer_icons/text.png +0 -0
  19. bec_widgets/assets/designer_icons/toggle.png +0 -0
  20. bec_widgets/assets/designer_icons/web.png +0 -0
  21. bec_widgets/assets/status_icons/error.svg +3 -0
  22. bec_widgets/assets/status_icons/not_connected.svg +3 -0
  23. bec_widgets/assets/status_icons/refresh.svg +3 -0
  24. bec_widgets/assets/status_icons/running.svg +3 -0
  25. bec_widgets/assets/status_icons/warning.svg +3 -0
  26. bec_widgets/assets/toolbar_icons/attach_all.svg +3 -0
  27. bec_widgets/assets/toolbar_icons/device_box.svg +3 -0
  28. bec_widgets/assets/toolbar_icons/image.svg +3 -0
  29. bec_widgets/assets/toolbar_icons/motor_map.svg +3 -0
  30. bec_widgets/assets/toolbar_icons/progress.svg +3 -0
  31. bec_widgets/assets/toolbar_icons/queue.svg +3 -0
  32. bec_widgets/assets/toolbar_icons/restore_state.svg +3 -0
  33. bec_widgets/assets/toolbar_icons/ring_progress.svg +3 -0
  34. bec_widgets/assets/toolbar_icons/save_state.svg +3 -0
  35. bec_widgets/assets/toolbar_icons/scan_control.svg +3 -0
  36. bec_widgets/assets/toolbar_icons/status.svg +3 -0
  37. bec_widgets/assets/toolbar_icons/terminal.svg +3 -0
  38. bec_widgets/assets/toolbar_icons/waveform.svg +3 -0
  39. bec_widgets/cli/client.py +1 -1
  40. bec_widgets/examples/general_app/__init__.py +0 -0
  41. bec_widgets/examples/general_app/general_app.py +92 -0
  42. bec_widgets/examples/general_app/general_app.ui +262 -0
  43. bec_widgets/examples/general_app/web_links.py +15 -0
  44. bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +8 -2
  45. bec_widgets/qt_utils/toolbar.py +52 -2
  46. bec_widgets/utils/generate_designer_plugin.py +1 -1
  47. bec_widgets/widgets/bec_queue/bec_queue_plugin.py +7 -2
  48. bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +7 -2
  49. bec_widgets/widgets/bec_status_box/status_item.py +14 -8
  50. bec_widgets/widgets/color_button/color_button_plugin.py +3 -2
  51. bec_widgets/widgets/device_box/device_box_plugin.py +6 -1
  52. bec_widgets/widgets/device_combobox/{device_combobox_plugin.py → device_combo_box_plugin.py} +5 -3
  53. bec_widgets/widgets/device_combobox/device_combobox.py +1 -2
  54. bec_widgets/widgets/device_combobox/{register_device_combobox.py → register_device_combo_box.py} +1 -1
  55. bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +5 -3
  56. bec_widgets/widgets/dock/dock.py +68 -4
  57. bec_widgets/widgets/dock/dock_area.py +139 -29
  58. bec_widgets/widgets/dock/dock_area.pyproject +1 -0
  59. bec_widgets/widgets/dock/dock_area_plugin.py +59 -0
  60. bec_widgets/widgets/dock/register_dock_area.py +15 -0
  61. bec_widgets/widgets/position_indicator/__init__.py +0 -0
  62. bec_widgets/widgets/position_indicator/position_indicator_plugin.py +7 -2
  63. bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py +15 -0
  64. bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject +1 -0
  65. bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +58 -0
  66. bec_widgets/widgets/scan_control/register_scan_control.py +15 -0
  67. bec_widgets/widgets/scan_control/scan_control.pyproject +1 -0
  68. bec_widgets/widgets/scan_control/scan_control_plugin.py +58 -0
  69. bec_widgets/widgets/spinner/spinner_widget_plugin.py +7 -2
  70. bec_widgets/widgets/stop_button/stop_button_plugin.py +5 -3
  71. bec_widgets/widgets/text_box/register_text_box.py +15 -0
  72. bec_widgets/widgets/text_box/text_box.pyproject +1 -0
  73. bec_widgets/widgets/text_box/text_box_plugin.py +58 -0
  74. bec_widgets/widgets/toggle/toggle_switch_plugin.py +7 -2
  75. bec_widgets/widgets/vscode/register_vs_code_editor.py +15 -0
  76. bec_widgets/widgets/vscode/vs_code_editor.pyproject +1 -0
  77. bec_widgets/widgets/vscode/vs_code_editor_plugin.py +59 -0
  78. bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +1 -1
  79. bec_widgets/widgets/website/register_website_widget.py +15 -0
  80. bec_widgets/widgets/website/website_widget.pyproject +1 -0
  81. bec_widgets/widgets/website/website_widget_plugin.py +58 -0
  82. {bec_widgets-0.90.0.dist-info → bec_widgets-0.92.0.dist-info}/METADATA +1 -1
  83. {bec_widgets-0.90.0.dist-info → bec_widgets-0.92.0.dist-info}/RECORD +90 -35
  84. pyproject.toml +1 -1
  85. tests/unit_tests/test_bec_dock.py +70 -30
  86. bec_widgets/widgets/color_button/assets/color_button.png +0 -0
  87. bec_widgets/widgets/device_combobox/assets/device_combobox_icon.png +0 -0
  88. bec_widgets/widgets/device_line_edit/assets/line_edit_icon.png +0 -0
  89. bec_widgets/widgets/stop_button/assets/stop.png +0 -0
  90. /bec_widgets/assets/designer_icons/{BECWaveformWidget.png → waveform.png} +0 -0
  91. /bec_widgets/widgets/device_combobox/{device_combobox.pyproject → device_combo_box.pyproject} +0 -0
  92. {bec_widgets-0.90.0.dist-info → bec_widgets-0.92.0.dist-info}/WHEEL +0 -0
  93. {bec_widgets-0.90.0.dist-info → bec_widgets-0.92.0.dist-info}/entry_points.txt +0 -0
  94. {bec_widgets-0.90.0.dist-info → bec_widgets-0.92.0.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.92.0 (2024-07-24)
4
+
5
+ ### Feature
6
+
7
+ * feat(dock): dock style sheets updated ([`8ca60d5`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8ca60d54b3cfa621172ce097fc1ba514c47ebac7))
8
+
9
+ * feat(general_gui): general gui added ([`5696c99`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/5696c993dc1c0da40ff3e99f754c246cc017ea32))
10
+
11
+ ### Fix
12
+
13
+ * fix(dock): custom label can be created closable ([`4457ef2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4457ef2147e21b856c9dcaf63c81ba98002dcaf1))
14
+
15
+ * fix(device_combobox): set minimum size to 125px ([`1206e15`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1206e153094cd8505badf69a1461572a76b4c5ad))
16
+
17
+ ## v0.91.0 (2024-07-23)
18
+
19
+ ### Feature
20
+
21
+ * feat(dock_area): plugin added ([`a16b87a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a16b87ac28d164230dd2e8020f50ff3a63cd407e))
22
+
23
+ * feat(dock_area): Added toolbar to dock area to add widgets without CLI interactions ([`cce1367`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cce1367a72fca7206d351894bd1831b7bbfa7ec6))
24
+
25
+ * feat(toolbar): expandable menu actions ([`28f26e9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/28f26e92a46063db1a194be552156a5d3b2c43e7))
26
+
27
+ ### Fix
28
+
29
+ * fix(status_item): icons changed to material design ([`1b9c55a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1b9c55a46a0dfd8678c8e95ff64dd6e8cfb9233e))
30
+
31
+ * fix(plugins): Qt Designer plugins icons adjusted ([`f4844d2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f4844d2e067ce75dc64b89b230d7932b308ddfc2))
32
+
33
+ ### Test
34
+
35
+ * test(dock_area): tests extended ([`06fab0e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/06fab0eab926cef5677d4988fd1fce09da342dd8))
36
+
3
37
  ## v0.90.0 (2024-07-23)
4
38
 
5
39
  ### Feature
@@ -80,8 +114,6 @@ This reverts commit 3798714369adf4023f833b7749d2f46a0ec74eee ([`fd6ae91`](https:
80
114
 
81
115
  * feat(waveform_widget): BECWaveformWidget toolbar added import/export config ([`fa9b171`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/fa9b17191ddbb4043a658dae9aa0801e1dc22b84))
82
116
 
83
- * feat(waveform_widget): BECWaveformWidget added with toolbar ([`755b394`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/755b394c1c4d7c443c442d89c630d08ce5415554))
84
-
85
117
  ### Fix
86
118
 
87
119
  * fix(waveform_widget): plot API unified with BECFigure ([`2c8764a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2c8764a27de89b39b717032b58465e120ec57fbc))
@@ -113,35 +145,3 @@ curve Dialog colormap WIP ([`33495cf`](https://gitlab.psi.ch/bec/bec_widgets/-/c
113
145
  ### Test
114
146
 
115
147
  * test(waveform_widget): test added ([`8d764e2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8d764e2d46a1e017dadc3c4630648c1ca708afc2))
116
-
117
- ## v0.87.1 (2024-07-18)
118
-
119
- ### Fix
120
-
121
- * fix(dock): added hasattr to cleanup method for widgets ([`d75c55b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d75c55b2b1ccf156fb789c7813f1c5bdf256f860))
122
-
123
- * fix: add missing close() call, ensure jupyter console client.shutdown() is called in closeEvent ([`e52ee26`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e52ee2604cb35096f1bd833ca9516d8a34197d35))
124
-
125
- * fix: BECWidget checks if it is a widget, and implements closeEvent and cleanup ([`d64758f`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d64758f268cad69e6a17bd52dc9913a6367d3cde))
126
-
127
- * fix: add exit handlers for BECConnection objects ([`6202d22`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6202d224fe85c103a4c33bd8c255f18cfd027303))
128
-
129
- ### Refactor
130
-
131
- * refactor: BECWidget is a mixin based on BECConnector, for each QWidget in BEC
132
-
133
- Handles closeEvent() and RPC registering/unregistering ([`c7feb69`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/c7feb6952d590b569f7b0cba3b019a9af0ce0c93))
134
-
135
- ## v0.87.0 (2024-07-17)
136
-
137
- ### Feature
138
-
139
- * feat(qt_utils): added warning utility with simple API to setup warning message ([`787f749`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/787f74949bac27aaa51cbb43911919071481707c))
140
-
141
- * feat(qt_utils): added error handle utility with popup messageBoxes ([`196ef7a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/196ef7afe11a1b5dcc536f8859dc3b6044ea628e))
142
-
143
- ### Unknown
144
-
145
- * tests: add unit tests for error and warning message boxes ([`8f104cf`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8f104cf4024d3a4516e6aba5daa8fb78c85e2bfd))
146
-
147
- ## v0.86.0 (2024-07-17)
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.90.0
3
+ Version: 0.92.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
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#EA3323">
2
+ <path d="M479.85-265.87q19.8 0 32.69-12.46 12.9-12.46 12.9-32.26 0-19.8-12.75-32.98-12.74-13.17-32.54-13.17-19.8 0-32.69 13.16-12.9 13.15-12.9 32.95 0 19.8 12.75 32.28 12.74 12.48 32.54 12.48Zm-36.46-166.56h79.22v-262.61h-79.22v262.61Zm36.95 366.56q-86.2 0-161.5-32.39-75.3-32.4-131.74-88.84-56.44-56.44-88.84-131.73-32.39-75.3-32.39-161.59t32.39-161.67q32.4-75.37 88.75-131.34t131.69-88.62q75.34-32.65 161.67-32.65 86.34 0 161.78 32.61 75.45 32.6 131.37 88.5 55.93 55.89 88.55 131.45 32.63 75.56 32.63 161.87 0 86.29-32.65 161.58t-88.62 131.48q-55.97 56.18-131.42 88.76-75.46 32.58-161.67 32.58Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#EA3323">
2
+ <path d="m759.04-283.09-63.13-62q49.31-9.43 84.44-46.02 35.13-36.59 35.13-86.14 0-55.49-39.42-95.08-39.43-39.58-94.93-39.58h-153.3v-79.79h152.74q89.28 0 151.7 62.71Q894.7-566.28 894.7-477q0 63.7-38.26 115.96-38.27 52.26-97.4 77.95ZM596.83-443.61l-65.66-66.78h110.05v66.78h-44.39ZM804.96-56 58.48-802.48 106-850l746.48 746.48L804.96-56ZM443.22-265.87H279.43q-89.28 0-151.7-62.42Q65.3-390.72 65.3-480q0-72.57 43.09-129.54 43.09-56.98 112.09-76.07l70.13 70.7h-11.18q-55.73 0-95.32 39.3-39.59 39.31-39.59 95.61t39.66 95.61q39.66 39.3 95.5 39.3h163.54v79.22ZM319.35-446.61v-66.78h77.3l66.78 66.78H319.35Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFF55">
2
+ <path d="M478.3-145.87q-138.65 0-236.39-97.74-97.74-97.74-97.74-236.25t97.74-236.68q97.74-98.16 236.39-98.16 88.4 0 155.45 35.76 67.04 35.76 115.86 98.9V-814.7h66.78v274.92H540.91V-606h165.74q-38.56-57.74-95.3-93.33-56.74-35.58-133.05-35.58-106.88 0-180.89 73.98-74.02 73.99-74.02 180.83 0 106.84 74.02 180.93 74.02 74.08 180.91 74.08 80.16 0 147.74-46.08 67.59-46.09 95.16-121.83H803q-29.56 110.65-119.67 178.89-90.1 68.24-205.03 68.24Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#75FB4C">
2
+ <path d="m419.87-289.52 289.22-289.22-57.31-56.87L419.87-403.7 304.96-518.61l-56.31 56.87 171.22 172.22Zm60.21 223.65q-85.47 0-161.01-32.39-75.53-32.4-131.97-88.84-56.44-56.44-88.84-131.89-32.39-75.46-32.39-160.93 0-86.47 32.39-162.01 32.4-75.53 88.75-131.5t131.85-88.62q75.5-32.65 161.01-32.65 86.52 0 162.12 32.61 75.61 32.6 131.53 88.5 55.93 55.89 88.55 131.45Q894.7-566.58 894.7-480q0 85.55-32.65 161.07-32.65 75.53-88.62 131.9-55.97 56.37-131.42 88.77-75.46 32.39-161.93 32.39Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#F19E39">
2
+ <path d="M27.56-112.65 480-894.7l452.44 782.05H27.56Zm456.62-125.48q13.15 0 22.61-9.64 9.47-9.65 9.47-22.8t-9.64-22.33q-9.65-9.19-22.8-9.19t-22.61 9.36q-9.47 9.36-9.47 22.51 0 13.15 9.64 22.62 9.65 9.47 22.8 9.47ZM454-348h60v-219.48h-60V-348Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="m145.26-88.13-57.13-57.13 137.39-137.39H105.87v-79.22h256v256h-79.22v-119.65L145.26-88.13Zm669.48 0L677.91-225.52v119.65h-79.78v-256H854.7v79.22H734.48l137.39 137.39-57.13 57.13Zm-708.87-510v-79.78h119.65L88.13-814.74l57.13-57.13 137.39 137.39V-854.7h79.22v256.57h-256Zm492.26 0V-854.7h79.78v120.22l137.83-138.39 57.13 57.13-138.39 137.83H854.7v79.78H598.13Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M403.39-158.74 82.13-480l321.26-321.26v642.52Zm153.22 0v-642.52L878.44-480 556.61-158.74Zm81.57-195.74L763.13-480 638.18-605.52v251.04Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M185.09-105.87q-32.51 0-55.87-23.35-23.35-23.36-23.35-55.87v-589.82q0-32.74 23.35-56.26 23.36-23.53 55.87-23.53h589.82q32.74 0 56.26 23.53 23.53 23.52 23.53 56.26v589.82q0 32.51-23.53 55.87-23.52 23.35-56.26 23.35H185.09Zm43.56-166.04h503.7L578-481.48l-132 171-93-127-124.35 165.57Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M443.78-28.43v-75Q305.65-118 211.54-212.11q-94.11-94.11-108.11-231.67h-75v-72.44h75Q118-654.35 212.11-748.46q94.11-94.11 231.67-108.11v-75h72.44v75q137.56 14 231.67 108.11Q842-654.35 856.57-516.22h75v72.44h-75q-14 137.56-108.11 231.67Q654.35-118 516.22-103.43v75h-72.44Zm36.12-152.66q123.4 0 211.21-87.7 87.8-87.71 87.8-211.11 0-123.4-87.7-211.21-87.71-87.8-211.11-87.8-123.4 0-211.21 87.7-87.8 87.71-87.8 211.11 0 123.4 87.7 211.21 87.71 87.8 211.11 87.8ZM480-330q-63 0-106.5-43.5T330-480q0-63 43.5-106.5T480-630q63 0 106.5 43.5T630-480q0 63-43.5 106.5T480-330Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M480-65.87q-87.51 0-162.97-31.89-75.47-31.89-131.43-87.84-55.95-55.96-87.84-131.43Q65.87-392.49 65.87-480q0-87.47 31.88-162.87 31.89-75.39 87.75-131.51 55.87-56.11 131.41-88.21Q392.44-894.7 480-894.7q15.96 0 27.78 12.16 11.83 12.16 11.83 28.07 0 15.9-11.83 27.73-11.82 11.83-27.78 11.83-139.31 0-237.11 97.8-97.8 97.8-97.8 237.1 0 139.31 97.8 237.12 97.8 97.8 237.1 97.8 139.31 0 237.12-97.8 97.8-97.8 97.8-237.11 0-15.96 11.83-27.78 11.83-11.83 27.73-11.83 15.91 0 28.07 11.83Q894.7-495.96 894.7-480q0 87.56-32.14 163.1-32.14 75.54-88.11 131.44-55.97 55.9-131.44 87.74Q567.55-65.87 480-65.87Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M854.7-105.87H105.87v-209.61H854.7v209.61Zm0-269.61H105.87v-209.04H854.7v209.04Zm0-269.04H105.87V-854.7H854.7v210.18Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M336.04-487.39 145.09-678.35v156.65H65.87v-293H358.3v79.79H201.22l191.39 190.95-56.57 56.57ZM145.09-145.87q-32.51 0-55.87-23.35-23.35-23.36-23.35-55.87V-451.7h79.22v226.61H493v79.22H145.09Zm669.82-278.3v-310.74H428.3v-79.79h386.61q32.74 0 56.26 23.53 23.53 23.52 23.53 56.26v310.74h-79.79Zm79.79 60v218.87H553v-218.87h341.7Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M479.87-54q-87.96 0-165.74-33.42-77.79-33.43-135.53-91.18-57.75-57.74-91.18-135.66Q54-392.17 54-480.13q0-87.96 33.42-165.74 33.43-77.79 91.18-135.53 57.74-57.75 135.62-91.18Q392.09-906 480-906h36.22v340.7q24.82 10.69 40.8 33.52Q573-508.96 573-480.17q0 38.43-27.38 65.8Q518.24-387 479.79-387q-38.44 0-65.62-27.37Q387-441.74 387-480.17q0-28.79 15.98-51.61 15.98-22.83 40.8-33.52v-97.22Q378.22-650.39 336-599.76q-42.22 50.63-42.22 119.5 0 78.19 54.12 132.33 54.12 54.15 132.02 54.15 77.91 0 132.1-54.09 54.2-54.1 54.2-131.79 0-42.47-16.28-77.88-16.29-35.42-45.42-60.98l52.05-52.05q38.18 35.64 60.7 84.75 22.51 49.11 22.51 105.82 0 108.57-75.58 183.9-75.59 75.32-184.13 75.32-108.55 0-183.92-75.32-75.37-75.33-75.37-183.89 0-99.62 63.68-172.01 63.67-72.39 159.32-85.65v-93.22Q309.39-817.61 218.2-717.8 127-617.98 127-480.14q0 147.23 103.1 250.18Q333.19-127 480.14-127t249.9-103.02Q833-333.04 833-479.81q0-76.45-29.58-141.91-29.57-65.46-80.81-114.89l51.48-51.48q61.05 58.34 96.48 137.6Q906-571.23 906-479.73q0 87.82-33.42 165.6-33.43 77.79-91.18 135.53-57.74 57.75-135.66 91.18Q567.83-54 479.87-54Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M185.87-98.52v-681.39q0-32.74 23.35-56.26 23.36-23.53 55.87-23.53h429.82q32.74 0 56.26 23.53 23.53 23.52 23.53 56.26v681.39L480-224.17 185.87-98.52Zm79.22-120.39L480-309.18l214.91 90.27v-561H265.09v561Zm0-561h429.82-429.82Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M185.09-105.87q-32.93 0-56.08-23.14-23.14-23.15-23.14-56.08v-589.82q0-33.16 23.14-56.47 23.15-23.32 56.08-23.32h589.82q33.16 0 56.47 23.32 23.32 23.31 23.32 56.47v589.82q0 32.93-23.32 56.08-23.31 23.14-56.47 23.14H185.09Zm439.21-79.22h71l79.61-79.61v-40.39H744.3l-120 120ZM281-389.48l141-140 90 90L725.52-654 679-700.52l-167 167-90-90L234.48-436 281-389.48Zm-95.91 204.39h34.56l120-120h-71l-83.56 83.57v36.43Zm350.91 0 120-120h-71l-120 120h71Zm-159.87 0 120-120h-71l-120 120h71Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M286.83-277h60v-205h-60v205Zm326.91 0h60v-420h-60v420ZM450-277h60v-118h-60v118Zm0-205h60v-60h-60v60ZM185.09-105.87q-32.51 0-55.87-23.35-23.35-23.36-23.35-55.87v-589.82q0-32.74 23.35-56.26 23.36-23.53 55.87-23.53h589.82q32.74 0 56.26 23.53 23.53 23.52 23.53 56.26v589.82q0 32.51-23.53 55.87-23.52 23.35-56.26 23.35H185.09Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M145.09-145.87q-32.51 0-55.87-23.35-23.35-23.36-23.35-55.87v-509.82q0-32.74 23.35-56.26 23.36-23.53 55.87-23.53h669.82q32.74 0 56.26 23.53 23.53 23.52 23.53 56.26v509.82q0 32.51-23.53 55.87-23.52 23.35-56.26 23.35H145.09Zm0-79.22h669.82v-425.82H145.09v425.82ZM300-292l-42-42 103-104-104-104 43-42 146 146-146 146Zm190 4v-60h220v60H490Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#FFFFFF">
2
+ <path d="M126-206.43 66.43-266 380-579.57 539.43-419.7l298-335 56.14 54.57-352.44 399.26L380-460.43l-254 254Z"/>
3
+ </svg>
bec_widgets/cli/client.py CHANGED
@@ -351,7 +351,7 @@ class BECDockArea(RPCBase, BECGuiClientMixin):
351
351
  name: "str" = None,
352
352
  position: "Literal['bottom', 'top', 'left', 'right', 'above', 'below']" = None,
353
353
  relative_to: "BECDock | None" = None,
354
- closable: "bool" = False,
354
+ closable: "bool" = True,
355
355
  floating: "bool" = False,
356
356
  prefix: "str" = "dock",
357
357
  widget: "str | QWidget | None" = None,
File without changes
@@ -0,0 +1,92 @@
1
+ import os
2
+ import sys
3
+
4
+ from qtpy.QtCore import QSize
5
+ from qtpy.QtGui import QActionGroup, QIcon
6
+ from qtpy.QtWidgets import QApplication, QMainWindow, QStyle
7
+
8
+ import bec_widgets
9
+ from bec_widgets.examples.general_app.web_links import BECWebLinksMixin
10
+ from bec_widgets.utils.colors import apply_theme
11
+ from bec_widgets.utils.ui_loader import UILoader
12
+
13
+ MODULE_PATH = os.path.dirname(bec_widgets.__file__)
14
+
15
+
16
+ class BECGeneralApp(QMainWindow):
17
+ def __init__(self, parent=None):
18
+ super(BECGeneralApp, self).__init__(parent)
19
+ ui_file_path = os.path.join(os.path.dirname(__file__), "general_app.ui")
20
+ self.load_ui(ui_file_path)
21
+
22
+ self.resize(1280, 720)
23
+
24
+ self.ini_ui()
25
+
26
+ def ini_ui(self):
27
+ self._setup_icons()
28
+ self._hook_menubar_docs()
29
+ self._hook_theme_bar()
30
+
31
+ def load_ui(self, ui_file):
32
+ loader = UILoader(self)
33
+ self.ui = loader.loader(ui_file)
34
+ self.setCentralWidget(self.ui)
35
+
36
+ def _hook_menubar_docs(self):
37
+ # BEC Docs
38
+ self.ui.action_BEC_docs.triggered.connect(BECWebLinksMixin.open_bec_docs)
39
+ # BEC Widgets Docs
40
+ self.ui.action_BEC_widgets_docs.triggered.connect(BECWebLinksMixin.open_bec_widgets_docs)
41
+ # Bug report
42
+ self.ui.action_bug_report.triggered.connect(BECWebLinksMixin.open_bec_bug_report)
43
+
44
+ def change_theme(self, theme):
45
+ apply_theme(theme)
46
+
47
+ def _setup_icons(self):
48
+ help_icon = QApplication.style().standardIcon(QStyle.SP_MessageBoxQuestion)
49
+ bug_icon = QApplication.style().standardIcon(QStyle.SP_MessageBoxInformation)
50
+ computer_icon = QIcon.fromTheme("computer")
51
+ widget_icon = QIcon(os.path.join(MODULE_PATH, "assets", "designer_icons", "dock_area.png"))
52
+
53
+ self.ui.action_BEC_docs.setIcon(help_icon)
54
+ self.ui.action_BEC_widgets_docs.setIcon(help_icon)
55
+ self.ui.action_bug_report.setIcon(bug_icon)
56
+
57
+ self.ui.central_tab.setTabIcon(0, widget_icon)
58
+ self.ui.central_tab.setTabIcon(1, computer_icon)
59
+
60
+ def _hook_theme_bar(self):
61
+ self.ui.action_light.setCheckable(True)
62
+ self.ui.action_dark.setCheckable(True)
63
+
64
+ # Create an action group to make sure only one can be checked at a time
65
+ theme_group = QActionGroup(self)
66
+ theme_group.addAction(self.ui.action_light)
67
+ theme_group.addAction(self.ui.action_dark)
68
+ theme_group.setExclusive(True)
69
+
70
+ # Connect the actions to the theme change method
71
+
72
+ self.ui.action_light.triggered.connect(lambda: self.change_theme("light"))
73
+ self.ui.action_dark.triggered.connect(lambda: self.change_theme("dark"))
74
+
75
+ self.ui.action_dark.trigger()
76
+
77
+
78
+ def main(): # pragma: no cover
79
+
80
+ app = QApplication(sys.argv)
81
+ icon = QIcon()
82
+ icon.addFile(
83
+ os.path.join(MODULE_PATH, "assets", "app_icons", "BEC-Dark.png"), size=QSize(48, 48)
84
+ )
85
+ app.setWindowIcon(icon)
86
+ main_window = BECGeneralApp()
87
+ main_window.show()
88
+ sys.exit(app.exec_())
89
+
90
+
91
+ if __name__ == "__main__": # pragma: no cover
92
+ main()
@@ -0,0 +1,262 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>MainWindow</class>
4
+ <widget class="QMainWindow" name="MainWindow">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>1718</width>
10
+ <height>1139</height>
11
+ </rect>
12
+ </property>
13
+ <property name="windowTitle">
14
+ <string>MainWindow</string>
15
+ </property>
16
+ <property name="tabShape">
17
+ <enum>QTabWidget::TabShape::Rounded</enum>
18
+ </property>
19
+ <widget class="QWidget" name="centralwidget">
20
+ <layout class="QVBoxLayout" name="verticalLayout_3">
21
+ <item>
22
+ <widget class="QTabWidget" name="central_tab">
23
+ <property name="currentIndex">
24
+ <number>0</number>
25
+ </property>
26
+ <widget class="QWidget" name="dock_area_tab">
27
+ <attribute name="title">
28
+ <string>Dock Area</string>
29
+ </attribute>
30
+ <layout class="QVBoxLayout" name="verticalLayout">
31
+ <property name="leftMargin">
32
+ <number>2</number>
33
+ </property>
34
+ <property name="topMargin">
35
+ <number>1</number>
36
+ </property>
37
+ <property name="rightMargin">
38
+ <number>2</number>
39
+ </property>
40
+ <property name="bottomMargin">
41
+ <number>2</number>
42
+ </property>
43
+ <item>
44
+ <widget class="BECDockArea" name="dock_area"/>
45
+ </item>
46
+ </layout>
47
+ </widget>
48
+ <widget class="QWidget" name="vscode_tab">
49
+ <attribute name="icon">
50
+ <iconset theme="QIcon::ThemeIcon::Computer"/>
51
+ </attribute>
52
+ <attribute name="title">
53
+ <string>Visual Studio Code</string>
54
+ </attribute>
55
+ <layout class="QVBoxLayout" name="verticalLayout_2">
56
+ <property name="leftMargin">
57
+ <number>2</number>
58
+ </property>
59
+ <property name="topMargin">
60
+ <number>1</number>
61
+ </property>
62
+ <property name="rightMargin">
63
+ <number>2</number>
64
+ </property>
65
+ <property name="bottomMargin">
66
+ <number>2</number>
67
+ </property>
68
+ <item>
69
+ <widget class="VSCodeEditor" name="vscode"/>
70
+ </item>
71
+ </layout>
72
+ </widget>
73
+ </widget>
74
+ </item>
75
+ </layout>
76
+ </widget>
77
+ <widget class="QMenuBar" name="menubar">
78
+ <property name="geometry">
79
+ <rect>
80
+ <x>0</x>
81
+ <y>0</y>
82
+ <width>1718</width>
83
+ <height>31</height>
84
+ </rect>
85
+ </property>
86
+ <widget class="QMenu" name="menuHelp">
87
+ <property name="title">
88
+ <string>Help</string>
89
+ </property>
90
+ <addaction name="action_BEC_docs"/>
91
+ <addaction name="action_BEC_widgets_docs"/>
92
+ <addaction name="action_bug_report"/>
93
+ </widget>
94
+ <widget class="QMenu" name="menuTheme">
95
+ <property name="title">
96
+ <string>Theme</string>
97
+ </property>
98
+ <addaction name="action_light"/>
99
+ <addaction name="action_dark"/>
100
+ </widget>
101
+ <addaction name="menuTheme"/>
102
+ <addaction name="menuHelp"/>
103
+ </widget>
104
+ <widget class="QStatusBar" name="statusbar"/>
105
+ <widget class="QDockWidget" name="dock_scan_control">
106
+ <property name="windowTitle">
107
+ <string>Scan Control</string>
108
+ </property>
109
+ <attribute name="dockWidgetArea">
110
+ <number>2</number>
111
+ </attribute>
112
+ <widget class="QWidget" name="dockWidgetContents_2">
113
+ <layout class="QVBoxLayout" name="verticalLayout_4">
114
+ <item>
115
+ <widget class="ScanControl" name="scan_control"/>
116
+ </item>
117
+ </layout>
118
+ </widget>
119
+ </widget>
120
+ <widget class="QDockWidget" name="dock_status_2">
121
+ <property name="windowTitle">
122
+ <string>BEC Service Status</string>
123
+ </property>
124
+ <attribute name="dockWidgetArea">
125
+ <number>2</number>
126
+ </attribute>
127
+ <widget class="QWidget" name="dockWidgetContents_3">
128
+ <layout class="QVBoxLayout" name="verticalLayout_5">
129
+ <property name="leftMargin">
130
+ <number>0</number>
131
+ </property>
132
+ <property name="topMargin">
133
+ <number>0</number>
134
+ </property>
135
+ <property name="rightMargin">
136
+ <number>0</number>
137
+ </property>
138
+ <property name="bottomMargin">
139
+ <number>0</number>
140
+ </property>
141
+ <item>
142
+ <widget class="BECStatusBox" name="bec_status_box_2"/>
143
+ </item>
144
+ </layout>
145
+ </widget>
146
+ </widget>
147
+ <widget class="QDockWidget" name="dock_queue">
148
+ <property name="windowTitle">
149
+ <string>Scan Queue</string>
150
+ </property>
151
+ <attribute name="dockWidgetArea">
152
+ <number>2</number>
153
+ </attribute>
154
+ <widget class="QWidget" name="dockWidgetContents_4">
155
+ <layout class="QVBoxLayout" name="verticalLayout_6">
156
+ <property name="leftMargin">
157
+ <number>0</number>
158
+ </property>
159
+ <property name="topMargin">
160
+ <number>0</number>
161
+ </property>
162
+ <property name="rightMargin">
163
+ <number>0</number>
164
+ </property>
165
+ <property name="bottomMargin">
166
+ <number>0</number>
167
+ </property>
168
+ <item>
169
+ <widget class="BECQueue" name="bec_queue">
170
+ <row/>
171
+ <column/>
172
+ <column/>
173
+ <column/>
174
+ <item row="0" column="0"/>
175
+ <item row="0" column="1"/>
176
+ <item row="0" column="2"/>
177
+ </widget>
178
+ </item>
179
+ </layout>
180
+ </widget>
181
+ </widget>
182
+ <action name="action_BEC_docs">
183
+ <property name="icon">
184
+ <iconset theme="QIcon::ThemeIcon::DialogQuestion"/>
185
+ </property>
186
+ <property name="text">
187
+ <string>BEC Docs</string>
188
+ </property>
189
+ </action>
190
+ <action name="action_BEC_widgets_docs">
191
+ <property name="icon">
192
+ <iconset theme="QIcon::ThemeIcon::DialogQuestion"/>
193
+ </property>
194
+ <property name="text">
195
+ <string>BEC Widgets Docs</string>
196
+ </property>
197
+ </action>
198
+ <action name="action_bug_report">
199
+ <property name="icon">
200
+ <iconset theme="QIcon::ThemeIcon::DialogError"/>
201
+ </property>
202
+ <property name="text">
203
+ <string>Bug Report</string>
204
+ </property>
205
+ </action>
206
+ <action name="action_light">
207
+ <property name="checkable">
208
+ <bool>true</bool>
209
+ </property>
210
+ <property name="text">
211
+ <string>Light</string>
212
+ </property>
213
+ </action>
214
+ <action name="action_dark">
215
+ <property name="checkable">
216
+ <bool>true</bool>
217
+ </property>
218
+ <property name="text">
219
+ <string>Dark</string>
220
+ </property>
221
+ </action>
222
+ </widget>
223
+ <customwidgets>
224
+ <customwidget>
225
+ <class>WebsiteWidget</class>
226
+ <extends>QWebEngineView</extends>
227
+ <header>website_widget</header>
228
+ </customwidget>
229
+ <customwidget>
230
+ <class>BECQueue</class>
231
+ <extends>QTableWidget</extends>
232
+ <header>bec_queue</header>
233
+ </customwidget>
234
+ <customwidget>
235
+ <class>ScanControl</class>
236
+ <extends>QWidget</extends>
237
+ <header>scan_control</header>
238
+ </customwidget>
239
+ <customwidget>
240
+ <class>VSCodeEditor</class>
241
+ <extends>WebsiteWidget</extends>
242
+ <header>vs_code_editor</header>
243
+ </customwidget>
244
+ <customwidget>
245
+ <class>BECStatusBox</class>
246
+ <extends>QWidget</extends>
247
+ <header>bec_status_box</header>
248
+ </customwidget>
249
+ <customwidget>
250
+ <class>BECDockArea</class>
251
+ <extends>QWidget</extends>
252
+ <header>dock_area</header>
253
+ </customwidget>
254
+ <customwidget>
255
+ <class>QWebEngineView</class>
256
+ <extends></extends>
257
+ <header location="global">QtWebEngineWidgets/QWebEngineView</header>
258
+ </customwidget>
259
+ </customwidgets>
260
+ <resources/>
261
+ <connections/>
262
+ </ui>
@@ -0,0 +1,15 @@
1
+ import webbrowser
2
+
3
+
4
+ class BECWebLinksMixin:
5
+ @staticmethod
6
+ def open_bec_docs():
7
+ webbrowser.open("https://beamline-experiment-control.readthedocs.io/en/latest/")
8
+
9
+ @staticmethod
10
+ def open_bec_widgets_docs():
11
+ webbrowser.open("https://bec.readthedocs.io/projects/bec-widgets/en/latest/")
12
+
13
+ @staticmethod
14
+ def open_bec_bug_report():
15
+ webbrowser.open("https://gitlab.psi.ch/groups/bec/-/issues/")