61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
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)
|