menu.py cleanup
s-ol
4 months ago
46 | 46 | |
47 | 47 | class Setting: |
48 | 48 | name: str |
49 | _value: any | |
50 | ||
51 | def __init__(self, name: str, default: any): | |
49 | default: Any | |
50 | _value: Any | |
51 | ||
52 | def __init__(self, name: str, default: Any): | |
52 | 53 | self.name = name |
53 | 54 | self.default = default |
54 | 55 | self._value = default |
193 | 194 | |
194 | 195 | class Settings: |
195 | 196 | settings: dict[str, Setting] |
197 | profile_setting: Setting | |
198 | ||
199 | readonly: bool | |
200 | order: list[str] | |
201 | change_handlers: dict[str, Callable[Any, Any]] | |
196 | 202 | |
197 | 203 | def __init__(self, settings: dict[str, Setting], readonly=False): |
198 | 204 | self.settings = settings |
203 | 209 | "CURRENT PROFILE", 24, fmt="Profile {}", thresh=_eq |
204 | 210 | ) |
205 | 211 | |
212 | self.order = ['layout_name', 'layout_offset', 'scale_name', 'scale_root', 'flip'] | |
213 | for id in self.settings: | |
214 | if id not in self.order: | |
215 | self.order.append(id) | |
216 | ||
206 | 217 | def on(self, id: str, fn): |
207 | 218 | if id in self.change_handlers: |
208 | 219 | raise ValueError("already have a handler for {}".format(id)) |
215 | 226 | return self.settings[id] |
216 | 227 | |
217 | 228 | def load(self, i=0): |
218 | order = ['layout_name', 'layout_offset', 'scale_name', 'scale_root', 'flip'] | |
219 | for id in self.settings: | |
220 | if id not in order: | |
221 | order.append(id) | |
222 | ||
223 | 229 | try: |
224 | 230 | with open(f'profiles/hex33board_{i}.json', 'r') as f: |
225 | 231 | print(f"loading profile{i}") |
226 | 232 | data = json.load(f) |
227 | for id in order: | |
233 | for id in self.order: | |
228 | 234 | if id in data: |
229 | 235 | self.settings[id].value = data[id] |
230 | 236 | else: |
233 | 239 | self.dispatch(id) |
234 | 240 | except OSError: |
235 | 241 | print(f"couldn't load profile{i}, falling back to defaults") |
236 | for id in order: | |
242 | for id in self.order: | |
237 | 243 | self.settings[id].restore_default() |
238 | 244 | self.dispatch(id) |
239 | 245 | |
270 | 276 | settings: Settings |
271 | 277 | ui_setting_ids: list[list[str]] |
272 | 278 | ui_settings: list[list[Setting]] |
279 | active: tuple[int, int] | |
273 | 280 | |
274 | 281 | GROUP_ACTIVE = hsv_to_rgb(0.7, 1.0, 1.0) |
275 | 282 | GROUP_ACTIVE_DIM = hsv_to_rgb(0.7, 1.0, 0.15) |