bec-widgets 0.118.0__py3-none-any.whl → 1.0.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.
Files changed (26) hide show
  1. CHANGELOG.md +63 -67
  2. PKG-INFO +1 -1
  3. bec_widgets/applications/alignment/alignment_1d/alignment_1d.py +33 -89
  4. bec_widgets/applications/alignment/alignment_1d/alignment_1d.ui +413 -715
  5. bec_widgets/cli/client.py +22 -0
  6. bec_widgets/qt_utils/compact_popup.py +68 -23
  7. bec_widgets/utils/crosshair.py +11 -2
  8. bec_widgets/widgets/device_line_edit/device_line_edit.py +15 -1
  9. bec_widgets/widgets/figure/plots/waveform/waveform.py +15 -0
  10. bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +3 -2
  11. bec_widgets/widgets/positioner_box/positioner_box.py +10 -4
  12. bec_widgets/widgets/positioner_group/__init__.py +0 -0
  13. bec_widgets/widgets/positioner_group/positioner_group.py +170 -0
  14. bec_widgets/widgets/positioner_group/positioner_group.pyproject +1 -0
  15. bec_widgets/widgets/positioner_group/positioner_group_plugin.py +57 -0
  16. bec_widgets/widgets/positioner_group/register_positioner_group.py +15 -0
  17. bec_widgets/widgets/scan_control/scan_control.py +74 -122
  18. bec_widgets/widgets/scan_control/scan_group_box.py +66 -11
  19. bec_widgets/widgets/stop_button/stop_button.py +1 -1
  20. bec_widgets/widgets/waveform/waveform_widget.py +10 -0
  21. {bec_widgets-0.118.0.dist-info → bec_widgets-1.0.0.dist-info}/METADATA +1 -1
  22. {bec_widgets-0.118.0.dist-info → bec_widgets-1.0.0.dist-info}/RECORD +26 -21
  23. pyproject.toml +1 -1
  24. {bec_widgets-0.118.0.dist-info → bec_widgets-1.0.0.dist-info}/WHEEL +0 -0
  25. {bec_widgets-0.118.0.dist-info → bec_widgets-1.0.0.dist-info}/entry_points.txt +0 -0
  26. {bec_widgets-0.118.0.dist-info → bec_widgets-1.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,5 @@
1
1
  from collections import defaultdict
2
+ from types import SimpleNamespace
2
3
  from typing import Optional
3
4
 
4
5
  from bec_lib.endpoints import MessageEndpoints
@@ -7,11 +8,11 @@ from qtpy.QtCore import Property, Signal, Slot
7
8
  from qtpy.QtWidgets import (
8
9
  QApplication,
9
10
  QComboBox,
10
- QGroupBox,
11
11
  QHBoxLayout,
12
12
  QLabel,
13
13
  QPushButton,
14
14
  QSizePolicy,
15
+ QSpacerItem,
15
16
  QVBoxLayout,
16
17
  QWidget,
17
18
  )
@@ -19,6 +20,7 @@ from qtpy.QtWidgets import (
19
20
  from bec_widgets.qt_utils.error_popups import SafeSlot
20
21
  from bec_widgets.utils import ConnectionConfig
21
22
  from bec_widgets.utils.bec_widget import BECWidget
23
+ from bec_widgets.utils.colors import get_accent_colors
22
24
  from bec_widgets.widgets.scan_control.scan_group_box import ScanGroupBox
23
25
  from bec_widgets.widgets.stop_button.stop_button import StopButton
24
26
  from bec_widgets.widgets.toggle.toggle import ToggleSwitch
@@ -42,6 +44,7 @@ class ScanControl(BECWidget, QWidget):
42
44
 
43
45
  scan_started = Signal()
44
46
  scan_selected = Signal(str)
47
+ device_selected = Signal(str)
45
48
  scan_axis = Signal(str, float, float)
46
49
 
47
50
  def __init__(
@@ -61,6 +64,8 @@ class ScanControl(BECWidget, QWidget):
61
64
  super().__init__(client=client, gui_id=gui_id, config=config)
62
65
  QWidget.__init__(self, parent=parent)
63
66
 
67
+ self._hide_add_remove_buttons = False
68
+
64
69
  # Client from BEC + shortcuts to device manager and scans
65
70
  self.get_bec_shortcuts()
66
71
 
@@ -84,12 +89,54 @@ class ScanControl(BECWidget, QWidget):
84
89
  """
85
90
  Initializes the UI of the scan control widget. Create the top box for scan selection and populate scans to main combobox.
86
91
  """
87
-
88
- # Scan selection group box
89
- self.scan_selection_group = self.create_scan_selection_group()
92
+ palette = get_accent_colors()
93
+ if palette is None:
94
+ palette = SimpleNamespace(
95
+ default=QColor("blue"),
96
+ success=QColor("green"),
97
+ warning=QColor("orange"),
98
+ emergency=QColor("red"),
99
+ )
100
+ # Scan selection box
101
+ self.scan_selection_group = QWidget(self)
102
+ QVBoxLayout(self.scan_selection_group)
103
+ scan_selection_layout = QHBoxLayout()
104
+ self.comboBox_scan_selection_label = QLabel("Scan:", self.scan_selection_group)
105
+ self.comboBox_scan_selection = QComboBox(self.scan_selection_group)
106
+ scan_selection_layout.addWidget(self.comboBox_scan_selection_label, 0)
107
+ scan_selection_layout.addWidget(self.comboBox_scan_selection, 1)
108
+ self.scan_selection_group.layout().addLayout(scan_selection_layout)
109
+
110
+ # Label to reload the last scan parameters within scan selection group box
111
+ self.toggle_layout = QHBoxLayout()
112
+ self.toggle_layout.addSpacerItem(
113
+ QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed)
114
+ )
115
+ self.last_scan_label = QLabel("Restore last scan parameters", self.scan_selection_group)
116
+ self.toggle = ToggleSwitch(parent=self.scan_selection_group, checked=False)
117
+ self.toggle.enabled.connect(self.request_last_executed_scan_parameters)
118
+ self.toggle_layout.addWidget(self.last_scan_label)
119
+ self.toggle_layout.addWidget(self.toggle)
120
+ self.scan_selection_group.layout().addLayout(self.toggle_layout)
90
121
  self.scan_selection_group.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
91
122
  self.layout.addWidget(self.scan_selection_group)
92
123
 
124
+ # Scan control (Run/Stop) buttons
125
+ self.scan_control_group = QWidget(self)
126
+ self.scan_control_group.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
127
+ self.button_layout = QHBoxLayout(self.scan_control_group)
128
+ self.button_run_scan = QPushButton("Start", self.scan_control_group)
129
+ self.button_run_scan.setStyleSheet(
130
+ f"background-color: {palette.success.name()}; color: white"
131
+ )
132
+ self.button_stop_scan = StopButton(parent=self.scan_control_group)
133
+ self.button_stop_scan.setStyleSheet(
134
+ f"background-color: {palette.emergency.name()}; color: white"
135
+ )
136
+ self.button_layout.addWidget(self.button_run_scan)
137
+ self.button_layout.addWidget(self.button_stop_scan)
138
+ self.layout.addWidget(self.scan_control_group)
139
+
93
140
  # Default scan from config
94
141
  if self.config.default_scan is not None:
95
142
  self.comboBox_scan_selection.setCurrentText(self.config.default_scan)
@@ -99,67 +146,11 @@ class ScanControl(BECWidget, QWidget):
99
146
  self.comboBox_scan_selection.currentIndexChanged.connect(self.on_scan_selection_changed)
100
147
  self.button_run_scan.clicked.connect(self.run_scan)
101
148
 
102
- # Add bundle button
103
- self.button_add_bundle = QPushButton("Add Bundle")
104
- self.button_add_bundle.setVisible(False)
105
- # Remove bundle button
106
- self.button_remove_bundle = QPushButton("Remove Bundle")
107
- self.button_remove_bundle.setVisible(False)
108
-
109
- bundle_layout = QHBoxLayout()
110
- bundle_layout.addWidget(self.button_add_bundle)
111
- bundle_layout.addWidget(self.button_remove_bundle)
112
- self.layout.addLayout(bundle_layout)
113
-
114
- self.button_add_bundle.clicked.connect(self.add_arg_bundle)
115
- self.button_remove_bundle.clicked.connect(self.remove_arg_bundle)
116
-
117
149
  self.scan_selected.connect(self.scan_select)
118
150
 
119
151
  # Initialize scan selection
120
152
  self.populate_scans()
121
153
 
122
- def create_scan_selection_group(self) -> QGroupBox:
123
- """
124
- Creates the scan selection group box with combobox to select the scan and start/stop button.
125
-
126
- Returns:
127
- QGroupBox: Group box containing the scan selection widgets.
128
- """
129
-
130
- scan_selection_group = QGroupBox("Scan Selection", self)
131
- self.scan_selection_layout = QVBoxLayout(scan_selection_group)
132
- self.comboBox_scan_selection = QComboBox(scan_selection_group)
133
-
134
- # Buttons
135
- self.button_layout = QHBoxLayout()
136
- ## Run button
137
- self.button_run_scan = QPushButton("Start", scan_selection_group)
138
- self.button_run_scan.setStyleSheet("background-color: #559900; color: white")
139
- ## Stop button
140
- self.button_stop_scan = StopButton(parent=scan_selection_group)
141
- ## Add buttons to layout
142
- self.button_layout.addWidget(self.button_run_scan)
143
- self.button_layout.addWidget(self.button_stop_scan)
144
-
145
- # Label to reload the last scan parameters
146
- self.toggle_layout = QHBoxLayout()
147
- ## Label
148
- self.last_scan_label = QLabel("Restore last scan parameters", scan_selection_group)
149
- ## Switch toggle button
150
- self.toggle = ToggleSwitch(parent=scan_selection_group, checked=False)
151
- self.toggle.enabled.connect(self.request_last_executed_scan_parameters)
152
- ## Add label and switch to layout
153
- self.toggle_layout.addWidget(self.last_scan_label)
154
- self.toggle_layout.addWidget(self.toggle)
155
-
156
- # Add widgets to layout
157
- self.scan_selection_layout.addWidget(self.comboBox_scan_selection)
158
- self.scan_selection_layout.addLayout(self.button_layout)
159
- self.scan_selection_layout.addLayout(self.toggle_layout)
160
-
161
- return scan_selection_group
162
-
163
154
  def populate_scans(self):
164
155
  """Populates the scan selection combo box with available scans from BEC session."""
165
156
  self.available_scans = self.client.connector.get(
@@ -282,29 +273,6 @@ class ScanControl(BECWidget, QWidget):
282
273
  for box in self.kwarg_boxes:
283
274
  box.setVisible(not hide)
284
275
 
285
- @Property(bool)
286
- def hide_scan_remember_toggle(self):
287
- """Property to hide the scan remember toggle."""
288
- return not self.toggle.isVisible()
289
-
290
- @hide_scan_remember_toggle.setter
291
- def hide_scan_remember_toggle(self, hide: bool):
292
- """Setter for the hide_scan_remember_toggle property.
293
-
294
- Args:
295
- hide(bool): Hide or show the scan remember toggle.
296
- """
297
- self.show_scan_remember_toggle(not hide)
298
-
299
- @Slot(bool)
300
- def show_scan_remember_toggle(self, show: bool):
301
- """Shows or hides the scan control buttons."""
302
- self.toggle.setVisible(show)
303
- self.last_scan_label.setVisible(show)
304
-
305
- show_group = show or self.button_run_scan.isVisible()
306
- self.scan_selection_group.setVisible(show_group)
307
-
308
276
  @Property(bool)
309
277
  def hide_scan_control_buttons(self):
310
278
  """Property to hide the scan control buttons."""
@@ -322,11 +290,7 @@ class ScanControl(BECWidget, QWidget):
322
290
  @Slot(bool)
323
291
  def show_scan_control_buttons(self, show: bool):
324
292
  """Shows or hides the scan control buttons."""
325
- self.button_run_scan.setVisible(show)
326
- self.button_stop_scan.setVisible(show)
327
-
328
- show_group = show or self.button_run_scan.isVisible()
329
- self.scan_selection_group.setVisible(show_group)
293
+ self.scan_control_group.setVisible(show)
330
294
 
331
295
  @Property(bool)
332
296
  def hide_scan_selection_combobox(self):
@@ -345,10 +309,7 @@ class ScanControl(BECWidget, QWidget):
345
309
  @Slot(bool)
346
310
  def show_scan_selection_combobox(self, show: bool):
347
311
  """Shows or hides the scan selection combobox."""
348
- self.comboBox_scan_selection.setVisible(show)
349
-
350
- show_group = show or self.button_run_scan.isVisible()
351
- self.scan_selection_group.setVisible(show_group)
312
+ self.scan_selection_group.setVisible(show)
352
313
 
353
314
  @Slot(str)
354
315
  def scan_select(self, scan_name: str):
@@ -365,11 +326,7 @@ class ScanControl(BECWidget, QWidget):
365
326
  self.arg_group = gui_config.get("arg_group", None)
366
327
  self.kwarg_groups = gui_config.get("kwarg_groups", None)
367
328
 
368
- show_bundle_buttons = bool(self.arg_group["arg_inputs"])
369
-
370
- self._show_bundle_buttons(show_bundle_buttons)
371
-
372
- if show_bundle_buttons:
329
+ if bool(self.arg_group["arg_inputs"]):
373
330
  self.add_arg_group(self.arg_group)
374
331
  if len(self.kwarg_groups) > 0:
375
332
  self.add_kwargs_boxes(self.kwarg_groups)
@@ -377,28 +334,21 @@ class ScanControl(BECWidget, QWidget):
377
334
  self.update()
378
335
  self.adjustSize()
379
336
 
380
- def _show_bundle_buttons(self, show: bool):
381
- """Shows or hides the bundle buttons based on the show argument.
382
-
383
- Args:
384
- show(bool): Show or hide the bundle buttons.
385
- """
386
- self.button_add_bundle.setVisible(show)
387
- self.button_remove_bundle.setVisible(show)
388
-
389
337
  @Property(bool)
390
- def hide_bundle_buttons(self):
391
- """Property to hide the bundle buttons."""
392
- return not self.button_add_bundle.isVisible()
338
+ def hide_add_remove_buttons(self):
339
+ """Property to hide the add_remove buttons."""
340
+ return self._hide_add_remove_buttons
393
341
 
394
- @hide_bundle_buttons.setter
395
- def hide_bundle_buttons(self, hide: bool):
396
- """Setter for the hide_bundle_buttons property.
342
+ @hide_add_remove_buttons.setter
343
+ def hide_add_remove_buttons(self, hide: bool):
344
+ """Setter for the hide_add_remove_buttons property.
397
345
 
398
346
  Args:
399
- hide(bool): Hide or show the bundle buttons.
347
+ hide(bool): Hide or show the add_remove buttons.
400
348
  """
401
- self._show_bundle_buttons(not hide)
349
+ self._hide_add_remove_buttons = hide
350
+ if self.arg_box is not None:
351
+ self.arg_box.hide_add_remove_buttons = hide
402
352
 
403
353
  def add_kwargs_boxes(self, groups: list):
404
354
  """
@@ -420,18 +370,20 @@ class ScanControl(BECWidget, QWidget):
420
370
  Args:
421
371
  """
422
372
  self.arg_box = ScanGroupBox(box_type="args", config=group)
373
+ self.arg_box.device_selected.connect(self.emit_device_selected)
423
374
  self.arg_box.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
375
+ self.arg_box.hide_add_remove_buttons = self._hide_add_remove_buttons
424
376
  self.layout.addWidget(self.arg_box)
425
377
 
426
- @Slot()
427
- def add_arg_bundle(self):
428
- """Adds a new argument bundle to the scan control layout."""
429
- self.arg_box.add_widget_bundle()
378
+ @Slot(str)
379
+ def emit_device_selected(self, dev_names):
380
+ """
381
+ Emit the signal to inform about selected device(s)
430
382
 
431
- @Slot()
432
- def remove_arg_bundle(self):
433
- """Removes the last argument bundle from the scan control layout."""
434
- self.arg_box.remove_widget_bundle()
383
+ "dev_names" is a string separated by space, in case of multiple devices
384
+ """
385
+ self._selected_devices = dev_names
386
+ self.device_selected.emit(dev_names)
435
387
 
436
388
  def reset_layout(self):
437
389
  """Clears the scan control layout from GuiGroups and ArgGroups boxes."""
@@ -1,7 +1,8 @@
1
1
  from typing import Literal
2
2
 
3
3
  from bec_lib.logger import bec_logger
4
- from qtpy.QtCore import Qt
4
+ from bec_qthemes import material_icon
5
+ from qtpy.QtCore import Property, Qt, Signal, Slot
5
6
  from qtpy.QtWidgets import (
6
7
  QCheckBox,
7
8
  QComboBox,
@@ -11,9 +12,12 @@ from qtpy.QtWidgets import (
11
12
  QFormLayout,
12
13
  QGridLayout,
13
14
  QGroupBox,
15
+ QHBoxLayout,
14
16
  QLabel,
15
17
  QLineEdit,
18
+ QPushButton,
16
19
  QSpinBox,
20
+ QVBoxLayout,
17
21
  )
18
22
 
19
23
  from bec_widgets.utils.widget_io import WidgetIO
@@ -133,6 +137,8 @@ class ScanGroupBox(QGroupBox):
133
137
  ScanArgType.LITERALS: QComboBox, # TODO figure out combobox logic
134
138
  }
135
139
 
140
+ device_selected = Signal(str)
141
+
136
142
  def __init__(
137
143
  self,
138
144
  parent=None,
@@ -144,13 +150,36 @@ class ScanGroupBox(QGroupBox):
144
150
  super().__init__(parent=parent, *args, **kwargs)
145
151
  self.config = config
146
152
  self.box_type = box_type
153
+ self._hide_add_remove_buttons = False
147
154
 
155
+ vbox_layout = QVBoxLayout(self)
156
+ hbox_layout = QHBoxLayout()
157
+ vbox_layout.addLayout(hbox_layout)
148
158
  self.layout = QGridLayout(self)
159
+ vbox_layout.addLayout(self.layout)
160
+
161
+ # Add bundle button
162
+ self.button_add_bundle = QPushButton(self)
163
+ self.button_add_bundle.setIcon(
164
+ material_icon(icon_name="add", size=(15, 15), convert_to_pixmap=False)
165
+ )
166
+ # Remove bundle button
167
+ self.button_remove_bundle = QPushButton(self)
168
+ self.button_remove_bundle.setIcon(
169
+ material_icon(icon_name="remove", size=(15, 15), convert_to_pixmap=False)
170
+ )
171
+ hbox_layout.addWidget(self.button_add_bundle)
172
+ hbox_layout.addWidget(self.button_remove_bundle)
173
+
149
174
  self.labels = []
150
175
  self.widgets = []
176
+ self.selected_devices = {}
151
177
 
152
178
  self.init_box(self.config)
153
179
 
180
+ self.button_add_bundle.clicked.connect(self.add_widget_bundle)
181
+ self.button_remove_bundle.clicked.connect(self.remove_widget_bundle)
182
+
154
183
  def init_box(self, config: dict):
155
184
  box_name = config.get("name", "ScanGroupBox")
156
185
  self.inputs = config.get("inputs", {})
@@ -166,6 +195,8 @@ class ScanGroupBox(QGroupBox):
166
195
  self.add_input_widgets(self.inputs, i)
167
196
  else:
168
197
  self.add_input_widgets(self.inputs, 1)
198
+ self.button_add_bundle.setVisible(False)
199
+ self.button_remove_bundle.setVisible(False)
169
200
 
170
201
  def add_input_labels(self, group_inputs: dict, row: int) -> None:
171
202
  """
@@ -192,27 +223,34 @@ class ScanGroupBox(QGroupBox):
192
223
  for column_index, item in enumerate(group_inputs):
193
224
  arg_name = item.get("name", None)
194
225
  default = item.get("default", None)
195
- widget = self.WIDGET_HANDLER.get(item["type"], None)
196
- if widget is None:
226
+ widget_class = self.WIDGET_HANDLER.get(item["type"], None)
227
+ if widget_class is None:
197
228
  logger.error(
198
229
  f"Unsupported annotation '{item['type']}' for parameter '{item['name']}'"
199
230
  )
200
231
  continue
201
232
  if default == "_empty":
202
233
  default = None
203
- widget_to_add = widget(arg_name=arg_name, default=default)
234
+ widget = widget_class(arg_name=arg_name, default=default)
235
+ if isinstance(widget, DeviceLineEdit):
236
+ self.selected_devices[widget] = ""
237
+ widget.device_selected.connect(self.emit_device_selected)
204
238
  tooltip = item.get("tooltip", None)
205
239
  if tooltip is not None:
206
- widget_to_add.setToolTip(item["tooltip"])
207
- self.layout.addWidget(widget_to_add, row, column_index)
208
- self.widgets.append(widget_to_add)
240
+ widget.setToolTip(item["tooltip"])
241
+ self.layout.addWidget(widget, row, column_index)
242
+ self.widgets.append(widget)
243
+
244
+ @Slot(str)
245
+ def emit_device_selected(self, device_name):
246
+ self.selected_devices[self.sender()] = device_name.strip()
247
+ selected_devices_str = " ".join(self.selected_devices.values())
248
+ self.device_selected.emit(selected_devices_str)
209
249
 
210
250
  def add_widget_bundle(self):
211
251
  """
212
252
  Adds a new row of widgets to the scan control layout. Only usable for arg_groups.
213
253
  """
214
- if self.box_type != "args":
215
- return
216
254
  arg_max = self.config.get("max", None)
217
255
  row = self.layout.rowCount()
218
256
  if arg_max is not None and row >= arg_max:
@@ -224,17 +262,34 @@ class ScanGroupBox(QGroupBox):
224
262
  """
225
263
  Removes the last row of widgets from the scan control layout. Only usable for arg_groups.
226
264
  """
227
- if self.box_type != "args":
228
- return
229
265
  arg_min = self.config.get("min", None)
230
266
  row = self.count_arg_rows()
231
267
  if arg_min is not None and row <= arg_min:
232
268
  return
233
269
 
234
270
  for widget in self.widgets[-len(self.inputs) :]:
271
+ if isinstance(widget, DeviceLineEdit):
272
+ self.selected_devices[widget] = ""
235
273
  widget.deleteLater()
236
274
  self.widgets = self.widgets[: -len(self.inputs)]
237
275
 
276
+ selected_devices_str = " ".join(self.selected_devices.values())
277
+ self.device_selected.emit(selected_devices_str.strip())
278
+
279
+ @Property(bool)
280
+ def hide_add_remove_buttons(self):
281
+ return self._hide_add_remove_buttons
282
+
283
+ @hide_add_remove_buttons.setter
284
+ def hide_add_remove_buttons(self, hide: bool):
285
+ self._hide_add_remove_buttons = hide
286
+ if not hide and self.box_type == "args":
287
+ self.button_add_bundle.show()
288
+ self.button_remove_bundle.show()
289
+ return
290
+ self.button_add_bundle.hide()
291
+ self.button_remove_bundle.hide()
292
+
238
293
  def get_parameters(self, device_object: bool = True):
239
294
  """
240
295
  Returns the parameters from the widgets in the scan control layout formated to run scan from BEC.
@@ -28,7 +28,7 @@ class StopButton(BECWidget, QWidget):
28
28
  self.button.setToolTip("Stop the scan queue")
29
29
  else:
30
30
  self.button = QPushButton()
31
- self.button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
31
+ self.button.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
32
32
  self.button.setText("Stop")
33
33
  self.button.setStyleSheet(
34
34
  f"background-color: #cc181e; color: white; font-weight: bold; font-size: 12px;"
@@ -53,6 +53,7 @@ class BECWaveformWidget(BECWidget, QWidget):
53
53
  "set_auto_range",
54
54
  "set_grid",
55
55
  "enable_fps_monitor",
56
+ "enable_scatter",
56
57
  "lock_aspect_ratio",
57
58
  "export",
58
59
  "export_to_matplotlib",
@@ -650,6 +651,15 @@ class BECWaveformWidget(BECWidget, QWidget):
650
651
  """
651
652
  self.waveform.set_outer_axes(show)
652
653
 
654
+ def enable_scatter(self, enabled: bool):
655
+ """
656
+ Enable the scatter plot of the plot widget.
657
+
658
+ Args:
659
+ enabled(bool): If True, enable the scatter plot.
660
+ """
661
+ self.waveform.enable_scatter(enabled)
662
+
653
663
  def lock_aspect_ratio(self, lock: bool):
654
664
  """
655
665
  Lock the aspect ratio of the plot widget.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.118.0
3
+ Version: 1.0.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=HNKObLHRdn9EU6yqjOfIWmErsDeBt7ffe7yyRbZS3NA,7465
5
+ CHANGELOG.md,sha256=ictSVeE4O8eLWY3S9ZZxY1m2qlvUwjy_QnVACNX_UGg,7894
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=hV96OUPMuSpWBtmpNtWNAb0beAY0hjUEDESVB7pQbAI,1334
7
+ PKG-INFO,sha256=93tOXh8unfow7xYaaQz_Mqm52H-jBrCA7bExilinQVA,1332
8
8
  README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
9
- pyproject.toml,sha256=4rIuf_3lQm4rURa8VikhNvgRpIszEI-2SDRmR_IFX0Y,2594
9
+ pyproject.toml,sha256=vbHRUs7LIZEFJlGlv16I0rkSq80h2iY0oBNTXMQHsg4,2592
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
@@ -17,14 +17,14 @@ bec_widgets/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
17
17
  bec_widgets/applications/bec_app.py,sha256=PptBknsnhWm5GSE-xBps4EAYP3f9i-q9YmUMROupnqQ,2801
18
18
  bec_widgets/applications/alignment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  bec_widgets/applications/alignment/alignment_1d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- bec_widgets/applications/alignment/alignment_1d/alignment_1d.py,sha256=eGqEXKVz4kSdaIBZAKfuI4pwYoLWwKyLjTY1eB31kgk,11200
21
- bec_widgets/applications/alignment/alignment_1d/alignment_1d.ui,sha256=CQz0UAXhWI4As_dsgfZUqCtYoqEAgEJl7IZWP7YxA5I,28940
20
+ bec_widgets/applications/alignment/alignment_1d/alignment_1d.py,sha256=kGF0grwYDWGwNRhWiI3OUj7wUmMd6PhFOR9Drb0339I,8093
21
+ bec_widgets/applications/alignment/alignment_1d/alignment_1d.ui,sha256=af3-CytU4h3TAaOvgzq6OHJ60DZSiGVeci7tzNX2fto,18927
22
22
  bec_widgets/assets/app_icons/BEC-General-App.png,sha256=hc2ktly53DZAbl_rE3cb-vdRa5gtdCmBEjfwm2y5P4g,447581
23
23
  bec_widgets/assets/app_icons/alignment_1d.png,sha256=5VouaWieb4lVv3wUBNHaO5ovUW2Fk25aTKYQzOWy0mg,2071069
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=5fPUNDWvzBii-0oMOL76IhKffN88q1vbrx2P7Uh90TE,83195
27
+ bec_widgets/cli/client.py,sha256=iwbdZ2-ruGwLPk1co5-pHXSWm-K99ms6P3wORZwnI1Q,83887
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
@@ -45,7 +45,7 @@ bec_widgets/examples/plugin_example_pyside/tictactoe.py,sha256=s3rCurXloVcmMdzZi
45
45
  bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py,sha256=MFMwONn4EZ3V8DboEG4I3BXpURE9JDbKB7XTzzfZl5w,1978
46
46
  bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py,sha256=V6OVnBTS-60zjQ2FAs88Ldjm1MfoMROfiQZZu6Guav8,2379
47
47
  bec_widgets/qt_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- bec_widgets/qt_utils/compact_popup.py,sha256=DQel3iVjRYn6C5cR33ADSPyZObuMWSKwJYbwudb0o1k,8474
48
+ bec_widgets/qt_utils/compact_popup.py,sha256=3yeb-GJ1PUla5Q_hT0XDKqvyIEH9yV_eGidf1t8Dbbw,10234
49
49
  bec_widgets/qt_utils/error_popups.py,sha256=y9gKKWaafp468ioHr96nBhf02ZpEgjDc-BAVOTWh-e8,7680
50
50
  bec_widgets/qt_utils/palette_viewer.py,sha256=PGhJ-4XI0f7gNnC1djNgcIHYg6HDO6hPju4pfWj9rvg,6311
51
51
  bec_widgets/qt_utils/redis_message_waiter.py,sha256=fvL_QgC0cTDv_FPJdRyp5AKjf401EJU4z3r38p47ydY,1745
@@ -60,7 +60,7 @@ bec_widgets/utils/bec_table.py,sha256=nA2b8ukSeUfquFMAxGrUVOqdrzMoDYD6O_4EYbOG2z
60
60
  bec_widgets/utils/bec_widget.py,sha256=1lrHNuvW6uOuPpr-cJBYJNbFekTsqpnQdfTo3P5tbWI,3330
61
61
  bec_widgets/utils/colors.py,sha256=aUQkDMTRjTjS9lQfgO5NrUllU2r4ygDTTSUROtTBX90,12838
62
62
  bec_widgets/utils/container_utils.py,sha256=0wr3ZfuMiAFKCrQHVjxjw-Vuk8wsHdridqcjy2eY840,1531
63
- bec_widgets/utils/crosshair.py,sha256=8lik9k69WI2WMj5FGLbrKtny9duxqXUJAhpX8tHoyp0,11543
63
+ bec_widgets/utils/crosshair.py,sha256=f13tn1v_8FJ6C0WOLyDUXHaG_Nfzj4nMlLVEGqvs5Zc,11838
64
64
  bec_widgets/utils/entry_validator.py,sha256=3skJIsUwTYicT76AMHm_M78RiWtUgyD2zb-Rxo2HdHQ,1313
65
65
  bec_widgets/utils/fps_counter.py,sha256=seuCWwiNP5q2e2OEztloa66pNb3Sygh-0lEHAcYaDfc,2612
66
66
  bec_widgets/utils/generate_designer_plugin.py,sha256=eidqauS8YLgoxkPntPL0oSG_lYqI2D7fSyOZvOtCU_U,5891
@@ -149,7 +149,7 @@ bec_widgets/widgets/device_combobox/device_combo_box_plugin.py,sha256=E4kR_EWo2Y
149
149
  bec_widgets/widgets/device_combobox/device_combobox.py,sha256=OMtrIn9e9F3S-bJ3xB27LTMShnGIdawBoq_G_E98SV0,2695
150
150
  bec_widgets/widgets/device_combobox/register_device_combo_box.py,sha256=ZCrWVdWOvIjnUJWe3MU7JO021rcXYg2SgA1iSKqbLoY,488
151
151
  bec_widgets/widgets/device_line_edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- bec_widgets/widgets/device_line_edit/device_line_edit.py,sha256=whPg6x4I0645Cw4jyNaOvUTGSO4-2AiGPbstv722HcI,3250
152
+ bec_widgets/widgets/device_line_edit/device_line_edit.py,sha256=v5Pz7fmGzDxYF8uy3OVHy3uCSFQU_SOJ7WdHiFfhnrA,3700
153
153
  bec_widgets/widgets/device_line_edit/device_line_edit.pyproject,sha256=tqAYXRbxsHR41MwqmAxvfq1CFeZ1IRv84whUG67HjjE,41
154
154
  bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py,sha256=KsTa6Ha1hWFvbw5x24KCGstxKqhlTakJfmtphsOouJ0,1433
155
155
  bec_widgets/widgets/device_line_edit/register_device_line_edit.py,sha256=8gEPnC8djYCw-idoZAENNB3bPOxM6pbzEp9A366EAGg,489
@@ -172,8 +172,8 @@ bec_widgets/widgets/figure/plots/image/image_processor.py,sha256=GeTtWjbldy6VejM
172
172
  bec_widgets/widgets/figure/plots/motor_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
173
  bec_widgets/widgets/figure/plots/motor_map/motor_map.py,sha256=AiDq4bmcEoj9PlkRQtHCk-5cwvOFGPBcfxPNNr8E53Y,18399
174
174
  bec_widgets/widgets/figure/plots/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
- bec_widgets/widgets/figure/plots/waveform/waveform.py,sha256=WmFOwtDL5i7RSamB2B-PQS3T8BaKv-pv2Mp2ggh-t3U,56738
176
- bec_widgets/widgets/figure/plots/waveform/waveform_curve.py,sha256=RUo4GfXwlaCei8BBvWBQF3IEB8h-KgpvaHur6JUvT6s,8682
175
+ bec_widgets/widgets/figure/plots/waveform/waveform.py,sha256=cIHzi4FntWfoRhuP_tLaVyb86Q3VpcO2tK0MC0tct4w,57232
176
+ bec_widgets/widgets/figure/plots/waveform/waveform_curve.py,sha256=KduOM3glj3Xq1m63cBDIoauNsIwEzZb8SHcK01_aJfU,8719
177
177
  bec_widgets/widgets/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
178
  bec_widgets/widgets/image/bec_image_widget.pyproject,sha256=PHisdBo5_5UCApd27GkizzqgfdjsDx2bFZa_p9LiSW8,30
179
179
  bec_widgets/widgets/image/bec_image_widget_plugin.py,sha256=3nOHJTukHsEkaCLAivPHIY4qdshAj86LUKb5fYF3C-Y,1369
@@ -202,7 +202,7 @@ bec_widgets/widgets/position_indicator/position_indicator.pyproject,sha256=s0JEf
202
202
  bec_widgets/widgets/position_indicator/position_indicator_plugin.py,sha256=ehQPpwkjJ7k365i4gdwtmAmCbVmB1tvQLEo60J_ivo4,1413
203
203
  bec_widgets/widgets/position_indicator/register_position_indicator.py,sha256=OZNiMgM_80TPSAXK_0hXAkne4vUh8DGvh_OdpOiMpwI,516
204
204
  bec_widgets/widgets/positioner_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
- bec_widgets/widgets/positioner_box/positioner_box.py,sha256=xrANDL3dJM40c0AYhhessLGBdHkXSPOA-8KRvY5kKx0,11693
205
+ bec_widgets/widgets/positioner_box/positioner_box.py,sha256=LfF9t6B2L1WN4JHugXWA33L40RufI44nwhMUKAxpUaE,11980
206
206
  bec_widgets/widgets/positioner_box/positioner_box.pyproject,sha256=7966pHdDseaHciaPNEKgdQgbUThSZf5wEDCeAEJh9po,32
207
207
  bec_widgets/widgets/positioner_box/positioner_box.ui,sha256=7LZlM9smIqmkvS2KAIDkBamn04mBAkXeG9T1fpKRQe8,6093
208
208
  bec_widgets/widgets/positioner_box/positioner_box_plugin.py,sha256=kJtQgRFGkJYWbZqJ7K7o0UhdsgAlODUVZL8pKJWwMhs,1413
@@ -212,6 +212,11 @@ bec_widgets/widgets/positioner_box/positioner_control_line.ui,sha256=fUq56Bl05jx
212
212
  bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py,sha256=ud3KqPoW_jDipe6O7uEbM_X0M7angJgchY9dAjyxNRM,1495
213
213
  bec_widgets/widgets/positioner_box/register_positioner_box.py,sha256=UPOUjXXq6-IgSj0kdV_nJe1rYPMF8aIZxF4eSmWgQAg,483
214
214
  bec_widgets/widgets/positioner_box/register_positioner_control_line.py,sha256=MJ13vKGIwTMQGFhll63tfUGXHyd6bz40Cvr85oYKH3I,525
215
+ bec_widgets/widgets/positioner_group/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
+ bec_widgets/widgets/positioner_group/positioner_group.py,sha256=UH7_9TJ5YH6WaU1hEcf7avAZiP_Co7Ppp1TsAvluu1Q,5768
217
+ bec_widgets/widgets/positioner_group/positioner_group.pyproject,sha256=NV-Hupn3uA4T9KXhxFO3r4MVuUAfdfWaLH4CIm71eqc,35
218
+ bec_widgets/widgets/positioner_group/positioner_group_plugin.py,sha256=mN1PcOy0SN_mgVLekuvAfC6-vLUYhRYC0Ks95f1Ut1c,1450
219
+ bec_widgets/widgets/positioner_group/register_positioner_group.py,sha256=1R9FCWeOIPMAhWCnpjMKsW06-Ku79S6pj0O_rB2LM78,491
215
220
  bec_widgets/widgets/ring_progress_bar/__init__.py,sha256=_uoJKnDM2YAeUBfwc5WLbIHSJj7zm_FAurSKP3WRaCw,47
216
221
  bec_widgets/widgets/ring_progress_bar/register_ring_progress_bar.py,sha256=uJrMhkuQi2PdWa0BwFJqjVXSkO-TXoyai4EQYOOe9t4,493
217
222
  bec_widgets/widgets/ring_progress_bar/ring.py,sha256=2pdEzETaJpvx4Dzyosq2YhnvDOEUvFnj_f9GfFKpG5Q,11159
@@ -220,10 +225,10 @@ bec_widgets/widgets/ring_progress_bar/ring_progress_bar.pyproject,sha256=ZNYDnKD
220
225
  bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py,sha256=-rw9ZSThgAH0Ubbr3X-L5x-ZqMXUGnauyFb4OmfUvD4,1394
221
226
  bec_widgets/widgets/scan_control/__init__.py,sha256=IOfHl15vxb_uC6KN62-PeUzbBha_vQyqkkXbJ2HU674,38
222
227
  bec_widgets/widgets/scan_control/register_scan_control.py,sha256=xUX2yR0-MaIMg9_y9qe50yDDphzsh2x1b5PMrF90yPM,475
223
- bec_widgets/widgets/scan_control/scan_control.py,sha256=xR043qG1biFePq7bmfZZTcCvoQovObDe9cjRj-B-ylA,19343
228
+ bec_widgets/widgets/scan_control/scan_control.py,sha256=k1nypTt4cRo4zHI4Oii-P3-YBoUAEDUhQT-kbl9djyk,18126
224
229
  bec_widgets/widgets/scan_control/scan_control.pyproject,sha256=eTgVDFKToIH8_BbJjM2RvbOLr7HnYoidX0SAHx640DM,30
225
230
  bec_widgets/widgets/scan_control/scan_control_plugin.py,sha256=7GaqmaRgbwIPjVoXcyKVDl8UpfqC2weViup-YFfzUsM,1270
226
- bec_widgets/widgets/scan_control/scan_group_box.py,sha256=H2QQFvRlmpF-lilmRRNB-vsAcYQkDYhbHZo32hPRVr8,10488
231
+ bec_widgets/widgets/scan_control/scan_group_box.py,sha256=-d3V-sU-S-IHFymY-c-4BesUZNsG3Hq1exXvVGspXy4,12713
227
232
  bec_widgets/widgets/spinner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
233
  bec_widgets/widgets/spinner/register_spinner_widget.py,sha256=_zCPjLh4M7NTSHP1Atdn6yu33zJ3LJkcBy3KOJ5eSVY,476
229
234
  bec_widgets/widgets/spinner/spinner.py,sha256=5LoRGuRvQmY1hUCt06P3DJjXqOVkFCszbNAXRmPzqlo,2628
@@ -231,7 +236,7 @@ bec_widgets/widgets/spinner/spinner_widget.pyproject,sha256=zzLajGB3DTgVnrSqMey2
231
236
  bec_widgets/widgets/spinner/spinner_widget_plugin.py,sha256=AZYJJe40olMzqL6Edk6J-X_iNHcXrU-EQN4mCUCp_Fo,1355
232
237
  bec_widgets/widgets/stop_button/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
233
238
  bec_widgets/widgets/stop_button/register_stop_button.py,sha256=U7r3fEOH-uPhAQI-nTituHXDDXDWR4JQZ7_vD6b_dfM,471
234
- bec_widgets/widgets/stop_button/stop_button.py,sha256=Y_6GPSZ3NjmMBbZFW8moJYO2C-Ay5Zp-u9RuNKZaFB0,2022
239
+ bec_widgets/widgets/stop_button/stop_button.py,sha256=mRDJvsM5KqiOhmR_qIeV2hNcBHMkKqe63Kexv6FwA_w,2016
235
240
  bec_widgets/widgets/stop_button/stop_button.pyproject,sha256=Cc_xbv-zfzNVpsdg_1QyzuTlrJaM9_BkIjes70umrx0,29
236
241
  bec_widgets/widgets/stop_button/stop_button_plugin.py,sha256=VT-WVLq89fw7PwML7JDMCF1bqfopLCZIgMA4yetl65M,1365
237
242
  bec_widgets/widgets/text_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -253,7 +258,7 @@ bec_widgets/widgets/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
253
258
  bec_widgets/widgets/waveform/bec_waveform_widget.pyproject,sha256=GLD8GN9dXx9wNbtnevrxqqcwk7vKV-Uv8QYSycdaoaI,33
254
259
  bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py,sha256=qSQTeCzIUn8rgDkjIM47Rr3-fqg1uk8rDf_lCoY9gZw,1402
255
260
  bec_widgets/widgets/waveform/register_bec_waveform_widget.py,sha256=qZHVZH_lP2hvzkG1Ra0EyrXlMeLkRCy0aceH-bfJ1cs,490
256
- bec_widgets/widgets/waveform/waveform_widget.py,sha256=HnBRkAPecKV1U_gqLF6seyQnNcqFeR3D4olLqNeNQAw,25664
261
+ bec_widgets/widgets/waveform/waveform_widget.py,sha256=x8OnXsSVTChceTO8l7ySY2oB2rpzHMZfS5PbxYV0LuY,25934
257
262
  bec_widgets/widgets/waveform/waveform_popups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
263
  bec_widgets/widgets/waveform/waveform_popups/curve_dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
259
264
  bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py,sha256=VxbAtI_ZLfkrkTXqImQcNPwKDqFRWEj-vI8v6mmVMJ8,13025
@@ -265,8 +270,8 @@ bec_widgets/widgets/website/register_website_widget.py,sha256=LIQJpV9uqcBiPR9cEA
265
270
  bec_widgets/widgets/website/website.py,sha256=42pncCc_zI2eqeMArIurVmPUukRo5bTxa2h1Skah-io,3012
266
271
  bec_widgets/widgets/website/website_widget.pyproject,sha256=scOiV3cV1_BjbzpPzy2N8rIJL5P2qIZz8ObTJ-Uvdtg,25
267
272
  bec_widgets/widgets/website/website_widget_plugin.py,sha256=pz38_C2cZ0yvPPS02wdIPcmhFo_yiwUhflsASocAPQQ,1341
268
- bec_widgets-0.118.0.dist-info/METADATA,sha256=hV96OUPMuSpWBtmpNtWNAb0beAY0hjUEDESVB7pQbAI,1334
269
- bec_widgets-0.118.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
270
- bec_widgets-0.118.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
271
- bec_widgets-0.118.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
272
- bec_widgets-0.118.0.dist-info/RECORD,,
273
+ bec_widgets-1.0.0.dist-info/METADATA,sha256=93tOXh8unfow7xYaaQz_Mqm52H-jBrCA7bExilinQVA,1332
274
+ bec_widgets-1.0.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
275
+ bec_widgets-1.0.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
276
+ bec_widgets-1.0.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
277
+ bec_widgets-1.0.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.118.0"
7
+ version = "1.0.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [