1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-03-05 00:12:49 +01:00

refactor: move device config form to module

This commit is contained in:
2025-05-22 09:34:42 +02:00
parent ab8438c85f
commit d223fe27c4
3 changed files with 39 additions and 30 deletions

View File

@@ -8,11 +8,12 @@ from bec_lib.logger import bec_logger
from bec_qthemes import material_icon
from pydantic import BaseModel, ValidationError
from qtpy.QtCore import Signal # type: ignore
from qtpy.QtWidgets import QGridLayout, QLabel, QLayout, QVBoxLayout, QWidget
from qtpy.QtWidgets import QApplication, QGridLayout, QLabel, QLayout, QVBoxLayout, QWidget
from bec_widgets.utils.bec_widget import BECWidget
from bec_widgets.utils.compact_popup import CompactPopupWidget
from bec_widgets.utils.error_popups import SafeProperty
from bec_widgets.utils.forms_from_types import styles
from bec_widgets.utils.forms_from_types.items import (
DynamicFormItem,
DynamicFormItemType,
@@ -198,6 +199,18 @@ class PydanticModelForm(TypedForm):
self._layout.addWidget(self._validity)
self.value_changed.connect(self.validate_form)
self._connect_to_theme_change()
def set_pretty_display_theme(self, theme: str = "dark"):
if self._pretty_display:
self.setStyleSheet(styles.pretty_display_theme(theme))
def _connect_to_theme_change(self):
"""Connect to the theme change signal."""
qapp = QApplication.instance()
if hasattr(qapp, "theme_signal"):
qapp.theme_signal.theme_updated.connect(self.set_pretty_display_theme) # type: ignore
def set_schema(self, schema: type[BaseModel]):
self._md_schema = schema
self.populate()

View File

@@ -0,0 +1,20 @@
from __future__ import annotations
from bec_lib.atlas_models import Device as DeviceConfigModel
from bec_widgets.utils.forms_from_types.forms import PydanticModelForm
class DeviceConfigForm(PydanticModelForm):
RPC = False
PLUGIN = False
def __init__(self, parent=None, client=None, pretty_display=False, **kwargs):
super().__init__(
parent=parent,
data_model=DeviceConfigModel,
pretty_display=pretty_display,
client=client,
**kwargs,
)
self._validity.setVisible(False)

View File

@@ -10,8 +10,9 @@ from qtpy.QtWidgets import QApplication, QHBoxLayout, QWidget
from bec_widgets.utils.error_popups import SafeSlot
from bec_widgets.utils.expandable_frame import ExpandableGroupFrame
from bec_widgets.utils.forms_from_types import styles
from bec_widgets.utils.forms_from_types.forms import PydanticModelForm
from bec_widgets.widgets.services.device_browser.device_item.device_config_form import (
DeviceConfigForm,
)
from bec_widgets.widgets.utility.visual.dark_mode_button.dark_mode_button import DarkModeButton
if TYPE_CHECKING: # pragma: no cover
@@ -20,31 +21,6 @@ if TYPE_CHECKING: # pragma: no cover
logger = bec_logger.logger
class DeviceItemForm(PydanticModelForm):
RPC = False
PLUGIN = False
def __init__(self, parent=None, client=None, pretty_display=False, **kwargs):
super().__init__(
parent=parent,
data_model=DeviceConfigModel,
pretty_display=pretty_display,
client=client,
**kwargs,
)
self._validity.setVisible(False)
self._connect_to_theme_change()
def set_pretty_display_theme(self, theme: str = "dark"):
self.setStyleSheet(styles.pretty_display_theme(theme))
def _connect_to_theme_change(self):
"""Connect to the theme change signal."""
qapp = QApplication.instance()
if hasattr(qapp, "theme_signal"):
qapp.theme_signal.theme_updated.connect(self.set_pretty_display_theme) # type: ignore
class DeviceItem(ExpandableGroupFrame):
broadcast_size_hint = Signal(QSize)
@@ -67,7 +43,7 @@ class DeviceItem(ExpandableGroupFrame):
def switch_expanded_state(self):
if not self.expanded and not self._expanded_first_time:
self._expanded_first_time = True
self.form = DeviceItemForm(parent=self, pretty_display=True)
self.form = DeviceConfigForm(parent=self, pretty_display=True)
self._contents.layout().addWidget(self.form)
if self._data:
self.form.set_data(self._data)
@@ -120,7 +96,7 @@ if __name__ == "__main__": # pragma: no cover
widget = QWidget()
layout = QHBoxLayout()
widget.setLayout(layout)
item = DeviceItem("Device")
item = DeviceItem(widget, "Device")
layout.addWidget(DarkModeButton())
layout.addWidget(item)
item.set_display_config(