bec-widgets 2.10.3__py3-none-any.whl → 2.12.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.
- CHANGELOG.md +84 -0
- PKG-INFO +1 -1
- bec_widgets/cli/client.py +5 -5
- bec_widgets/tests/utils.py +2 -2
- bec_widgets/utils/clickable_label.py +13 -0
- bec_widgets/utils/colors.py +7 -4
- bec_widgets/utils/expandable_frame.py +58 -7
- bec_widgets/utils/forms_from_types/forms.py +107 -28
- bec_widgets/utils/forms_from_types/items.py +88 -12
- bec_widgets/utils/forms_from_types/styles.py +21 -0
- bec_widgets/utils/generate_designer_plugin.py +10 -21
- bec_widgets/widgets/control/scan_control/scan_control.py +1 -1
- bec_widgets/widgets/editors/dict_backed_table.py +31 -11
- bec_widgets/widgets/editors/scan_metadata/_util.py +7 -4
- bec_widgets/widgets/editors/scan_metadata/scan_metadata.py +10 -4
- bec_widgets/widgets/plots/image/image.py +128 -856
- bec_widgets/widgets/plots/image/image_base.py +1062 -0
- bec_widgets/widgets/plots/image/image_item.py +7 -6
- bec_widgets/widgets/services/device_browser/device_browser.py +61 -29
- bec_widgets/widgets/services/device_browser/device_item/device_item.py +97 -19
- bec_widgets/widgets/services/device_browser/util.py +11 -0
- {bec_widgets-2.10.3.dist-info → bec_widgets-2.12.0.dist-info}/METADATA +1 -1
- {bec_widgets-2.10.3.dist-info → bec_widgets-2.12.0.dist-info}/RECORD +27 -23
- pyproject.toml +1 -1
- {bec_widgets-2.10.3.dist-info → bec_widgets-2.12.0.dist-info}/WHEEL +0 -0
- {bec_widgets-2.10.3.dist-info → bec_widgets-2.12.0.dist-info}/entry_points.txt +0 -0
- {bec_widgets-2.10.3.dist-info → bec_widgets-2.12.0.dist-info}/licenses/LICENSE +0 -0
@@ -21,9 +21,6 @@ logger = bec_logger.logger
|
|
21
21
|
# noinspection PyDataclass
|
22
22
|
class ImageItemConfig(ConnectionConfig): # TODO review config
|
23
23
|
parent_id: str | None = Field(None, description="The parent plot of the image.")
|
24
|
-
monitor: str | None = Field(None, description="The name of the monitor.")
|
25
|
-
monitor_type: Literal["1d", "2d", "auto"] = Field("auto", description="The type of monitor.")
|
26
|
-
source: str | None = Field(None, description="The source of the curve.")
|
27
24
|
color_map: str | None = Field("plasma", description="The color map of the image.")
|
28
25
|
downsample: bool | None = Field(True, description="Whether to downsample the image.")
|
29
26
|
opacity: float | None = Field(1.0, description="The opacity of the image.")
|
@@ -43,6 +40,7 @@ class ImageItemConfig(ConnectionConfig): # TODO review config
|
|
43
40
|
|
44
41
|
|
45
42
|
class ImageItem(BECConnector, pg.ImageItem):
|
43
|
+
|
46
44
|
RPC = True
|
47
45
|
USER_ACCESS = [
|
48
46
|
"color_map",
|
@@ -69,12 +67,13 @@ class ImageItem(BECConnector, pg.ImageItem):
|
|
69
67
|
]
|
70
68
|
|
71
69
|
vRangeChangedManually = Signal(tuple)
|
70
|
+
removed = Signal(str)
|
72
71
|
|
73
72
|
def __init__(
|
74
73
|
self,
|
75
74
|
config: Optional[ImageItemConfig] = None,
|
76
75
|
gui_id: Optional[str] = None,
|
77
|
-
parent_image=None,
|
76
|
+
parent_image=None, # FIXME: rename to parent
|
78
77
|
**kwargs,
|
79
78
|
):
|
80
79
|
if config is None:
|
@@ -274,6 +273,8 @@ class ImageItem(BECConnector, pg.ImageItem):
|
|
274
273
|
self.buffer = []
|
275
274
|
self.max_len = 0
|
276
275
|
|
277
|
-
def remove(self):
|
278
|
-
self.parent().disconnect_monitor(self.config.monitor)
|
276
|
+
def remove(self, emit: bool = True):
|
279
277
|
self.clear()
|
278
|
+
super().remove()
|
279
|
+
if emit:
|
280
|
+
self.removed.emit(self.objectName())
|
@@ -1,15 +1,22 @@
|
|
1
1
|
import os
|
2
2
|
import re
|
3
|
-
from
|
3
|
+
from functools import partial
|
4
4
|
|
5
5
|
from bec_lib.callback_handler import EventType
|
6
|
+
from bec_lib.logger import bec_logger
|
7
|
+
from bec_lib.messages import ConfigAction
|
6
8
|
from pyqtgraph import SignalProxy
|
7
|
-
from qtpy.QtCore import
|
8
|
-
from qtpy.QtWidgets import QListWidgetItem, QVBoxLayout, QWidget
|
9
|
+
from qtpy.QtCore import QSize, Signal
|
10
|
+
from qtpy.QtWidgets import QListWidget, QListWidgetItem, QVBoxLayout, QWidget
|
9
11
|
|
12
|
+
from bec_widgets.cli.rpc.rpc_register import RPCRegister
|
10
13
|
from bec_widgets.utils.bec_widget import BECWidget
|
14
|
+
from bec_widgets.utils.error_popups import SafeSlot
|
11
15
|
from bec_widgets.utils.ui_loader import UILoader
|
12
16
|
from bec_widgets.widgets.services.device_browser.device_item import DeviceItem
|
17
|
+
from bec_widgets.widgets.services.device_browser.util import map_device_type_to_icon
|
18
|
+
|
19
|
+
logger = bec_logger.logger
|
13
20
|
|
14
21
|
|
15
22
|
class DeviceBrowser(BECWidget, QWidget):
|
@@ -23,18 +30,18 @@ class DeviceBrowser(BECWidget, QWidget):
|
|
23
30
|
|
24
31
|
def __init__(
|
25
32
|
self,
|
26
|
-
parent:
|
33
|
+
parent: QWidget | None = None,
|
27
34
|
config=None,
|
28
35
|
client=None,
|
29
|
-
gui_id:
|
36
|
+
gui_id: str | None = None,
|
30
37
|
**kwargs,
|
31
38
|
) -> None:
|
32
39
|
super().__init__(parent=parent, client=client, gui_id=gui_id, config=config, **kwargs)
|
33
|
-
|
34
40
|
self.get_bec_shortcuts()
|
35
41
|
self.ui = None
|
36
42
|
self.ini_ui()
|
37
|
-
|
43
|
+
self.dev_list: QListWidget = self.ui.device_list
|
44
|
+
self.dev_list.setVerticalScrollMode(QListWidget.ScrollMode.ScrollPerPixel)
|
38
45
|
self.proxy_device_update = SignalProxy(
|
39
46
|
self.ui.filter_input.textChanged, rateLimit=500, slot=self.update_device_list
|
40
47
|
)
|
@@ -43,6 +50,7 @@ class DeviceBrowser(BECWidget, QWidget):
|
|
43
50
|
)
|
44
51
|
self.device_update.connect(self.update_device_list)
|
45
52
|
|
53
|
+
self.init_device_list()
|
46
54
|
self.update_device_list()
|
47
55
|
|
48
56
|
def ini_ui(self) -> None:
|
@@ -50,14 +58,12 @@ class DeviceBrowser(BECWidget, QWidget):
|
|
50
58
|
Initialize the UI by loading the UI file and setting the layout.
|
51
59
|
"""
|
52
60
|
layout = QVBoxLayout()
|
53
|
-
layout.setContentsMargins(0, 0, 0, 0)
|
54
|
-
|
55
61
|
ui_file_path = os.path.join(os.path.dirname(__file__), "device_browser.ui")
|
56
62
|
self.ui = UILoader(self).loader(ui_file_path)
|
57
63
|
layout.addWidget(self.ui)
|
58
64
|
self.setLayout(layout)
|
59
65
|
|
60
|
-
def on_device_update(self, action:
|
66
|
+
def on_device_update(self, action: ConfigAction, content: dict) -> None:
|
61
67
|
"""
|
62
68
|
Callback for device update events. Triggers the device_update signal.
|
63
69
|
|
@@ -68,8 +74,43 @@ class DeviceBrowser(BECWidget, QWidget):
|
|
68
74
|
if action in ["add", "remove", "reload"]:
|
69
75
|
self.device_update.emit()
|
70
76
|
|
71
|
-
|
72
|
-
|
77
|
+
def init_device_list(self):
|
78
|
+
self.dev_list.clear()
|
79
|
+
self._device_items: dict[str, QListWidgetItem] = {}
|
80
|
+
|
81
|
+
def _updatesize(item: QListWidgetItem, device_item: DeviceItem):
|
82
|
+
device_item.adjustSize()
|
83
|
+
item.setSizeHint(QSize(device_item.width(), device_item.height()))
|
84
|
+
logger.debug(f"Adjusting {item} size to {device_item.width(), device_item.height()}")
|
85
|
+
|
86
|
+
with RPCRegister.delayed_broadcast():
|
87
|
+
for device, device_obj in self.dev.items():
|
88
|
+
item = QListWidgetItem(self.dev_list)
|
89
|
+
device_item = DeviceItem(
|
90
|
+
parent=self, device=device, icon=map_device_type_to_icon(device_obj)
|
91
|
+
)
|
92
|
+
|
93
|
+
device_item.expansion_state_changed.connect(partial(_updatesize, item, device_item))
|
94
|
+
|
95
|
+
device_config = self.dev[device]._config # pylint: disable=protected-access
|
96
|
+
device_item.set_display_config(device_config)
|
97
|
+
tooltip = device_config.get("description", "")
|
98
|
+
device_item.setToolTip(tooltip)
|
99
|
+
device_item.broadcast_size_hint.connect(item.setSizeHint)
|
100
|
+
item.setSizeHint(device_item.sizeHint())
|
101
|
+
|
102
|
+
self.dev_list.setItemWidget(item, device_item)
|
103
|
+
self.dev_list.addItem(item)
|
104
|
+
self._device_items[device] = item
|
105
|
+
|
106
|
+
@SafeSlot()
|
107
|
+
def reset_device_list(self) -> None:
|
108
|
+
self.init_device_list()
|
109
|
+
self.update_device_list()
|
110
|
+
|
111
|
+
@SafeSlot()
|
112
|
+
@SafeSlot(str)
|
113
|
+
def update_device_list(self, *_) -> None:
|
73
114
|
"""
|
74
115
|
Update the device list based on the filter input.
|
75
116
|
There are two ways to trigger this function:
|
@@ -80,23 +121,14 @@ class DeviceBrowser(BECWidget, QWidget):
|
|
80
121
|
"""
|
81
122
|
filter_text = self.ui.filter_input.text()
|
82
123
|
try:
|
83
|
-
regex = re.compile(filter_text, re.IGNORECASE)
|
124
|
+
self.regex = re.compile(filter_text, re.IGNORECASE)
|
84
125
|
except re.error:
|
85
|
-
regex = None # Invalid regex, disable filtering
|
86
|
-
|
87
|
-
|
88
|
-
|
126
|
+
self.regex = None # Invalid regex, disable filtering
|
127
|
+
for device in self.dev:
|
128
|
+
self._device_items[device].setHidden(False)
|
129
|
+
return
|
89
130
|
for device in self.dev:
|
90
|
-
|
91
|
-
item = QListWidgetItem(dev_list)
|
92
|
-
device_item = DeviceItem(device)
|
93
|
-
|
94
|
-
# pylint: disable=protected-access
|
95
|
-
tooltip = self.dev[device]._config.get("description", "")
|
96
|
-
device_item.setToolTip(tooltip)
|
97
|
-
item.setSizeHint(device_item.sizeHint())
|
98
|
-
dev_list.setItemWidget(item, device_item)
|
99
|
-
dev_list.addItem(item)
|
131
|
+
self._device_items[device].setHidden(not self.regex.search(device))
|
100
132
|
|
101
133
|
|
102
134
|
if __name__ == "__main__": # pragma: no cover
|
@@ -104,10 +136,10 @@ if __name__ == "__main__": # pragma: no cover
|
|
104
136
|
|
105
137
|
from qtpy.QtWidgets import QApplication
|
106
138
|
|
107
|
-
from bec_widgets.utils.colors import
|
139
|
+
from bec_widgets.utils.colors import set_theme
|
108
140
|
|
109
141
|
app = QApplication(sys.argv)
|
110
|
-
|
142
|
+
set_theme("light")
|
111
143
|
widget = DeviceBrowser()
|
112
144
|
widget.show()
|
113
145
|
sys.exit(app.exec_())
|
@@ -2,10 +2,18 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from typing import TYPE_CHECKING
|
4
4
|
|
5
|
+
from bec_lib.atlas_models import Device as DeviceConfigModel
|
5
6
|
from bec_lib.logger import bec_logger
|
6
|
-
from qtpy.QtCore import QMimeData, Qt
|
7
|
+
from qtpy.QtCore import QMimeData, QSize, Qt, Signal
|
7
8
|
from qtpy.QtGui import QDrag
|
8
|
-
from qtpy.QtWidgets import QApplication, QHBoxLayout,
|
9
|
+
from qtpy.QtWidgets import QApplication, QHBoxLayout, QWidget
|
10
|
+
|
11
|
+
from bec_widgets.utils.colors import get_theme_name
|
12
|
+
from bec_widgets.utils.error_popups import SafeSlot
|
13
|
+
from bec_widgets.utils.expandable_frame import ExpandableGroupFrame
|
14
|
+
from bec_widgets.utils.forms_from_types import styles
|
15
|
+
from bec_widgets.utils.forms_from_types.forms import PydanticModelForm
|
16
|
+
from bec_widgets.widgets.utility.visual.dark_mode_button.dark_mode_button import DarkModeButton
|
9
17
|
|
10
18
|
if TYPE_CHECKING: # pragma: no cover
|
11
19
|
from qtpy.QtGui import QMouseEvent
|
@@ -13,26 +21,77 @@ if TYPE_CHECKING: # pragma: no cover
|
|
13
21
|
logger = bec_logger.logger
|
14
22
|
|
15
23
|
|
16
|
-
class
|
17
|
-
|
18
|
-
|
24
|
+
class DeviceItemForm(PydanticModelForm):
|
25
|
+
RPC = False
|
26
|
+
PLUGIN = False
|
27
|
+
|
28
|
+
def __init__(self, parent=None, client=None, pretty_display=False, **kwargs):
|
29
|
+
super().__init__(
|
30
|
+
parent=parent,
|
31
|
+
data_model=DeviceConfigModel,
|
32
|
+
pretty_display=pretty_display,
|
33
|
+
client=client,
|
34
|
+
**kwargs,
|
35
|
+
)
|
36
|
+
self._validity.setVisible(False)
|
37
|
+
self._connect_to_theme_change()
|
38
|
+
|
39
|
+
def set_pretty_display_theme(self, theme: str | None = None):
|
40
|
+
if theme is None:
|
41
|
+
theme = get_theme_name()
|
42
|
+
self.setStyleSheet(styles.pretty_display_theme(theme))
|
43
|
+
|
44
|
+
def _connect_to_theme_change(self):
|
45
|
+
"""Connect to the theme change signal."""
|
46
|
+
qapp = QApplication.instance()
|
47
|
+
if hasattr(qapp, "theme_signal"):
|
48
|
+
qapp.theme_signal.theme_updated.connect(self.set_pretty_display_theme) # type: ignore
|
19
49
|
|
20
|
-
self._drag_pos = None
|
21
50
|
|
51
|
+
class DeviceItem(ExpandableGroupFrame):
|
52
|
+
broadcast_size_hint = Signal(QSize)
|
53
|
+
|
54
|
+
RPC = False
|
55
|
+
|
56
|
+
def __init__(self, parent, device: str, icon: str = "") -> None:
|
57
|
+
super().__init__(parent, title=device, expanded=False, icon=icon)
|
58
|
+
|
59
|
+
self._drag_pos = None
|
60
|
+
self._expanded_first_time = False
|
61
|
+
self._data = None
|
22
62
|
self.device = device
|
23
63
|
layout = QHBoxLayout()
|
24
|
-
layout.setContentsMargins(
|
25
|
-
self.
|
26
|
-
|
27
|
-
self.
|
28
|
-
|
29
|
-
self.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
64
|
+
layout.setContentsMargins(0, 0, 0, 0)
|
65
|
+
self.set_layout(layout)
|
66
|
+
|
67
|
+
self.adjustSize()
|
68
|
+
self._title.clicked.connect(self.switch_expanded_state)
|
69
|
+
self._title_icon.clicked.connect(self.switch_expanded_state)
|
70
|
+
|
71
|
+
@SafeSlot()
|
72
|
+
def switch_expanded_state(self):
|
73
|
+
if not self.expanded and not self._expanded_first_time:
|
74
|
+
self._expanded_first_time = True
|
75
|
+
self.form = DeviceItemForm(parent=self, pretty_display=True)
|
76
|
+
self._contents.layout().addWidget(self.form)
|
77
|
+
if self._data:
|
78
|
+
self.form.set_data(self._data)
|
79
|
+
self.broadcast_size_hint.emit(self.sizeHint())
|
80
|
+
super().switch_expanded_state()
|
81
|
+
if self._expanded_first_time:
|
82
|
+
self.form.adjustSize()
|
83
|
+
self.updateGeometry()
|
84
|
+
if self._expanded:
|
85
|
+
self.form.set_pretty_display_theme()
|
86
|
+
self.adjustSize()
|
87
|
+
self.broadcast_size_hint.emit(self.sizeHint())
|
88
|
+
|
89
|
+
def set_display_config(self, config_dict: dict):
|
90
|
+
"""Set the displayed information from a device config dict, which must conform to the
|
91
|
+
bec_lib.atlas_models.Device config model."""
|
92
|
+
self._data = DeviceConfigModel.model_validate(config_dict)
|
93
|
+
if self._expanded_first_time:
|
94
|
+
self.form.set_data(self._data)
|
36
95
|
|
37
96
|
def mousePressEvent(self, event: QMouseEvent) -> None:
|
38
97
|
super().mousePressEvent(event)
|
@@ -63,6 +122,25 @@ if __name__ == "__main__": # pragma: no cover
|
|
63
122
|
from qtpy.QtWidgets import QApplication
|
64
123
|
|
65
124
|
app = QApplication(sys.argv)
|
66
|
-
widget =
|
125
|
+
widget = QWidget()
|
126
|
+
layout = QHBoxLayout()
|
127
|
+
widget.setLayout(layout)
|
128
|
+
item = DeviceItem("Device")
|
129
|
+
layout.addWidget(DarkModeButton())
|
130
|
+
layout.addWidget(item)
|
131
|
+
item.set_display_config(
|
132
|
+
{
|
133
|
+
"name": "Test Device",
|
134
|
+
"enabled": True,
|
135
|
+
"deviceClass": "FakeDeviceClass",
|
136
|
+
"deviceConfig": {"kwarg1": "value1"},
|
137
|
+
"readoutPriority": "baseline",
|
138
|
+
"description": "A device for testing out a widget",
|
139
|
+
"readOnly": True,
|
140
|
+
"softwareTrigger": False,
|
141
|
+
"deviceTags": ["tag1", "tag2", "tag3"],
|
142
|
+
"userParameter": {"some_setting": "some_ value"},
|
143
|
+
}
|
144
|
+
)
|
67
145
|
widget.show()
|
68
146
|
sys.exit(app.exec_())
|
@@ -0,0 +1,11 @@
|
|
1
|
+
from bec_lib.device import Device
|
2
|
+
|
3
|
+
|
4
|
+
def map_device_type_to_icon(device_obj: Device) -> str:
|
5
|
+
"""Associate device types with material icon names"""
|
6
|
+
match device_obj._info.get("device_base_class", "").lower():
|
7
|
+
case "positioner":
|
8
|
+
return "precision_manufacturing"
|
9
|
+
case "signal":
|
10
|
+
return "vital_signs"
|
11
|
+
return "deployed_code"
|
@@ -2,11 +2,11 @@
|
|
2
2
|
.gitlab-ci.yml,sha256=1nMYldzVk0tFkBWYTcUjumOrdSADASheWOAc0kOFDYs,9509
|
3
3
|
.pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
|
4
4
|
.readthedocs.yaml,sha256=ivqg3HTaOxNbEW3bzWh9MXAkrekuGoNdj0Mj3SdRYuw,639
|
5
|
-
CHANGELOG.md,sha256=
|
5
|
+
CHANGELOG.md,sha256=lORmYObpSzbFUz1z0Rj8e6vhhHC8X0jvtgLSTEJ0BIQ,296713
|
6
6
|
LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
|
7
|
-
PKG-INFO,sha256=
|
7
|
+
PKG-INFO,sha256=FoTDKomAsElhYvoeeE2QbYCCrzmXhrMuWzI-vV3-1L8,1254
|
8
8
|
README.md,sha256=oY5Jc1uXehRASuwUJ0umin2vfkFh7tHF-LLruHTaQx0,3560
|
9
|
-
pyproject.toml,sha256=
|
9
|
+
pyproject.toml,sha256=VhTvWlzqOMI_FNIsQF2dCc-hSlNpNH26uMqDSWjI_-0,2835
|
10
10
|
.git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
|
11
11
|
.github/pull_request_template.md,sha256=F_cJXzooWMFgMGtLK-7KeGcQt0B4AYFse5oN0zQ9p6g,801
|
12
12
|
.github/ISSUE_TEMPLATE/bug_report.yml,sha256=WdRnt7HGxvsIBLzhkaOWNfg8IJQYa_oV9_F08Ym6znQ,1081
|
@@ -35,7 +35,7 @@ bec_widgets/assets/app_icons/bec_widgets_icon.png,sha256=K8dgGwIjalDh9PRHUsSQBqg
|
|
35
35
|
bec_widgets/assets/app_icons/ui_loader_tile.png,sha256=qSK3XHqvnAVGV9Q0ulORcGFbXJ9LDq2uz8l9uTtMsNk,1812476
|
36
36
|
bec_widgets/assets/app_icons/widget_launch_tile.png,sha256=bWsICHFfSe9-ESUj3AwlE95dDOea-f6M-s9fBapsxB4,2252911
|
37
37
|
bec_widgets/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
|
-
bec_widgets/cli/client.py,sha256=
|
38
|
+
bec_widgets/cli/client.py,sha256=YcHF_WYmCy4DcgLhYsjVuzESxvjOlG5Ip6E3v2GmBCk,97938
|
39
39
|
bec_widgets/cli/client_utils.py,sha256=F2hyt--jL53bN8NoWifNUMqwwx5FbpS6I1apERdTRzM,18114
|
40
40
|
bec_widgets/cli/generate_cli.py,sha256=K_wMxo2XBUn92SnY3dSrlyUn8ax6Y20QBGCuP284DsQ,10986
|
41
41
|
bec_widgets/cli/server.py,sha256=h7QyBOOGjyrP_fxJIIOSEMc4E06cLG0JyaofjNV6oCA,5671
|
@@ -58,7 +58,7 @@ bec_widgets/examples/plugin_example_pyside/tictactoe.py,sha256=s3rCurXloVcmMdzZi
|
|
58
58
|
bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py,sha256=MFMwONn4EZ3V8DboEG4I3BXpURE9JDbKB7XTzzfZl5w,1978
|
59
59
|
bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py,sha256=SiJaoX3OYA8YMkSwU1d7KEfSUjQQUsQgpRAxSSlr8oQ,2376
|
60
60
|
bec_widgets/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
|
-
bec_widgets/tests/utils.py,sha256=
|
61
|
+
bec_widgets/tests/utils.py,sha256=PVVhVrAVGqOI_BWZQRwCrJViIcwVHLZyeqWu8b7nN8k,7151
|
62
62
|
bec_widgets/utils/__init__.py,sha256=1930ji1Jj6dVuY81Wd2kYBhHYNV-2R0bN_L4o9zBj1U,533
|
63
63
|
bec_widgets/utils/bec_connector.py,sha256=ATOSyZqryn1QHPc7aotiDnUtzFhlj_gmcukMT_pqjHQ,19272
|
64
64
|
bec_widgets/utils/bec_designer.py,sha256=ehNl_i743rijmhPiIGNd1bihE7-l4oJzTVoa4yjPjls,5426
|
@@ -67,17 +67,18 @@ bec_widgets/utils/bec_plugin_helper.py,sha256=tLXEyzh0LWuRp-1XhJg32m-hUSLfRStC0Y
|
|
67
67
|
bec_widgets/utils/bec_signal_proxy.py,sha256=Yc08fdBEDABrowwNPSngT9-28R8FD4ml7oTL6BoMyEE,3263
|
68
68
|
bec_widgets/utils/bec_table.py,sha256=nA2b8ukSeUfquFMAxGrUVOqdrzMoDYD6O_4EYbOG2zk,717
|
69
69
|
bec_widgets/utils/bec_widget.py,sha256=jS888GioWKIJafMq5r1YhJ4vgORqiw0qHbxeSbE0Aec,4119
|
70
|
+
bec_widgets/utils/clickable_label.py,sha256=sCmfLdBjDguLfwYH_Qlv6oKHIoY3BcTjnfFqKPBUsik,323
|
70
71
|
bec_widgets/utils/collapsible_panel_manager.py,sha256=tvv77-9YTfYpsU6M_Le3bHR6wtANC83DEOrJ2Hhj6rs,14201
|
71
|
-
bec_widgets/utils/colors.py,sha256=
|
72
|
+
bec_widgets/utils/colors.py,sha256=i1DuwwdXzRs7HVq9m5wXSaZOJwLX5mJPvV6GAqylZhM,18341
|
72
73
|
bec_widgets/utils/compact_popup.py,sha256=xVK_lQqL5Hy1ZnUzHXB8GU-Ru-mXevKcdM8ync3ssiA,10269
|
73
74
|
bec_widgets/utils/container_utils.py,sha256=J8YXombOlAPa3M8NGZdhntp2NirBu4raDEQZOgP4elM,3791
|
74
75
|
bec_widgets/utils/crosshair.py,sha256=UZNM4GQnpYD6arN6CAgM9CTQ4LX6t24NoHozPU244Fc,22310
|
75
76
|
bec_widgets/utils/entry_validator.py,sha256=lwT8HP0RDG1FXENIeZ3IDEF2DQmD8KXGkRxPoMXbryk,1817
|
76
77
|
bec_widgets/utils/error_popups.py,sha256=UBAmD1YlAgKodpihudyf0VWtI59KGFiLgnjiKmKGjgk,13254
|
77
|
-
bec_widgets/utils/expandable_frame.py,sha256=
|
78
|
+
bec_widgets/utils/expandable_frame.py,sha256=ynqRFwXsd6jWT5C6qjNwmmHY9Rm9UCALeL32OPQkYgw,3785
|
78
79
|
bec_widgets/utils/filter_io.py,sha256=GKO6GOTiKxTuTp_SHp5Ewou54N7wIZXgWWvlFvhbBmw,5114
|
79
80
|
bec_widgets/utils/fps_counter.py,sha256=seuCWwiNP5q2e2OEztloa66pNb3Sygh-0lEHAcYaDfc,2612
|
80
|
-
bec_widgets/utils/generate_designer_plugin.py,sha256=
|
81
|
+
bec_widgets/utils/generate_designer_plugin.py,sha256=d_-cWQJ2s8Ff-XD_YQUgnVsRCMHBPcszXOAuJSeIWHM,5676
|
81
82
|
bec_widgets/utils/layout_manager.py,sha256=H0nKsIMaPxRkof1MEXlSmW6w1dFxA6astaGzf4stI84,4727
|
82
83
|
bec_widgets/utils/linear_region_selector.py,sha256=3C8Ebozchj1cWj6Dfx0zZzXo_6E-OllVlcPNlUGv1Cg,3320
|
83
84
|
bec_widgets/utils/name_utils.py,sha256=VEHq6lRty1yif3h1EK2nBRNQquGK-l_p-6H9Fmp6BEA,340
|
@@ -101,8 +102,9 @@ bec_widgets/utils/widget_io.py,sha256=afR7i59fw2WrEQCmkH5dwhz1uNjfMPnJTIhE8NWVBs
|
|
101
102
|
bec_widgets/utils/widget_state_manager.py,sha256=tzrxVmnGa6IHSEdeh-R68aQ934BsuS9nLQbwYQ78J90,7651
|
102
103
|
bec_widgets/utils/yaml_dialog.py,sha256=T6UyGNGdmpXW74fa_7Nk6b99T5pp2Wvyw3AOauRc8T8,2407
|
103
104
|
bec_widgets/utils/forms_from_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
104
|
-
bec_widgets/utils/forms_from_types/forms.py,sha256=
|
105
|
-
bec_widgets/utils/forms_from_types/items.py,sha256=
|
105
|
+
bec_widgets/utils/forms_from_types/forms.py,sha256=o2BPhegPDI5b6zzLIrFrWja2FkKWcz97iwSrl0j0JSM,10097
|
106
|
+
bec_widgets/utils/forms_from_types/items.py,sha256=Jkou4xvx9ZJmTATnPntGaFXW5MUa_ChXedPT3HzsdM8,13002
|
107
|
+
bec_widgets/utils/forms_from_types/styles.py,sha256=PeMx8bLI2PX0--U1QOS-3yuGQiyAX4W3EpL_IA5iIrI,702
|
106
108
|
bec_widgets/utils/plugin_templates/plugin.template,sha256=DWtJdHpdsVtbiTTOniH3zBe5a40ztQ20o_-Hclyu38s,1266
|
107
109
|
bec_widgets/utils/plugin_templates/register.template,sha256=XyL3OZPT_FTArLAM8tHd5qMqv2ZuAbJAZLsNNnHcagU,417
|
108
110
|
bec_widgets/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -200,7 +202,7 @@ bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit.pypro
|
|
200
202
|
bec_widgets/widgets/control/device_input/signal_line_edit/signal_line_edit_plugin.py,sha256=t2VBGsbysCL6154Z5Ny5Nk2UWcURMGS-ibVKiRvYs6Y,1384
|
201
203
|
bec_widgets/widgets/control/scan_control/__init__.py,sha256=IOfHl15vxb_uC6KN62-PeUzbBha_vQyqkkXbJ2HU674,38
|
202
204
|
bec_widgets/widgets/control/scan_control/register_scan_control.py,sha256=j7KrYSn9O6wp6ay2Yb7BWDjdbWzpkSLcCI0neeZi048,483
|
203
|
-
bec_widgets/widgets/control/scan_control/scan_control.py,sha256=
|
205
|
+
bec_widgets/widgets/control/scan_control/scan_control.py,sha256=F02Z3sQdggnMI3jmGi35IxePLRbNxTBRa1ZTv0NH4Zo,20363
|
204
206
|
bec_widgets/widgets/control/scan_control/scan_control.pyproject,sha256=eTgVDFKToIH8_BbJjM2RvbOLr7HnYoidX0SAHx640DM,30
|
205
207
|
bec_widgets/widgets/control/scan_control/scan_control_plugin.py,sha256=_XzNzBv9y3ut7Z_94hvB16Ewat76hq7xe0_762aEPA4,1278
|
206
208
|
bec_widgets/widgets/control/scan_control/scan_group_box.py,sha256=OhqjaYVpGnWBmlVi99DGA_wP48uPRQ2b75H_aaEz8D0,13673
|
@@ -218,13 +220,13 @@ bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui,sha256=JbdMEPzbA3p2
|
|
218
220
|
bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui,sha256=BVm0XydqbgmIYOs3YPQzQsL4v4gZzourR10dH_2NrVg,5078
|
219
221
|
bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py,sha256=7tB1gsvv310_kVuKf2u4EdSR4F1posm7QCrWH5Kih-Q,480
|
220
222
|
bec_widgets/widgets/editors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
221
|
-
bec_widgets/widgets/editors/dict_backed_table.py,sha256=
|
223
|
+
bec_widgets/widgets/editors/dict_backed_table.py,sha256=fKQ-50QzwqJs4JaFlGDx8OB4HEV1dMn5sVPEb_aDFxI,7244
|
222
224
|
bec_widgets/widgets/editors/jupyter_console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
223
225
|
bec_widgets/widgets/editors/jupyter_console/jupyter_console.py,sha256=-e7HQOECeH5eDrJYh4BFIzRL78LDkooU4otabyN0aX4,2343
|
224
226
|
bec_widgets/widgets/editors/scan_metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
225
|
-
bec_widgets/widgets/editors/scan_metadata/_util.py,sha256=
|
227
|
+
bec_widgets/widgets/editors/scan_metadata/_util.py,sha256=7bny4A1ZDNAt4ZzkdZclJS3r0jlQvEU2Kyj-G5Synms,2036
|
226
228
|
bec_widgets/widgets/editors/scan_metadata/register_scan_metadata.py,sha256=dGcd8AXM1E9i-N45_CIRdCIyKtHJlq_7neyKHrDx6C0,487
|
227
|
-
bec_widgets/widgets/editors/scan_metadata/scan_metadata.py,sha256=
|
229
|
+
bec_widgets/widgets/editors/scan_metadata/scan_metadata.py,sha256=t5sv6AgxxM4-Metgqh5OzOE5g7DNNvNZfBOjBvI8oh8,5445
|
228
230
|
bec_widgets/widgets/editors/scan_metadata/scan_metadata.pyproject,sha256=_4guiQAGxiQ4gSN5i5S160UnFXvPFC1W1nG77PubNYQ,31
|
229
231
|
bec_widgets/widgets/editors/scan_metadata/scan_metadata_plugin.py,sha256=ldp4O8JYh9WPwI0mybH1-4FOF-b6EOF6A0tRQCmbyxo,1329
|
230
232
|
bec_widgets/widgets/editors/text_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -254,9 +256,10 @@ bec_widgets/widgets/games/register_minesweeper.py,sha256=8fgMBD3yB-5_eGqhG_qxpj3
|
|
254
256
|
bec_widgets/widgets/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
255
257
|
bec_widgets/widgets/plots/plot_base.py,sha256=GETUsx51BE_Tuop8bC-KiFVrkR82TJ5S0cr7siouSWM,35848
|
256
258
|
bec_widgets/widgets/plots/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
257
|
-
bec_widgets/widgets/plots/image/image.py,sha256=
|
259
|
+
bec_widgets/widgets/plots/image/image.py,sha256=8s9DShQVAz458aPKfJTCWEmg8HoagCX3MkjFJZXSmek,17278
|
258
260
|
bec_widgets/widgets/plots/image/image.pyproject,sha256=_sRCIu4MNgToaB4D7tUMWq3xKX6T2VoRS3UzGNIseHQ,23
|
259
|
-
bec_widgets/widgets/plots/image/
|
261
|
+
bec_widgets/widgets/plots/image/image_base.py,sha256=_c4rYRX2AwGyy0WWUhaAJl3gNfXSq1ts99MG8rsa-6w,36104
|
262
|
+
bec_widgets/widgets/plots/image/image_item.py,sha256=rkL1o35Pgs1zhvv2wpSG1gt_bjP5kO4Z1oy6d2q-Yls,8577
|
260
263
|
bec_widgets/widgets/plots/image/image_plugin.py,sha256=R0Hzh2GgYlfZLPZwOMgqLKKIA5DxEnTcSrbI7zTe-tI,1204
|
261
264
|
bec_widgets/widgets/plots/image/image_processor.py,sha256=0qsQIyB__xxBwNIoXhFbB0wSiB8n7n_oX4cvfFsUzOs,4304
|
262
265
|
bec_widgets/widgets/plots/image/image_roi_plot.py,sha256=5CWy_eC-GS2ZLJTj2ItrVCoKhPN2g3fx6L4ktf5yVFQ,1191
|
@@ -344,13 +347,14 @@ bec_widgets/widgets/services/bec_status_box/bec_status_box_plugin.py,sha256=2tBP
|
|
344
347
|
bec_widgets/widgets/services/bec_status_box/register_bec_status_box.py,sha256=_1gr5nid6D5ZEvvt-GPyXhEGfacSh_QW0oWKxmZrUmY,490
|
345
348
|
bec_widgets/widgets/services/bec_status_box/status_item.py,sha256=CNhGk6J8iNvlldibcuy4PFQULRHvgqHyot-UJ8xfVJw,5609
|
346
349
|
bec_widgets/widgets/services/device_browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
347
|
-
bec_widgets/widgets/services/device_browser/device_browser.py,sha256=
|
350
|
+
bec_widgets/widgets/services/device_browser/device_browser.py,sha256=ivr6BSjS_MRJujmsE_dvOns3iBXf76LAlnIg_ueJXNs,5298
|
348
351
|
bec_widgets/widgets/services/device_browser/device_browser.pyproject,sha256=s0vM1xYUwyU6Je68_hSCSBLK8ZPfHB-ftt4flfdpkXY,32
|
349
352
|
bec_widgets/widgets/services/device_browser/device_browser.ui,sha256=Dy_3oXArScP-_7hRI6nQ7SKKnihuyYAzJfXiRxxJQBE,1077
|
350
353
|
bec_widgets/widgets/services/device_browser/device_browser_plugin.py,sha256=JS4uYQclT-h0jMTPZ_wZgi5MCert--gjmmBks_EmEoo,1299
|
351
354
|
bec_widgets/widgets/services/device_browser/register_device_browser.py,sha256=OrL6NwN47TMu-ib6vqtnQ3ogePMWVipG3IfEXyq2OqY,509
|
355
|
+
bec_widgets/widgets/services/device_browser/util.py,sha256=aDtRa53L4-CGn4rM9IKqUP80pBYBxh4pssE1Tc46tAo,370
|
352
356
|
bec_widgets/widgets/services/device_browser/device_item/__init__.py,sha256=VGY-uNVCnpcY-q-gijteB2N8KxFNgYR-qQ209MVu1QI,36
|
353
|
-
bec_widgets/widgets/services/device_browser/device_item/device_item.py,sha256=
|
357
|
+
bec_widgets/widgets/services/device_browser/device_item/device_item.py,sha256=g8kjFxErwAD_QpxtM-HLYh7DauTuilW-pYoGNshw-vk,5153
|
354
358
|
bec_widgets/widgets/utility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
355
359
|
bec_widgets/widgets/utility/logpanel/__init__.py,sha256=HldSvPLYgrqBjCgIQj0f7Wa4slkSMksk4bsRJOQi__Y,91
|
356
360
|
bec_widgets/widgets/utility/logpanel/_util.py,sha256=GqzHbdOTmWBru9OR4weeYdziWj_cWxqSJhS4_6W3Qjg,1836
|
@@ -403,8 +407,8 @@ bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py,sha256=O
|
|
403
407
|
bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject,sha256=Lbi9zb6HNlIq14k6hlzR-oz6PIFShBuF7QxE6d87d64,34
|
404
408
|
bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py,sha256=CzChz2SSETYsR8-36meqWnsXCT-FIy_J_xeU5coWDY8,1350
|
405
409
|
bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py,sha256=rMpZ1CaoucwobgPj1FuKTnt07W82bV1GaSYdoqcdMb8,521
|
406
|
-
bec_widgets-2.
|
407
|
-
bec_widgets-2.
|
408
|
-
bec_widgets-2.
|
409
|
-
bec_widgets-2.
|
410
|
-
bec_widgets-2.
|
410
|
+
bec_widgets-2.12.0.dist-info/METADATA,sha256=FoTDKomAsElhYvoeeE2QbYCCrzmXhrMuWzI-vV3-1L8,1254
|
411
|
+
bec_widgets-2.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
412
|
+
bec_widgets-2.12.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
|
413
|
+
bec_widgets-2.12.0.dist-info/licenses/LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
|
414
|
+
bec_widgets-2.12.0.dist-info/RECORD,,
|
pyproject.toml
CHANGED
File without changes
|
File without changes
|
File without changes
|