bec-widgets 2.13.2__py3-none-any.whl → 2.14.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 +13 -0
- PKG-INFO +1 -1
- bec_widgets/cli/client.py +123 -1
- bec_widgets/widgets/plots/image/image_base.py +12 -1
- bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py +42 -22
- bec_widgets/widgets/plots/roi/image_roi.py +86 -0
- {bec_widgets-2.13.2.dist-info → bec_widgets-2.14.0.dist-info}/METADATA +1 -1
- {bec_widgets-2.13.2.dist-info → bec_widgets-2.14.0.dist-info}/RECORD +12 -12
- pyproject.toml +1 -1
- {bec_widgets-2.13.2.dist-info → bec_widgets-2.14.0.dist-info}/WHEEL +0 -0
- {bec_widgets-2.13.2.dist-info → bec_widgets-2.14.0.dist-info}/entry_points.txt +0 -0
- {bec_widgets-2.13.2.dist-info → bec_widgets-2.14.0.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.14.0 (2025-06-13)
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
- **image_roi**: Added EllipticalROI
|
9
|
+
([`af8db0b`](https://github.com/bec-project/bec_widgets/commit/af8db0bede32dd10ad72671a8c2978ca884f4994))
|
10
|
+
|
11
|
+
### Refactoring
|
12
|
+
|
13
|
+
- **image_roi_tree**: Shape switch logic adjusted to reduce code repetition
|
14
|
+
([`f0d48a0`](https://github.com/bec-project/bec_widgets/commit/f0d48a05085bb8c628e516d4a976d776ee63c7c3))
|
15
|
+
|
16
|
+
|
4
17
|
## v2.13.2 (2025-06-13)
|
5
18
|
|
6
19
|
### Bug Fixes
|
PKG-INFO
CHANGED
bec_widgets/cli/client.py
CHANGED
@@ -1044,6 +1044,128 @@ class DeviceLineEdit(RPCBase):
|
|
1044
1044
|
"""
|
1045
1045
|
|
1046
1046
|
|
1047
|
+
class EllipticalROI(RPCBase):
|
1048
|
+
"""Elliptical Region of Interest with centre/width/height tracking and auto-labelling."""
|
1049
|
+
|
1050
|
+
@property
|
1051
|
+
@rpc_call
|
1052
|
+
def label(self) -> "str":
|
1053
|
+
"""
|
1054
|
+
Gets the display name of this ROI.
|
1055
|
+
|
1056
|
+
Returns:
|
1057
|
+
str: The current name of the ROI.
|
1058
|
+
"""
|
1059
|
+
|
1060
|
+
@label.setter
|
1061
|
+
@rpc_call
|
1062
|
+
def label(self) -> "str":
|
1063
|
+
"""
|
1064
|
+
Gets the display name of this ROI.
|
1065
|
+
|
1066
|
+
Returns:
|
1067
|
+
str: The current name of the ROI.
|
1068
|
+
"""
|
1069
|
+
|
1070
|
+
@property
|
1071
|
+
@rpc_call
|
1072
|
+
def movable(self) -> "bool":
|
1073
|
+
"""
|
1074
|
+
Gets whether this ROI is movable.
|
1075
|
+
|
1076
|
+
Returns:
|
1077
|
+
bool: True if the ROI can be moved, False otherwise.
|
1078
|
+
"""
|
1079
|
+
|
1080
|
+
@movable.setter
|
1081
|
+
@rpc_call
|
1082
|
+
def movable(self) -> "bool":
|
1083
|
+
"""
|
1084
|
+
Gets whether this ROI is movable.
|
1085
|
+
|
1086
|
+
Returns:
|
1087
|
+
bool: True if the ROI can be moved, False otherwise.
|
1088
|
+
"""
|
1089
|
+
|
1090
|
+
@property
|
1091
|
+
@rpc_call
|
1092
|
+
def line_color(self) -> "str":
|
1093
|
+
"""
|
1094
|
+
Gets the current line color of the ROI.
|
1095
|
+
|
1096
|
+
Returns:
|
1097
|
+
str: The current line color as a string (e.g., hex color code).
|
1098
|
+
"""
|
1099
|
+
|
1100
|
+
@line_color.setter
|
1101
|
+
@rpc_call
|
1102
|
+
def line_color(self) -> "str":
|
1103
|
+
"""
|
1104
|
+
Gets the current line color of the ROI.
|
1105
|
+
|
1106
|
+
Returns:
|
1107
|
+
str: The current line color as a string (e.g., hex color code).
|
1108
|
+
"""
|
1109
|
+
|
1110
|
+
@property
|
1111
|
+
@rpc_call
|
1112
|
+
def line_width(self) -> "int":
|
1113
|
+
"""
|
1114
|
+
Gets the current line width of the ROI.
|
1115
|
+
|
1116
|
+
Returns:
|
1117
|
+
int: The current line width in pixels.
|
1118
|
+
"""
|
1119
|
+
|
1120
|
+
@line_width.setter
|
1121
|
+
@rpc_call
|
1122
|
+
def line_width(self) -> "int":
|
1123
|
+
"""
|
1124
|
+
Gets the current line width of the ROI.
|
1125
|
+
|
1126
|
+
Returns:
|
1127
|
+
int: The current line width in pixels.
|
1128
|
+
"""
|
1129
|
+
|
1130
|
+
@rpc_call
|
1131
|
+
def get_coordinates(self, typed: "bool | None" = None) -> "dict | tuple":
|
1132
|
+
"""
|
1133
|
+
Return the ellipse's centre and size.
|
1134
|
+
|
1135
|
+
Args:
|
1136
|
+
typed (bool | None): If True returns dict; otherwise tuple.
|
1137
|
+
"""
|
1138
|
+
|
1139
|
+
@rpc_call
|
1140
|
+
def get_data_from_image(
|
1141
|
+
self, image_item: "pg.ImageItem | None" = None, returnMappedCoords: "bool" = False, **kwargs
|
1142
|
+
):
|
1143
|
+
"""
|
1144
|
+
Wrapper around `pyqtgraph.ROI.getArrayRegion`.
|
1145
|
+
|
1146
|
+
Args:
|
1147
|
+
image_item (pg.ImageItem or None): The ImageItem to sample. If None, auto-detects
|
1148
|
+
the first `ImageItem` in the same GraphicsScene as this ROI.
|
1149
|
+
returnMappedCoords (bool): If True, also returns the coordinate array generated by
|
1150
|
+
*getArrayRegion*.
|
1151
|
+
**kwargs: Additional keyword arguments passed to *getArrayRegion* or *affineSlice*,
|
1152
|
+
such as `axes`, `order`, `shape`, etc.
|
1153
|
+
|
1154
|
+
Returns:
|
1155
|
+
ndarray: Pixel data inside the ROI, or (data, coords) if *returnMappedCoords* is True.
|
1156
|
+
"""
|
1157
|
+
|
1158
|
+
@rpc_call
|
1159
|
+
def set_position(self, x: "float", y: "float"):
|
1160
|
+
"""
|
1161
|
+
Sets the position of the ROI.
|
1162
|
+
|
1163
|
+
Args:
|
1164
|
+
x (float): The x-coordinate of the new position.
|
1165
|
+
y (float): The y-coordinate of the new position.
|
1166
|
+
"""
|
1167
|
+
|
1168
|
+
|
1047
1169
|
class Image(RPCBase):
|
1048
1170
|
"""Image widget for displaying 2D data."""
|
1049
1171
|
|
@@ -1529,7 +1651,7 @@ class Image(RPCBase):
|
|
1529
1651
|
@rpc_call
|
1530
1652
|
def add_roi(
|
1531
1653
|
self,
|
1532
|
-
kind: "Literal['rect', 'circle']" = "rect",
|
1654
|
+
kind: "Literal['rect', 'circle', 'ellipse']" = "rect",
|
1533
1655
|
name: "str | None" = None,
|
1534
1656
|
line_width: "int | None" = 5,
|
1535
1657
|
pos: "tuple[float, float] | None" = (10, 10),
|
@@ -24,6 +24,7 @@ from bec_widgets.widgets.plots.plot_base import PlotBase
|
|
24
24
|
from bec_widgets.widgets.plots.roi.image_roi import (
|
25
25
|
BaseROI,
|
26
26
|
CircularROI,
|
27
|
+
EllipticalROI,
|
27
28
|
RectangularROI,
|
28
29
|
ROIController,
|
29
30
|
)
|
@@ -554,7 +555,7 @@ class ImageBase(PlotBase):
|
|
554
555
|
|
555
556
|
def add_roi(
|
556
557
|
self,
|
557
|
-
kind: Literal["rect", "circle"] = "rect",
|
558
|
+
kind: Literal["rect", "circle", "ellipse"] = "rect",
|
558
559
|
name: str | None = None,
|
559
560
|
line_width: int | None = 5,
|
560
561
|
pos: tuple[float, float] | None = (10, 10),
|
@@ -599,6 +600,16 @@ class ImageBase(PlotBase):
|
|
599
600
|
movable=movable,
|
600
601
|
**pg_kwargs,
|
601
602
|
)
|
603
|
+
elif kind == "ellipse":
|
604
|
+
roi = EllipticalROI(
|
605
|
+
pos=pos,
|
606
|
+
size=size,
|
607
|
+
parent_image=self,
|
608
|
+
line_width=line_width,
|
609
|
+
label=name,
|
610
|
+
movable=movable,
|
611
|
+
**pg_kwargs,
|
612
|
+
)
|
602
613
|
else:
|
603
614
|
raise ValueError("kind must be 'rect' or 'circle'")
|
604
615
|
|
@@ -24,6 +24,7 @@ from bec_widgets.utils.toolbar import MaterialIconAction, ModularToolBar
|
|
24
24
|
from bec_widgets.widgets.plots.roi.image_roi import (
|
25
25
|
BaseROI,
|
26
26
|
CircularROI,
|
27
|
+
EllipticalROI,
|
27
28
|
RectangularROI,
|
28
29
|
ROIController,
|
29
30
|
)
|
@@ -121,11 +122,21 @@ class ROIPropertyTree(BECWidget, QWidget):
|
|
121
122
|
# --------------------------------------------------------------------- UI
|
122
123
|
def _init_toolbar(self):
|
123
124
|
tb = ModularToolBar(self, self, orientation="horizontal")
|
125
|
+
self._draw_actions: dict[str, MaterialIconAction] = {}
|
124
126
|
# --- ROI draw actions (toggleable) ---
|
125
127
|
self.add_rect_action = MaterialIconAction("add_box", "Add Rect ROI", True, self)
|
126
|
-
self.add_circle_action = MaterialIconAction("add_circle", "Add Circle ROI", True, self)
|
127
128
|
tb.add_action("Add Rect ROI", self.add_rect_action, self)
|
129
|
+
self._draw_actions["rect"] = self.add_rect_action
|
130
|
+
self.add_circle_action = MaterialIconAction("add_circle", "Add Circle ROI", True, self)
|
128
131
|
tb.add_action("Add Circle ROI", self.add_circle_action, self)
|
132
|
+
self._draw_actions["circle"] = self.add_circle_action
|
133
|
+
# --- Ellipse ROI draw action ---
|
134
|
+
self.add_ellipse_action = MaterialIconAction("vignette", "Add Ellipse ROI", True, self)
|
135
|
+
tb.add_action("Add Ellipse ROI", self.add_ellipse_action, self)
|
136
|
+
self._draw_actions["ellipse"] = self.add_ellipse_action
|
137
|
+
|
138
|
+
for mode, act in self._draw_actions.items():
|
139
|
+
act.action.toggled.connect(lambda on, m=mode: self._on_draw_action_toggled(m, on))
|
129
140
|
|
130
141
|
# Expand/Collapse toggle
|
131
142
|
self.expand_toggle = MaterialIconAction(
|
@@ -174,17 +185,9 @@ class ROIPropertyTree(BECWidget, QWidget):
|
|
174
185
|
self.controller.paletteChanged.connect(lambda cmap: setattr(self.cmap, "colormap", cmap))
|
175
186
|
|
176
187
|
# ROI drawing state
|
177
|
-
self._roi_draw_mode = None # 'rect' | 'circle' | None
|
188
|
+
self._roi_draw_mode = None # 'rect' | 'circle' | 'ellipse' | None
|
178
189
|
self._roi_start_pos = None # QPointF in image coords
|
179
190
|
self._temp_roi = None # live ROI being resized while dragging
|
180
|
-
|
181
|
-
# toggle handlers
|
182
|
-
self.add_rect_action.action.toggled.connect(
|
183
|
-
lambda on: self._set_roi_draw_mode("rect" if on else None)
|
184
|
-
)
|
185
|
-
self.add_circle_action.action.toggled.connect(
|
186
|
-
lambda on: self._set_roi_draw_mode("circle" if on else None)
|
187
|
-
)
|
188
191
|
# capture mouse events on the plot scene
|
189
192
|
self.plot.scene().installEventFilter(self)
|
190
193
|
|
@@ -214,16 +217,12 @@ class ROIPropertyTree(BECWidget, QWidget):
|
|
214
217
|
return str(value)
|
215
218
|
|
216
219
|
def _set_roi_draw_mode(self, mode: str | None):
|
217
|
-
#
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
self.add_circle_action.action.setChecked(True)
|
224
|
-
else:
|
225
|
-
self.add_rect_action.action.setChecked(False)
|
226
|
-
self.add_circle_action.action.setChecked(False)
|
220
|
+
# Update toolbar actions so that only the selected mode is checked
|
221
|
+
for m, act in self._draw_actions.items():
|
222
|
+
act.action.blockSignals(True)
|
223
|
+
act.action.setChecked(m == mode)
|
224
|
+
act.action.blockSignals(False)
|
225
|
+
|
227
226
|
self._roi_draw_mode = mode
|
228
227
|
self._roi_start_pos = None
|
229
228
|
# remove any unfinished temp ROI
|
@@ -231,6 +230,15 @@ class ROIPropertyTree(BECWidget, QWidget):
|
|
231
230
|
self.plot.removeItem(self._temp_roi)
|
232
231
|
self._temp_roi = None
|
233
232
|
|
233
|
+
def _on_draw_action_toggled(self, mode: str, checked: bool):
|
234
|
+
if checked:
|
235
|
+
# Activate selected mode
|
236
|
+
self._set_roi_draw_mode(mode)
|
237
|
+
else:
|
238
|
+
# If the active mode is being unchecked, clear mode
|
239
|
+
if self._roi_draw_mode == mode:
|
240
|
+
self._set_roi_draw_mode(None)
|
241
|
+
|
234
242
|
def eventFilter(self, obj, event):
|
235
243
|
if self._roi_draw_mode is None:
|
236
244
|
return super().eventFilter(obj, event)
|
@@ -243,12 +251,18 @@ class ROIPropertyTree(BECWidget, QWidget):
|
|
243
251
|
parent_image=self.image_widget,
|
244
252
|
resize_handles=False,
|
245
253
|
)
|
246
|
-
|
254
|
+
elif self._roi_draw_mode == "circle":
|
247
255
|
self._temp_roi = CircularROI(
|
248
256
|
pos=[self._roi_start_pos.x() - 2.5, self._roi_start_pos.y() - 2.5],
|
249
257
|
size=[5, 5],
|
250
258
|
parent_image=self.image_widget,
|
251
259
|
)
|
260
|
+
elif self._roi_draw_mode == "ellipse":
|
261
|
+
self._temp_roi = EllipticalROI(
|
262
|
+
pos=[self._roi_start_pos.x() - 2.5, self._roi_start_pos.y() - 2.5],
|
263
|
+
size=[5, 5],
|
264
|
+
parent_image=self.image_widget,
|
265
|
+
)
|
252
266
|
self.plot.addItem(self._temp_roi)
|
253
267
|
return True
|
254
268
|
elif event.type() == QEvent.GraphicsSceneMouseMove and self._temp_roi is not None:
|
@@ -258,13 +272,19 @@ class ROIPropertyTree(BECWidget, QWidget):
|
|
258
272
|
|
259
273
|
if self._roi_draw_mode == "rect":
|
260
274
|
self._temp_roi.setSize([dx, dy])
|
261
|
-
|
275
|
+
elif self._roi_draw_mode == "circle":
|
262
276
|
r = max(
|
263
277
|
1, math.hypot(dx, dy)
|
264
278
|
) # radius never smaller than 1 for safety of handle mapping, otherwise SEGFAULT
|
265
279
|
d = 2 * r # diameter
|
266
280
|
self._temp_roi.setPos(self._roi_start_pos.x() - r, self._roi_start_pos.y() - r)
|
267
281
|
self._temp_roi.setSize([d, d])
|
282
|
+
elif self._roi_draw_mode == "ellipse":
|
283
|
+
# Safeguard: enforce a minimum ellipse width/height of 2 px
|
284
|
+
min_dim = 2.0
|
285
|
+
w = dx if abs(dx) >= min_dim else math.copysign(min_dim, dx or 1.0)
|
286
|
+
h = dy if abs(dy) >= min_dim else math.copysign(min_dim, dy or 1.0)
|
287
|
+
self._temp_roi.setSize([w, h])
|
268
288
|
return True
|
269
289
|
elif (
|
270
290
|
event.type() == QEvent.GraphicsSceneMouseRelease
|
@@ -750,6 +750,92 @@ class CircularROI(BaseROI, pg.CircleROI):
|
|
750
750
|
return None
|
751
751
|
|
752
752
|
|
753
|
+
class EllipticalROI(BaseROI, pg.EllipseROI):
|
754
|
+
"""
|
755
|
+
Elliptical Region of Interest with centre/width/height tracking and auto-labelling.
|
756
|
+
|
757
|
+
Mirrors the behaviour of ``CircularROI`` but supports independent
|
758
|
+
horizontal and vertical radii.
|
759
|
+
"""
|
760
|
+
|
761
|
+
centerChanged = Signal(float, float, float, float) # cx, cy, width, height
|
762
|
+
centerReleased = Signal(float, float, float, float)
|
763
|
+
|
764
|
+
def __init__(
|
765
|
+
self,
|
766
|
+
*,
|
767
|
+
pos,
|
768
|
+
size,
|
769
|
+
pen=None,
|
770
|
+
config: ConnectionConfig | None = None,
|
771
|
+
gui_id: str | None = None,
|
772
|
+
parent_image: Image | None = None,
|
773
|
+
label: str | None = None,
|
774
|
+
line_color: str | None = None,
|
775
|
+
line_width: int = 5,
|
776
|
+
movable: bool = True,
|
777
|
+
**extra_pg,
|
778
|
+
):
|
779
|
+
super().__init__(
|
780
|
+
config=config,
|
781
|
+
gui_id=gui_id,
|
782
|
+
parent_image=parent_image,
|
783
|
+
label=label,
|
784
|
+
line_color=line_color,
|
785
|
+
line_width=line_width,
|
786
|
+
pos=pos,
|
787
|
+
size=size,
|
788
|
+
pen=pen,
|
789
|
+
movable=movable,
|
790
|
+
**extra_pg,
|
791
|
+
)
|
792
|
+
|
793
|
+
self.sigRegionChanged.connect(self._on_region_changed)
|
794
|
+
self._adorner = LabelAdorner(self)
|
795
|
+
self.hoverPen = fn.mkPen(color=(255, 0, 0), width=3, style=QtCore.Qt.DashLine)
|
796
|
+
self.handleHoverPen = fn.mkPen("lime", width=4)
|
797
|
+
|
798
|
+
def add_scale_handle(self):
|
799
|
+
"""Add scale handles to the elliptical ROI."""
|
800
|
+
self._addHandles() # delegates to pg.EllipseROI
|
801
|
+
|
802
|
+
def _on_region_changed(self):
|
803
|
+
w = abs(self.state["size"][0])
|
804
|
+
h = abs(self.state["size"][1])
|
805
|
+
cx = self.pos().x() + w / 2
|
806
|
+
cy = self.pos().y() + h / 2
|
807
|
+
self.centerChanged.emit(cx, cy, w, h)
|
808
|
+
self.parent_plot_item.vb.update()
|
809
|
+
|
810
|
+
def mouseDragEvent(self, ev):
|
811
|
+
super().mouseDragEvent(ev)
|
812
|
+
if ev.isFinish():
|
813
|
+
w = abs(self.state["size"][0])
|
814
|
+
h = abs(self.state["size"][1])
|
815
|
+
cx = self.pos().x() + w / 2
|
816
|
+
cy = self.pos().y() + h / 2
|
817
|
+
self.centerReleased.emit(cx, cy, w, h)
|
818
|
+
|
819
|
+
def get_coordinates(self, typed: bool | None = None) -> dict | tuple:
|
820
|
+
"""
|
821
|
+
Return the ellipse's centre and size.
|
822
|
+
|
823
|
+
Args:
|
824
|
+
typed (bool | None): If True returns dict; otherwise tuple.
|
825
|
+
"""
|
826
|
+
if typed is None:
|
827
|
+
typed = self.description
|
828
|
+
|
829
|
+
w, h = map(abs, self.state["size"]) # raw diameters
|
830
|
+
major, minor = (w, h) if w >= h else (h, w)
|
831
|
+
cx = self.pos().x() + w / 2
|
832
|
+
cy = self.pos().y() + h / 2
|
833
|
+
|
834
|
+
if typed:
|
835
|
+
return {"center_x": cx, "center_y": cy, "major_axis": major, "minor_axis": minor}
|
836
|
+
return (cx, cy, major, minor)
|
837
|
+
|
838
|
+
|
753
839
|
class ROIController(QObject):
|
754
840
|
"""Manages a collection of ROIs (Regions of Interest) with palette-assigned colors.
|
755
841
|
|
@@ -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=8Q0rbZR9aGHaASYpr06r4ZzGjuVL3ANdmGddlS-VCaQ,299790
|
6
6
|
LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
|
7
|
-
PKG-INFO,sha256=
|
7
|
+
PKG-INFO,sha256=jremuY9vBAc7Gqo3FzN0bTR8fSa4zQGwMYTfzfmEYDg,1252
|
8
8
|
README.md,sha256=oY5Jc1uXehRASuwUJ0umin2vfkFh7tHF-LLruHTaQx0,3560
|
9
|
-
pyproject.toml,sha256=
|
9
|
+
pyproject.toml,sha256=2TeVnTuAoLHdPUi8NCUhJDAL3FStOjF7eYp3BDbL4i8,2827
|
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
|
@@ -36,7 +36,7 @@ bec_widgets/assets/app_icons/bec_widgets_icon.png,sha256=K8dgGwIjalDh9PRHUsSQBqg
|
|
36
36
|
bec_widgets/assets/app_icons/ui_loader_tile.png,sha256=qSK3XHqvnAVGV9Q0ulORcGFbXJ9LDq2uz8l9uTtMsNk,1812476
|
37
37
|
bec_widgets/assets/app_icons/widget_launch_tile.png,sha256=bWsICHFfSe9-ESUj3AwlE95dDOea-f6M-s9fBapsxB4,2252911
|
38
38
|
bec_widgets/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
|
-
bec_widgets/cli/client.py,sha256=
|
39
|
+
bec_widgets/cli/client.py,sha256=Nlc9RodoiykU846Dy_HGfZmtI-fhwwCSwxU0dpu_Qg4,102491
|
40
40
|
bec_widgets/cli/client_utils.py,sha256=F2hyt--jL53bN8NoWifNUMqwwx5FbpS6I1apERdTRzM,18114
|
41
41
|
bec_widgets/cli/generate_cli.py,sha256=K_wMxo2XBUn92SnY3dSrlyUn8ax6Y20QBGCuP284DsQ,10986
|
42
42
|
bec_widgets/cli/server.py,sha256=h7QyBOOGjyrP_fxJIIOSEMc4E06cLG0JyaofjNV6oCA,5671
|
@@ -259,14 +259,14 @@ bec_widgets/widgets/plots/plot_base.py,sha256=GETUsx51BE_Tuop8bC-KiFVrkR82TJ5S0c
|
|
259
259
|
bec_widgets/widgets/plots/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
260
260
|
bec_widgets/widgets/plots/image/image.py,sha256=wrI9C2xNEoQmCWoKjlSdRHroWHffIg_DFT4fNDTgAyE,20299
|
261
261
|
bec_widgets/widgets/plots/image/image.pyproject,sha256=_sRCIu4MNgToaB4D7tUMWq3xKX6T2VoRS3UzGNIseHQ,23
|
262
|
-
bec_widgets/widgets/plots/image/image_base.py,sha256=
|
262
|
+
bec_widgets/widgets/plots/image/image_base.py,sha256=q8b2kvUXsD6-6ld4r3TSMJEKYS158VzK-r88SIdB9Os,36549
|
263
263
|
bec_widgets/widgets/plots/image/image_item.py,sha256=rkL1o35Pgs1zhvv2wpSG1gt_bjP5kO4Z1oy6d2q-Yls,8577
|
264
264
|
bec_widgets/widgets/plots/image/image_plugin.py,sha256=R0Hzh2GgYlfZLPZwOMgqLKKIA5DxEnTcSrbI7zTe-tI,1204
|
265
265
|
bec_widgets/widgets/plots/image/image_processor.py,sha256=0qsQIyB__xxBwNIoXhFbB0wSiB8n7n_oX4cvfFsUzOs,4304
|
266
266
|
bec_widgets/widgets/plots/image/image_roi_plot.py,sha256=5CWy_eC-GS2ZLJTj2ItrVCoKhPN2g3fx6L4ktf5yVFQ,1191
|
267
267
|
bec_widgets/widgets/plots/image/register_image.py,sha256=0rvFyAMGRZcknc7nMVwsMGSfY8L2j9cdtQhbO5TMzeM,455
|
268
268
|
bec_widgets/widgets/plots/image/setting_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
269
|
-
bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py,sha256=
|
269
|
+
bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py,sha256=atfW9xOMqYtdmdnkch4P5cNCSFmx9nz7-o8PjOYed8I,17481
|
270
270
|
bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
271
271
|
bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py,sha256=ezs2TWZCz-3npbIFEiYuHNiuSvJptJznTEZWD_CX3po,4705
|
272
272
|
bec_widgets/widgets/plots/image/toolbar_bundles/processing.py,sha256=99hgd1q86ZUhQYTTsFCk3Ml8oAEeZJy-WqdmsMO4bzA,3367
|
@@ -291,7 +291,7 @@ bec_widgets/widgets/plots/multi_waveform/settings/multi_waveform_controls.ui,sha
|
|
291
291
|
bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
292
292
|
bec_widgets/widgets/plots/multi_waveform/toolbar_bundles/monitor_selection.py,sha256=lGreAkRBd-A4X_wqYZiKyGDmb_3uzLunjSju9A2PjWw,2532
|
293
293
|
bec_widgets/widgets/plots/roi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
294
|
-
bec_widgets/widgets/plots/roi/image_roi.py,sha256
|
294
|
+
bec_widgets/widgets/plots/roi/image_roi.py,sha256=-i-HWsBgP6Yt0Tnc2I5s21X0flsJ5zBDxjkoi55mJhU,37542
|
295
295
|
bec_widgets/widgets/plots/scatter_waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
296
296
|
bec_widgets/widgets/plots/scatter_waveform/register_scatter_waveform.py,sha256=KttVjlAK3PfP9tyMfLnqEm6kphap8NZyqyaRry8oebY,514
|
297
297
|
bec_widgets/widgets/plots/scatter_waveform/scatter_curve.py,sha256=nCyZ_6EunS1m5XkLB-CwfBV9L4IX04D9SpHlHc8zG_I,6763
|
@@ -408,8 +408,8 @@ bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py,sha256=O
|
|
408
408
|
bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject,sha256=Lbi9zb6HNlIq14k6hlzR-oz6PIFShBuF7QxE6d87d64,34
|
409
409
|
bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py,sha256=CzChz2SSETYsR8-36meqWnsXCT-FIy_J_xeU5coWDY8,1350
|
410
410
|
bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py,sha256=rMpZ1CaoucwobgPj1FuKTnt07W82bV1GaSYdoqcdMb8,521
|
411
|
-
bec_widgets-2.
|
412
|
-
bec_widgets-2.
|
413
|
-
bec_widgets-2.
|
414
|
-
bec_widgets-2.
|
415
|
-
bec_widgets-2.
|
411
|
+
bec_widgets-2.14.0.dist-info/METADATA,sha256=jremuY9vBAc7Gqo3FzN0bTR8fSa4zQGwMYTfzfmEYDg,1252
|
412
|
+
bec_widgets-2.14.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
413
|
+
bec_widgets-2.14.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
|
414
|
+
bec_widgets-2.14.0.dist-info/licenses/LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
|
415
|
+
bec_widgets-2.14.0.dist-info/RECORD,,
|
pyproject.toml
CHANGED
File without changes
|
File without changes
|
File without changes
|