bec-widgets 0.99.11__py3-none-any.whl → 0.99.13__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 +22 -20
- PKG-INFO +1 -1
- bec_widgets/cli/client.py +40 -2
- bec_widgets/qt_utils/toolbar.py +25 -0
- bec_widgets/utils/colors.py +12 -1
- bec_widgets/widgets/button_abort/__init__.py +0 -0
- bec_widgets/widgets/button_abort/abort_button.pyproject +1 -0
- bec_widgets/widgets/button_abort/abort_button_plugin.py +54 -0
- bec_widgets/widgets/button_abort/button_abort.py +49 -0
- bec_widgets/widgets/button_abort/register_abort_button.py +15 -0
- bec_widgets/widgets/button_reset/__init__.py +0 -0
- bec_widgets/widgets/button_reset/button_reset.py +42 -0
- bec_widgets/widgets/button_reset/register_reset_button.py +15 -0
- bec_widgets/widgets/button_reset/reset_button.pyproject +1 -0
- bec_widgets/widgets/button_reset/reset_button_plugin.py +54 -0
- bec_widgets/widgets/button_resume/button_resume.py +1 -1
- bec_widgets/widgets/dark_mode_button/dark_mode_button.py +21 -5
- bec_widgets/widgets/positioner_box/positioner_box.py +2 -0
- bec_widgets/widgets/stop_button/stop_button.py +9 -2
- {bec_widgets-0.99.11.dist-info → bec_widgets-0.99.13.dist-info}/METADATA +1 -1
- {bec_widgets-0.99.11.dist-info → bec_widgets-0.99.13.dist-info}/RECORD +25 -15
- pyproject.toml +1 -1
- {bec_widgets-0.99.11.dist-info → bec_widgets-0.99.13.dist-info}/WHEEL +0 -0
- {bec_widgets-0.99.11.dist-info → bec_widgets-0.99.13.dist-info}/entry_points.txt +0 -0
- {bec_widgets-0.99.11.dist-info → bec_widgets-0.99.13.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## v0.99.13 (2024-08-30)
|
4
|
+
|
5
|
+
### Documentation
|
6
|
+
|
7
|
+
* docs: minor updates to the widget tutorial ([`ec9c8f2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ec9c8f29633364c45ebd998a5411d428c1ce488d))
|
8
|
+
|
9
|
+
* docs(widget tutorial): step by step guide added ([`b32ced8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b32ced85fff628a9e1303a781630cdae3865238e))
|
10
|
+
|
11
|
+
### Fix
|
12
|
+
|
13
|
+
* fix(dark mode button): fixed dark mode button state for external updates, including auto ([`a3110d9`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a3110d98147295dcb1f9353f9aaf5461cba9232a))
|
14
|
+
|
15
|
+
## v0.99.12 (2024-08-29)
|
16
|
+
|
17
|
+
### Fix
|
18
|
+
|
19
|
+
* fix(toolbar): widget action added ([`2efd487`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2efd48736cbe04e84533f7933c552ea8274e2162))
|
20
|
+
|
21
|
+
* fix(reset_button): reset button added ([`6ed1efc`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6ed1efc6af193908f70aa37fb73157d2ca6a62f4))
|
22
|
+
|
23
|
+
* fix(abort_button): abort button added; some minor fixes ([`a568633`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a568633c3206a8c26069d140f2d9a548bf4124b0))
|
24
|
+
|
3
25
|
## v0.99.11 (2024-08-29)
|
4
26
|
|
5
27
|
### Fix
|
@@ -137,23 +159,3 @@ If not theme is set, the init of the BECWidget base class sets the default theme
|
|
137
159
|
### Test
|
138
160
|
|
139
161
|
* test(dark_mode_button): added tests for dark mode button ([`df35aab`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/df35aabff30c5d00b1c441132bd370446653741e))
|
140
|
-
|
141
|
-
## v0.98.0 (2024-08-25)
|
142
|
-
|
143
|
-
### Fix
|
144
|
-
|
145
|
-
* fix(toolbar): removed hardcoded color values ([`afdf4e8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/afdf4e8782a22566932180224fa1c924d24c810f))
|
146
|
-
|
147
|
-
* fix: transitioning to material icons ([`2a82032`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2a82032644a84e38df04e2035a6aa63f4a046360))
|
148
|
-
|
149
|
-
* fix(dock_area): transitioned to MaterialIconAction ([`88a2f66`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/88a2f667588e9aeb34ae556fa327898824052bc3))
|
150
|
-
|
151
|
-
* fix: fix color palette if qtheme was not called ([`3f3b207`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3f3b207295ebd406ebaeecee465c774965161b8b))
|
152
|
-
|
153
|
-
* fix(figure): removed theme from figure init ([`e42b84c`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e42b84c63650297d67feffccc02a2c2ba111ca79))
|
154
|
-
|
155
|
-
* fix: use globally set theme instead of the internal bec widgets theme ([`77c5aa7`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/77c5aa741cf1f5b969a42aa878aa2965176dbf41))
|
156
|
-
|
157
|
-
### Refactor
|
158
|
-
|
159
|
-
* refactor(waveform): use set theme for demo ([`44cfda1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/44cfda1c07306669c9a4e09706d95e6b91dee370))
|
PKG-INFO
CHANGED
bec_widgets/cli/client.py
CHANGED
@@ -13,6 +13,7 @@ class Widgets(str, enum.Enum):
|
|
13
13
|
Enum for the available widgets.
|
14
14
|
"""
|
15
15
|
|
16
|
+
AbortButton = "AbortButton"
|
16
17
|
BECDock = "BECDock"
|
17
18
|
BECDockArea = "BECDockArea"
|
18
19
|
BECFigure = "BECFigure"
|
@@ -27,6 +28,7 @@ class Widgets(str, enum.Enum):
|
|
27
28
|
DeviceLineEdit = "DeviceLineEdit"
|
28
29
|
PositionerBox = "PositionerBox"
|
29
30
|
PositionerControlLine = "PositionerControlLine"
|
31
|
+
ResetButton = "ResetButton"
|
30
32
|
ResumeButton = "ResumeButton"
|
31
33
|
RingProgressBar = "RingProgressBar"
|
32
34
|
ScanControl = "ScanControl"
|
@@ -36,6 +38,24 @@ class Widgets(str, enum.Enum):
|
|
36
38
|
WebsiteWidget = "WebsiteWidget"
|
37
39
|
|
38
40
|
|
41
|
+
class AbortButton(RPCBase):
|
42
|
+
@property
|
43
|
+
@rpc_call
|
44
|
+
def _config_dict(self) -> "dict":
|
45
|
+
"""
|
46
|
+
Get the configuration of the widget.
|
47
|
+
|
48
|
+
Returns:
|
49
|
+
dict: The configuration of the widget.
|
50
|
+
"""
|
51
|
+
|
52
|
+
@rpc_call
|
53
|
+
def _get_all_rpc(self) -> "dict":
|
54
|
+
"""
|
55
|
+
Get all registered RPC objects.
|
56
|
+
"""
|
57
|
+
|
58
|
+
|
39
59
|
class BECCurve(RPCBase):
|
40
60
|
@rpc_call
|
41
61
|
def remove(self):
|
@@ -2374,7 +2394,7 @@ class DeviceLineEdit(RPCBase):
|
|
2374
2394
|
|
2375
2395
|
class PositionerBox(RPCBase):
|
2376
2396
|
@rpc_call
|
2377
|
-
def set_positioner(self, positioner: str):
|
2397
|
+
def set_positioner(self, positioner: "str | Positioner"):
|
2378
2398
|
"""
|
2379
2399
|
Set the device
|
2380
2400
|
|
@@ -2385,7 +2405,7 @@ class PositionerBox(RPCBase):
|
|
2385
2405
|
|
2386
2406
|
class PositionerControlLine(RPCBase):
|
2387
2407
|
@rpc_call
|
2388
|
-
def set_positioner(self, positioner: str):
|
2408
|
+
def set_positioner(self, positioner: "str | Positioner"):
|
2389
2409
|
"""
|
2390
2410
|
Set the device
|
2391
2411
|
|
@@ -2394,6 +2414,24 @@ class PositionerControlLine(RPCBase):
|
|
2394
2414
|
"""
|
2395
2415
|
|
2396
2416
|
|
2417
|
+
class ResetButton(RPCBase):
|
2418
|
+
@property
|
2419
|
+
@rpc_call
|
2420
|
+
def _config_dict(self) -> "dict":
|
2421
|
+
"""
|
2422
|
+
Get the configuration of the widget.
|
2423
|
+
|
2424
|
+
Returns:
|
2425
|
+
dict: The configuration of the widget.
|
2426
|
+
"""
|
2427
|
+
|
2428
|
+
@rpc_call
|
2429
|
+
def _get_all_rpc(self) -> "dict":
|
2430
|
+
"""
|
2431
|
+
Get all registered RPC objects.
|
2432
|
+
"""
|
2433
|
+
|
2434
|
+
|
2397
2435
|
class ResumeButton(RPCBase):
|
2398
2436
|
@property
|
2399
2437
|
@rpc_call
|
bec_widgets/qt_utils/toolbar.py
CHANGED
@@ -142,6 +142,31 @@ class DeviceSelectionAction(ToolBarAction):
|
|
142
142
|
self.device_combobox.setStyleSheet(f"QComboBox {{ background-color: {color}; }}")
|
143
143
|
|
144
144
|
|
145
|
+
class WidgetAction(ToolBarAction):
|
146
|
+
"""
|
147
|
+
Action for adding any widget to the toolbar.
|
148
|
+
|
149
|
+
Args:
|
150
|
+
label (str|None): The label for the widget.
|
151
|
+
widget (QWidget): The widget to be added to the toolbar.
|
152
|
+
|
153
|
+
"""
|
154
|
+
|
155
|
+
def __init__(self, label: str | None = None, widget: QWidget = None):
|
156
|
+
super().__init__()
|
157
|
+
self.label = label
|
158
|
+
self.widget = widget
|
159
|
+
|
160
|
+
def add_to_toolbar(self, toolbar, target):
|
161
|
+
widget = QWidget()
|
162
|
+
layout = QHBoxLayout(widget)
|
163
|
+
if self.label is not None:
|
164
|
+
label = QLabel(f"{self.label}")
|
165
|
+
layout.addWidget(label)
|
166
|
+
layout.addWidget(self.widget)
|
167
|
+
toolbar.addWidget(widget)
|
168
|
+
|
169
|
+
|
145
170
|
class ExpandableMenuAction(ToolBarAction):
|
146
171
|
"""
|
147
172
|
Action for an expandable menu in the toolbar.
|
bec_widgets/utils/colors.py
CHANGED
@@ -8,7 +8,7 @@ import pyqtgraph as pg
|
|
8
8
|
from bec_qthemes._os_appearance.listener import OSThemeSwitchListener
|
9
9
|
from pydantic_core import PydanticCustomError
|
10
10
|
from qtpy.QtGui import QColor
|
11
|
-
from qtpy.QtWidgets import QApplication
|
11
|
+
from qtpy.QtWidgets import QApplication, QPushButton, QToolButton
|
12
12
|
|
13
13
|
|
14
14
|
def get_theme_palette():
|
@@ -56,6 +56,17 @@ def apply_theme(theme: Literal["dark", "light"]):
|
|
56
56
|
for pg_widget in children:
|
57
57
|
pg_widget.setBackground("k" if theme == "dark" else "w")
|
58
58
|
|
59
|
+
dark_mode_buttons = [
|
60
|
+
button
|
61
|
+
for button in app.topLevelWidgets()
|
62
|
+
if hasattr(button, "dark_mode_enabled")
|
63
|
+
and hasattr(button, "mode_button")
|
64
|
+
and isinstance(button.mode_button, (QPushButton, QToolButton))
|
65
|
+
]
|
66
|
+
|
67
|
+
for button in dark_mode_buttons:
|
68
|
+
button.dark_mode_enabled = theme == "dark"
|
69
|
+
button.update_mode_button()
|
59
70
|
# now define stylesheet according to theme and apply it
|
60
71
|
style = bec_qthemes.load_stylesheet(theme)
|
61
72
|
app.setStyleSheet(style)
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{'files': ['button_abort.py']}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright (C) 2022 The Qt Company Ltd.
|
2
|
+
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
3
|
+
|
4
|
+
from qtpy.QtDesigner import QDesignerCustomWidgetInterface
|
5
|
+
|
6
|
+
from bec_widgets.utils.bec_designer import designer_material_icon
|
7
|
+
from bec_widgets.widgets.button_abort.button_abort import AbortButton
|
8
|
+
|
9
|
+
DOM_XML = """
|
10
|
+
<ui language='c++'>
|
11
|
+
<widget class='AbortButton' name='abort_button'>
|
12
|
+
</widget>
|
13
|
+
</ui>
|
14
|
+
"""
|
15
|
+
|
16
|
+
|
17
|
+
class AbortButtonPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
|
18
|
+
def __init__(self):
|
19
|
+
super().__init__()
|
20
|
+
self._form_editor = None
|
21
|
+
|
22
|
+
def createWidget(self, parent):
|
23
|
+
t = AbortButton(parent)
|
24
|
+
return t
|
25
|
+
|
26
|
+
def domXml(self):
|
27
|
+
return DOM_XML
|
28
|
+
|
29
|
+
def group(self):
|
30
|
+
return "BEC Buttons"
|
31
|
+
|
32
|
+
def icon(self):
|
33
|
+
return designer_material_icon(AbortButton.ICON_NAME)
|
34
|
+
|
35
|
+
def includeFile(self):
|
36
|
+
return "abort_button"
|
37
|
+
|
38
|
+
def initialize(self, form_editor):
|
39
|
+
self._form_editor = form_editor
|
40
|
+
|
41
|
+
def isContainer(self):
|
42
|
+
return False
|
43
|
+
|
44
|
+
def isInitialized(self):
|
45
|
+
return self._form_editor is not None
|
46
|
+
|
47
|
+
def name(self):
|
48
|
+
return "AbortButton"
|
49
|
+
|
50
|
+
def toolTip(self):
|
51
|
+
return "A button that abort the scan."
|
52
|
+
|
53
|
+
def whatsThis(self):
|
54
|
+
return self.toolTip()
|
@@ -0,0 +1,49 @@
|
|
1
|
+
from bec_qthemes import material_icon
|
2
|
+
from qtpy.QtCore import Qt
|
3
|
+
from qtpy.QtWidgets import QHBoxLayout, QPushButton, QToolButton, QWidget
|
4
|
+
|
5
|
+
from bec_widgets.qt_utils.error_popups import SafeSlot
|
6
|
+
from bec_widgets.utils.bec_widget import BECWidget
|
7
|
+
|
8
|
+
|
9
|
+
class AbortButton(BECWidget, QWidget):
|
10
|
+
"""A button that abort the scan."""
|
11
|
+
|
12
|
+
ICON_NAME = "cancel"
|
13
|
+
|
14
|
+
def __init__(self, parent=None, client=None, config=None, gui_id=None, toolbar=False):
|
15
|
+
super().__init__(client=client, config=config, gui_id=gui_id)
|
16
|
+
QWidget.__init__(self, parent=parent)
|
17
|
+
|
18
|
+
self.get_bec_shortcuts()
|
19
|
+
|
20
|
+
self.layout = QHBoxLayout(self)
|
21
|
+
self.layout.setSpacing(0)
|
22
|
+
self.layout.setContentsMargins(0, 0, 0, 0)
|
23
|
+
self.layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
|
24
|
+
|
25
|
+
if toolbar:
|
26
|
+
icon = material_icon("cancel", color="#666666", filled=True)
|
27
|
+
self.button = QToolButton(icon=icon)
|
28
|
+
self.button.triggered.connect(self.abort_scan)
|
29
|
+
else:
|
30
|
+
self.button = QPushButton()
|
31
|
+
self.button.setText("Abort")
|
32
|
+
self.button.setStyleSheet(
|
33
|
+
"background-color: #666666; color: white; font-weight: bold; font-size: 12px;"
|
34
|
+
)
|
35
|
+
self.button.clicked.connect(self.abort_scan)
|
36
|
+
|
37
|
+
self.layout.addWidget(self.button)
|
38
|
+
|
39
|
+
@SafeSlot()
|
40
|
+
def abort_scan(
|
41
|
+
self,
|
42
|
+
): # , scan_id: str | None = None): #FIXME scan_id will be added when combining with Queue widget
|
43
|
+
"""
|
44
|
+
Abort the scan.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
scan_id(str|None): The scan id to abort. If None, the current scan will be aborted.
|
48
|
+
"""
|
49
|
+
self.queue.request_scan_abortion()
|
@@ -0,0 +1,15 @@
|
|
1
|
+
def main(): # pragma: no cover
|
2
|
+
from qtpy import PYSIDE6
|
3
|
+
|
4
|
+
if not PYSIDE6:
|
5
|
+
print("PYSIDE6 is not available in the environment. Cannot patch designer.")
|
6
|
+
return
|
7
|
+
from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
|
8
|
+
|
9
|
+
from bec_widgets.widgets.button_abort.abort_button_plugin import AbortButtonPlugin
|
10
|
+
|
11
|
+
QPyDesignerCustomWidgetCollection.addCustomWidget(AbortButtonPlugin())
|
12
|
+
|
13
|
+
|
14
|
+
if __name__ == "__main__": # pragma: no cover
|
15
|
+
main()
|
File without changes
|
@@ -0,0 +1,42 @@
|
|
1
|
+
from bec_qthemes import material_icon
|
2
|
+
from qtpy.QtCore import Qt
|
3
|
+
from qtpy.QtWidgets import QHBoxLayout, QPushButton, QToolButton, QWidget
|
4
|
+
|
5
|
+
from bec_widgets.qt_utils.error_popups import SafeSlot
|
6
|
+
from bec_widgets.utils.bec_widget import BECWidget
|
7
|
+
|
8
|
+
|
9
|
+
class ResetButton(BECWidget, QWidget):
|
10
|
+
"""A button that reset the scan queue."""
|
11
|
+
|
12
|
+
ICON_NAME = "restart_alt"
|
13
|
+
|
14
|
+
def __init__(self, parent=None, client=None, config=None, gui_id=None, toolbar=False):
|
15
|
+
super().__init__(client=client, config=config, gui_id=gui_id)
|
16
|
+
QWidget.__init__(self, parent=parent)
|
17
|
+
|
18
|
+
self.get_bec_shortcuts()
|
19
|
+
|
20
|
+
self.layout = QHBoxLayout(self)
|
21
|
+
self.layout.setSpacing(0)
|
22
|
+
self.layout.setContentsMargins(0, 0, 0, 0)
|
23
|
+
self.layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
|
24
|
+
|
25
|
+
if toolbar:
|
26
|
+
icon = material_icon("restart_alt", color="#F19E39", filled=True)
|
27
|
+
self.button = QToolButton(icon=icon)
|
28
|
+
self.button.triggered.connect(self.reset_queue)
|
29
|
+
else:
|
30
|
+
self.button = QPushButton()
|
31
|
+
self.button.setText("Reset Queue")
|
32
|
+
self.button.setStyleSheet(
|
33
|
+
"background-color: #F19E39; color: white; font-weight: bold; font-size: 12px;"
|
34
|
+
)
|
35
|
+
self.button.clicked.connect(self.reset_queue)
|
36
|
+
|
37
|
+
self.layout.addWidget(self.button)
|
38
|
+
|
39
|
+
@SafeSlot()
|
40
|
+
def reset_queue(self):
|
41
|
+
"""Stop the scan."""
|
42
|
+
self.queue.request_queue_reset()
|
@@ -0,0 +1,15 @@
|
|
1
|
+
def main(): # pragma: no cover
|
2
|
+
from qtpy import PYSIDE6
|
3
|
+
|
4
|
+
if not PYSIDE6:
|
5
|
+
print("PYSIDE6 is not available in the environment. Cannot patch designer.")
|
6
|
+
return
|
7
|
+
from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection
|
8
|
+
|
9
|
+
from bec_widgets.widgets.button_reset.reset_button_plugin import ResetButtonPlugin
|
10
|
+
|
11
|
+
QPyDesignerCustomWidgetCollection.addCustomWidget(ResetButtonPlugin())
|
12
|
+
|
13
|
+
|
14
|
+
if __name__ == "__main__": # pragma: no cover
|
15
|
+
main()
|
@@ -0,0 +1 @@
|
|
1
|
+
{'files': ['button_reset.py']}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright (C) 2022 The Qt Company Ltd.
|
2
|
+
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
3
|
+
|
4
|
+
from qtpy.QtDesigner import QDesignerCustomWidgetInterface
|
5
|
+
|
6
|
+
from bec_widgets.utils.bec_designer import designer_material_icon
|
7
|
+
from bec_widgets.widgets.button_reset.button_reset import ResetButton
|
8
|
+
|
9
|
+
DOM_XML = """
|
10
|
+
<ui language='c++'>
|
11
|
+
<widget class='ResetButton' name='reset_button'>
|
12
|
+
</widget>
|
13
|
+
</ui>
|
14
|
+
"""
|
15
|
+
|
16
|
+
|
17
|
+
class ResetButtonPlugin(QDesignerCustomWidgetInterface): # pragma: no cover
|
18
|
+
def __init__(self):
|
19
|
+
super().__init__()
|
20
|
+
self._form_editor = None
|
21
|
+
|
22
|
+
def createWidget(self, parent):
|
23
|
+
t = ResetButton(parent)
|
24
|
+
return t
|
25
|
+
|
26
|
+
def domXml(self):
|
27
|
+
return DOM_XML
|
28
|
+
|
29
|
+
def group(self):
|
30
|
+
return "BEC Buttons"
|
31
|
+
|
32
|
+
def icon(self):
|
33
|
+
return designer_material_icon(ResetButton.ICON_NAME)
|
34
|
+
|
35
|
+
def includeFile(self):
|
36
|
+
return "reset_button"
|
37
|
+
|
38
|
+
def initialize(self, form_editor):
|
39
|
+
self._form_editor = form_editor
|
40
|
+
|
41
|
+
def isContainer(self):
|
42
|
+
return False
|
43
|
+
|
44
|
+
def isInitialized(self):
|
45
|
+
return self._form_editor is not None
|
46
|
+
|
47
|
+
def name(self):
|
48
|
+
return "ResetButton"
|
49
|
+
|
50
|
+
def toolTip(self):
|
51
|
+
return "A button that reset the scan queue."
|
52
|
+
|
53
|
+
def whatsThis(self):
|
54
|
+
return self.toolTip()
|
@@ -30,7 +30,7 @@ class ResumeButton(BECWidget, QWidget):
|
|
30
30
|
self.button = QPushButton()
|
31
31
|
self.button.setText("Resume")
|
32
32
|
self.button.setStyleSheet(
|
33
|
-
"background-color: #2793e8 color: white; font-weight: bold; font-size: 12px;"
|
33
|
+
"background-color: #2793e8; color: white; font-weight: bold; font-size: 12px;"
|
34
34
|
)
|
35
35
|
self.button.clicked.connect(self.continue_scan)
|
36
36
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from bec_qthemes import material_icon
|
2
2
|
from qtpy.QtCore import Property, Qt, Slot
|
3
|
-
from qtpy.QtWidgets import QHBoxLayout, QPushButton, QToolButton, QWidget
|
3
|
+
from qtpy.QtWidgets import QApplication, QHBoxLayout, QPushButton, QToolButton, QWidget
|
4
4
|
|
5
5
|
from bec_widgets.utils.bec_widget import BECWidget
|
6
6
|
from bec_widgets.utils.colors import set_theme
|
@@ -27,17 +27,31 @@ class DarkModeButton(BECWidget, QWidget):
|
|
27
27
|
self.layout.setContentsMargins(0, 0, 0, 0)
|
28
28
|
self.layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
|
29
29
|
|
30
|
-
icon = material_icon("dark_mode", size=(20, 20), convert_to_pixmap=False)
|
31
30
|
if toolbar:
|
32
|
-
self.mode_button = QToolButton(
|
31
|
+
self.mode_button = QToolButton()
|
33
32
|
else:
|
34
|
-
self.mode_button = QPushButton(
|
33
|
+
self.mode_button = QPushButton()
|
34
|
+
|
35
|
+
self.dark_mode_enabled = self._get_qapp_dark_mode_state()
|
35
36
|
self.update_mode_button()
|
36
37
|
self.mode_button.clicked.connect(self.toggle_dark_mode)
|
37
38
|
self.layout.addWidget(self.mode_button)
|
38
39
|
self.setLayout(self.layout)
|
39
40
|
self.setFixedSize(40, 40)
|
40
41
|
|
42
|
+
def _get_qapp_dark_mode_state(self) -> bool:
|
43
|
+
"""
|
44
|
+
Get the dark mode state from the QApplication.
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
bool: True if dark mode is enabled, False otherwise.
|
48
|
+
"""
|
49
|
+
qapp = QApplication.instance()
|
50
|
+
if hasattr(qapp, "theme") and qapp.theme["theme"] == "dark":
|
51
|
+
return True
|
52
|
+
|
53
|
+
return False
|
54
|
+
|
41
55
|
@Property(bool)
|
42
56
|
def dark_mode_enabled(self) -> bool:
|
43
57
|
"""
|
@@ -72,8 +86,10 @@ class DarkModeButton(BECWidget, QWidget):
|
|
72
86
|
if __name__ == "__main__":
|
73
87
|
from qtpy.QtWidgets import QApplication
|
74
88
|
|
75
|
-
|
89
|
+
from bec_widgets.utils.colors import set_theme
|
76
90
|
|
91
|
+
app = QApplication([])
|
92
|
+
set_theme("auto")
|
77
93
|
w = DarkModeButton()
|
78
94
|
w.show()
|
79
95
|
|
@@ -37,6 +37,13 @@ class StopButton(BECWidget, QWidget):
|
|
37
37
|
self.layout.addWidget(self.button)
|
38
38
|
|
39
39
|
@SafeSlot()
|
40
|
-
def stop_scan(
|
41
|
-
|
40
|
+
def stop_scan(
|
41
|
+
self,
|
42
|
+
): # , scan_id: str | None = None): #FIXME scan_id will be added when combining with Queue widget
|
43
|
+
"""
|
44
|
+
Stop the scan.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
scan_id(str|None): The scan id to stop. If None, the current scan will be stopped.
|
48
|
+
"""
|
42
49
|
self.queue.request_scan_halt()
|
@@ -2,11 +2,11 @@
|
|
2
2
|
.gitlab-ci.yml,sha256=HE_stq5wl-0wE5ZetfEmaaDbectk20jX7Z2cxwsBegg,8348
|
3
3
|
.pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
|
4
4
|
.readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
|
5
|
-
CHANGELOG.md,sha256=
|
5
|
+
CHANGELOG.md,sha256=INE_XxIw2paIS1rKnad9YIxTW6Ik-jAUMx7gWFYN2yo,6819
|
6
6
|
LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
|
7
|
-
PKG-INFO,sha256=
|
7
|
+
PKG-INFO,sha256=wJQzigYAwf7RY6soP0JaYqw7ytnmwdxdn95c_8r_EUg,1334
|
8
8
|
README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
|
9
|
-
pyproject.toml,sha256=
|
9
|
+
pyproject.toml,sha256=2cFWlhLsnZBTnLgOqX1LktBeto948IZF_s-XGJgYFhQ,2544
|
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
|
@@ -22,7 +22,7 @@ bec_widgets/assets/status_icons/running.svg,sha256=nlc6rKh_f-uOxQSk0BkBNyWnPAJU5
|
|
22
22
|
bec_widgets/assets/status_icons/warning.svg,sha256=CNx88p9kbDG51s9ztKf-cfYan4JdDBbk3-IFKfOOFlI,364
|
23
23
|
bec_widgets/cli/__init__.py,sha256=d0Q6Fn44e7wFfLabDOBxpcJ1DPKWlFunGYDUBmO-4hA,22
|
24
24
|
bec_widgets/cli/auto_updates.py,sha256=DwzRChcFIWPH2kCYvp8H7dXvyYSKGYv6LwCmK2sDR2E,5676
|
25
|
-
bec_widgets/cli/client.py,sha256=
|
25
|
+
bec_widgets/cli/client.py,sha256=Go09tb7lnsDSljF-7rtWu4x8x_ooL-F4WWuu_yFaTNA,78098
|
26
26
|
bec_widgets/cli/client_utils.py,sha256=l35LtTkD7PdvVCckjMU8-y6f5a5pp1u6cFPpD-Dkvow,11713
|
27
27
|
bec_widgets/cli/generate_cli.py,sha256=Ea5px9KblUlcGg-1JbJBTIU7laGg2n8PM7Efw9WVVzM,5889
|
28
28
|
bec_widgets/cli/rpc_register.py,sha256=QxXUZu5XNg00Yf5O3UHWOXg3-f_pzKjjoZYMOa-MOJc,2216
|
@@ -46,14 +46,14 @@ bec_widgets/qt_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
46
46
|
bec_widgets/qt_utils/error_popups.py,sha256=y9gKKWaafp468ioHr96nBhf02ZpEgjDc-BAVOTWh-e8,7680
|
47
47
|
bec_widgets/qt_utils/redis_message_waiter.py,sha256=fvL_QgC0cTDv_FPJdRyp5AKjf401EJU4z3r38p47ydY,1745
|
48
48
|
bec_widgets/qt_utils/settings_dialog.py,sha256=NhtzTer_xzlB2lLLrGklkI1QYLJEWQpJoZbCz4o5daI,3645
|
49
|
-
bec_widgets/qt_utils/toolbar.py,sha256=
|
49
|
+
bec_widgets/qt_utils/toolbar.py,sha256=NhpXw5An2qNefv0iQdCyDUbkanPcsQoD_8vDOGhQEOs,8494
|
50
50
|
bec_widgets/utils/__init__.py,sha256=1930ji1Jj6dVuY81Wd2kYBhHYNV-2R0bN_L4o9zBj1U,533
|
51
51
|
bec_widgets/utils/bec_connector.py,sha256=SivHKXVyNVqeu3kCXYEPpbleTVw8g1cW0FKq1QrQgco,9987
|
52
52
|
bec_widgets/utils/bec_designer.py,sha256=Z3MeMju-KmTz8POtm23VQfp4rvtD2sF6eIOKQkl2F7w,4729
|
53
53
|
bec_widgets/utils/bec_dispatcher.py,sha256=NkObWO_gRO9Uobz-fy0gVTZqQsbFRaKj6fbjYZoErFI,6400
|
54
54
|
bec_widgets/utils/bec_table.py,sha256=nA2b8ukSeUfquFMAxGrUVOqdrzMoDYD6O_4EYbOG2zk,717
|
55
55
|
bec_widgets/utils/bec_widget.py,sha256=vMJy-mR0kmcGaI5u1WytEuIoTJfMEcgepxIpv8yVmHY,1113
|
56
|
-
bec_widgets/utils/colors.py,sha256=
|
56
|
+
bec_widgets/utils/colors.py,sha256=bdURzbrIv7UWXTlaj1wJYq2JmI_gw1pi6LVYqijbLKA,12325
|
57
57
|
bec_widgets/utils/container_utils.py,sha256=0wr3ZfuMiAFKCrQHVjxjw-Vuk8wsHdridqcjy2eY840,1531
|
58
58
|
bec_widgets/utils/crosshair.py,sha256=8lik9k69WI2WMj5FGLbrKtny9duxqXUJAhpX8tHoyp0,11543
|
59
59
|
bec_widgets/utils/entry_validator.py,sha256=3skJIsUwTYicT76AMHm_M78RiWtUgyD2zb-Rxo2HdHQ,1313
|
@@ -83,8 +83,18 @@ bec_widgets/widgets/bec_status_box/bec_status_box.pyproject,sha256=JWtx3Csfn2h7O
|
|
83
83
|
bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py,sha256=UmsXAmeHg7FRkzirOLBPi3LwbRbG75w8LglYt4jn6Fc,1412
|
84
84
|
bec_widgets/widgets/bec_status_box/register_bec_status_box.py,sha256=EiQITnkNw7IU7hE776wAeXro97eZd9XlsB9essgCebE,481
|
85
85
|
bec_widgets/widgets/bec_status_box/status_item.py,sha256=3aNaa-e64PmkBoAWfItYAmhB1EFhWRiFLzXWWz0dS_8,5317
|
86
|
+
bec_widgets/widgets/button_abort/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
|
+
bec_widgets/widgets/button_abort/abort_button.pyproject,sha256=UtuaE0Lvs6uOGufhatUyJS_n2l6EBbYaGuILj_BNCLs,30
|
88
|
+
bec_widgets/widgets/button_abort/abort_button_plugin.py,sha256=3q0a4UE2O9s96Jjg6wi03CpXdQ7CnOI20ep7etEdxMo,1285
|
89
|
+
bec_widgets/widgets/button_abort/button_abort.py,sha256=TpmxyG3GP-4RWTDJ9gSLyoD8aOYGJRzLC65fpxNSJTE,1688
|
90
|
+
bec_widgets/widgets/button_abort/register_abort_button.py,sha256=IthCqJIaCR25ELRqMssSzve_7CE8G54wDlBVY0gPSNI,475
|
91
|
+
bec_widgets/widgets/button_reset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
92
|
+
bec_widgets/widgets/button_reset/button_reset.py,sha256=AnWC6i1j7yVudmX6FKGOZBNd5KKmhvl7DzDKYKxLwxg,1470
|
93
|
+
bec_widgets/widgets/button_reset/register_reset_button.py,sha256=IuCaPrqKqF9acVBL2k1St0exsb3rwQF_Y1-QciDEVjw,475
|
94
|
+
bec_widgets/widgets/button_reset/reset_button.pyproject,sha256=JC7XLsjgYzTAh6BV3KmxtT3w4ZUH91wiqIeGefnCjMk,30
|
95
|
+
bec_widgets/widgets/button_reset/reset_button_plugin.py,sha256=QW4ToNqnwh55hN6GMAId1C65vkPYRTAoPTWcXRFvWLw,1291
|
86
96
|
bec_widgets/widgets/button_resume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
|
-
bec_widgets/widgets/button_resume/button_resume.py,sha256=
|
97
|
+
bec_widgets/widgets/button_resume/button_resume.py,sha256=MH6JqiA2GkModbS0EC0_k5cYHIVVkuY9P3hylYLYfE0,1467
|
88
98
|
bec_widgets/widgets/button_resume/register_resume_button.py,sha256=01t5Ruz7FkKt7vHUVHvRNgEKqRLbKDza3ZQxd4w0i8A,479
|
89
99
|
bec_widgets/widgets/button_resume/resume_button.pyproject,sha256=QEPSupXQtXZDfT1Y0PuCv7Fj6NhBTq1dyvRiFNkvhH8,31
|
90
100
|
bec_widgets/widgets/button_resume/resume_button_plugin.py,sha256=sqGn2I5XlsEpCjqZQBX8KNYpONJVAkBbzfFZL8OAsxI,1300
|
@@ -100,7 +110,7 @@ bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py,sha256=c5Kk4do
|
|
100
110
|
bec_widgets/widgets/colormap_selector/register_colormap_selector.py,sha256=bfw7RWmTmMLTLxGT-izSwcGtxGLKvL3jdivJw2z8oN4,512
|
101
111
|
bec_widgets/widgets/console/console.py,sha256=NG0cBuqqPX4hC-sHhk_UEkT-nHhhN9Y7karJITPLzyo,17864
|
102
112
|
bec_widgets/widgets/dark_mode_button/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
|
-
bec_widgets/widgets/dark_mode_button/dark_mode_button.py,sha256=
|
113
|
+
bec_widgets/widgets/dark_mode_button/dark_mode_button.py,sha256=2mjLC6FiICy_xucxLlvwZPGinJoJYYDqdCbsAj1qtLs,2929
|
104
114
|
bec_widgets/widgets/dark_mode_button/dark_mode_button.pyproject,sha256=Lbi9zb6HNlIq14k6hlzR-oz6PIFShBuF7QxE6d87d64,34
|
105
115
|
bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py,sha256=RJWeBEqR9BueUxUSuPcU-AmnzfIzt3j4jtsIacp-2Ug,1335
|
106
116
|
bec_widgets/widgets/dark_mode_button/register_dark_mode_button.py,sha256=_4Fw6j1KLuluko8X2B7zf_DT5eA07G0CqR-aRMAn0iA,489
|
@@ -164,7 +174,7 @@ bec_widgets/widgets/position_indicator/position_indicator.pyproject,sha256=s0JEf
|
|
164
174
|
bec_widgets/widgets/position_indicator/position_indicator_plugin.py,sha256=ehQPpwkjJ7k365i4gdwtmAmCbVmB1tvQLEo60J_ivo4,1413
|
165
175
|
bec_widgets/widgets/position_indicator/register_position_indicator.py,sha256=OZNiMgM_80TPSAXK_0hXAkne4vUh8DGvh_OdpOiMpwI,516
|
166
176
|
bec_widgets/widgets/positioner_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
167
|
-
bec_widgets/widgets/positioner_box/positioner_box.py,sha256=
|
177
|
+
bec_widgets/widgets/positioner_box/positioner_box.py,sha256=XJFbHiPkVbqp2wS6wgwzQUjqI_Iqu3CFmyQrDl0xFSY,11223
|
168
178
|
bec_widgets/widgets/positioner_box/positioner_box.pyproject,sha256=7966pHdDseaHciaPNEKgdQgbUThSZf5wEDCeAEJh9po,32
|
169
179
|
bec_widgets/widgets/positioner_box/positioner_box.ui,sha256=Y-Xp0z32okT7X4-rL5r7dF_QH_QpXvPes3f778cC7_k,5633
|
170
180
|
bec_widgets/widgets/positioner_box/positioner_box_plugin.py,sha256=kJtQgRFGkJYWbZqJ7K7o0UhdsgAlODUVZL8pKJWwMhs,1413
|
@@ -193,7 +203,7 @@ bec_widgets/widgets/spinner/spinner_widget.pyproject,sha256=zzLajGB3DTgVnrSqMey2
|
|
193
203
|
bec_widgets/widgets/spinner/spinner_widget_plugin.py,sha256=AZYJJe40olMzqL6Edk6J-X_iNHcXrU-EQN4mCUCp_Fo,1355
|
194
204
|
bec_widgets/widgets/stop_button/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
195
205
|
bec_widgets/widgets/stop_button/register_stop_button.py,sha256=U7r3fEOH-uPhAQI-nTituHXDDXDWR4JQZ7_vD6b_dfM,471
|
196
|
-
bec_widgets/widgets/stop_button/stop_button.py,sha256
|
206
|
+
bec_widgets/widgets/stop_button/stop_button.py,sha256=TiCXLisaTdHKCcsNl5yMBUsYH9zUfwbeEe3zJrGH8qQ,1686
|
197
207
|
bec_widgets/widgets/stop_button/stop_button.pyproject,sha256=Cc_xbv-zfzNVpsdg_1QyzuTlrJaM9_BkIjes70umrx0,29
|
198
208
|
bec_widgets/widgets/stop_button/stop_button_plugin.py,sha256=VT-WVLq89fw7PwML7JDMCF1bqfopLCZIgMA4yetl65M,1365
|
199
209
|
bec_widgets/widgets/text_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -228,8 +238,8 @@ bec_widgets/widgets/website/register_website_widget.py,sha256=LIQJpV9uqcBiPR9cEA
|
|
228
238
|
bec_widgets/widgets/website/website.py,sha256=kDlqjwtx0yft1ZNRhTdHnYh_5KZHfqT_ZGPOKT4C-yI,2619
|
229
239
|
bec_widgets/widgets/website/website_widget.pyproject,sha256=scOiV3cV1_BjbzpPzy2N8rIJL5P2qIZz8ObTJ-Uvdtg,25
|
230
240
|
bec_widgets/widgets/website/website_widget_plugin.py,sha256=pz38_C2cZ0yvPPS02wdIPcmhFo_yiwUhflsASocAPQQ,1341
|
231
|
-
bec_widgets-0.99.
|
232
|
-
bec_widgets-0.99.
|
233
|
-
bec_widgets-0.99.
|
234
|
-
bec_widgets-0.99.
|
235
|
-
bec_widgets-0.99.
|
241
|
+
bec_widgets-0.99.13.dist-info/METADATA,sha256=wJQzigYAwf7RY6soP0JaYqw7ytnmwdxdn95c_8r_EUg,1334
|
242
|
+
bec_widgets-0.99.13.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
243
|
+
bec_widgets-0.99.13.dist-info/entry_points.txt,sha256=3otEkCdDB9LZJuBLzG4pFLK5Di0CVybN_12IsZrQ-58,166
|
244
|
+
bec_widgets-0.99.13.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
|
245
|
+
bec_widgets-0.99.13.dist-info/RECORD,,
|
pyproject.toml
CHANGED
File without changes
|
File without changes
|
File without changes
|