Source code for RWESharp.Configurable.QtTypes

import enum
from RWESharp.Configurable.Configurable import Configurable
from PySide6.QtGui import QKeySequence, QColor, QAction, QShortcut, QPen
from PySide6.QtWidgets import QAbstractButton, QComboBox, QKeySequenceEdit
from PySide6.QtCore import Signal, Qt, Slot
from RWESharp.widgets.ColorPicker import ColorPicker
from RWESharp.widgets.PenPicker import PenPicker


[docs] class KeyConfigurable(Configurable): valueChanged = Signal(QKeySequence) tooltipChanged = Signal(str)
[docs] def __init__(self, mod, name, default: QKeySequence | str | QKeySequence.StandardKey, description="", shortdesc=""): if shortdesc == "": shortdesc = description self.shortdesc = shortdesc default = QKeySequence(default) self.buttons: list[QAbstractButton] = [] super().__init__(mod, name, default, description)
[docs] def save_str_value(self) -> str: return self.value.toString()
[docs] def load_str_value(self, text: str) -> None: self.value = QKeySequence(text) self.valueChanged.emit(self.value) self.tooltipChanged.emit(f"{self.description}({self.value.toString()})")
[docs] def update_value(self, value: QKeySequence): super().update_value(value) self.tooltipChanged.emit(f"{self.description}({self.value.toString()})") for i in self.buttons: i.setShortcut(self.value)
[docs] class ColorConfigurable(Configurable): valueChanged = Signal(QColor)
[docs] def __init__(self, mod, name, default: QColor | str, description=""): if isinstance(default, str): default = QColor.fromString(default) self.value = default super().__init__(mod, name, default, description)
[docs] def save_str_value(self) -> str: return f"{self.value.red()} {self.value.green()} {self.value.blue()} {self.value.alpha()}"
[docs] def load_str_value(self, text: str) -> None: self.value = QColor(*[int(i) for i in text.split()]) self.valueChanged.emit(self.value)
[docs] def update_value(self, value: QColor): super().update_value(value)
[docs] class PenConfigurable(Configurable): valueChanged = Signal(QPen)
[docs] def __init__(self, mod, name, default: QPen | None, description=""): if default is None: default = QPen() self.value = default super().__init__(mod, name, default, description)
[docs] def save_str_value(self) -> str: return (f"{self.value.widthF()} {self.value.style().value} " f"{self.value.color().red()} {self.value.color().green()} {self.value.color().blue()} " f"{self.value.color().alpha()}")
[docs] def load_str_value(self, text: str) -> None: t = text.split() self.value = QPen() self.value.setWidthF(float(t[0])) c = QColor(int(t[2]), int(t[3]), int(t[4]), int(t[5])) self.value.setColor(c) self.value.setStyle(Qt.PenStyle(int(t[1]))) self.valueChanged.emit(self.value)
[docs] def update_value(self, value: QPen): super().update_value(value)
[docs] class EnumConfigurable(Configurable): valueChanged = Signal((enum.Enum, ), (int, ))
[docs] def __init__(self, mod, name, default: enum.Enum, enumtouse, description=""): self.enumtouse = enumtouse super().__init__(mod, name, default, description) self.value: enum.Enum
[docs] @Slot(enum.Enum) @Slot(int) def update_value(self, value: enum.Enum | int): if isinstance(value, int): value = self.enumtouse(value) if self.value == value: return self.value = value self.valueChanged[enum.Enum].emit(self.value) self.valueChanged[int].emit(self.value.value)
[docs] def load_str_value(self, text: str) -> None: try: self.value = self.enumtouse(int(text)) except ValueError: self.value = self.default self.valueChanged[enum.Enum].emit(self.value) self.valueChanged[int].emit(self.value.value)
[docs] def save_str_value(self) -> str: return str(self.value.value)
[docs] class EnumFlagConfigurable(Configurable): valueChanged = Signal((enum.Flag, ), (int, ))
[docs] def __init__(self, mod, name, default: enum.Flag, enumtouse, description=""): self.enumtouse = enumtouse super().__init__(mod, name, default, description)
[docs] @Slot(enum.Flag) @Slot(int) def update_value(self, value: enum.Flag | int): if isinstance(value, int): value = self.enumtouse(value) if self.value == value: return self.value = value self.valueChanged[enum.Flag].emit(self.value) self.valueChanged[int].emit(self.value.value)
[docs] def load_str_value(self, text: str) -> None: try: self.value = self.enumtouse(int(text)) except ValueError: self.value = self.default self.valueChanged[enum.Enum].emit(self.value) self.valueChanged[int].emit(self.value.value)
[docs] def save_str_value(self) -> str: return str(self.value.value)