bec-widgets 2.12.4__py3-none-any.whl → 2.13.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 CHANGED
@@ -1,6 +1,22 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.13.0 (2025-06-10)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **roi**: Removed roi handle adding/removing inconsistencies
9
+ ([`f904499`](https://github.com/bec-project/bec_widgets/commit/f9044996f6d62cdbb693149934b09625fb39fd55))
10
+
11
+ ### Features
12
+
13
+ - **image_roi_tree**: Lock/unlock rois possible through the ROIPropertyTree
14
+ ([`594185d`](https://github.com/bec-project/bec_widgets/commit/594185dde9c73991489f2154507f1c3d3822c5b4))
15
+
16
+ - **roi**: Rois can be lock to be not moved by mouse
17
+ ([`46d7e3f`](https://github.com/bec-project/bec_widgets/commit/46d7e3f5170a5f8b444043bc49651921816f7003))
18
+
19
+
4
20
  ## v2.12.4 (2025-06-10)
5
21
 
6
22
  ### Bug Fixes
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.12.4
3
+ Version: 2.13.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
bec_widgets/cli/client.py CHANGED
@@ -530,6 +530,26 @@ class BaseROI(RPCBase):
530
530
  str: The current name of the ROI.
531
531
  """
532
532
 
533
+ @property
534
+ @rpc_call
535
+ def movable(self) -> "bool":
536
+ """
537
+ Gets whether this ROI is movable.
538
+
539
+ Returns:
540
+ bool: True if the ROI can be moved, False otherwise.
541
+ """
542
+
543
+ @movable.setter
544
+ @rpc_call
545
+ def movable(self) -> "bool":
546
+ """
547
+ Gets whether this ROI is movable.
548
+
549
+ Returns:
550
+ bool: True if the ROI can be moved, False otherwise.
551
+ """
552
+
533
553
  @property
534
554
  @rpc_call
535
555
  def line_color(self) -> "str":
@@ -639,6 +659,26 @@ class CircularROI(RPCBase):
639
659
  str: The current name of the ROI.
640
660
  """
641
661
 
662
+ @property
663
+ @rpc_call
664
+ def movable(self) -> "bool":
665
+ """
666
+ Gets whether this ROI is movable.
667
+
668
+ Returns:
669
+ bool: True if the ROI can be moved, False otherwise.
670
+ """
671
+
672
+ @movable.setter
673
+ @rpc_call
674
+ def movable(self) -> "bool":
675
+ """
676
+ Gets whether this ROI is movable.
677
+
678
+ Returns:
679
+ bool: True if the ROI can be moved, False otherwise.
680
+ """
681
+
642
682
  @property
643
683
  @rpc_call
644
684
  def line_color(self) -> "str":
@@ -1494,6 +1534,7 @@ class Image(RPCBase):
1494
1534
  line_width: "int | None" = 5,
1495
1535
  pos: "tuple[float, float] | None" = (10, 10),
1496
1536
  size: "tuple[float, float] | None" = (50, 50),
1537
+ movable: "bool" = True,
1497
1538
  **pg_kwargs,
1498
1539
  ) -> "RectangularROI | CircularROI":
1499
1540
  """
@@ -1505,6 +1546,7 @@ class Image(RPCBase):
1505
1546
  line_width(int): The line width of the ROI.
1506
1547
  pos(tuple): The position of the ROI.
1507
1548
  size(tuple): The size of the ROI.
1549
+ movable(bool): Whether the ROI is movable.
1508
1550
  **pg_kwargs: Additional arguments for the ROI.
1509
1551
 
1510
1552
  Returns:
@@ -2664,6 +2706,26 @@ class RectangularROI(RPCBase):
2664
2706
  str: The current name of the ROI.
2665
2707
  """
2666
2708
 
2709
+ @property
2710
+ @rpc_call
2711
+ def movable(self) -> "bool":
2712
+ """
2713
+ Gets whether this ROI is movable.
2714
+
2715
+ Returns:
2716
+ bool: True if the ROI can be moved, False otherwise.
2717
+ """
2718
+
2719
+ @movable.setter
2720
+ @rpc_call
2721
+ def movable(self) -> "bool":
2722
+ """
2723
+ Gets whether this ROI is movable.
2724
+
2725
+ Returns:
2726
+ bool: True if the ROI can be moved, False otherwise.
2727
+ """
2728
+
2667
2729
  @property
2668
2730
  @rpc_call
2669
2731
  def line_color(self) -> "str":
@@ -559,6 +559,7 @@ class ImageBase(PlotBase):
559
559
  line_width: int | None = 5,
560
560
  pos: tuple[float, float] | None = (10, 10),
561
561
  size: tuple[float, float] | None = (50, 50),
562
+ movable: bool = True,
562
563
  **pg_kwargs,
563
564
  ) -> RectangularROI | CircularROI:
564
565
  """
@@ -570,6 +571,7 @@ class ImageBase(PlotBase):
570
571
  line_width(int): The line width of the ROI.
571
572
  pos(tuple): The position of the ROI.
572
573
  size(tuple): The size of the ROI.
574
+ movable(bool): Whether the ROI is movable.
573
575
  **pg_kwargs: Additional arguments for the ROI.
574
576
 
575
577
  Returns:
@@ -584,6 +586,7 @@ class ImageBase(PlotBase):
584
586
  parent_image=self,
585
587
  line_width=line_width,
586
588
  label=name,
589
+ movable=movable,
587
590
  **pg_kwargs,
588
591
  )
589
592
  elif kind == "circle":
@@ -593,6 +596,7 @@ class ImageBase(PlotBase):
593
596
  parent_image=self,
594
597
  line_width=line_width,
595
598
  label=name,
599
+ movable=movable,
596
600
  **pg_kwargs,
597
601
  )
598
602
  else:
@@ -601,7 +605,6 @@ class ImageBase(PlotBase):
601
605
  # Add to plot and controller (controller assigns color)
602
606
  self.plot_item.addItem(roi)
603
607
  self.roi_controller.add_roi(roi)
604
- roi.add_scale_handle()
605
608
  return roi
606
609
 
607
610
  def remove_roi(self, roi: int | str):
@@ -8,6 +8,7 @@ from qtpy.QtCore import QEvent, Qt
8
8
  from qtpy.QtGui import QColor
9
9
  from qtpy.QtWidgets import (
10
10
  QColorDialog,
11
+ QHBoxLayout,
11
12
  QHeaderView,
12
13
  QSpinBox,
13
14
  QToolButton,
@@ -35,6 +36,28 @@ if TYPE_CHECKING:
35
36
  from bec_widgets.widgets.plots.image.image import Image
36
37
 
37
38
 
39
+ class ROILockButton(QToolButton):
40
+ """Keeps its icon and checked state in sync with a single ROI."""
41
+
42
+ def __init__(self, roi: BaseROI, parent=None):
43
+ super().__init__(parent)
44
+ self.setCheckable(True)
45
+ self._roi = roi
46
+ self.clicked.connect(self._toggle)
47
+ roi.movableChanged.connect(lambda _: self._sync())
48
+ self._sync()
49
+
50
+ def _toggle(self):
51
+ # checked -> locked -> movable = False
52
+ self._roi.movable = not self.isChecked()
53
+
54
+ def _sync(self):
55
+ movable = self._roi.movable
56
+ self.setChecked(not movable)
57
+ icon = "lock_open_right" if movable else "lock"
58
+ self.setIcon(material_icon(icon, size=(20, 20), convert_to_pixmap=False))
59
+
60
+
38
61
  class ROIPropertyTree(BECWidget, QWidget):
39
62
  """
40
63
  Two-column tree: [ROI] [Properties]
@@ -124,6 +147,24 @@ class ROIPropertyTree(BECWidget, QWidget):
124
147
  self.expand_toggle.action.toggled.connect(_exp_toggled)
125
148
 
126
149
  self.expand_toggle.action.setChecked(False)
150
+
151
+ # Lock/Unlock all ROIs
152
+ self.lock_all_action = MaterialIconAction(
153
+ "lock_open_right", "Lock/Unlock all ROIs", checkable=True, parent=self
154
+ )
155
+ tb.add_action("Lock/Unlock all ROIs", self.lock_all_action, self)
156
+
157
+ def _lock_all(checked: bool):
158
+ # checked -> everything locked (movable = False)
159
+ for r in self.controller.rois:
160
+ r.movable = not checked
161
+ new_icon = material_icon(
162
+ "lock" if checked else "lock_open_right", size=(20, 20), convert_to_pixmap=False
163
+ )
164
+ self.lock_all_action.action.setIcon(new_icon)
165
+
166
+ self.lock_all_action.action.toggled.connect(_lock_all)
167
+
127
168
  # colormap widget
128
169
  self.cmap = BECColorMapWidget(cmap=self.controller.colormap)
129
170
  tb.addWidget(QWidget()) # spacer
@@ -235,18 +276,30 @@ class ROIPropertyTree(BECWidget, QWidget):
235
276
  self._temp_roi = None
236
277
  self._set_roi_draw_mode(None)
237
278
  # register via controller
238
- final_roi.add_scale_handle()
239
279
  self.controller.add_roi(final_roi)
240
280
  return True
241
281
  return super().eventFilter(obj, event)
242
282
 
243
283
  # --------------------------------------------------------- controller slots
244
284
  def _on_roi_added(self, roi: BaseROI):
285
+ # check the global setting from the toolbar
286
+ if self.lock_all_action.action.isChecked():
287
+ roi.movable = False
245
288
  # parent row with blank action column, name in ROI column
246
289
  parent = QTreeWidgetItem(self.tree, ["", "", ""])
247
290
  parent.setText(self.COL_ROI, roi.label)
248
291
  parent.setFlags(parent.flags() | Qt.ItemIsEditable)
249
- # --- delete button in actions column ---
292
+ # --- actions widget (lock/unlock + delete) ---
293
+ actions_widget = QWidget()
294
+ actions_layout = QHBoxLayout(actions_widget)
295
+ actions_layout.setContentsMargins(0, 0, 0, 0)
296
+ actions_layout.setSpacing(3)
297
+
298
+ # lock / unlock toggle
299
+ lock_btn = ROILockButton(roi, parent=self)
300
+ actions_layout.addWidget(lock_btn)
301
+
302
+ # delete button
250
303
  del_btn = QToolButton()
251
304
  delete_icon = material_icon(
252
305
  "delete",
@@ -256,8 +309,11 @@ class ROIPropertyTree(BECWidget, QWidget):
256
309
  color=self.DELETE_BUTTON_COLOR,
257
310
  )
258
311
  del_btn.setIcon(delete_icon)
259
- self.tree.setItemWidget(parent, self.COL_ACTION, del_btn)
260
312
  del_btn.clicked.connect(lambda _=None, r=roi: self._delete_roi(r))
313
+ actions_layout.addWidget(del_btn)
314
+
315
+ # install composite widget into the tree
316
+ self.tree.setItemWidget(parent, self.COL_ACTION, actions_widget)
261
317
  # color button
262
318
  color_btn = ColorButtonNative(parent=self, color=roi.line_color)
263
319
  self.tree.setItemWidget(parent, self.COL_PROPS, color_btn)
@@ -309,6 +365,12 @@ class ROIPropertyTree(BECWidget, QWidget):
309
365
  for c in range(3):
310
366
  self.tree.resizeColumnToContents(c)
311
367
 
368
+ def _toggle_movable(self, roi: BaseROI):
369
+ """
370
+ Toggle the `movable` property of the given ROI.
371
+ """
372
+ roi.movable = not roi.movable
373
+
312
374
  def _on_roi_removed(self, roi: BaseROI):
313
375
  item = self.roi_items.pop(roi, None)
314
376
  if item:
@@ -345,7 +407,7 @@ if __name__ == "__main__": # pragma: no cover
345
407
  import sys
346
408
 
347
409
  import numpy as np
348
- from qtpy.QtWidgets import QApplication, QHBoxLayout, QVBoxLayout
410
+ from qtpy.QtWidgets import QApplication
349
411
 
350
412
  from bec_widgets.widgets.plots.image.image import Image
351
413
 
@@ -104,9 +104,12 @@ class BaseROI(BECConnector):
104
104
 
105
105
  nameChanged = Signal(str)
106
106
  penChanged = Signal()
107
+ movableChanged = Signal(bool)
107
108
  USER_ACCESS = [
108
109
  "label",
109
110
  "label.setter",
111
+ "movable",
112
+ "movable.setter",
110
113
  "line_color",
111
114
  "line_color.setter",
112
115
  "line_width",
@@ -127,6 +130,7 @@ class BaseROI(BECConnector):
127
130
  label: str | None = None,
128
131
  line_color: str | None = None,
129
132
  line_width: int = 5,
133
+ movable: bool = True,
130
134
  # all remaining pg.*ROI kwargs (pos, size, pen, …)
131
135
  **pg_kwargs,
132
136
  ):
@@ -155,6 +159,7 @@ class BaseROI(BECConnector):
155
159
  gui_id=gui_id,
156
160
  removable=True,
157
161
  invertible=True,
162
+ movable=movable,
158
163
  **pg_kwargs,
159
164
  )
160
165
 
@@ -162,8 +167,14 @@ class BaseROI(BECConnector):
162
167
  self._line_color = line_color or "#ffffff"
163
168
  self._line_width = line_width
164
169
  self._description = True
170
+ self._movable = movable
165
171
  self.setPen(mkPen(self._line_color, width=self._line_width))
166
172
 
173
+ # Reset Handles to avoid inherited handles from pyqtgraph
174
+ self.remove_scale_handles() # remove any existing handles from pyqtgraph.RectROI
175
+ if movable:
176
+ self.add_scale_handle() # add custom scale handles
177
+
167
178
  def set_parent(self, parent: Image):
168
179
  """
169
180
  Sets the parent image for this ROI.
@@ -182,6 +193,40 @@ class BaseROI(BECConnector):
182
193
  """
183
194
  return self.parent_image
184
195
 
196
+ @property
197
+ def movable(self) -> bool:
198
+ """
199
+ Gets whether this ROI is movable.
200
+
201
+ Returns:
202
+ bool: True if the ROI can be moved, False otherwise.
203
+ """
204
+ return self._movable
205
+
206
+ @movable.setter
207
+ def movable(self, value: bool):
208
+ """
209
+ Sets whether this ROI is movable.
210
+
211
+ If the new value is different from the current value, this method updates
212
+ the internal state and emits the penChanged signal.
213
+
214
+ Args:
215
+ value (bool): True to make the ROI movable, False to make it fixed.
216
+ """
217
+ if value != self._movable:
218
+ self._movable = value
219
+ # All relevant properties from pyqtgraph to block movement
220
+ self.translatable = value
221
+ self.rotatable = value
222
+ self.resizable = value
223
+ self.removable = value
224
+ if value:
225
+ self.add_scale_handle() # add custom scale handles
226
+ else:
227
+ self.remove_scale_handles() # remove custom scale handles
228
+ self.movableChanged.emit(value)
229
+
185
230
  @property
186
231
  def label(self) -> str:
187
232
  """
@@ -337,8 +382,18 @@ class BaseROI(BECConnector):
337
382
  )
338
383
 
339
384
  def add_scale_handle(self):
385
+ """Add scale handles to the ROI."""
340
386
  return
341
387
 
388
+ def remove_scale_handles(self):
389
+ """Remove all scale handles from the ROI."""
390
+ handles = self.handles
391
+ for i in range(len(handles)):
392
+ try:
393
+ self.removeHandle(0)
394
+ except IndexError:
395
+ continue
396
+
342
397
  def set_position(self, x: float, y: float):
343
398
  """
344
399
  Sets the position of the ROI.
@@ -355,12 +410,7 @@ class BaseROI(BECConnector):
355
410
  if controller and self in controller.rois:
356
411
  controller.remove_roi(self)
357
412
  return # controller will call back into this method once deregistered
358
- handles = self.handles
359
- for i in range(len(handles)):
360
- try:
361
- self.removeHandle(0)
362
- except IndexError:
363
- continue
413
+ self.remove_scale_handles()
364
414
  self.rpc_register.remove_rpc(self)
365
415
  self.parent_image.plot_item.removeItem(self)
366
416
  viewBox = self.parent_plot_item.vb
@@ -399,6 +449,7 @@ class RectangularROI(BaseROI, pg.RectROI):
399
449
  label: str | None = None,
400
450
  line_color: str | None = None,
401
451
  line_width: int = 5,
452
+ movable: bool = True,
402
453
  resize_handles: bool = True,
403
454
  **extra_pg,
404
455
  ):
@@ -429,6 +480,7 @@ class RectangularROI(BaseROI, pg.RectROI):
429
480
  pos=pos,
430
481
  size=size,
431
482
  pen=pen,
483
+ movable=movable,
432
484
  **extra_pg,
433
485
  )
434
486
 
@@ -475,11 +527,6 @@ class RectangularROI(BaseROI, pg.RectROI):
475
527
  self.addScaleHandle([0, 0.5], [1, 0.5]) # left edge
476
528
  self.addScaleHandle([1, 0.5], [0, 0.5]) # right edge
477
529
 
478
- self.handlePen = fn.mkPen("#ffff00", width=5) # bright yellow outline
479
- self.handleHoverPen = fn.mkPen("#00ffff", width=4) # cyan, thicker when hovered
480
- self.handleBrush = (200, 200, 0, 120) # semi-transparent fill
481
- self.handleHoverBrush = (0, 255, 255, 160)
482
-
483
530
  def _on_region_changed(self):
484
531
  """
485
532
  Handles changes to the ROI's region.
@@ -581,6 +628,7 @@ class CircularROI(BaseROI, pg.CircleROI):
581
628
  label: str | None = None,
582
629
  line_color: str | None = None,
583
630
  line_width: int = 5,
631
+ movable: bool = True,
584
632
  **extra_pg,
585
633
  ):
586
634
  """
@@ -612,10 +660,19 @@ class CircularROI(BaseROI, pg.CircleROI):
612
660
  pos=pos,
613
661
  size=size,
614
662
  pen=pen,
663
+ movable=movable,
615
664
  **extra_pg,
616
665
  )
617
666
  self.sigRegionChanged.connect(self._on_region_changed)
618
667
  self._adorner = LabelAdorner(self)
668
+ self.hoverPen = fn.mkPen(color=(255, 0, 0), width=3, style=QtCore.Qt.DashLine)
669
+ self.handleHoverPen = fn.mkPen("lime", width=4)
670
+
671
+ def add_scale_handle(self):
672
+ """
673
+ Adds scale handles to the circular ROI.
674
+ """
675
+ self._addHandles() # wrapper around pg.CircleROI._addHandles
619
676
 
620
677
  def _on_region_changed(self):
621
678
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.12.4
3
+ Version: 2.13.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=1nMYldzVk0tFkBWYTcUjumOrdSADASheWOAc0kOFDYs,9509
3
3
  .pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
4
4
  .readthedocs.yaml,sha256=ivqg3HTaOxNbEW3bzWh9MXAkrekuGoNdj0Mj3SdRYuw,639
5
- CHANGELOG.md,sha256=On772_xBp6UXL4xD4-avtvUKnrHAn_WkDG54pbO8faw,298414
5
+ CHANGELOG.md,sha256=lpk84iB31ZE4vtdCbH3gdT4uaXDPjBtS5wRWdWVfAWs,298987
6
6
  LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
7
- PKG-INFO,sha256=yGts5s4Gww_NSvVRgwxfZ4qy9VcGBEFgtvYb3GwhVFE,1252
7
+ PKG-INFO,sha256=V1mspizllUKCge8RUbKpm3syVXrjTQ2o-HNcjmuGycA,1252
8
8
  README.md,sha256=oY5Jc1uXehRASuwUJ0umin2vfkFh7tHF-LLruHTaQx0,3560
9
- pyproject.toml,sha256=J2FCGRnxVqdJMydJh53r1De16ht1tmpzMqa-I5v1FEM,2827
9
+ pyproject.toml,sha256=tpSXUHRyxcZAanH3gC6f-6olaIoOknm1-uDLA3nyt2I,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=MIHk1aBnopQ9qc9QIEldvbO2C5xW4I6U7WYjyOvaMZw,97953
39
+ bec_widgets/cli/client.py,sha256=D0mZjM2VE_hqi6QYuzNqwZs9VTRlO5Ral1V4mLjkhX0,99324
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=_c4rYRX2AwGyy0WWUhaAJl3gNfXSq1ts99MG8rsa-6w,36104
262
+ bec_widgets/widgets/plots/image/image_base.py,sha256=yvL3tfHKlkBPb5yVHKe7Ce-qx9MGTRU6KpGAe18dkWg,36224
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=nlllg-yTNCjG5DxCEDSGzCNabNSTJ3TZn9mawzIiAq4,14255
269
+ bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py,sha256=uOzsj-2582LO7lOOw3c2En5UcaAo1br8QJJk4XP90Bc,16368
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=EobZDeUV3l9O08tKwFGZEvkGNOMnVp0hHWNodYce9I0,32998
294
+ bec_widgets/widgets/plots/roi/image_roi.py,sha256=ytD_i4gG6DsUwBJGjrUE-yQrjboiSDvlqMy0_BPVFoU,34819
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.12.4.dist-info/METADATA,sha256=yGts5s4Gww_NSvVRgwxfZ4qy9VcGBEFgtvYb3GwhVFE,1252
412
- bec_widgets-2.12.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
413
- bec_widgets-2.12.4.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
414
- bec_widgets-2.12.4.dist-info/licenses/LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
415
- bec_widgets-2.12.4.dist-info/RECORD,,
411
+ bec_widgets-2.13.0.dist-info/METADATA,sha256=V1mspizllUKCge8RUbKpm3syVXrjTQ2o-HNcjmuGycA,1252
412
+ bec_widgets-2.13.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
413
+ bec_widgets-2.13.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
414
+ bec_widgets-2.13.0.dist-info/licenses/LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
415
+ bec_widgets-2.13.0.dist-info/RECORD,,
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "2.12.4"
7
+ version = "2.13.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [