kopia lustrzana https://github.com/inkstitch/inkstitch
62 wiersze
1.5 KiB
Python
62 wiersze
1.5 KiB
Python
from collections.abc import MutableMapping
|
|
import json
|
|
import os
|
|
|
|
from .paths import get_user_dir
|
|
|
|
# These settings are the defaults for SVG metadata settings of the same name in
|
|
# lib.extensions.base.InkstitchMetadata
|
|
DEFAULT_METADATA = {
|
|
"min_stitch_len_mm": 0.1,
|
|
"collapse_len_mm": 3,
|
|
}
|
|
|
|
DEFAULT_SETTINGS = {
|
|
"cache_size": 100,
|
|
"pop_out_simulator": False,
|
|
"simulator_line_width": 0.1,
|
|
"simulator_npp_size": 0.5
|
|
}
|
|
|
|
|
|
class GlobalSettings(MutableMapping):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.__settings_file = os.path.join(get_user_dir(), "settings.json")
|
|
self.__settings = {}
|
|
|
|
for name, value in DEFAULT_METADATA.items():
|
|
self.__settings[f"default_{name}"] = value
|
|
|
|
self.__settings.update(DEFAULT_SETTINGS)
|
|
|
|
try:
|
|
with open(self.__settings_file, 'r') as settings_file:
|
|
self.__settings.update(json.load(settings_file))
|
|
except (OSError, json.JSONDecodeError, ValueError):
|
|
pass
|
|
|
|
def __setitem__(self, item, value):
|
|
self.__settings[item] = value
|
|
|
|
with open(self.__settings_file, 'w') as settings_file:
|
|
json.dump(self.__settings, settings_file)
|
|
|
|
def __getitem__(self, item):
|
|
return self.__settings[item]
|
|
|
|
def __delitem__(self, item):
|
|
del self.__settings[item]
|
|
|
|
def __iter__(self):
|
|
return iter(self.__settings)
|
|
|
|
def __len__(self):
|
|
return len(self.__settings)
|
|
|
|
def __json__(self):
|
|
return self.__settings
|
|
|
|
|
|
global_settings = GlobalSettings()
|