bec-widgets 0.116.0__py3-none-any.whl → 0.117.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,17 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.117.0 (2024-10-11)
5
+
6
+ ### Features
7
+
8
+ * feat(utils): FPS counter utility based on the viewBox updates, integrated to waveform and image widget ([`8c5ef26`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8c5ef268430d5243ac05fcbbdb6b76ad24ac5735))
9
+
10
+ ### Unknown
11
+
12
+ * tests(plot_base): tests extended ([`8dc892d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8dc892df0a47ccbdd812555b7c5775a455a23ede))
13
+
14
+
4
15
  ## v0.116.0 (2024-10-11)
5
16
 
6
17
  ### Build System
@@ -163,12 +174,3 @@ Fixes #361, do not try to change x axis when not permitted ([`efa2763`](https://
163
174
  ### Features
164
175
 
165
176
  * feat(progressbar): added bec progressbar ([`f6d1d0b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f6d1d0bbe3ba30a3b7291cd36a1f7f8e6bd5b895))
166
-
167
- * feat(generate_cli): added support for property and qproperty setter ([`a52182d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a52182dca978833bfc3fad755c596d3a2ef45c42))
168
-
169
-
170
- ## v0.107.0 (2024-09-06)
171
-
172
- ### Refactoring
173
-
174
- * refactor: change style to bec_accent_colors ([`bd126dd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/bd126dddbbec3e6c448cce263433d328d577c5c0))
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.116.0
3
+ Version: 0.117.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
@@ -1135,6 +1135,15 @@ class BECImageShow(RPCBase):
1135
1135
  y(bool): Show grid on the y-axis.
1136
1136
  """
1137
1137
 
1138
+ @rpc_call
1139
+ def enable_fps_monitor(self, enable: "bool" = True):
1140
+ """
1141
+ Enable the FPS monitor.
1142
+
1143
+ Args:
1144
+ enable(bool): True to enable, False to disable.
1145
+ """
1146
+
1138
1147
  @rpc_call
1139
1148
  def lock_aspect_ratio(self, lock):
1140
1149
  """
@@ -1330,6 +1339,15 @@ class BECImageWidget(RPCBase):
1330
1339
  y_grid(bool): Visibility of the y-axis grid.
1331
1340
  """
1332
1341
 
1342
+ @rpc_call
1343
+ def enable_fps_monitor(self, enabled: "bool"):
1344
+ """
1345
+ Enable the FPS monitor of the plot widget.
1346
+
1347
+ Args:
1348
+ enabled(bool): If True, enable the FPS monitor.
1349
+ """
1350
+
1333
1351
  @rpc_call
1334
1352
  def lock_aspect_ratio(self, lock: "bool"):
1335
1353
  """
@@ -1666,6 +1684,15 @@ class BECPlotBase(RPCBase):
1666
1684
  show(bool): Show the outer axes.
1667
1685
  """
1668
1686
 
1687
+ @rpc_call
1688
+ def enable_fps_monitor(self, enable: "bool" = True):
1689
+ """
1690
+ Enable the FPS monitor.
1691
+
1692
+ Args:
1693
+ enable(bool): True to enable, False to disable.
1694
+ """
1695
+
1669
1696
  @rpc_call
1670
1697
  def lock_aspect_ratio(self, lock):
1671
1698
  """
@@ -2069,6 +2096,15 @@ class BECWaveform(RPCBase):
2069
2096
  colormap(str, optional): Scale the colors of curves to colormap. If None, use the default color palette.
2070
2097
  """
2071
2098
 
2099
+ @rpc_call
2100
+ def enable_fps_monitor(self, enable: "bool" = True):
2101
+ """
2102
+ Enable the FPS monitor.
2103
+
2104
+ Args:
2105
+ enable(bool): True to enable, False to disable.
2106
+ """
2107
+
2072
2108
  @rpc_call
2073
2109
  def lock_aspect_ratio(self, lock):
2074
2110
  """
@@ -2374,6 +2410,15 @@ class BECWaveformWidget(RPCBase):
2374
2410
  y_grid(bool): Visibility of the y-axis grid.
2375
2411
  """
2376
2412
 
2413
+ @rpc_call
2414
+ def enable_fps_monitor(self, enabled: "bool"):
2415
+ """
2416
+ Enable the FPS monitor of the plot widget.
2417
+
2418
+ Args:
2419
+ enabled(bool): If True, enable the FPS monitor.
2420
+ """
2421
+
2377
2422
  @rpc_call
2378
2423
  def lock_aspect_ratio(self, lock: "bool"):
2379
2424
  """
@@ -0,0 +1,84 @@
1
+ """
2
+ This module provides a utility class for counting and reporting frames per second (FPS) in a PyQtGraph application.
3
+
4
+ Classes:
5
+ FPSCounter: A class that monitors the paint events of a `ViewBox` to calculate and emit FPS values.
6
+
7
+ Usage:
8
+ The `FPSCounter` class can be used to monitor the rendering performance of a `ViewBox` in a PyQtGraph application.
9
+ It connects to the `ViewBox`'s paint event and calculates the FPS over a specified interval, emitting the FPS value
10
+ at regular intervals.
11
+
12
+ Example:
13
+ from qtpy import QtWidgets, QtCore
14
+ import pyqtgraph as pg
15
+ from fps_counter import FPSCounter
16
+
17
+ app = pg.mkQApp("FPS Counter Example")
18
+ win = pg.GraphicsLayoutWidget()
19
+ win.show()
20
+
21
+ vb = pg.ViewBox()
22
+ plot_item = pg.PlotItem(viewBox=vb)
23
+ win.addItem(plot_item)
24
+
25
+ fps_counter = FPSCounter(vb)
26
+ fps_counter.sigFpsUpdate.connect(lambda fps: print(f"FPS: {fps:.2f}"))
27
+
28
+ sys.exit(app.exec_())
29
+ """
30
+
31
+ from time import perf_counter
32
+
33
+ import pyqtgraph as pg
34
+ from qtpy import QtCore
35
+
36
+
37
+ class FPSCounter(QtCore.QObject):
38
+ """
39
+ A utility class for counting and reporting frames per second (FPS).
40
+
41
+ This class connects to a `ViewBox`'s paint event to count the number of
42
+ frames rendered and calculates the FPS over a specified interval. It emits
43
+ a signal with the FPS value at regular intervals.
44
+
45
+ Attributes:
46
+ sigFpsUpdate (QtCore.Signal): Signal emitted with the FPS value.
47
+ view_box (pg.ViewBox): The `ViewBox` instance to monitor.
48
+ """
49
+
50
+ sigFpsUpdate = QtCore.Signal(float)
51
+
52
+ def __init__(self, view_box):
53
+ super().__init__()
54
+ self.view_box = view_box
55
+ self.view_box.sigPaint.connect(self.increment_count)
56
+ self.count = 0
57
+ self.last_update = perf_counter()
58
+ self.timer = QtCore.QTimer()
59
+ self.timer.timeout.connect(self.calculate_fps)
60
+ self.timer.start(1000)
61
+
62
+ def increment_count(self):
63
+ """
64
+ Increment the frame count when the `ViewBox` is painted.
65
+ """
66
+ self.count += 1
67
+
68
+ def calculate_fps(self):
69
+ """
70
+ Calculate the frames per second (FPS) based on the number of frames
71
+ """
72
+ now = perf_counter()
73
+ elapsed = now - self.last_update
74
+ fps = self.count / elapsed if elapsed > 0 else 0.0
75
+ self.last_update = now
76
+ self.count = 0
77
+ self.sigFpsUpdate.emit(fps)
78
+
79
+ def cleanup(self):
80
+ """
81
+ Clean up the FPS counter by stopping the timer and disconnecting the signal.
82
+ """
83
+ self.timer.stop()
84
+ self.timer.timeout.disconnect(self.calculate_fps)
@@ -57,6 +57,7 @@ class BECImageShow(BECPlotBase):
57
57
  "set_x_lim",
