-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathconfig.py
99 lines (72 loc) · 2.89 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Copyright: Ren Tatsumoto <tatsu at autistici.org>
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from typing import Union, overload
from aqt import mw
from .ajt_common.addon_config import AddonConfigManager
class ScrollKeysConfig:
_scroll: dict[str, str]
def __init__(self, cfg_dict: dict):
self._scroll = cfg_dict["scroll"]
def keys(self):
return self._scroll.keys()
@property
def up(self) -> str:
return self._scroll["up"]
@property
def down(self) -> str:
return self._scroll["down"]
@property
def left(self) -> str:
return self._scroll["left"]
@property
def right(self) -> str:
return self._scroll["right"]
class FlexibleGradingConfig(AddonConfigManager):
def __init__(self, default: bool = False):
super().__init__(default)
self._scroll = ScrollKeysConfig(cfg_dict=self._config)
def _get_sub(self, sub_key: str) -> dict[str, str]:
return {
key.lower(): self._config[sub_key].get(key.lower(), default_value)
for key, default_value in
self._default_config[sub_key].items()
}
@staticmethod
def get_label(ease: int, default_ease: int = 3) -> str:
if ease == 1:
return "Again"
if ease == default_ease:
return "Good"
if ease == 2:
return "Hard"
if ease > default_ease:
return "Easy"
return "Unknown"
def get_ease_color(self, ease: int, default_ease: int) -> str:
return self._config['colors'][self.get_label(ease, default_ease).lower()]
def get_label_color(self, label: str) -> str:
return self._config['colors'][label.lower()]
@property
def colors(self) -> dict[str, str]:
"""Returns a dict mapping buttons' labels to their colors."""
return self._get_sub('colors')
@property
def buttons(self) -> dict[str, str]:
"""Returns a dict mapping buttons' labels to their key bindings."""
return self._get_sub('buttons')
def get_key(self, answer: str) -> str:
"""Returns shortcut key for answer button, e.g. 'again'=>'h'."""
return self._config['buttons'].get(answer.lower(), "").lower()
def set_key(self, answer: str, letter: str):
"""Sets shortcut key for answer button, e.g. 'again'=>'h'."""
self._config['buttons'][answer.lower()] = letter.lower()
def set_color(self, btn_label: str, color: str):
self._config['colors'][btn_label.lower()] = color
def get_zoom_state(self, state: str) -> float:
return self._config.setdefault('zoom_states', {}).get(state, 1)
def set_zoom_state(self, state: str, value: float) -> None:
self._config.setdefault('zoom_states', {})[state] = value
@property
def scroll(self) -> ScrollKeysConfig:
return self._scroll
config = FlexibleGradingConfig()