73 lines
2.3 KiB
Python
73 lines
2.3 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
|
|
LIBRARY_PATHS_KEY = "libraries/paths"
|
|
|
|
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)
|
|
|
|
@property
|
|
def library_paths(self) -> list[str]:
|
|
value = self._settings.value(self.LIBRARY_PATHS_KEY, [])
|
|
if isinstance(value, str):
|
|
return [value]
|
|
return [str(path) for path in value] if isinstance(value, (list, tuple)) else []
|
|
|
|
@library_paths.setter
|
|
def library_paths(self, paths: list[str]) -> None:
|
|
self._settings.setValue(self.LIBRARY_PATHS_KEY, list(dict.fromkeys(paths)))
|
|
|
|
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)
|