58
58
  "set_y_lim",
59
59
  "set_grid",
60
+ "enable_fps_monitor",
60
61
  "lock_aspect_ratio",
61
62
  "export",
62
63
  "remove",
@@ -307,7 +307,7 @@ class BECImageItem(BECConnector, pg.ImageItem):
307
307
  if vrange is not None:
308
308
  self.color_bar.setLevels(low=vrange[0], high=vrange[1])
309
309
  self.color_bar.setImageItem(self)
310
- self.parent_image.addItem(self.color_bar) # , row=0, col=1)
310
+ self.parent_image.addItem(self.color_bar, row=1, col=1)
311
311
  self.config.color_bar = "simple"
312
312
  elif color_bar_style == "full":
313
313
  # Setting histogram
@@ -321,7 +321,7 @@ class BECImageItem(BECConnector, pg.ImageItem):
321
321
  )
322
322
 
323
323
  # Adding histogram to the layout
324
- self.parent_image.addItem(self.color_bar) # , row=0, col=1)
324
+ self.parent_image.addItem(self.color_bar, row=1, col=1)
325
325
 
326
326
  # save settings
327
327
  self.config.color_bar = "full"
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import defaultdict
4
3
  from typing import Literal, Optional
5
4
 
6
5
  import bec_qthemes
@@ -12,6 +11,7 @@ from qtpy.QtWidgets import QApplication, QWidget
12
11
 
13
12
  from bec_widgets.utils import BECConnector, ConnectionConfig
14
13
  from bec_widgets.utils.crosshair import Crosshair
14
+ from bec_widgets.utils.fps_counter import FPSCounter
15
15
  from bec_widgets.utils.plot_indicator_items import BECArrowItem, BECTickItem
16
16
 
17
17
  logger = bec_logger.logger
@@ -51,6 +51,11 @@ class SubplotConfig(ConnectionConfig):
51
51
 
52
52
 
53
53
  class BECViewBox(pg.ViewBox):
54
+ sigPaint = Signal()
55
+
56
+ def paint(self, painter, opt, widget):
57
+ super().paint(painter, opt, widget)
58
+ self.sigPaint.emit()
54
59
 
55
60
  def itemBoundsChanged(self, item):
56
61
  self._itemBoundsCache.pop(item, None)
@@ -79,6 +84,7 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
79
84
  "set_y_lim",
80
85
  "set_grid",
81
86
  "set_outer_axes",
87
+ "enable_fps_monitor",
82
88
  "lock_aspect_ratio",
83
89
  "export",
84
90
  "remove",
@@ -100,12 +106,13 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
100
106
 
101
107
  self.figure = parent_figure
102
108
 
103
- # self.plot_item = self.addPlot(row=0, col=0)
104
109
  self.plot_item = pg.PlotItem(viewBox=BECViewBox(parent=self, enableMenu=True), parent=self)
105
- self.addItem(self.plot_item, row=0, col=0)
110
+ self.addItem(self.plot_item, row=1, col=0)
106
111
 
107
112
  self.add_legend()
108
113
  self.crosshair = None
114
+ self.fps_monitor = None
115
+ self.fps_label = None
109
116
  self.tick_item = BECTickItem(parent=self, plot_item=self.plot_item)
110
117
  self.arrow_item = BECArrowItem(parent=self, plot_item=self.plot_item)
111
118
  self._connect_to_theme_change()
