Source code for RWESharp.Configurable.PythonTypes

from RWESharp.Configurable.Configurable import Configurable
from PySide6.QtCore import Slot, Signal, Qt
from PySide6.QtWidgets import QRadioButton, QAbstractButton, QSlider, QSpinBox, QComboBox, QDoubleSpinBox, QAbstractSlider
from PySide6.QtGui import QAction
import json


[docs] class BoolConfigurable(Configurable): from RWESharp.Configurable.QtTypes import KeyConfigurable valueChanged = Signal(bool)
[docs] def __init__(self, mod, name: str, default: bool = False, description: str = ""): super().__init__(mod, name, default, description)
[docs] def load_str_value(self, text: str) -> None: self.value = text == "1" self.valueChanged.emit(self.value)
[docs] def save_str_value(self) -> str: return "1" if self.value else "0"
[docs] @Slot(bool) @Slot(Qt.CheckState) @Slot() def update_value(self, value: bool | Qt.CheckState | None = None) -> None: if isinstance(value, bool): return super().update_value(value) elif isinstance(value, Qt.CheckState): return super().update_value(value == Qt.CheckState.Checked.value) super().update_value(not self.value)
[docs] @Slot() def flip(self): self.update_value(not self.value)
[docs] class StringConfigurable(Configurable): valueChanged = Signal(str)
[docs] def __init__(self, mod, name: str, default: str = "", description: str = ""): super().__init__(mod, name, default, description)
[docs] def load_str_value(self, text: str) -> None: self.value = text self.valueChanged.emit(self.value)
[docs] def save_str_value(self) -> str: return self.value
[docs] @Slot(str) def update_value(self, value: str): super().update_value(value)
[docs] class IntConfigurable(Configurable): valueChanged = Signal(int)
[docs] def __init__(self, mod, name: str, default: int = 0, description: str = ""): self.radiolist: list[QRadioButton] = [] super().__init__(mod, name, default, description)
[docs] def load_str_value(self, text: str) -> None: self.value = int(text) self.valueChanged.emit(self.value)
[docs] def save_str_value(self) -> str: return str(self.value)
[docs] @Slot(int) @Slot() def update_value(self, value: int | None): if value is not None: value = int(value) if isinstance(self.sender(), QRadioButton) and self.sender() in self.radiolist: value = self.radiolist.index(self.sender()) if self.value == value: return elif value is not None: super().update_value(value) if 0 <= value < len(self.radiolist) and len(self.radiolist) > 0: self.radiolist[value].setChecked(True)
[docs] class FloatConfigurable(Configurable): valueChanged = Signal(float)
[docs] def __init__(self, mod, name: str, default: float = 0, description: str = ""): super().__init__(mod, name, default, description)
[docs] def load_str_value(self, text: str) -> None: self.value = float(text) self.valueChanged.emit(self.value)
[docs] def save_str_value(self) -> str: return str(self.value)
[docs] @Slot(float) def update_value(self, value: float): super().update_value(value)
[docs] class DictConfigurable(Configurable): valueChanged = Signal(dict)
[docs] def __init__(self, mod, name: str, default: dict = None, description: str = ""): if default is None: default = {} super().__init__(mod, name, default, description)
[docs] def load_str_value(self, text: str) -> None: self.value = json.loads(text) self.valueChanged.emit(self.value)
[docs] def save_str_value(self) -> str: return json.dumps(self.value)
[docs] @Slot(dict) def update_value(self, value: dict): super().update_value(value)