diff --git a/bec_widgets/utils/forms_from_types/forms.py b/bec_widgets/utils/forms_from_types/forms.py index 323b4b24..255d71e4 100644 --- a/bec_widgets/utils/forms_from_types/forms.py +++ b/bec_widgets/utils/forms_from_types/forms.py @@ -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() diff --git a/bec_widgets/widgets/services/device_browser/device_item/device_config_form.py b/bec_widgets/widgets/services/device_browser/device_item/device_config_form.py new file mode 100644 index 00000000..f3e09af6 --- /dev/null +++ b/bec_widgets/widgets/services/device_browser/device_item/device_config_form.py @@ -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) diff --git a/bec_widgets/widgets/services/device_browser/device_item/device_item.py b/bec_widgets/widgets/services/device_browser/device_item/device_item.py index d5eaca64..44fdf2a3 100644 --- a/bec_widgets/widgets/services/device_browser/device_item/device_item.py +++ b/bec_widgets/widgets/services/device_browser/device_item/device_item.py @@ -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(