@@ -379,6 +386,10 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
379
386
  """
380
387
  self.plot_item.enableAutoRange(axis, enabled)
381
388
 
389
+ ############################################################
390
+ ###################### Crosshair ###########################
391
+ ############################################################
392
+
382
393
  def hook_crosshair(self) -> None:
383
394
  """Hook the crosshair to all plots."""
384
395
  if self.crosshair is None:
@@ -417,6 +428,54 @@ class BECPlotBase(BECConnector, pg.GraphicsLayout):
417
428
  self.crosshair.clear_markers()
418
429
  self.crosshair.update_markers()
419
430
 
431
+ ############################################################
432
+ ##################### FPS Counter ##########################
433
+ ############################################################
434
+
435
+ def update_fps_label(self, fps: float) -> None:
436
+ """
437
+ Update the FPS label.
438
+
439
+ Args:
440
+ fps(float): The frames per second.
441
+ """
442
+ if self.fps_label:
443
+ self.fps_label.setText(f"FPS: {fps:.2f}")
444
+
445
+ def hook_fps_monitor(self):
446
+ """Hook the FPS monitor to the plot."""
447
+ if self.fps_monitor is None:
448
+ # text_color = self.get_text_color()#TODO later
449
+ self.fps_monitor = FPSCounter(self.plot_item.vb) # text_color=text_color)
450
+ self.fps_label = pg.LabelItem(justify="right")
451
+ self.addItem(self.fps_label, row=0, col=0)
452
+
453
+ self.fps_monitor.sigFpsUpdate.connect(self.update_fps_label)
454
+
455
+ def unhook_fps_monitor(self):
456
+ """Unhook the FPS monitor from the plot."""
457
+ if self.fps_monitor is not None:
458
+ # Remove Monitor
459
+ self.fps_monitor.cleanup()
460
+ self.fps_monitor.deleteLater()
461
+ self.fps_monitor = None
462
+ # Remove Label
463
+ self.removeItem(self.fps_label)
464
+ self.fps_label.deleteLater()
465
+ self.fps_label = None
466
+
467
+ def enable_fps_monitor(self, enable: bool = True):
468
+ """
469
+ Enable the FPS monitor.
470
+
471
+ Args:
472
+ enable(bool): True to enable, False to disable.
473
+ """
474
+ if enable and self.fps_monitor is None:
475
+ self.hook_fps_monitor()
476
+ elif not enable and self.fps_monitor is not None:
477
+ self.unhook_fps_monitor()
478
+
420
479
  def export(self):
421
480
  """Show the Export Dialog of the plot widget."""
422
481
  scene = self.plot_item.scene()
@@ -72,6 +72,7 @@ class BECWaveform(BECPlotBase):
72
72
  "set_y_lim",
73
73
  "set_grid",
74
74
  "set_colormap",
75
+ "enable_fps_monitor",
75
76
  "lock_aspect_ratio",
76
77
  "export",
77
78
  "remove",
@@ -40,6 +40,7 @@ class BECImageWidget(BECWidget, QWidget):
40
40
  "set_rotation",
41
41
  "set_log",
42
42
  "set_grid",
43
+ "enable_fps_monitor",
43
44
  "lock_aspect_ratio",
44
45
  ]
45
46
 
@@ -104,6 +105,9 @@ class BECImageWidget(BECWidget, QWidget):
104
105
  icon_name="reset_settings", tooltip="Reset Image Settings"
105
106
  ),
106
107
  "separator_3": SeparatorAction(),
108
+ "fps_monitor": MaterialIconAction(
109
+ icon_name="speed", tooltip="Show FPS Monitor", checkable=True
110
+ ),
107
111
  "axis_settings": MaterialIconAction(
108
112
  icon_name="settings", tooltip="Open Configuration Dialog"
109
113
  ),
@@ -150,6 +154,7 @@ class BECImageWidget(BECWidget, QWidget):
150
154
  self.toolbar.widgets["reset"].action.triggered.connect(self.reset_settings)
151
155
  # sepatator
152
156
  self.toolbar.widgets["axis_settings"].action.triggered.connect(self.show_axis_settings)
157
+ self.toolbar.widgets["fps_monitor"].action.toggled.connect(self.enable_fps_monitor)
153
158
 
154
159
  ###################################
155
160
  # Dialog Windows
@@ -450,6 +455,18 @@ class BECImageWidget(BECWidget, QWidget):
450
455
  self.toolbar.widgets["rectangle_mode"].action.setChecked(False)
451
456
  self._image.plot_item.getViewBox().setMouseMode(pg.ViewBox.PanMode)
452
457
 
458
+ @SafeSlot()
459
+ def enable_fps_monitor(self, enabled: bool):
460
+ """
461
+ Enable the FPS monitor of the plot widget.
462
+
463
+ Args:
464
+ enabled(bool): If True, enable the FPS monitor.
465
+ """
466
+ self._image.enable_fps_monitor(enabled)
467
+ if self.toolbar.widgets["fps_monitor"].action.isChecked() != enabled:
468
+ self.toolbar.widgets["fps_monitor"].action.setChecked(enabled)
469
+
453
470
  def export(self):
454
471
  """
455
472
  Show the export dialog for the plot widget.
@@ -52,6 +52,7 @@ class BECWaveformWidget(BECWidget, QWidget):
52
52
  "set_legend_label_size",
53
53
  "set_auto_range",
54
54
  "set_grid",
55
+ "enable_fps_monitor",
55
56
  "lock_aspect_ratio",
56
57
  "export",
57
58
  "export_to_matplotlib",
@@ -118,9 +119,7 @@ class BECWaveformWidget(BECWidget, QWidget):
118
119
  "fit_params": MaterialIconAction(
119
120
  icon_name="monitoring", tooltip="Open Fitting Parameters"
120
121
  ),
121
- "axis_settings": MaterialIconAction(
122
- icon_name="settings", tooltip="Open Configuration Dialog"
123
- ),
122
+ "separator_3": SeparatorAction(),
124
123
  "crosshair": MaterialIconAction(
125
124
  icon_name="point_scan", tooltip="Show Crosshair", checkable=True
126
125
  ),
@@ -129,6 +128,13 @@ class BECWaveformWidget(BECWidget, QWidget):
129
128
  tooltip="Add ROI region for DAP",
130
129
  checkable=True,
131
130
  ),
131
+ "separator_4": SeparatorAction(),
132
+ "fps_monitor": MaterialIconAction(
133
+ icon_name="speed", tooltip="Show FPS Monitor", checkable=True
134
+ ),
135
+ "axis_settings": MaterialIconAction(
136
+ icon_name="settings", tooltip="Open Configuration Dialog"
137
+ ),
132
138
  },
133
139
  target_widget=self,
134
140
  )
@@ -186,6 +192,7 @@ class BECWaveformWidget(BECWidget, QWidget):
186
192
  self.toolbar.widgets["axis_settings"].action.triggered.connect(self.show_axis_settings)
187
193
  self.toolbar.widgets["crosshair"].action.triggered.connect(self.waveform.toggle_crosshair)
188
194
  self.toolbar.widgets["roi_select"].action.toggled.connect(self.waveform.toggle_roi)
195
+ self.toolbar.widgets["fps_monitor"].action.toggled.connect(self.enable_fps_monitor)
189
196
  # self.toolbar.widgets["import"].action.triggered.connect(
190
197
  # lambda: self.load_config(path=None, gui=True)
191
198
  # )
@@ -594,6 +601,8 @@ class BECWaveformWidget(BECWidget, QWidget):
594
601
  checked(bool): If True, enable the linear region selector.
595
602
  """
596
603
  self.waveform.toggle_roi(checked)
604
+ if self.toolbar.widgets["roi_select"].action.isChecked() != checked:
605
+ self.toolbar.widgets["roi_select"].action.setChecked(checked)
597
606
 
598
607
  def select_roi(self, region: tuple):
599
608
  """
@@ -604,6 +613,17 @@ class BECWaveformWidget(BECWidget, QWidget):
604
613
  """
605
614
  self.waveform.select_roi(region)
606
615
 
616
+ def enable_fps_monitor(self, enabled: bool):
617
+ """
618
+ Enable the FPS monitor of the plot widget.
619
+
620
+ Args:
621
+ enabled(bool): If True, enable the FPS monitor.
622
+ """
623
+ self.waveform.enable_fps_monitor(enabled)
624
+ if self.toolbar.widgets["fps_monitor"].action.isChecked() != enabled:
625
+ self.toolbar.widgets["fps_monitor"].action.setChecked(enabled)
626
+
607
627
  @SafeSlot()
608
628
  def _auto_range_from_toolbar(self):
609
629
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.116.0
3
+ Version: 0.117.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=Dc1iDjsc72UxdUtihx4uSZU0lrTQeR8hZwGx1MQBfKE,8432
3
3
  .pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=DwezLJ73Dy8TWJoB2mEOp647_bYDgEMHUE9uIdnFqqw,7458
5
+ CHANGELOG.md,sha256=P2FvQRmkrzZeRyx-2Okb6dqpPawiUEEua4eQjG0ffNI,7492
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=12J8zuxFZTwxmh1zZ-EPkH5IxLUYqcNnuZBPfllp5oM,1334
7
+ PKG-INFO,sha256=qzAx_QzNjl7iO4_f8Bz9YYq3XG9n3Lv2VGGKUY5X48M,1334
8
8
  README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
9
- pyproject.toml,sha256=dBR14TzlvqiKTvf8L1PHidntzgrXzcOjAEyKmd0zSTM,2594
9
+ pyproject.toml,sha256=kyGOtgZp4UfDCXDm7NnGWUox2z3FHW5lri9ZUU-g3Yg,2594
10
10
  .git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
11
11
  .gitlab/issue_templates/bug_report_template.md,sha256=gAuyEwl7XlnebBrkiJ9AqffSNOywmr8vygUFWKTuQeI,386
12
12
  .gitlab/issue_templates/documentation_update_template.md,sha256=FHLdb3TS_D9aL4CYZCjyXSulbaW5mrN2CmwTaeLPbNw,860
@@ -24,7 +24,7 @@ bec_widgets/assets/app_icons/alignment_1d.png,sha256=5VouaWieb4lVv3wUBNHaO5ovUW2
24
24
  bec_widgets/assets/app_icons/bec_widgets_icon.png,sha256=K8dgGwIjalDh9PRHUsSQBqgdX7a00nM3igZdc20pkYM,1747017
25
25
  bec_widgets/cli/__init__.py,sha256=d0Q6Fn44e7wFfLabDOBxpcJ1DPKWlFunGYDUBmO-4hA,22
26
26
  bec_widgets/cli/auto_updates.py,sha256=DwzRChcFIWPH2kCYvp8H7dXvyYSKGYv6LwCmK2sDR2E,5676
27
- bec_widgets/cli/client.py,sha256=PaNh9ih6HXlOEDo6MHa4L3Yl3pjZSWZ0bCk-2G7RWiU,82154
27
+ bec_widgets/cli/client.py,sha256=5fPUNDWvzBii-0oMOL76IhKffN88q1vbrx2P7Uh90TE,83195
28
28
  bec_widgets/cli/client_utils.py,sha256=EdDfo3uuYAWtZiDGGu3_GPnl94FSLkNG2N_4I9FNfMc,11809
29
29
  bec_widgets/cli/generate_cli.py,sha256=C5SOlUeDzFgEptgpa5vdiF6c-YILLcfILZZtk9jr_H0,6637
30
30
  bec_widgets/cli/rpc_register.py,sha256=QxXUZu5XNg00Yf5O3UHWOXg3-f_pzKjjoZYMOa-MOJc,2216
@@ -62,6 +62,7 @@ bec_widgets/utils/colors.py,sha256=aUQkDMTRjTjS9lQfgO5NrUllU2r4ygDTTSUROtTBX90,1
62
62
  bec_widgets/utils/container_utils.py,sha256=0wr3ZfuMiAFKCrQHVjxjw-Vuk8wsHdridqcjy2eY840,1531
63
63
  bec_widgets/utils/crosshair.py,sha256=8lik9k69WI2WMj5FGLbrKtny9duxqXUJAhpX8tHoyp0,11543
64
64
  bec_widgets/utils/entry_validator.py,sha256=3skJIsUwTYicT76AMHm_M78RiWtUgyD2zb-Rxo2HdHQ,1313
65
+ bec_widgets/utils/fps_counter.py,sha256=seuCWwiNP5q2e2OEztloa66pNb3Sygh-0lEHAcYaDfc,2612
65
66
  bec_widgets/utils/generate_designer_plugin.py,sha256=eidqauS8YLgoxkPntPL0oSG_lYqI2D7fSyOZvOtCU_U,5891
66
67
  bec_widgets/utils/layout_manager.py,sha256=H0nKsIMaPxRkof1MEXlSmW6w1dFxA6astaGzf4stI84,4727
67
68
  bec_widgets/utils/linear_region_selector.py,sha256=83qMSGnxCePdI5UL8_M4sMeK_BU9sZBzcw0o3Z_Jgxw,3286
@@ -163,20 +164,20 @@ bec_widgets/widgets/figure/figure.py,sha256=IzQaV_9utjViJyjMydOa3-EJ9k-FVG2PTVm8
163
164
  bec_widgets/widgets/figure/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
165
  bec_widgets/widgets/figure/plots/axis_settings.py,sha256=grgrX4t4eAzccW4jj4HYtMSxy8Wgcd9N9J1aU7UHtIs,3723
165
166
  bec_widgets/widgets/figure/plots/axis_settings.ui,sha256=ye-guaRU_jhu7sHZS-9AjBjLrCtA1msOD0dszu4o9x8,11785
166
- bec_widgets/widgets/figure/plots/plot_base.py,sha256=pWaeT35pPYh5L3_N_Fw5fzC7t5TlsRdNZCVBMpC3BBc,15974
167
+ bec_widgets/widgets/figure/plots/plot_base.py,sha256=FIPvigIHenScR3T1NitRdlY_CXJmuAjCY8fv3GQzrRM,18053
167
168
  bec_widgets/widgets/figure/plots/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
- bec_widgets/widgets/figure/plots/image/image.py,sha256=rq2zy-vwZLd3___rFRNEBnPFGKSu88T5T4ngrTkcbr0,25014
169
- bec_widgets/widgets/figure/plots/image/image_item.py,sha256=DhlBbI-c8nVbJ8tREQhyNr8Qk4W6PXF0HgBhrIoYQPo,11012
169
+ bec_widgets/widgets/figure/plots/image/image.py,sha256=FmvVVKLtMOAvaRL1tF30KLO0yQVCZqxCqydQIesKgdc,25044
170
+ bec_widgets/widgets/figure/plots/image/image_item.py,sha256=TwHo6FwCiQgJBdr-KKy_7Y_vYSB0pPjBl1AubuZSrE0,11002
170
171
  bec_widgets/widgets/figure/plots/image/image_processor.py,sha256=GeTtWjbldy6VejMwPGQgM-o3d6bmLglCjdoktu19xfA,5262
171
172
  bec_widgets/widgets/figure/plots/motor_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
173
  bec_widgets/widgets/figure/plots/motor_map/motor_map.py,sha256=AiDq4bmcEoj9PlkRQtHCk-5cwvOFGPBcfxPNNr8E53Y,18399
173
174
  bec_widgets/widgets/figure/plots/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
- bec_widgets/widgets/figure/plots/waveform/waveform.py,sha256=N3sF0TWJblsznTU8ZSt8QNvoXo7CZEiuDZymJsQUZzA,56708
175
+ bec_widgets/widgets/figure/plots/waveform/waveform.py,sha256=WmFOwtDL5i7RSamB2B-PQS3T8BaKv-pv2Mp2ggh-t3U,56738
175
176
  bec_widgets/widgets/figure/plots/waveform/waveform_curve.py,sha256=RUo4GfXwlaCei8BBvWBQF3IEB8h-KgpvaHur6JUvT6s,8682
176
177
  bec_widgets/widgets/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
178
  bec_widgets/widgets/image/bec_image_widget.pyproject,sha256=PHisdBo5_5UCApd27GkizzqgfdjsDx2bFZa_p9LiSW8,30
178
179
  bec_widgets/widgets/image/bec_image_widget_plugin.py,sha256=3nOHJTukHsEkaCLAivPHIY4qdshAj86LUKb5fYF3C-Y,1369
179
- bec_widgets/widgets/image/image_widget.py,sha256=8a4nR9JsPstIJSBrFiA1nkazTSmYuXaau9WecqI0t9A,16349
180
+ bec_widgets/widgets/image/image_widget.py,sha256=va8IwMWgKUhtmmig2npFjVWJgTnIdnGMFhqFHuoQvWo,17040
180
181
  bec_widgets/widgets/image/register_bec_image_widget.py,sha256=01YLZQTMSSIXvH1TSL-1AYsRs1a4EbSwKLVAwh9AjeA,478
181
182
  bec_widgets/widgets/jupyter_console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
183
  bec_widgets/widgets/jupyter_console/jupyter_console.py,sha256=-e7HQOECeH5eDrJYh4BFIzRL78LDkooU4otabyN0aX4,2343
@@ -252,7 +253,7 @@ bec_widgets/widgets/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
252
253
  bec_widgets/widgets/waveform/bec_waveform_widget.pyproject,sha256=GLD8GN9dXx9wNbtnevrxqqcwk7vKV-Uv8QYSycdaoaI,33
253
254
  bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py,sha256=qSQTeCzIUn8rgDkjIM47Rr3-fqg1uk8rDf_lCoY9gZw,1402
254
255
  bec_widgets/widgets/waveform/register_bec_waveform_widget.py,sha256=qZHVZH_lP2hvzkG1Ra0EyrXlMeLkRCy0aceH-bfJ1cs,490
255
- bec_widgets/widgets/waveform/waveform_widget.py,sha256=jUyeGZCKKqtyk219Xkj_IMca-nvPELW23FqjMn-SMhc,24736
256
+ bec_widgets/widgets/waveform/waveform_widget.py,sha256=HnBRkAPecKV1U_gqLF6seyQnNcqFeR3D4olLqNeNQAw,25664
256
257
  bec_widgets/widgets/waveform/waveform_popups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
258
  bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
259
  bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py,sha256=VxbAtI_ZLfkrkTXqImQcNPwKDqFRWEj-vI8v6mmVMJ8,13025
@@ -264,8 +265,8 @@ bec_widgets/widgets/website/register_website_widget.py,sha256=LIQJpV9uqcBiPR9cEA
264
265
  bec_widgets/widgets/website/website.py,sha256=42pncCc_zI2eqeMArIurVmPUukRo5bTxa2h1Skah-io,3012
265
266
  bec_widgets/widgets/website/website_widget.pyproject,sha256=scOiV3cV1_BjbzpPzy2N8rIJL5P2qIZz8ObTJ-Uvdtg,25
266
267
  bec_widgets/widgets/website/website_widget_plugin.py,sha256=pz38_C2cZ0yvPPS02wdIPcmhFo_yiwUhflsASocAPQQ,1341
267
- bec_widgets-0.116.0.dist-info/METADATA,sha256=12J8zuxFZTwxmh1zZ-EPkH5IxLUYqcNnuZBPfllp5oM,1334
268
- bec_widgets-0.116.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
269
- bec_widgets-0.116.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
270
- bec_widgets-0.116.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
271
- bec_widgets-0.116.0.dist-info/RECORD,,
268
+ bec_widgets-0.117.0.dist-info/METADATA,sha256=qzAx_QzNjl7iO4_f8Bz9YYq3XG9n3Lv2VGGKUY5X48M,1334
269
+ bec_widgets-0.117.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
270
+ bec_widgets-0.117.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
271
+ bec_widgets-0.117.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
272
+ bec_widgets-0.117.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 = "0.116.0"
7
+ version = "0.117.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [