0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 03:31:50 +02:00

feat: PositionerBox with a popup view

This commit is contained in:
2024-10-10 18:16:08 +02:00
parent 0b9b1a3c89
commit 261578796f

View File

@ -14,6 +14,7 @@ from qtpy.QtCore import Property, Signal, Slot
from qtpy.QtGui import QDoubleValidator from qtpy.QtGui import QDoubleValidator
from qtpy.QtWidgets import QDialog, QDoubleSpinBox, QPushButton, QVBoxLayout, QWidget from qtpy.QtWidgets import QDialog, QDoubleSpinBox, QPushButton, QVBoxLayout, QWidget
from bec_widgets.qt_utils.compact_popup import CompactPopupWidget
from bec_widgets.utils import UILoader from bec_widgets.utils import UILoader
from bec_widgets.utils.bec_widget import BECWidget from bec_widgets.utils.bec_widget import BECWidget
from bec_widgets.utils.colors import get_accent_colors, set_theme from bec_widgets.utils.colors import get_accent_colors, set_theme
@ -24,7 +25,7 @@ logger = bec_logger.logger
MODULE_PATH = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) MODULE_PATH = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
class PositionerBox(BECWidget, QWidget): class PositionerBox(BECWidget, CompactPopupWidget):
"""Simple Widget to control a positioner in box form""" """Simple Widget to control a positioner in box form"""
ui_file = "positioner_box.ui" ui_file = "positioner_box.ui"
@ -44,7 +45,7 @@ class PositionerBox(BECWidget, QWidget):
device (Positioner): The device to control. device (Positioner): The device to control.
""" """
super().__init__(**kwargs) super().__init__(**kwargs)
QWidget.__init__(self, parent=parent) CompactPopupWidget.__init__(self, parent=parent, layout=QVBoxLayout)
self.get_bec_shortcuts() self.get_bec_shortcuts()
self._device = "" self._device = ""
self._limits = None self._limits = None
@ -63,8 +64,7 @@ class PositionerBox(BECWidget, QWidget):
current_path = os.path.dirname(__file__) current_path = os.path.dirname(__file__)
self.ui = UILoader(self).loader(os.path.join(current_path, self.ui_file)) self.ui = UILoader(self).loader(os.path.join(current_path, self.ui_file))
self.layout = QVBoxLayout(self) self.addWidget(self.ui)
self.layout.addWidget(self.ui)
self.layout.setSpacing(0) self.layout.setSpacing(0)
self.layout.setContentsMargins(0, 0, 0, 0) self.layout.setContentsMargins(0, 0, 0, 0)
@ -135,8 +135,12 @@ class PositionerBox(BECWidget, QWidget):
"""Setter, checks if device is a string""" """Setter, checks if device is a string"""
if not value or not isinstance(value, str): if not value or not isinstance(value, str):
return return
if not self._check_device_is_valid(value):
return
old_device = self._device old_device = self._device
self._device = value self._device = value
if not self.label:
self.label = value
self.device_changed.emit(old_device, value) self.device_changed.emit(old_device, value)
@Property(bool) @Property(bool)
@ -241,9 +245,11 @@ class PositionerBox(BECWidget, QWidget):
if is_moving: if is_moving:
self.ui.spinner_widget.start() self.ui.spinner_widget.start()
self.ui.spinner_widget.setToolTip("Device is moving") self.ui.spinner_widget.setToolTip("Device is moving")
self.set_global_state("warning")
else: else:
self.ui.spinner_widget.stop() self.ui.spinner_widget.stop()
self.ui.spinner_widget.setToolTip("Device is idle") self.ui.spinner_widget.setToolTip("Device is idle")
self.set_global_state("success")
if readback_val is not None: if readback_val is not None:
self.ui.readback.setText(f"{readback_val:.{precision}f}") self.ui.readback.setText(f"{readback_val:.{precision}f}")