bec-widgets 2.7.1__py3-none-any.whl → 2.8.1__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,35 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.8.1 (2025-05-27)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **launch_window**: Font and tile size fixed across OSs, closes #607
9
+ ([`ada0977`](https://github.com/bec-project/bec_widgets/commit/ada0977a1b50e750c2e2c848ce9b80895e0e524a))
10
+
11
+
12
+ ## v2.8.0 (2025-05-26)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **ImageProcessing**: Use target widget as parent
17
+ ([`d8547c7`](https://github.com/bec-project/bec_widgets/commit/d8547c7a56cea72dd41a2020c47adfd93969139f))
18
+
19
+ ### Features
20
+
21
+ - **plot_base**: Add option to specify units
22
+ ([`3484507`](https://github.com/bec-project/bec_widgets/commit/3484507c75500dc1b1a53853ff01937ad9ad8913))
23
+
24
+ ### Refactoring
25
+
26
+ - **server**: Minor cleanup of imports
27
+ ([`8abebb7`](https://github.com/bec-project/bec_widgets/commit/8abebb72862c44d32a24f5e692319dec7a0891bf))
28
+
29
+ - **toolbar**: Add warning if no parent is provided as it may lead to segfaults
30
+ ([`4f69f5d`](https://github.com/bec-project/bec_widgets/commit/4f69f5da45420d92fd985801a8920ecf10166554))
31
+
32
+
4
33
  ## v2.7.1 (2025-05-26)
5
34
 
6
35
  ### Bug Fixes
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.7.1
3
+ Version: 2.8.1
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
@@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Callable
6
6
 
7
7
  from bec_lib.logger import bec_logger
8
8
  from qtpy.QtCore import Qt, Signal # type: ignore
9
- from qtpy.QtGui import QPainter, QPainterPath, QPixmap
9
+ from qtpy.QtGui import QFontMetrics, QPainter, QPainterPath, QPixmap
10
10
  from qtpy.QtWidgets import (
11
11
  QApplication,
12
12
  QComboBox,
@@ -44,6 +44,7 @@ MODULE_PATH = os.path.dirname(bec_widgets.__file__)
44
44
 
45
45
 
46
46
  class LaunchTile(RoundedFrame):
47
+ DEFAULT_SIZE = (250, 300)
47
48
  open_signal = Signal()
48
49
 
49
50
  def __init__(
@@ -54,9 +55,15 @@ class LaunchTile(RoundedFrame):
54
55
  main_label: str | None = None,
55
56
  description: str | None = None,
56
57
  show_selector: bool = False,
58
+ tile_size: tuple[int, int] | None = None,
57
59
  ):
58
60
  super().__init__(parent=parent, orientation="vertical")
59
61
 
62
+ # Provide a per‑instance TILE_SIZE so the class can compute layout
63
+ if tile_size is None:
64
+ tile_size = self.DEFAULT_SIZE
65
+ self.tile_size = tile_size
66
+
60
67
  self.icon_label = QLabel(parent=self)
61
68
  self.icon_label.setFixedSize(100, 100)
62
69
  self.icon_label.setScaledContents(True)
@@ -87,12 +94,26 @@ class LaunchTile(RoundedFrame):
87
94
 
88
95
  # Main label
89
96
  self.main_label = QLabel(main_label)
97
+
98
+ # Desired default appearance
90
99
  font_main = self.main_label.font()
91
100
  font_main.setPointSize(14)
92
101
  font_main.setBold(True)
93
102
  self.main_label.setFont(font_main)
94
- self.main_label.setWordWrap(True)
95
103
  self.main_label.setAlignment(Qt.AlignCenter)
104
+
105
+ # Shrink font if the default would wrap on this platform / DPI
106
+ content_width = (
107
+ self.tile_size[0]
108
+ - self.layout.contentsMargins().left()
109
+ - self.layout.contentsMargins().right()
110
+ )
111
+ self._fit_label_to_width(self.main_label, content_width)
112
+
113
+ # Give every tile the same reserved height for the title so the
114
+ # description labels start at an identical y‑offset.
115
+ self.main_label.setFixedHeight(QFontMetrics(self.main_label.font()).height() + 2)
116
+
96
117
  self.layout.addWidget(self.main_label)
97
118
 
98
119
  self.spacer_top = QSpacerItem(0, 10, QSizePolicy.Fixed, QSizePolicy.Fixed)
@@ -133,6 +154,29 @@ class LaunchTile(RoundedFrame):
133
154
  )
134
155
  self.layout.addWidget(self.action_button, alignment=Qt.AlignCenter)
135
156
 
157
+ def _fit_label_to_width(self, label: QLabel, max_width: int, min_pt: int = 10):
158
+ """
159
+ Fit the label text to the specified maximum width by adjusting the font size.
160
+
161
+ Args:
162
+ label(QLabel): The label to adjust.
163
+ max_width(int): The maximum width the label can occupy.
164
+ min_pt(int): The minimum font point size to use.
165
+ """
166
+ font = label.font()
167
+ for pt in range(font.pointSize(), min_pt - 1, -1):
168
+ font.setPointSize(pt)
169
+ metrics = QFontMetrics(font)
170
+ if metrics.horizontalAdvance(label.text()) <= max_width:
171
+ label.setFont(font)
172
+ label.setWordWrap(False)
173
+ return
174
+ # If nothing fits, fall back to eliding
175
+ metrics = QFontMetrics(font)
176
+ label.setFont(font)
177
+ label.setWordWrap(False)
178
+ label.setText(metrics.elidedText(label.text(), Qt.ElideRight, max_width))
179
+
136
180
 
137
181
  class LaunchWindow(BECMainWindow):
138
182
  RPC = True
@@ -146,6 +190,8 @@ class LaunchWindow(BECMainWindow):
146
190
 
147
191
  self.app = QApplication.instance()
148
192
  self.tiles: dict[str, LaunchTile] = {}
193
+ # Track the smallest main‑label font size chosen so far
194
+ self._min_main_label_pt: int | None = None
149
195
 
150
196
  # Toolbar
151
197
  self.dark_mode_button = DarkModeButton(parent=self, toolbar=True)
@@ -250,14 +296,34 @@ class LaunchWindow(BECMainWindow):
250
296
  main_label=main_label,
251
297
  description=description,
252
298
  show_selector=show_selector,
299
+ tile_size=self.TILE_SIZE,
253
300
  )
254
- tile.setFixedSize(*self.TILE_SIZE)
301
+ tile.setFixedWidth(self.TILE_SIZE[0])
302
+ tile.setMinimumHeight(self.TILE_SIZE[1])
303
+ tile.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.MinimumExpanding)
255
304
  if action_button:
256
305
  tile.action_button.clicked.connect(action_button)
257
306
  if show_selector and selector_items:
258
307
  tile.selector.addItems(selector_items)
259
308
  self.central_widget.layout.addWidget(tile)
260
309
 
310
+ # keep all tiles' main labels at a unified point size
311
+ current_pt = tile.main_label.font().pointSize()
312
+ if self._min_main_label_pt is None or current_pt < self._min_main_label_pt:
313
+ # New global minimum – shrink every existing tile to this size
314
+ self._min_main_label_pt = current_pt
315
+ for t in self.tiles.values():
316
+ f = t.main_label.font()
317
+ f.setPointSize(self._min_main_label_pt)
318
+ t.main_label.setFont(f)
319
+ t.main_label.setFixedHeight(QFontMetrics(f).height() + 2)
320
+ elif current_pt > self._min_main_label_pt:
321
+ # Tile is larger than global minimum – shrink it to match
322
+ f = tile.main_label.font()
323
+ f.setPointSize(self._min_main_label_pt)
324
+ tile.main_label.setFont(f)
325
+ tile.main_label.setFixedHeight(QFontMetrics(f).height() + 2)
326
+
261
327
  self.tiles[name] = tile
262
328
 
263
329
  def launch(
bec_widgets/cli/server.py CHANGED
@@ -6,7 +6,6 @@ import os
6
6
  import signal
7
7
  import sys
8
8
  from contextlib import redirect_stderr, redirect_stdout
9
- from typing import cast
10
9
 
11
10
  from bec_lib.logger import bec_logger
12
11
  from bec_lib.service_config import ServiceConfig
@@ -7,6 +7,7 @@ from abc import ABC, abstractmethod
7
7
  from collections import defaultdict
8
8
  from typing import Dict, List, Literal, Tuple
9
9
 
10
+ from bec_lib.logger import bec_logger
10
11
  from bec_qthemes._icon.material_icons import material_icon
11
12
  from qtpy.QtCore import QSize, Qt, QTimer
12
13
  from qtpy.QtGui import QAction, QColor, QIcon
@@ -31,6 +32,8 @@ from bec_widgets.widgets.utility.visual.dark_mode_button.dark_mode_button import
31
32
 
32
33
  MODULE_PATH = os.path.dirname(bec_widgets.__file__)
33
34
 
35
+ logger = bec_logger.logger
36
+
34
37
  # Ensure that icons are shown in menus (especially on macOS)
35
38
  QApplication.setAttribute(Qt.AA_DontShowIconsInMenus, False)
36
39
 
@@ -173,6 +176,10 @@ class MaterialIconAction(ToolBarAction):
173
176
  filled=self.filled,
174
177
  color=self.color,
175
178
  )
179
+ if parent is None:
180
+ logger.warning(
181
+ "MaterialIconAction was created without a parent. Please consider adding one. Using None as parent may cause issues."
182
+ )
176
183
  self.action = QAction(icon=self.icon, text=self.tooltip, parent=parent)
177
184
  self.action.setCheckable(self.checkable)
178
185
 
@@ -11,18 +11,31 @@ class ImageProcessingToolbarBundle(ToolbarBundle):
11
11
  super().__init__(bundle_id=bundle_id, actions=[], **kwargs)
12
12
  self.target_widget = target_widget
13
13
 
14
- self.fft = MaterialIconAction(icon_name="fft", tooltip="Toggle FFT", checkable=True)
15
- self.log = MaterialIconAction(icon_name="log_scale", tooltip="Toggle Log", checkable=True)
14
+ self.fft = MaterialIconAction(
15
+ icon_name="fft", tooltip="Toggle FFT", checkable=True, parent=self.target_widget
16
+ )
17
+ self.log = MaterialIconAction(
18
+ icon_name="log_scale", tooltip="Toggle Log", checkable=True, parent=self.target_widget
19
+ )
16
20
  self.transpose = MaterialIconAction(
17
- icon_name="transform", tooltip="Transpose Image", checkable=True
21
+ icon_name="transform",
22
+ tooltip="Transpose Image",
23
+ checkable=True,
24
+ parent=self.target_widget,
18
25
  )
19
26
  self.right = MaterialIconAction(
20
- icon_name="rotate_right", tooltip="Rotate image clockwise by 90 deg"
27
+ icon_name="rotate_right",
28
+ tooltip="Rotate image clockwise by 90 deg",
29
+ parent=self.target_widget,
21
30
  )
22
31
  self.left = MaterialIconAction(
23
- icon_name="rotate_left", tooltip="Rotate image counterclockwise by 90 deg"
32
+ icon_name="rotate_left",
33
+ tooltip="Rotate image counterclockwise by 90 deg",
34
+ parent=self.target_widget,
35
+ )
36
+ self.reset = MaterialIconAction(
37
+ icon_name="reset_settings", tooltip="Reset Image Settings", parent=self.target_widget
24
38
  )
25
- self.reset = MaterialIconAction(icon_name="reset_settings", tooltip="Reset Image Settings")
26
39
 
27
40
  self.add_action("fft", self.fft)
28
41
  self.add_action("log", self.log)
@@ -112,8 +112,10 @@ class PlotBase(BECWidget, QWidget):
112
112
  self.fps_label = QLabel(alignment=Qt.AlignmentFlag.AlignRight)
113
113
  self._user_x_label = ""
114
114
  self._x_label_suffix = ""
115
+ self._x_axis_units = ""
115
116
  self._user_y_label = ""
116
117
  self._y_label_suffix = ""
118
+ self._y_axis_units = ""
117
119
 
118
120
  # Plot Indicator Items
119
121
  self.tick_item = BECTickItem(parent=self, plot_item=self.plot_item)
@@ -473,12 +475,31 @@ class PlotBase(BECWidget, QWidget):
473
475
  self._x_label_suffix = suffix
474
476
  self._apply_x_label()
475
477
 
478
+ @property
479
+ def x_label_units(self) -> str:
480
+ """
481
+ The units of the x-axis.
482
+ """
483
+ return self._x_axis_units
484
+
485
+ @x_label_units.setter
486
+ def x_label_units(self, units: str):
487
+ """
488
+ The units of the x-axis.
489
+
490
+ Args:
491
+ units(str): The units to set.
492
+ """
493
+ self._x_axis_units = units
494
+ self._apply_x_label()
495
+
476
496
  @property
477
497
  def x_label_combined(self) -> str:
478
498
  """
479
- The final label shown on the axis = user portion + suffix.
499
+ The final label shown on the axis = user portion + suffix + [units].
480
500
  """
481
- return self._user_x_label + self._x_label_suffix
501
+ units = f" [{self._x_axis_units}]" if self._x_axis_units else ""
502
+ return self._user_x_label + self._x_label_suffix + units
482
503
 
483
504
  def _apply_x_label(self):
484
505
  """
@@ -521,12 +542,31 @@ class PlotBase(BECWidget, QWidget):
521
542
  self._y_label_suffix = suffix
522
543
  self._apply_y_label()
523
544
 
545
+ @property
546
+ def y_label_units(self) -> str:
547
+ """
548
+ The units of the y-axis.
549
+ """
550
+ return self._y_axis_units
551
+
552
+ @y_label_units.setter
553
+ def y_label_units(self, units: str):
554
+ """
555
+ The units of the y-axis.
556
+
557
+ Args:
558
+ units(str): The units to set.
559
+ """
560
+ self._y_axis_units = units
561
+ self._apply_y_label()
562
+
524
563
  @property
525
564
  def y_label_combined(self) -> str:
526
565
  """
527
- The final y label shown on the axis = user portion + suffix.
566
+ The final y label shown on the axis = user portion + suffix + [units].
528
567
  """
529
- return self._user_y_label + self._y_label_suffix
568
+ units = f" [{self._y_axis_units}]" if self._y_axis_units else ""
569
+ return self._user_y_label + self._y_label_suffix + units
530
570
 
531
571
  def _apply_y_label(self):
532
572
  """
@@ -1468,7 +1468,7 @@ class Waveform(PlotBase):
1468
1468
  x_data = data.get(x_name, {}).get(x_entry, {}).get(access_key, [0])
1469
1469
  else: # history data
1470
1470
  x_data = data.get(x_name, {}).get(x_entry, {}).read().get("value", [0])
1471
- new_suffix = f" [custom: {x_name}-{x_entry}]"
1471
+ new_suffix = f" (custom: {x_name}-{x_entry})"
1472
1472
 
1473
1473
  # 2 User wants timestamp
1474
1474
  if self.x_axis_mode["name"] == "timestamp":
@@ -1477,19 +1477,19 @@ class Waveform(PlotBase):
1477
1477
  else: # history data
1478
1478
  timestamps = data[device_name][device_entry].read().get("timestamp", [0])
1479
1479
  x_data = timestamps
1480
- new_suffix = " [timestamp]"
1480
+ new_suffix = " (timestamp)"
1481
1481
 
1482
1482
  # 3 User wants index
1483
1483
  if self.x_axis_mode["name"] == "index":
1484
1484
  x_data = None
1485
- new_suffix = " [index]"
1485
+ new_suffix = " (index)"
1486
1486
 
1487
1487
  # 4 Best effort automatic mode
1488
1488
  if self.x_axis_mode["name"] is None or self.x_axis_mode["name"] == "auto":
1489
1489
  # 4.1 If there are async curves, use index
1490
1490
  if len(self._async_curves) > 0:
1491
1491
  x_data = None
1492
- new_suffix = " [auto: index]"
1492
+ new_suffix = " (auto: index)"
1493
1493
  # 4.2 If there are sync curves, use the first device from the scan report
1494
1494
  else:
1495
1495
  try:
@@ -1503,7 +1503,7 @@ class Waveform(PlotBase):
1503
1503
  x_data = data.get(x_name, {}).get(x_entry, {}).get(access_key, None)
1504
1504
  else:
1505
1505
  x_data = data.get(x_name, {}).get(x_entry, {}).read().get("value", None)
1506
- new_suffix = f" [auto: {x_name}-{x_entry}]"
1506
+ new_suffix = f" (auto: {x_name}-{x_entry})"
1507
1507
  self._update_x_label_suffix(new_suffix)
1508
1508
  return x_data
1509
1509
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 2.7.1
3
+ Version: 2.8.1
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=6YbGceWS4rhFIeqFqswxqovoHKYmVEiYv9MUjt9L_OI,287860
5
+ CHANGELOG.md,sha256=3L7_BBe-CABry-ucSXFIclXSzJ5bCCScyEHhTT6D1mw,288801
6
6
  LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
7
- PKG-INFO,sha256=Y_57lRMl_nuLmuqg18CxTycbI32aOzdupElg65WqfSQ,1273
7
+ PKG-INFO,sha256=6BSOcvVZIpTyTU1dz24T2PXsYCsI-OvDy_LeMSoL-10,1273
8
8
  README.md,sha256=oY5Jc1uXehRASuwUJ0umin2vfkFh7tHF-LLruHTaQx0,3560
9
- pyproject.toml,sha256=g_0rYxfWFe_V6RoaJwQtEAEz8MlETNPBzBRvlywaFf8,2902
9
+ pyproject.toml,sha256=OE4KwC7qc4Wn8YWnyLB4yDi_ziqibPuilvcIdNhrJJA,2902
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
@@ -27,7 +27,7 @@ pyproject.toml,sha256=g_0rYxfWFe_V6RoaJwQtEAEz8MlETNPBzBRvlywaFf8,2902
27
27
  bec_widgets/__init__.py,sha256=mZhbU6zfFt8-A7q_do74ie89budSevwpKZ6FKtEBdmo,170
28
28
  bec_widgets/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  bec_widgets/applications/bw_launch.py,sha256=4lngXb8Ht_cvQtCwjjbAoqPNuE2V0Ja5WIPHpwgjcRI,687
30
- bec_widgets/applications/launch_window.py,sha256=SKmbhquqggpF76e0wZKPtttotRkNQua3HxaxqFF4TWk,18918
30
+ bec_widgets/applications/launch_window.py,sha256=vKuGNv47jBYlkydk5NrDcrlZhU9wehIYfu7s-IOh7ks,21862
31
31
  bec_widgets/assets/app_icons/BEC-General-App.png,sha256=hc2ktly53DZAbl_rE3cb-vdRa5gtdCmBEjfwm2y5P4g,447581
32
32
  bec_widgets/assets/app_icons/alignment_1d.png,sha256=5VouaWieb4lVv3wUBNHaO5ovUW2Fk25aTKYQzOWy0mg,2071069
33
33
  bec_widgets/assets/app_icons/auto_update.png,sha256=YKoAJTWAlWzreYvOm0BttDRFr29tulolZgKirRhAFlA,2197066
@@ -38,7 +38,7 @@ bec_widgets/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  bec_widgets/cli/client.py,sha256=GOlZajpUb1yMhAJgpsw8kjMFYIudA83l4jN7-XMSsvA,93483
39
39
  bec_widgets/cli/client_utils.py,sha256=F2hyt--jL53bN8NoWifNUMqwwx5FbpS6I1apERdTRzM,18114
40
40
  bec_widgets/cli/generate_cli.py,sha256=xcPNyJoa3IjddX1yEDY45tT-Cs4jO5cQLUmcEubKs44,10976
41
- bec_widgets/cli/server.py,sha256=bhI5qj5vhg3qy4tkL1R2Bk_wcf-gjprTIAbVFH6BKXQ,5695
41
+ bec_widgets/cli/server.py,sha256=h7QyBOOGjyrP_fxJIIOSEMc4E06cLG0JyaofjNV6oCA,5671
42
42
  bec_widgets/cli/rpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  bec_widgets/cli/rpc/rpc_base.py,sha256=lqRr3IUqEKNLS_wHYrFbIr824kj6OYH6ky0Lwb-NovU,11130
44
44
  bec_widgets/cli/rpc/rpc_register.py,sha256=2XBqPdMhJyWPsbV0ZVhl7YL6Yk6gh-VA8BOYi9jistM,5820
@@ -94,7 +94,7 @@ bec_widgets/utils/serialization.py,sha256=_SO8q0ylC0MWckT9yTbCtF0QNsRoT6ysL8WnN8
94
94
  bec_widgets/utils/settings_dialog.py,sha256=1z6noC9k6BSIGAw12DvHHiW3LmvPquaGMjWSe5wdmek,4307
95
95
  bec_widgets/utils/side_panel.py,sha256=enxcQOwJOMfD3MxgPA9mQSKSX_F6Omy2zePncYDW1FA,14193
96
96
  bec_widgets/utils/thread_checker.py,sha256=rDNuA3X6KQyA7JPb67mccTg0z8YkInynLAENQDQpbuE,1607
97
- bec_widgets/utils/toolbar.py,sha256=SUzR1E5TTsuWa9lS5HHVQ-XznEGMf6MbGVS842UML9w,40500
97
+ bec_widgets/utils/toolbar.py,sha256=nQM2h5WqTmQDxlU4GMk6OyRJr-0_4VAKSbug7yOUwWY,40769
98
98
  bec_widgets/utils/ui_loader.py,sha256=1PtGW36FWxEaHq0_T0ECLANisFyZcMDQJezEKgSwwIg,5118
99
99
  bec_widgets/utils/validator_delegate.py,sha256=Emj1WF6W8Ke1ruBWUfmHdVJpmOSPezuOt4zvQTay_44,442
100
100
  bec_widgets/utils/widget_io.py,sha256=afR7i59fw2WrEQCmkH5dwhz1uNjfMPnJTIhE8NWVBsU,21552
@@ -257,7 +257,7 @@ bec_widgets/widgets/games/minesweeper.pyproject,sha256=wHrLKY3H8uNiVgb9BIrj4S0Je
257
257
  bec_widgets/widgets/games/minesweeper_plugin.py,sha256=oPEjSTpdIIkvuGThHxhVS8Rp47DWiaXHROtm8NJWYwo,1255
258
258
  bec_widgets/widgets/games/register_minesweeper.py,sha256=8fgMBD3yB-5_eGqhG_qxpj3igXDK9WZfHrdYcA1aqz8,467
259
259
  bec_widgets/widgets/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
260
- bec_widgets/widgets/plots/plot_base.py,sha256=NliWkXihJIPHRJHe-CNIrdjgxONk7uExG_3SsIpyoRQ,33848
260
+ bec_widgets/widgets/plots/plot_base.py,sha256=l8qzLybw6PEBZI5gRXaLY0AX_v81e50TFxOO1Muh774,34872
261
261
  bec_widgets/widgets/plots/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
262
262
  bec_widgets/widgets/plots/image/image.py,sha256=FA2a583iWkDi_zydw_OYi4NEiGHXtM_O0PxxSmdgUiY,42042
263
263
  bec_widgets/widgets/plots/image/image.pyproject,sha256=_sRCIu4MNgToaB4D7tUMWq3xKX6T2VoRS3UzGNIseHQ,23
@@ -270,7 +270,7 @@ bec_widgets/widgets/plots/image/setting_widgets/__init__.py,sha256=47DEQpj8HBSa-
270
270
  bec_widgets/widgets/plots/image/setting_widgets/image_roi_tree.py,sha256=nlllg-yTNCjG5DxCEDSGzCNabNSTJ3TZn9mawzIiAq4,14255
271
271
  bec_widgets/widgets/plots/image/toolbar_bundles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
272
272
  bec_widgets/widgets/plots/image/toolbar_bundles/image_selection.py,sha256=gJhDAdHB4cAsPw7E6W6Y2iR3nF_3n_v-ElGqj4TgIGo,2646
273
- bec_widgets/widgets/plots/image/toolbar_bundles/processing.py,sha256=A_8_8oDogypmRv8NCDwjO524LJAjgZ7viE1Nz5U__y8,3052
273
+ bec_widgets/widgets/plots/image/toolbar_bundles/processing.py,sha256=99hgd1q86ZUhQYTTsFCk3Ml8oAEeZJy-WqdmsMO4bzA,3367
274
274
  bec_widgets/widgets/plots/motor_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
275
275
  bec_widgets/widgets/plots/motor_map/motor_map.py,sha256=pcQStrIJJOsxC2sW3FDMDIFmFXM94uXQVdAjPi-vBvM,29209
276
276
  bec_widgets/widgets/plots/motor_map/motor_map.pyproject,sha256=KSG9y3kKpX2e9J7V9MQqlW1IoEA37tLW07gvG00x8gk,27
@@ -315,7 +315,7 @@ bec_widgets/widgets/plots/toolbar_bundles/save_state.py,sha256=H3fu-bRzNIycCUFb2
315
315
  bec_widgets/widgets/plots/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
316
316
  bec_widgets/widgets/plots/waveform/curve.py,sha256=KlcGbd60lPO9BYcca08fMhWkfx5qu4O9IbSNTwvajGM,10401
317
317
  bec_widgets/widgets/plots/waveform/register_waveform.py,sha256=pdcLCYKkLkSb-5DqbJdC6M3JyoXQBRVAKf7BZVCto80,467
318
- bec_widgets/widgets/plots/waveform/waveform.py,sha256=PVoKfwH5j8DBUe8miu32mpC6c_fTuqXM74mrovzd6Rw,68552
318
+ bec_widgets/widgets/plots/waveform/waveform.py,sha256=tNoeqcPPv0nsJT87qSwJFv2jGATvRayxQQjAoaaLKmQ,68552
319
319
  bec_widgets/widgets/plots/waveform/waveform.pyproject,sha256=X2T6d4JGt9YSI28e-myjXh1YkUM4Yr3kNb0-F84KvUA,26
320
320
  bec_widgets/widgets/plots/waveform/waveform_plugin.py,sha256=2AZPtBHs75l9cdhwQnY3jpIMRPUUqK3RNvQbTvrFyvg,1237
321
321
  bec_widgets/widgets/plots/waveform/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -404,8 +404,8 @@ bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py,sha256=O
404
404
  bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject,sha256=Lbi9zb6HNlIq14k6hlzR-oz6PIFShBuF7QxE6d87d64,34
405
405
  bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py,sha256=CzChz2SSETYsR8-36meqWnsXCT-FIy_J_xeU5coWDY8,1350
406
406
  bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py,sha256=rMpZ1CaoucwobgPj1FuKTnt07W82bV1GaSYdoqcdMb8,521
407
- bec_widgets-2.7.1.dist-info/METADATA,sha256=Y_57lRMl_nuLmuqg18CxTycbI32aOzdupElg65WqfSQ,1273
408
- bec_widgets-2.7.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
409
- bec_widgets-2.7.1.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
410
- bec_widgets-2.7.1.dist-info/licenses/LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
411
- bec_widgets-2.7.1.dist-info/RECORD,,
407
+ bec_widgets-2.8.1.dist-info/METADATA,sha256=6BSOcvVZIpTyTU1dz24T2PXsYCsI-OvDy_LeMSoL-10,1273
408
+ bec_widgets-2.8.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
409
+ bec_widgets-2.8.1.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
410
+ bec_widgets-2.8.1.dist-info/licenses/LICENSE,sha256=Daeiu871NcAp8uYi4eB_qHgvypG-HX0ioRQyQxFwjeg,1531
411
+ bec_widgets-2.8.1.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.7.1"
7
+ version = "2.8.1"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [