from __future__ import annotations import logging from PySide6.QtCore import QSettings class ApplicationSettings: """Typed access to persistent BEdit application settings.""" LOG_LEVEL_KEY = "logging/level" DEFAULT_LOG_LEVEL = logging.INFO SNAP_TO_GRID_SIZE_KEY = "graph/snap_to_grid_size" DEFAULT_SNAP_TO_GRID_SIZE = 4 def __init__(self, settings: QSettings | None = None) -> None: self._settings = settings if settings is not None else QSettings() @property def log_level(self) -> int: return self._settings.value( self.LOG_LEVEL_KEY, self.DEFAULT_LOG_LEVEL, type=int, ) @log_level.setter def log_level(self, level: int) -> None: self._settings.setValue(self.LOG_LEVEL_KEY, level) @property def snap_to_grid_size(self) -> int: return max(1, self._settings.value(self.SNAP_TO_GRID_SIZE_KEY, self.DEFAULT_SNAP_TO_GRID_SIZE, type=int)) @snap_to_grid_size.setter def snap_to_grid_size(self, size: int) -> None: if size < 1: raise ValueError("snap-to-grid size must be positive") self._settings.setValue(self.SNAP_TO_GRID_SIZE_KEY, size) class SimulationApplicationSettings: """Typed access to persistent BEsim application settings.""" LOG_LEVEL_KEY = "logging/level" DEFAULT_LOG_LEVEL = logging.INFO def __init__(self, settings: QSettings | None = None) -> None: self._settings = settings if settings is not None else QSettings() @property def log_level(self) -> int: return self._settings.value( self.LOG_LEVEL_KEY, self.DEFAULT_LOG_LEVEL, type=int, ) @log_level.setter def log_level(self, level: int) -> None: self._settings.setValue(self.LOG_LEVEL_KEY, level)