bec-widgets 0.96.2__py3-none-any.whl → 0.97.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 (39) hide show
  1. CHANGELOG.md +20 -20
  2. PKG-INFO +1 -1
  3. bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +2 -5
  4. bec_widgets/qt_utils/toolbar.py +13 -9
  5. bec_widgets/utils/bec_designer.py +15 -0
  6. bec_widgets/utils/bec_dispatcher.py +21 -1
  7. bec_widgets/utils/container_utils.py +2 -0
  8. bec_widgets/widgets/bec_queue/bec_queue.py +2 -0
  9. bec_widgets/widgets/bec_queue/bec_queue_plugin.py +2 -5
  10. bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +2 -5
  11. bec_widgets/widgets/color_button/color_button_plugin.py +2 -5
  12. bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +2 -5
  13. bec_widgets/widgets/device_browser/device_browser_plugin.py +2 -5
  14. bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +2 -5
  15. bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +2 -5
  16. bec_widgets/widgets/dock/dock_area_plugin.py +2 -5
  17. bec_widgets/widgets/image/bec_image_widget_plugin.py +2 -5
  18. bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +2 -5
  19. bec_widgets/widgets/position_indicator/position_indicator_plugin.py +2 -5
  20. bec_widgets/widgets/positioner_box/positioner_box_plugin.py +2 -5
  21. bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +2 -5
  22. bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +2 -5
  23. bec_widgets/widgets/scan_control/scan_control_plugin.py +2 -5
  24. bec_widgets/widgets/spinner/spinner_widget_plugin.py +2 -5
  25. bec_widgets/widgets/stop_button/stop_button_plugin.py +2 -5
  26. bec_widgets/widgets/text_box/text_box_plugin.py +2 -5
  27. bec_widgets/widgets/toggle/toggle_switch_plugin.py +2 -5
  28. bec_widgets/widgets/vscode/vs_code_editor_plugin.py +2 -5
  29. bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +2 -5
  30. bec_widgets/widgets/website/website_widget_plugin.py +2 -5
  31. {bec_widgets-0.96.2.dist-info → bec_widgets-0.97.0.dist-info}/METADATA +1 -1
  32. {bec_widgets-0.96.2.dist-info → bec_widgets-0.97.0.dist-info}/RECORD +39 -38
  33. docs/conf.py +1 -1
  34. docs/developer/widget_development/bec_dispatcher.md +143 -0
  35. docs/developer/widget_development/widget_development.md +2 -0
  36. pyproject.toml +1 -1
  37. {bec_widgets-0.96.2.dist-info → bec_widgets-0.97.0.dist-info}/WHEEL +0 -0
  38. {bec_widgets-0.96.2.dist-info → bec_widgets-0.97.0.dist-info}/entry_points.txt +0 -0
  39. {bec_widgets-0.96.2.dist-info → bec_widgets-0.97.0.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.97.0 (2024-08-23)
4
+
5
+ ### Feature
6
+
7
+ * feat(designer): added designer icon factory ([`82a55dd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/82a55ddf3eafb589cb63408db1c0e7e5c9d629da))
8
+
9
+ ### Fix
10
+
11
+ * fix(toolbar icon): fixed material icon toolbar for theme changes ([`3ecbd60`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3ecbd60627994417c9175364e5909710dbcdceb2))
12
+
13
+ ## v0.96.3 (2024-08-23)
14
+
15
+ ### Documentation
16
+
17
+ * docs(dispatcher): docs added ([`dd7c71b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/dd7c71bb1e0b7ef5398b1e1a05fc1147c772420a))
18
+
19
+ ### Fix
20
+
21
+ * fix: minor fixes for type annotations ([`8c2e7c8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8c2e7c82592ace50e4e1f47e392a0ddc988f57ae))
22
+
3
23
  ## v0.96.2 (2024-08-22)
4
24
 
5
25
  ### Fix
@@ -137,23 +157,3 @@ Terminating client connections has to be done at the application level ([`198c1d
137
157
  * fix(image): image is single image mode do not raise popup error when connected twice with the same monitor ([`98b79aa`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/98b79aac7b47b73137f4d582f7f1d552b1d95366))
138
158
 
139
159
  ## v0.94.1 (2024-08-12)
140
-
141
- ### Fix
142
-
143
- * fix: issue #292, wrong key was used to clean _slots internal dictionary ([`93d3977`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/93d397759c756397604ebff5e24f3a580be8620d))
144
-
145
- ## v0.94.0 (2024-08-08)
146
-
147
- ### Feature
148
-
149
- * feat: add PositionerControlLine ([`c80a7cd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/c80a7cd1083baa9543a2cee2e3c3a51dfd209b19))
150
-
151
- ### Refactor
152
-
153
- * refactor: adjust dimensions ([`0273bf4`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0273bf485694609325b5b556a3c69fb53c18446e))
154
-
155
- ## v0.93.5 (2024-08-08)
156
-
157
- ### Fix
158
-
159
- * fix(positioner_box): icons fixed ([`281633d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/281633deff15b6879dac3a4f0770fa6949aaecdc))
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.96.2
3
+ Version: 0.97.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
@@ -2,13 +2,12 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
10
8
  from bec_widgets.examples.plugin_example_pyside.tictactoe import TicTacToe
11
9
  from bec_widgets.examples.plugin_example_pyside.tictactoetaskmenu import TicTacToeTaskMenuFactory
10
+ from bec_widgets.utils.bec_designer import designer_material_icon
12
11
 
13
12
  DOM_XML = """
14
13
  <ui language='c++'>
@@ -47,9 +46,7 @@ class TicTacToePlugin(QDesignerCustomWidgetInterface): # pragma: no cover
47
46
  return "Games"
48
47
 
49
48
  def icon(self):
50
- palette = QGuiApplication.palette()
51
- pixmap = material_icon("sports_esports", color=palette.text().color(), filled=True)
52
- return QIcon(pixmap)
49
+ return designer_material_icon("sports_esports")
53
50
 
54
51
  def includeFile(self):
55
52
  return "tictactoe"
@@ -3,9 +3,9 @@ import os
3
3
  from abc import ABC, abstractmethod
4
4
  from collections import defaultdict
5
5
 
6
- from bec_qthemes import material_icon
6
+ from bec_qthemes._icon.material_icons import material_icon
7
7
  from qtpy.QtCore import QSize
8
- from qtpy.QtGui import QAction, QGuiApplication, QIcon
8
+ from qtpy.QtGui import QAction, QIcon
9
9
  from qtpy.QtWidgets import QHBoxLayout, QLabel, QMenu, QToolBar, QToolButton, QWidget
10
10
 
11
11
  import bec_widgets
@@ -73,7 +73,7 @@ class IconAction(ToolBarAction):
73
73
 
74
74
  class MaterialIconAction:
75
75
  """
76
- Abstract base class for toolbar actions.
76
+ Action with a Material icon for the toolbar.
77
77
 
78
78
  Args:
79
79
  icon_path (str, optional): The name of the icon file from `assets/toolbar_icons`. Defaults to None.
@@ -88,12 +88,16 @@ class MaterialIconAction:
88
88
  self.action = None
89
89
 
90
90
  def add_to_toolbar(self, toolbar: QToolBar, target: QWidget):
91
- palette = QGuiApplication.palette()
92
- color = "#FFFFFF" # FIXME: This should be a theme color but the toolbar doesn't respect the theme atm
93
- # one fixed, change it to palette.toolTipBase().color()
94
-
95
- icon = material_icon(self.icon_name, size=(20, 20), color=color)
96
- self.action = QAction(QIcon(icon), self.tooltip, target)
91
+ color = {
92
+ "dark": "#FFFFFF",
93
+ "light": "#000000",
94
+ } # FIXME: This should be a theme color but the toolbar doesn't respect the theme atm
95
+ # once fixed, change it to
96
+ # palette = QGuiApplication.palette()
97
+ # palette.toolTipBase().color()
98
+
99
+ icon = material_icon(self.icon_name, size=(20, 20), color=color, convert_to_pixmap=False)
100
+ self.action = QAction(icon, self.tooltip, target)
97
101
  self.action.setCheckable(self.checkable)
98
102
  toolbar.addAction(self.action)
99
103
 
@@ -6,7 +6,9 @@ import sys
6
6
  import sysconfig
7
7
  from pathlib import Path
8
8
 
9
+ from bec_qthemes import material_icon
9
10
  from qtpy import PYSIDE6
11
+ from qtpy.QtGui import QIcon
10
12
 
11
13
  if PYSIDE6:
12
14
  from PySide6.scripts.pyside_tool import (
@@ -21,6 +23,19 @@ if PYSIDE6:
21
23
  import bec_widgets
22
24
 
23
25
 
26
+ def designer_material_icon(icon_name: str) -> QIcon:
27
+ """
28
+ Create a QIcon for the BECDesigner with the given material icon name.
29
+
30
+ Args:
31
+ icon_name (str): The name of the material icon.
32
+
33
+ Returns:
34
+ QIcon: The QIcon for the material icon.
35
+ """
36
+ return QIcon(material_icon(icon_name, filled=True, convert_to_pixmap=True))
37
+
38
+
24
39
  def list_editable_packages() -> set[str]:
25
40
  """
26
41
  List all editable packages in the environment.
@@ -125,7 +125,7 @@ class BECDispatcher:
125
125
  topics: Union[EndpointInfo, str, list[Union[EndpointInfo, str]]],
126
126
  **kwargs,
127
127
  ) -> None:
128
- """Connect widget's pyqt slot, so that it is called on new pub/sub topic message.
128
+ """Connect widget's qt slot, so that it is called on new pub/sub topic message.
129
129
 
130
130
  Args:
131
131
  slot (Callable): A slot method/function that accepts two inputs: content and metadata of
@@ -138,6 +138,13 @@ class BECDispatcher:
138
138
  self._slots[slot].update(set(topics_str))
139
139
 
140
140
  def disconnect_slot(self, slot: Callable, topics: Union[str, list]):
141
+ """
142
+ Disconnect a slot from a topic.
143
+
144
+ Args:
145
+ slot(Callable): The slot to disconnect
146
+ topics(Union[str, list]): The topic(s) to disconnect from
147
+ """
141
148
  # find the right slot to disconnect from ;
142
149
  # slot callbacks are wrapped in QtThreadSafeCallback objects,
143
150
  # but the slot we receive here is the original callable
@@ -153,6 +160,12 @@ class BECDispatcher:
153
160
  del self._slots[connected_slot]
154
161
 
155
162
  def disconnect_topics(self, topics: Union[str, list]):
163
+ """
164
+ Disconnect all slots from a topic.
165
+
166
+ Args:
167
+ topics(Union[str, list]): The topic(s) to disconnect from
168
+ """
156
169
  self.client.connector.unregister(topics)
157
170
  topics_str, _ = self.client.connector._convert_endpointinfo(topics)
158
171
  for slot in list(self._slots.keys()):
@@ -162,4 +175,11 @@ class BECDispatcher:
162
175
  del self._slots[slot]
163
176
 
164
177
  def disconnect_all(self, *args, **kwargs):
178
+ """
179
+ Disconnect all slots from all topics.
180
+
181
+ Args:
182
+ *args: Arbitrary positional arguments
183
+ **kwargs: Arbitrary keyword arguments
184
+ """
165
185
  self.disconnect_topics(self.client.connector._topics_cb)
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import itertools
2
4
  from typing import Type
3
5
 
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from bec_lib.endpoints import MessageEndpoints
2
4
  from qtpy.QtCore import Qt, Slot
3
5
  from qtpy.QtWidgets import QHBoxLayout, QHeaderView, QTableWidget, QTableWidgetItem, QWidget
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.bec_queue.bec_queue import BECQueue
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class BECQueuePlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Services"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("edit_note", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("edit_note")
41
38
 
42
39
  def includeFile(self):
43
40
  return "bec_queue"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.bec_status_box.bec_status_box import BECStatusBox
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class BECStatusBoxPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Services"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("dns", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("dns")
41
38
 
42
39
  def includeFile(self):
43
40
  return "bec_status_box"
@@ -1,10 +1,9 @@
1
1
  import os
2
2
 
3
- from bec_qthemes import material_icon
4
3
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
5
- from qtpy.QtGui import QGuiApplication, QIcon
6
4
 
7
5
  import bec_widgets
6
+ from bec_widgets.utils.bec_designer import designer_material_icon
8
7
  from bec_widgets.widgets.color_button.color_button import ColorButton
9
8
 
10
9
  DOM_XML = """
@@ -32,9 +31,7 @@ class ColorButtonPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
32
31
  return "BEC Buttons"
33
32
 
34
33
  def icon(self):
35
- palette = QGuiApplication.palette()
36
- pixmap = material_icon("colors", color=palette.text().color(), filled=True)
37
- return QIcon(pixmap)
34
+ return designer_material_icon("colors")
38
35
 
39
36
  def includeFile(self):
40
37
  return "color_button"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.colormap_selector.colormap_selector import ColormapSelector
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class ColormapSelectorPlugin(QDesignerCustomWidgetInterface): # pragma: no cove
35
34
  return "BEC Buttons"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("palette", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("palette")
41
38
 
42
39
  def includeFile(self):
43
40
  return "colormap_selector"
@@ -1,10 +1,9 @@
1
1
  # Copyright (C) 2022 The Qt Company Ltd.
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
 
4
- from bec_qthemes import material_icon
5
4
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
6
- from qtpy.QtGui import QGuiApplication, QIcon
7
5
 
6
+ from bec_widgets.utils.bec_designer import designer_material_icon
8
7
  from bec_widgets.widgets.device_browser.device_browser import DeviceBrowser
9
8
 
10
9
  DOM_XML = """
@@ -31,9 +30,7 @@ class DeviceBrowserPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
31
30
  return "BEC Services"
32
31
 
33
32
  def icon(self):
34
- palette = QGuiApplication.palette()
35
- pixmap = material_icon("lists", color=palette.text().color(), filled=True)
36
- return QIcon(pixmap)
33
+ return designer_material_icon("lists")
37
34
 
38
35
  def includeFile(self):
39
36
  return "device_browser"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.device_combobox.device_combobox import DeviceComboBox
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class DeviceComboBoxPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "Device Control"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("list_alt", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("list_alt")
41
38
 
42
39
  def includeFile(self):
43
40
  return "device_combobox"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.device_line_edit.device_line_edit import DeviceLineEdit
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class DeviceLineEditPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "Device Control"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("edit_note", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("edit_note")
41
38
 
42
39
  def includeFile(self):
43
40
  return "device_line_edit"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.dock import BECDockArea
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class BECDockAreaPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Plots"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("widgets", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("widgets")
41
38
 
42
39
  def includeFile(self):
43
40
  return "dock_area"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.image.image_widget import BECImageWidget
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class BECImageWidgetPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Plots"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("image", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("image")
41
38
 
42
39
  def includeFile(self):
43
40
  return "bec_image_widget"
@@ -1,10 +1,9 @@
1
1
  import os
2
2
 
3
- from bec_qthemes import material_icon
4
3
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
5
- from qtpy.QtGui import QGuiApplication, QIcon
6
4
 
7
5
  import bec_widgets
6
+ from bec_widgets.utils.bec_designer import designer_material_icon
8
7
  from bec_widgets.widgets.motor_map.motor_map_widget import BECMotorMapWidget
9
8
 
10
9
  DOM_XML = """
@@ -33,9 +32,7 @@ class BECMotorMapWidgetPlugin(QDesignerCustomWidgetInterface): # pragma: no cov
33
32
  return "BEC Plots"
34
33
 
35
34
  def icon(self):
36
- palette = QGuiApplication.palette()
37
- pixmap = material_icon("my_location", color=palette.text().color(), filled=True)
38
- return QIcon(pixmap)
35
+ return designer_material_icon("my_location")
39
36
 
40
37
  def includeFile(self):
41
38
  return "bec_motor_map_widget"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.position_indicator.position_indicator import PositionIndicator
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class PositionIndicatorPlugin(QDesignerCustomWidgetInterface): # pragma: no cov
35
34
  return "BEC Utils"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("horizontal_distribute", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("horizontal_distribute")
41
38
 
42
39
  def includeFile(self):
43
40
  return "position_indicator"
@@ -3,10 +3,9 @@
3
3
 
4
4
  import os
5
5
 
6
- from bec_qthemes import material_icon
7
6
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
8
- from qtpy.QtGui import QGuiApplication, QIcon
9
7
 
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox
11
10
 
12
11
  DOM_XML = """
@@ -34,9 +33,7 @@ class PositionerBoxPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
34
33
  return "Device Control"
35
34
 
36
35
  def icon(self):
37
- palette = QGuiApplication.palette()
38
- pixmap = material_icon("switch_right", color=palette.text().color(), filled=True)
39
- return QIcon(pixmap)
36
+ return designer_material_icon("switch_right")
40
37
 
41
38
  def includeFile(self):
42
39
  return "positioner_box"
@@ -3,10 +3,9 @@
3
3
 
4
4
  import os
5
5
 
6
- from bec_qthemes import material_icon
7
6
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
8
- from qtpy.QtGui import QGuiApplication, QIcon
9
7
 
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.positioner_box.positioner_control_line import PositionerControlLine
11
10
 
12
11
  DOM_XML = """
@@ -34,9 +33,7 @@ class PositionerControlLinePlugin(QDesignerCustomWidgetInterface): # pragma: no
34
33
  return "Device Control"
35
34
 
36
35
  def icon(self):
37
- palette = QGuiApplication.palette()
38
- pixmap = material_icon("switch_left", color=palette.text().color(), filled=True)
39
- return QIcon(pixmap)
36
+ return designer_material_icon("switch_left")
40
37
 
41
38
  def includeFile(self):
42
39
  return "positioner_control_line"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.ring_progress_bar.ring_progress_bar import RingProgressBar
11
10
 
12
11
  DOM_XML = """
@@ -34,9 +33,7 @@ class RingProgressBarPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
34
33
  return "BEC Utils"
35
34
 
36
35
  def icon(self):
37
- palette = QGuiApplication.palette()
38
- pixmap = material_icon("track_changes", color=palette.text().color(), filled=True)
39
- return QIcon(pixmap)
36
+ return designer_material_icon("track_changes")
40
37
 
41
38
  def includeFile(self):
42
39
  return "ring_progress_bar"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.scan_control.scan_control import ScanControl
11
10
 
12
11
  DOM_XML = """
@@ -34,9 +33,7 @@ class ScanControlPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
34
33
  return "Device Control"
35
34
 
36
35
  def icon(self):
37
- palette = QGuiApplication.palette()
38
- pixmap = material_icon("stacked_line_chart", color=palette.text().color(), filled=True)
39
- return QIcon(pixmap)
36
+ return designer_material_icon("stacked_line_chart")
40
37
 
41
38
  def includeFile(self):
42
39
  return "scan_control"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.spinner.spinner import SpinnerWidget
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class SpinnerWidgetPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Utils"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("progress_activity", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("progress_activity")
41
38
 
42
39
  def includeFile(self):
43
40
  return "spinner_widget"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.stop_button.stop_button import StopButton
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class StopButtonPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Utils"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("dangerous", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("dangerous")
41
38
 
42
39
  def includeFile(self):
43
40
  return "stop_button"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.text_box.text_box import TextBox
11
10
 
12
11
  DOM_XML = """
@@ -34,9 +33,7 @@ class TextBoxPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
34
33
  return "BEC Utils"
35
34
 
36
35
  def icon(self):
37
- palette = QGuiApplication.palette()
38
- pixmap = material_icon("chat", color=palette.text().color(), filled=True)
39
- return QIcon(pixmap)
36
+ return designer_material_icon("chat")
40
37
 
41
38
  def includeFile(self):
42
39
  return "text_box"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.toggle.toggle import ToggleSwitch
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class ToggleSwitchPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Utils"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("toggle_on", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("toggle_on")
41
38
 
42
39
  def includeFile(self):
43
40
  return "toggle_switch"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.vscode.vscode import VSCodeEditor
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class VSCodeEditorPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
35
34
  return "BEC Developer"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("developer_mode_tv", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("developer_mode_tv")
41
38
 
42
39
  def includeFile(self):
43
40
  return "vs_code_editor"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.waveform.waveform_widget import BECWaveformWidget
11
10
 
12
11
  DOM_XML = """
@@ -35,9 +34,7 @@ class BECWaveformWidgetPlugin(QDesignerCustomWidgetInterface): # pragma: no cov
35
34
  return "BEC Plots"
36
35
 
37
36
  def icon(self):
38
- palette = QGuiApplication.palette()
39
- pixmap = material_icon("show_chart", color=palette.text().color(), filled=True)
40
- return QIcon(pixmap)
37
+ return designer_material_icon("show_chart")
41
38
 
42
39
  def includeFile(self):
43
40
  return "bec_waveform_widget"
@@ -2,11 +2,10 @@
2
2
  # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
3
  import os
4
4
 
5
- from bec_qthemes import material_icon
6
5
  from qtpy.QtDesigner import QDesignerCustomWidgetInterface
7
- from qtpy.QtGui import QGuiApplication, QIcon
8
6
 
9
7
  import bec_widgets
8
+ from bec_widgets.utils.bec_designer import designer_material_icon
10
9
  from bec_widgets.widgets.website.website import WebsiteWidget
11
10
 
12
11
  DOM_XML = """
@@ -34,9 +33,7 @@ class WebsiteWidgetPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
34
33
  return "BEC Utils"
35
34
 
36
35
  def icon(self):
37
- palette = QGuiApplication.palette()
38
- pixmap = material_icon("travel_explore", color=palette.text().color(), filled=True)
39
- return QIcon(pixmap)
36
+ return designer_material_icon("travel_explore")
40
37
 
41
38
  def includeFile(self):
42
39
  return "website_widget"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.96.2
3
+ Version: 0.97.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
@@ -2,11 +2,11 @@
2
2
  .gitlab-ci.yml,sha256=9dZ_EvimZrDzG8MtII0qtBYMM_Nc6xqh2iFRds0rlvE,8370
3
3
  .pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=JevFb8k7ihFuKfooyCqcyptPCHkn6vBmWWLI6YOyNHg,6717
5
+ CHANGELOG.md,sha256=F5JNzWDV1tskuAnkR8S2x6KB1FPs-J2JUqZeBs7e00g,6733
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=xRvEZ02kp6ROhkDYvw-jCEJA0QqyjeTRUHYJnbgxgXY,1325
7
+ PKG-INFO,sha256=UkwD-_52GWkQgNpQnMa-cDG4Q_h3sMM1jqGYrM4Kjy8,1325
8
8
  README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
9
- pyproject.toml,sha256=S3RcibQIzFA7_Ydzi3rai8TL0k5643CILs3-IMEJ_8s,2416
9
+ pyproject.toml,sha256=5LVT8PiePyXQ2W_r2fJjtBUzN7BRL233-0tjvBG_b_A,2416
10
10
  .git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
11
11
  .gitlab/issue_templates/bug_report_template.md,sha256=gAuyEwl7XlnebBrkiJ9AqffSNOywmr8vygUFWKTuQeI,386
12
12
  .gitlab/issue_templates/documentation_update_template.md,sha256=FHLdb3TS_D9aL4CYZCjyXSulbaW5mrN2CmwTaeLPbNw,860
@@ -79,21 +79,21 @@ bec_widgets/examples/plugin_example_pyside/main.py,sha256=zDP5wO7wb3BVsQ15HOCRT1
79
79
  bec_widgets/examples/plugin_example_pyside/registertictactoe.py,sha256=cVhBnP0qx5j9Jft-VeKvlTFE-bX58hbP45CX0f4r5pM,535
80
80
  bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject,sha256=O_PSMFJlXxQuf55gIOfkpfZIZGpX8W1SfUVZ-mvtI_E,119
81
81
  bec_widgets/examples/plugin_example_pyside/tictactoe.py,sha256=byR7mTiIXFaA9igPTH04pzm0yfikNB5KgISwvNiRPd8,4940
82
- bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py,sha256=daEn01EIpYrv0tfR7wgOHaZNfhx_ExNQf9ToCMbvVdQ,2105
82
+ bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py,sha256=MFMwONn4EZ3V8DboEG4I3BXpURE9JDbKB7XTzzfZl5w,1978
83
83
  bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py,sha256=V6OVnBTS-60zjQ2FAs88Ldjm1MfoMROfiQZZu6Guav8,2379
84
84
  bec_widgets/qt_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  bec_widgets/qt_utils/error_popups.py,sha256=y9gKKWaafp468ioHr96nBhf02ZpEgjDc-BAVOTWh-e8,7680
86
86
  bec_widgets/qt_utils/redis_message_waiter.py,sha256=fvL_QgC0cTDv_FPJdRyp5AKjf401EJU4z3r38p47ydY,1745
87
87
  bec_widgets/qt_utils/settings_dialog.py,sha256=NhtzTer_xzlB2lLLrGklkI1QYLJEWQpJoZbCz4o5daI,3645
88
- bec_widgets/qt_utils/toolbar.py,sha256=A5vXNlF7kxvdcPCmRvsy9P3f6M5NomlT2PgtUmnt94U,7669
88
+ bec_widgets/qt_utils/toolbar.py,sha256=3gmwASDgZiE6SFI9dK3VE-dT4LMqwb68laowF7_rv3o,7773
89
89
  bec_widgets/utils/__init__.py,sha256=1930ji1Jj6dVuY81Wd2kYBhHYNV-2R0bN_L4o9zBj1U,533
90
90
  bec_widgets/utils/bec_connector.py,sha256=SivHKXVyNVqeu3kCXYEPpbleTVw8g1cW0FKq1QrQgco,9987
91
- bec_widgets/utils/bec_designer.py,sha256=ak3G8FdojUPjVBBwdPXw7tN5P2Uxr-SSoQt394jXeAA,4308
92
- bec_widgets/utils/bec_dispatcher.py,sha256=F66edY3Ib_ZjTT24qoAbjwUOdOKt6CiWUUqN1I1xxZs,5865
91
+ bec_widgets/utils/bec_designer.py,sha256=Z3MeMju-KmTz8POtm23VQfp4rvtD2sF6eIOKQkl2F7w,4729
92
+ bec_widgets/utils/bec_dispatcher.py,sha256=NkObWO_gRO9Uobz-fy0gVTZqQsbFRaKj6fbjYZoErFI,6400
93
93
  bec_widgets/utils/bec_table.py,sha256=nA2b8ukSeUfquFMAxGrUVOqdrzMoDYD6O_4EYbOG2zk,717
94
94
  bec_widgets/utils/bec_widget.py,sha256=Bo2v1aP7rgSAQajW8GBJbI3iovTn_hGCsmeFMo7bT10,707
95
95
  bec_widgets/utils/colors.py,sha256=hNIi99EpMv3t3hTJIL2jBe5nzh5f2fuCyEKXEPWSQSc,10501
96
- bec_widgets/utils/container_utils.py,sha256=m3VUyAYmSWkEwApP9tBvKxPYVtc2kHw4toxIpMryJy4,1495
96
+ bec_widgets/utils/container_utils.py,sha256=0wr3ZfuMiAFKCrQHVjxjw-Vuk8wsHdridqcjy2eY840,1531
97
97
  bec_widgets/utils/crosshair.py,sha256=ywj4Pr2Xx8tFsD5qrHIocanKlNqDd51ElbEfxenuYM0,11363
98
98
  bec_widgets/utils/entry_validator.py,sha256=3skJIsUwTYicT76AMHm_M78RiWtUgyD2zb-Rxo2HdHQ,1313
99
99
  bec_widgets/utils/generate_designer_plugin.py,sha256=eidqauS8YLgoxkPntPL0oSG_lYqI2D7fSyOZvOtCU_U,5891
@@ -112,50 +112,50 @@ bec_widgets/widgets/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKV
112
112
  bec_widgets/widgets/base_classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
113
  bec_widgets/widgets/base_classes/device_input_base.py,sha256=thCOHOa9Z0b3-vlNFWK6PT_DdPTANnfj0_DLES_K-eE,3902
114
114
  bec_widgets/widgets/bec_queue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- bec_widgets/widgets/bec_queue/bec_queue.py,sha256=bU3HvghPuh7smTuKMp5WlJ0g3rW0UHIV05WekNHU8Q8,3846
115
+ bec_widgets/widgets/bec_queue/bec_queue.py,sha256=IDZ2Jy0SeuJJ23lyVg8TnkUPJ8vfuGJUg5a9lt5jwPQ,3882
116
116
  bec_widgets/widgets/bec_queue/bec_queue.pyproject,sha256=VhoNmAv1DQUl9dg7dELyf5i4pZ5k65N3GnqOYiSwbQo,27
117
- bec_widgets/widgets/bec_queue/bec_queue_plugin.py,sha256=wuUeTXorzsrVi9ifCSjVkEMX9qQ_q6PydHBkTkgeoEA,1461
117
+ bec_widgets/widgets/bec_queue/bec_queue_plugin.py,sha256=oYlAuWqgvjWHmzQuUvZaR8pHX_c_rM-Ib24z1V3Wg38,1334
118
118
  bec_widgets/widgets/bec_queue/register_bec_queue.py,sha256=XnwtUSa1asK1b80knKWodcyX9qJy4DnKsQL_FoDfZy4,463
119
119
  bec_widgets/widgets/bec_status_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
120
  bec_widgets/widgets/bec_status_box/bec_status_box.py,sha256=hlo-U9rf1jzSCXpCjx3tthNYT8KImxKSRri5gsCULvw,13108
121
121
  bec_widgets/widgets/bec_status_box/bec_status_box.pyproject,sha256=JWtx3Csfn2h7ODtk10HtyBNLf6tFIqyU6g04rMWOO1U,32
122
- bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py,sha256=hX6UjJcetD-XMQLMLScwItEezqpyGyK6CjgEEWiTMaQ,1522
122
+ bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py,sha256=BD58_U68ySD3cHg9mdMK2XsU4A0wTdO5ES7dAJeZDsY,1395
123
123
  bec_widgets/widgets/bec_status_box/register_bec_status_box.py,sha256=EiQITnkNw7IU7hE776wAeXro97eZd9XlsB9essgCebE,481
124
124
  bec_widgets/widgets/bec_status_box/status_item.py,sha256=3aNaa-e64PmkBoAWfItYAmhB1EFhWRiFLzXWWz0dS_8,5317
125
125
  bec_widgets/widgets/color_button/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
126
  bec_widgets/widgets/color_button/color_button.py,sha256=Jx4UAn7ZomLei0OCg7RmTnq395scXW4jmqslQRbEVMI,1203
127
127
  bec_widgets/widgets/color_button/color_button.pyproject,sha256=LUYF4VkDOB4ttVe7YfvLh64K-XZg0-xaVT06BqCT3UA,30
128
- bec_widgets/widgets/color_button/color_button_plugin.py,sha256=8ilyeKIbgUHKCUE4qf2IyMY65a6dDlL3MxHzCgz17I4,1381
128
+ bec_widgets/widgets/color_button/color_button_plugin.py,sha256=Owaqrq4XcMXYB7vDJSSxiQUZ6nKof10HviEcEFcxFCc,1254
129
129
  bec_widgets/widgets/color_button/register_color_button.py,sha256=ZAx3t7G2VI2S-1qcEof31Xi9O0X8deLeZNgS651L1JI,475
130
130
  bec_widgets/widgets/colormap_selector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
131
  bec_widgets/widgets/colormap_selector/colormap_selector.py,sha256=4BqV11XMZVmcwzHiKgwUVFtg_bg4Nz7CQznkL4hHRYU,3794
132
132
  bec_widgets/widgets/colormap_selector/colormap_selector.pyproject,sha256=lHl9qmlMCB6BKB2orqctKwLcKK3Swc0THsyr-5O_vXM,35
133
- bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py,sha256=cM-5o6GgtH69h2dfV6phJDDz30UAuUQbuxRalQRT_eQ,1498
133
+ bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py,sha256=3DjuT36quiMOfLwpCzVxRlV6KhkUr6AMjh73HDIGm6w,1371
134
134
  bec_widgets/widgets/colormap_selector/register_colormap_selector.py,sha256=bfw7RWmTmMLTLxGT-izSwcGtxGLKvL3jdivJw2z8oN4,512
135
135
  bec_widgets/widgets/console/console.py,sha256=NG0cBuqqPX4hC-sHhk_UEkT-nHhhN9Y7karJITPLzyo,17864
136
136
  bec_widgets/widgets/device_browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  bec_widgets/widgets/device_browser/device_browser.py,sha256=PRpgXuAUc6dCWXddp7m_dxUE9VA6AuSzCJ8t3TYng1w,3517
138
138
  bec_widgets/widgets/device_browser/device_browser.pyproject,sha256=s0vM1xYUwyU6Je68_hSCSBLK8ZPfHB-ftt4flfdpkXY,32
139
139
  bec_widgets/widgets/device_browser/device_browser.ui,sha256=Dy_3oXArScP-_7hRI6nQ7SKKnihuyYAzJfXiRxxJQBE,1077
140
- bec_widgets/widgets/device_browser/device_browser_plugin.py,sha256=FprIStCa-cjuIm_P2YRwyWu3mxIDzjEgGPjIl92__Tk,1401
140
+ bec_widgets/widgets/device_browser/device_browser_plugin.py,sha256=VZv5q5Im1p6TOeE6LI0n7plAJ83sMY9MTdWZcynvt0E,1274
141
141
  bec_widgets/widgets/device_browser/register_device_browser.py,sha256=LJ0ckrgUbU5yprhlrOtSQzymztKyb9zksMuFO4BKN6s,483
142
142
  bec_widgets/widgets/device_browser/device_item/__init__.py,sha256=VGY-uNVCnpcY-q-gijteB2N8KxFNgYR-qQ209MVu1QI,36
143
143
  bec_widgets/widgets/device_browser/device_item/device_item.py,sha256=MtiHM8JXalfNzWYwBj12u_SJidkSchbCy7iT1YZouec,1476
144
144
  bec_widgets/widgets/device_combobox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  bec_widgets/widgets/device_combobox/device_combo_box.pyproject,sha256=wI2eXR5ky_IM9-BCHJnH_9CEqYcZwIuLcgitSEr8OJU,40
146
- bec_widgets/widgets/device_combobox/device_combo_box_plugin.py,sha256=ntd0K1W3O2RgoomTsmnuG16CJ12G6iqJiCIoDjxxswU,1523
146
+ bec_widgets/widgets/device_combobox/device_combo_box_plugin.py,sha256=1wJZEj9cQdgNGrdy5btzlJBIKFP7mFUOuiSDG939jwo,1396
147
147
  bec_widgets/widgets/device_combobox/device_combobox.py,sha256=4YohiVtN-R4j9m2mrdwdkRL6IMpIbJ16KJ0SpJC86_g,2667
148
148
  bec_widgets/widgets/device_combobox/register_device_combo_box.py,sha256=ZCrWVdWOvIjnUJWe3MU7JO021rcXYg2SgA1iSKqbLoY,488
149
149
  bec_widgets/widgets/device_line_edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
150
  bec_widgets/widgets/device_line_edit/device_line_edit.py,sha256=iKK2NrVu4okWP8kxPU5whmo_y5VHtrD7Fd_q3ZgXN1Y,3221
151
151
  bec_widgets/widgets/device_line_edit/device_line_edit.pyproject,sha256=tqAYXRbxsHR41MwqmAxvfq1CFeZ1IRv84whUG67HjjE,41
152
- bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py,sha256=zFg-t4JsrSOOboX8DENHx27_XQlBUh9ocPD-tPXrrp8,1547
152
+ bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py,sha256=4ASFaDcpkmyzDPJlPMTV8cCYefFjHz_dv2CchzuTAL4,1420
153
153
  bec_widgets/widgets/device_line_edit/register_device_line_edit.py,sha256=8gEPnC8djYCw-idoZAENNB3bPOxM6pbzEp9A366EAGg,489
154
154
  bec_widgets/widgets/dock/__init__.py,sha256=B7foHt02gnhM7mFksa7GJVwT7n0j_JvYDCt6wc6XR5g,61
155
155
  bec_widgets/widgets/dock/dock.py,sha256=hQw5tpGrRbybjfF-aVEAeGdLTudtH4kFa70flu6_ZA8,10349
156
156
  bec_widgets/widgets/dock/dock_area.py,sha256=VfKyMxKo-r1Ugu2xjSsfGMYZUg3i3xxaokaZCFcCoxA,13579
157
157
  bec_widgets/widgets/dock/dock_area.pyproject,sha256=URW0UrDXCnkzk80rbQmUMgF6Uqay2TjHsq8Dq0g1j-c,37
158
- bec_widgets/widgets/dock/dock_area_plugin.py,sha256=DoVhw15MW8JoEXRj4d53B02nYH5ffRISr033Xw2FK8g,1435
158
+ bec_widgets/widgets/dock/dock_area_plugin.py,sha256=BqWvXzRm90kZGKgP26APt7f6ARBWzLU839vGAjl7UYM,1308
159
159
  bec_widgets/widgets/dock/register_dock_area.py,sha256=Yqd1mq6CcHwlxHZxX5EHKONy4P44nMm8pso-4X0tvJI,464
160
160
  bec_widgets/widgets/figure/__init__.py,sha256=3hGx_KOV7QHCYAV06aNuUgKq4QIYCjUTad-DrwkUaBM,44
161
161
  bec_widgets/widgets/figure/figure.py,sha256=yujtlDj5NutRJ0gfHMkCVXvBNj5r2z3pb3gwWlUQ92Q,28822
@@ -174,14 +174,14 @@ bec_widgets/widgets/figure/plots/waveform/waveform.py,sha256=uW9GQHWiVd3q63-yXjQ
174
174
  bec_widgets/widgets/figure/plots/waveform/waveform_curve.py,sha256=ZwRxSfPHbMWEvgUC-mL2orpZvtxR-DcrYAFikkdWEzk,8654
175
175
  bec_widgets/widgets/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
176
  bec_widgets/widgets/image/bec_image_widget.pyproject,sha256=PHisdBo5_5UCApd27GkizzqgfdjsDx2bFZa_p9LiSW8,30
177
- bec_widgets/widgets/image/bec_image_widget_plugin.py,sha256=WNm1c6tP77PxA0joGREc2Dpv2tsi8dSXdb8BeKrJWdc,1479
177
+ bec_widgets/widgets/image/bec_image_widget_plugin.py,sha256=vU9JnJwz0TTITH4fK6uVGmbTnPdV8kLu2BIJU_LQH4c,1352
178
178
  bec_widgets/widgets/image/image_widget.py,sha256=TCpTF8v94iSMklG9bYxZOjm9SbO60XZB9X0ldEp8lWE,16288
179
179
  bec_widgets/widgets/image/register_bec_image_widget.py,sha256=01YLZQTMSSIXvH1TSL-1AYsRs1a4EbSwKLVAwh9AjeA,478
180
180
  bec_widgets/widgets/jupyter_console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
181
  bec_widgets/widgets/jupyter_console/jupyter_console.py,sha256=-e7HQOECeH5eDrJYh4BFIzRL78LDkooU4otabyN0aX4,2343
182
182
  bec_widgets/widgets/motor_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
183
  bec_widgets/widgets/motor_map/bec_motor_map_widget.pyproject,sha256=NAI8s5gRKz80ED4KY7OgD2OgSH5HEsjt2ux2BYp66yg,63
184
- bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py,sha256=RRW72pQGFEQErGbOnI09wBdHIkx9iDdCA6n5hXBJeiI,1410
184
+ bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py,sha256=NSUlP06rTB73GKik7KR_sO66Yu-gp5_XA7ApgTbcwJo,1283
185
185
  bec_widgets/widgets/motor_map/motor_map_widget.py,sha256=URcysThbJKGsCZUqQm2lCtVn5FG8t4kT7DaN5EJUexg,7555
186
186
  bec_widgets/widgets/motor_map/register_bec_motor_map_widget.py,sha256=qRG8PtWGjso0pWbvj_DXKnbUfmQzfGqPSrnAozXfM7o,492
187
187
  bec_widgets/widgets/motor_map/motor_map_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -190,17 +190,17 @@ bec_widgets/widgets/motor_map/motor_map_dialog/motor_map_settings.ui,sha256=nv5v
190
190
  bec_widgets/widgets/position_indicator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
191
  bec_widgets/widgets/position_indicator/position_indicator.py,sha256=QVlWvs_RvEJe5IMxGYCpi-CXYF7vFeMqEMFCs6u5NGc,2020
192
192
  bec_widgets/widgets/position_indicator/position_indicator.pyproject,sha256=s0JEf5YkpMag19ddFSYeRZ8erBau7erO3bqw05YrTyg,36
193
- bec_widgets/widgets/position_indicator/position_indicator_plugin.py,sha256=lCXbgVkLUmCiKOpovwnRDcIspvzzPJ2nOwBfQcrxDE4,1536
193
+ bec_widgets/widgets/position_indicator/position_indicator_plugin.py,sha256=5efV6Y5LSvCHgg2wogAs7JfKfDhzv59NFT0uT17cWsk,1409
194
194
  bec_widgets/widgets/position_indicator/register_position_indicator.py,sha256=OZNiMgM_80TPSAXK_0hXAkne4vUh8DGvh_OdpOiMpwI,516
195
195
  bec_widgets/widgets/positioner_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
196
  bec_widgets/widgets/positioner_box/positioner_box.py,sha256=FyUGskWAb-5m44bdUNVig_AkoDbLRbB0GucI6RRHge8,10839
197
197
  bec_widgets/widgets/positioner_box/positioner_box.pyproject,sha256=7966pHdDseaHciaPNEKgdQgbUThSZf5wEDCeAEJh9po,32
198
198
  bec_widgets/widgets/positioner_box/positioner_box.ui,sha256=Y-Xp0z32okT7X4-rL5r7dF_QH_QpXvPes3f778cC7_k,5633
199
- bec_widgets/widgets/positioner_box/positioner_box_plugin.py,sha256=fSkLRBfCdJ6531BslhcxdwLQJWO9xcHGuX9TGGJJQbc,1531
199
+ bec_widgets/widgets/positioner_box/positioner_box_plugin.py,sha256=pcZcE0lwgdyWsopwi5ZM1tw32P5uD5QOtEC7sLYQIEc,1404
200
200
  bec_widgets/widgets/positioner_box/positioner_control_line.py,sha256=DWSDakPsOu8SrhTMKh9NR8b1a7npuyrkjVpZVqj1Kb0,915
201
201
  bec_widgets/widgets/positioner_box/positioner_control_line.pyproject,sha256=RGIXDjWq3fNCgOnU-08oeIeBLCcjYbRXgyh26drxB7I,41
202
202
  bec_widgets/widgets/positioner_box/positioner_control_line.ui,sha256=hJ4e3e3A1zZY3WRfQ7yvAZUAtL8tJhCJX2bWbtty_EQ,5625
203
- bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py,sha256=N6AQS7kLtvdAr76F-kdDtXSOpz-mbfnQX20H-_YL6N8,1604
203
+ bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py,sha256=ieLT4VCx9aza8NYAAioUaYglrywHmAma6JGzcBSMOCo,1477
204
204
  bec_widgets/widgets/positioner_box/register_positioner_box.py,sha256=UPOUjXXq6-IgSj0kdV_nJe1rYPMF8aIZxF4eSmWgQAg,483
205
205
  bec_widgets/widgets/positioner_box/register_positioner_control_line.py,sha256=MJ13vKGIwTMQGFhll63tfUGXHyd6bz40Cvr85oYKH3I,525
206
206
  bec_widgets/widgets/ring_progress_bar/__init__.py,sha256=_uoJKnDM2YAeUBfwc5WLbIHSJj7zm_FAurSKP3WRaCw,47
@@ -208,41 +208,41 @@ bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py,sha256=uJrMh
208
208
  bec_widgets/widgets/ring_progress_bar/ring.py,sha256=2pdEzETaJpvx4Dzyosq2YhnvDOEUvFnj_f9GfFKpG5Q,11159
209
209
  bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py,sha256=F7z6BbY7BYSKivpCus6T8pXIwzqHOsDlaIV5fGRIboQ,24119
210
210
  bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject,sha256=ZNYDnKDu9pixrY2XrulAGdKZg-Ysa7q67O_X2tAA0fc,35
211
- bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py,sha256=f6eAuDEvmnl0gy-cBwUkuUS4yr1VGjVEa40N5MIXwF0,1511
211
+ bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py,sha256=4wYVyxs8osUa1VuJUI5A2KdCCghmZXwsNCEtFQq6pYI,1384
212
212
  bec_widgets/widgets/scan_control/__init__.py,sha256=IOfHl15vxb_uC6KN62-PeUzbBha_vQyqkkXbJ2HU674,38
213
213
  bec_widgets/widgets/scan_control/register_scan_control.py,sha256=xUX2yR0-MaIMg9_y9qe50yDDphzsh2x1b5PMrF90yPM,475
214
214
  bec_widgets/widgets/scan_control/scan_control.py,sha256=30pcaVaBVo6JxJuMH1ul1s-sPuWqCUKsUQ-XfAgzRZ8,9384
215
215
  bec_widgets/widgets/scan_control/scan_control.pyproject,sha256=eTgVDFKToIH8_BbJjM2RvbOLr7HnYoidX0SAHx640DM,30
216
- bec_widgets/widgets/scan_control/scan_control_plugin.py,sha256=t3_qTACqYcvl_Wr102bIdVDyw6uNK1B94fh_wjs-lxg,1477
216
+ bec_widgets/widgets/scan_control/scan_control_plugin.py,sha256=Oe0jvKoLa1jvV7IyoExTzd2vvJbKPgUUt4_cdunsVNY,1350
217
217
  bec_widgets/widgets/scan_control/scan_group_box.py,sha256=BpX9ZphqOhdEbQnGzNeNlmuZsMS__U97CkBMical2FY,9300
218
218
  bec_widgets/widgets/spinner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
219
219
  bec_widgets/widgets/spinner/register_spinner_widget.py,sha256=_zCPjLh4M7NTSHP1Atdn6yu33zJ3LJkcBy3KOJ5eSVY,476
220
220
  bec_widgets/widgets/spinner/spinner.py,sha256=3A-VcX7HLDyqWsMoTUpB4jKHL26YuAbwOk3qonp3dI4,2591
221
221
  bec_widgets/widgets/spinner/spinner_widget.pyproject,sha256=zzLajGB3DTgVnrSqMey2jRpBlxTq9cBXZL9tWJCKe-I,25
222
- bec_widgets/widgets/spinner/spinner_widget_plugin.py,sha256=WlPUlCeSVFPup4ZY90oIo5WjSCglIKw_bsNdEGs3yWA,1478
222
+ bec_widgets/widgets/spinner/spinner_widget_plugin.py,sha256=VKUWMDN8h-qpbXmO9-dYQazSUs3GQDV4vTrZEP8J86k,1351
223
223
  bec_widgets/widgets/stop_button/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
224
224
  bec_widgets/widgets/stop_button/register_stop_button.py,sha256=U7r3fEOH-uPhAQI-nTituHXDDXDWR4JQZ7_vD6b_dfM,471
225
225
  bec_widgets/widgets/stop_button/stop_button.py,sha256=XLrRFvVrAhD16_-SPgzvsUhy0ROunsrWlI5BPRyqZOI,832
226
226
  bec_widgets/widgets/stop_button/stop_button.pyproject,sha256=Cc_xbv-zfzNVpsdg_1QyzuTlrJaM9_BkIjes70umrx0,29
227
- bec_widgets/widgets/stop_button/stop_button_plugin.py,sha256=yAvIPsdyn0X8Srx2KB8KEmDLDTScQH2dc8MGH0cFj_I,1481
227
+ bec_widgets/widgets/stop_button/stop_button_plugin.py,sha256=D5YfaGXuEenXDSGyC7VcwBolRqPV1FIikXXwVMVsozI,1354
228
228
  bec_widgets/widgets/text_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
229
  bec_widgets/widgets/text_box/register_text_box.py,sha256=UwrmCoYjAAtJJK8BwC0P_wSb-lOlOvxPe3-Bemg_9nw,459
230
230
  bec_widgets/widgets/text_box/text_box.py,sha256=3OWC6L3CWsH_uh8X11WnifYjhO8ruDe2FWFhE8cn5lY,4274
231
231
  bec_widgets/widgets/text_box/text_box.pyproject,sha256=XohO1BIe2hrpU-z_KHKRgjcUkXru7jeFte31j2TPbNk,26
232
- bec_widgets/widgets/text_box/text_box_plugin.py,sha256=UyP7NQ-rHnBOOww8ICAuI61FDuAoAl_KcpsKhkiPH3k,1418
232
+ bec_widgets/widgets/text_box/text_box_plugin.py,sha256=UAbDbSgI3s2FniFSrNFe_VVTc3VzEphOS3lI9mRPwmY,1291
233
233
  bec_widgets/widgets/toggle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
234
234
  bec_widgets/widgets/toggle/register_toggle_switch.py,sha256=8pVtkeEeiDOjV4OPoZq1I30F9JDzl4nQE7e7xoWyWBs,472
235
235
  bec_widgets/widgets/toggle/toggle.py,sha256=JzCGYoyHBrlBWCoyL94QX4zSLyEwWbCNHMegjlnSy2E,4442
236
236
  bec_widgets/widgets/toggle/toggle_switch.pyproject,sha256=Msa-AS5H5XlqW65r8GlX2AxD8FnFnDyDgGnbKcXqKOw,24
237
- bec_widgets/widgets/toggle/toggle_switch_plugin.py,sha256=V8qW7o-8ld9Lc_P_SLfpb6Fo0DSZt3Vu2mMJEueM5fc,1460
237
+ bec_widgets/widgets/toggle/toggle_switch_plugin.py,sha256=NSrk8KkolyOOxkliTwqz2n_l7jNPTjSFfcc9iCuzkiU,1333
238
238
  bec_widgets/widgets/vscode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
239
  bec_widgets/widgets/vscode/register_vs_code_editor.py,sha256=JATKBkTEuReeQ2Jj402xasjgVRMFI8uUOAAwmnFOWRA,473
240
240
  bec_widgets/widgets/vscode/vs_code_editor.pyproject,sha256=bxx0jZlSfBo-Em7p15W1QIJ9lFr9jqTqGynUQG01ocU,24
241
- bec_widgets/widgets/vscode/vs_code_editor_plugin.py,sha256=0DA6gjG1ZFvrrF23W5rarUVOR6oeeB0leEjtQIK6g6o,1462
241
+ bec_widgets/widgets/vscode/vs_code_editor_plugin.py,sha256=XqHJvMg5U804o2KnoGsKyf8WuLZjlaMRTWB2XkbqWLU,1335
242
242
  bec_widgets/widgets/vscode/vscode.py,sha256=yV1D9PK2IYomq9yYfwqUOrZGIeBwMnNuBfXxBc2M8Qc,2231
243
243
  bec_widgets/widgets/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
244
244
  bec_widgets/widgets/waveform/bec_waveform_widget.pyproject,sha256=GLD8GN9dXx9wNbtnevrxqqcwk7vKV-Uv8QYSycdaoaI,33
245
- bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py,sha256=f8zgTQGp6hbfxOAnMqLvaI3N9KwxEMtUKkZQZBAL_rw,1514
245
+ bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py,sha256=Qt8E5nvk6f5JYwOqVn5UkbIW_JqsXkIMdv3CM41gXsU,1387
246
246
  bec_widgets/widgets/waveform/register_bec_waveform_widget.py,sha256=qZHVZH_lP2hvzkG1Ra0EyrXlMeLkRCy0aceH-bfJ1cs,490
247
247
  bec_widgets/widgets/waveform/waveform_widget.py,sha256=nzRDgo_qfmmp_aSGbXhwy2U7yq5cR0pHdjM0YDCvTKE,20409
248
248
  bec_widgets/widgets/waveform/waveform_popups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -256,9 +256,9 @@ bec_widgets/widgets/website/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
256
256
  bec_widgets/widgets/website/register_website_widget.py,sha256=LIQJpV9uqcBiPR9cEAiDjaUS_l7JroYVdsotnLpD9H0,476
257
257
  bec_widgets/widgets/website/website.py,sha256=vyRJr4jsti1h6cPHzTTtS_0IELJ3kYdS2_HdZCzavl4,1840
258
258
  bec_widgets/widgets/website/website_widget.pyproject,sha256=scOiV3cV1_BjbzpPzy2N8rIJL5P2qIZz8ObTJ-Uvdtg,25
259
- bec_widgets/widgets/website/website_widget_plugin.py,sha256=E5qf7ZK26tkXjRwJMzYqHypX0ChxAleMs6Mxw7XaPl4,1461
259
+ bec_widgets/widgets/website/website_widget_plugin.py,sha256=Tllr4gLLPaouBxZ7-kRiNFFNPhHR4drna8VVRpia9zU,1334
260
260
  docs/Makefile,sha256=i2WHuFlgfyAPEW4ssEP8NY4cOibDJrVjvzSEU8_Ggwc,634
261
- docs/conf.py,sha256=eSfoMdl2eObhbKr7eki59DrkNUh15KfcZpuBc7goMRc,2500
261
+ docs/conf.py,sha256=xrP_NOgayguXdfhEK6Oag5KlBxzzbHCv0zbitTpUWqM,2519
262
262
  docs/index.md,sha256=h4edya5UA0bx21ReHu40lJudqVBH41tOASjnCjmoYj8,1197
263
263
  docs/make.bat,sha256=vKazJE8RW49Cy8K7hm8QYbletvAd8YkeKsaPA_dWnXs,800
264
264
  docs/requirements.txt,sha256=gMQDaDpz_LSH5TP6dKxKXqI5kupNnT4g-4KJ4fg2o5s,161
@@ -296,7 +296,8 @@ docs/developer/introduction/concepts.md,sha256=N23ewZjPx97eJtrU6-0Lou2IvPfkfZ6Nw
296
296
  docs/developer/introduction/contributing.md,sha256=ocW5kjBNwD5k_nDkusXUpsW8jJALajrpNSRVJftuF-k,1668
297
297
  docs/developer/introduction/introduction.md,sha256=vR732ai0u-NiP8ij2_HJucgT4CDhjyrARbThDMqUc74,788
298
298
  docs/developer/introduction/useful_links.md,sha256=ytWRyLTAveU8ELrA0GL9hzTVCBRNBOTV8pRxvPp1huk,1487
299
- docs/developer/widget_development/widget_development.md,sha256=wGfDjbt9EonVxUg59keADy7wCLyS-KzCz7m4hY0OV_A,526
299
+ docs/developer/widget_development/bec_dispatcher.md,sha256=AX3XVNE_9E1_rawD9q-yY9yvCEaZQiglfWpJpRn5TV0,8018
300
+ docs/developer/widget_development/widget_development.md,sha256=LE9_o1IeqLBgb1jaoLlXrOlqIUAEJPJpsHs8C3cSQ1k,542
300
301
  docs/introduction/introduction.md,sha256=YBEFDhxqHTcbfbNTo76xDflaFUHIqDs-sToA1HRmCnI,1436
301
302
  docs/user/customisation.md,sha256=wCW8fAbqtlgGE3mURvXOrK67Xo0_B-lxfg0sYuQWB40,3186
302
303
  docs/user/user.md,sha256=FuBog2_wymy-A-p6QhXYf7CYn6tR6ojwK1ZLgV-tF1E,1499
@@ -399,8 +400,8 @@ tests/unit_tests/test_configs/config_device_no_entry.yaml,sha256=hdvue9KLc_kfNzG
399
400
  tests/unit_tests/test_configs/config_scan.yaml,sha256=vo484BbWOjA_e-h6bTjSV9k7QaQHrlAvx-z8wtY-P4E,1915
400
401
  tests/unit_tests/test_msgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
401
402
  tests/unit_tests/test_msgs/available_scans_message.py,sha256=m_z97hIrjHXXMa2Ex-UvsPmTxOYXfjxyJaGkIY6StTY,46532
402
- bec_widgets-0.96.2.dist-info/METADATA,sha256=xRvEZ02kp6ROhkDYvw-jCEJA0QqyjeTRUHYJnbgxgXY,1325
403
- bec_widgets-0.96.2.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
404
- bec_widgets-0.96.2.dist-info/entry_points.txt,sha256=3otEkCdDB9LZJuBLzG4pFLK5Di0CVybN_12IsZrQ-58,166
405
- bec_widgets-0.96.2.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
406
- bec_widgets-0.96.2.dist-info/RECORD,,
403
+ bec_widgets-0.97.0.dist-info/METADATA,sha256=UkwD-_52GWkQgNpQnMa-cDG4Q_h3sMM1jqGYrM4Kjy8,1325
404
+ bec_widgets-0.97.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
405
+ bec_widgets-0.97.0.dist-info/entry_points.txt,sha256=3otEkCdDB9LZJuBLzG4pFLK5Di0CVybN_12IsZrQ-58,166
406
+ bec_widgets-0.97.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
407
+ bec_widgets-0.97.0.dist-info/RECORD,,
docs/conf.py CHANGED
@@ -65,7 +65,7 @@ add_module_names = False # Remove namespaces from class/method signatures
65
65
  autodoc_inherit_docstrings = True # If no docstring, inherit from base class
66
66
  set_type_checking_flag = True # Enable 'expensive' imports for sphinx_autodoc_typehints
67
67
  autoclass_content = "both" # Include both class docstring and __init__
68
- autodoc_mock_imports = ["pyqtgraph"]
68
+ autodoc_mock_imports = ["pyqtgraph", "qtpy", "PySide6"]
69
69
 
70
70
  # Add any paths that contain templates here, relative to this directory.
71
71
  templates_path = ["_templates"]
@@ -0,0 +1,143 @@
1
+ (developer.bec_dispatcher)=
2
+
3
+ # BECDispatcher
4
+
5
+ ## Overview
6
+
7
+ The [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
8
+ is a powerful tool that
9
+ simplifies the process of connecting Qt slots to message updates from the BEC server. It enables real-time communication
10
+ between your widget and the BEC server by listening to specific message channels and triggering callbacks when new data
11
+ is received.
12
+
13
+ This tool is especially useful for creating widgets that need to respond to dynamic data, such as device readbacks or
14
+ scan updates. By
15
+ using [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher),
16
+ you
17
+ can create callback functions that react to incoming messages and update your widget's state or perform other tasks
18
+ based on the data received.
19
+
20
+ ## How It Works
21
+
22
+ When you create a widget that needs to respond to updates from the BEC server, you can use
23
+ the [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
24
+ to
25
+ connect specific Qt slots (callback functions) to message endpoints. These endpoints are defined within the BEC system
26
+ and represent specific channels of information (
27
+ e.g., [`device readback`](https://beamline-experiment-control.readthedocs.io/en/latest/api_reference/_autosummary/bec_lib.endpoints.MessageEndpoints.html#bec_lib.endpoints.MessageEndpoints.device_readback),
28
+ [`scan_segment`](https://beamline-experiment-control.readthedocs.io/en/latest/api_reference/_autosummary/bec_lib.endpoints.MessageEndpoints.html#bec_lib.endpoints.MessageEndpoints.scan_segment),
29
+ etc.).
30
+
31
+ ### Step-by-Step Guide
32
+
33
+ 1. **Create a Callback Function**: Define a function within your widget that will handle the data received from the BEC
34
+ server. This function should usually accept two parameters: `msg_content` (the message content) and `metadata` (
35
+ additional
36
+ information about the message).
37
+
38
+ ```python
39
+ # Example for a callback function that updates a widget display based on motor readback data
40
+ from qtpy.QtCore import Slot
41
+
42
+ @Slot(dict, dict)
43
+ def on_device_readback(self, msg_content, metadata):
44
+ # Process the incoming data
45
+ new_value = msg_content["signals"]['motor_x']["value"]
46
+ # Update the widget's display or perform another action
47
+ self.update_display(new_value)
48
+ ```
49
+
50
+ 2. **Connect the Slot to an Endpoint**: Use
51
+ the [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
52
+ to connect your callback function to a specific
53
+ endpoint. The endpoint represents the type of data or message you're interested in.
54
+
55
+ ```python
56
+ from bec_lib.endpoints import MessageEndpoints
57
+
58
+ self.bec_dispatcher.connect_slot(self.on_device_readback, MessageEndpoints.device_readback("motor_x"))
59
+ ```
60
+
61
+ 3. **Handle Incoming Data**: Your callback function will be triggered automatically whenever a new message is received
62
+ on the connected endpoint. Use the data in `msg_content` to update your widget or perform other actions.
63
+
64
+ 4. **Clean Up Connections**: If your widget is being destroyed or you no longer need to listen for updates, make sure to
65
+ disconnect your slots from
66
+ the [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
67
+ to avoid memory or thread leaks.
68
+
69
+ ```python
70
+ self.bec_dispatcher.disconnect_slot(self.on_device_readback, MessageEndpoints.device_readback("motor_x"))
71
+ ```
72
+
73
+ ### Example: Motor Map Widget
74
+
75
+ The [`BECMotorMap`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.widgets.figure.plots.motor_map.motor_map.BECMotorMap.html#bec-widgets-widgets-figure-plots-motor-map-motor-map-becmotormap)
76
+ widget is a great example of
77
+ how [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
78
+ can be used to handle real-time data updates. This
79
+ widget listens for updates on specific motor positions and dynamically updates the motor map display.
80
+
81
+ Here's a breakdown of
82
+ how [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
83
+ is used in
84
+ the [`BECMotorMap`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.widgets.figure.plots.motor_map.motor_map.BECMotorMap.html#bec-widgets-widgets-figure-plots-motor-map-motor-map-becmotormap)
85
+ widget:
86
+
87
+ 1. **Connecting to Motor Readbacks**:
88
+ The widget connects to
89
+ the [`device readback`](https://beamline-experiment-control.readthedocs.io/en/latest/api_reference/_autosummary/bec_lib.endpoints.MessageEndpoints.html#bec_lib.endpoints.MessageEndpoints.device_readback)
90
+ endpoints using
91
+ the [`connect_slot`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher.connect_slot)
92
+ method
93
+ of [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher).
94
+ This allows
95
+ the widget to receive real-time updates about the motor positions.
96
+
97
+ ```{literalinclude} ../../../bec_widgets/widgets/figure/plots/motor_map/motor_map.py
98
+ :language: python
99
+ :pyobject: BECMotorMap._connect_motor_to_slots
100
+ :dedent: 4
101
+ ```
102
+
103
+ 2. **Handling Readback Data**:
104
+ The `on_device_readback` slot is called whenever new data is received from the motor readback. This slot processes
105
+ the data and updates the motor map plot accordingly.
106
+
107
+ ```{literalinclude} ../../../bec_widgets/widgets/figure/plots/motor_map/motor_map.py
108
+ :language: python
109
+ :pyobject: BECMotorMap.on_device_readback
110
+ :dedent: 4
111
+ ```
112
+
113
+ 3. **Updating the Plot**:
114
+ The motor map plot is updated in response to the new data, providing a real-time visualization of the motor's
115
+ position.
116
+
117
+ ```{literalinclude} ../../../bec_widgets/widgets/figure/plots/motor_map/motor_map.py
118
+ :language: python
119
+ :pyobject: BECMotorMap._update_plot
120
+ :dedent: 4
121
+ ```
122
+
123
+ 4. **Disconnecting When No Longer Needed**:
124
+ The widget ensures that connections are properly cleaned up when no longer needed.
125
+
126
+ ```{literalinclude} ../../../bec_widgets/widgets/figure/plots/motor_map/motor_map.py
127
+ :language: python
128
+ :pyobject: BECMotorMap._update_plot
129
+ :dedent: 4
130
+ ```
131
+
132
+ ## Conclusion
133
+
134
+ The [`BECDispatcher`](https://bec.readthedocs.io/projects/bec-widgets/en/latest/api_reference/_autosummary/bec_widgets.utils.bec_dispatcher.BECDispatcher.html#bec_widgets.utils.bec_dispatcher.BECDispatcher)
135
+ is a key tool for developing interactive and responsive widgets within the BEC framework. By
136
+ leveraging this tool, you can create widgets that automatically respond to real-time data updates from the BEC server,
137
+ enhancing the interactivity and functionality of your user interface.
138
+
139
+ In next tutorials we will cover how to create a custom widget using the BECDispatcher and BECWidget base class.
140
+
141
+ ```{note}
142
+ For more details on specific messages and endpoints, please refer to the [Message Endpoints Documentation](https://beamline-experiment-control.readthedocs.io/en/latest/api_reference/_autosummary/bec_lib.endpoints.MessageEndpoints.html#bec-lib-endpoints-messageendpoints).
143
+ ```
@@ -8,4 +8,6 @@ maxdepth: 2
8
8
  hidden: false
9
9
  ---
10
10
 
11
+ bec_dispatcher
12
+
11
13
  ```
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.96.2"
7
+ version = "0.97.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [