git.s-ol.nu hw/0x33.board/firmware / 6a86aef
menu.py cleanup s-ol 4 months ago
1 changed file(s) with 17 addition(s) and 10 deletion(s). Raw diff Collapse all Expand all
4646
4747 class Setting:
4848 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):
5253 self.name = name
5354 self.default = default
5455 self._value = default
193194
194195 class Settings:
195196 settings: dict[str, Setting]
197 profile_setting: Setting
198
199 readonly: bool
200 order: list[str]
201 change_handlers: dict[str, Callable[Any, Any]]
196202
197203 def __init__(self, settings: dict[str, Setting], readonly=False):
198204 self.settings = settings
203209 "CURRENT PROFILE", 24, fmt="Profile {}", thresh=_eq
204210 )
205211
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
206217 def on(self, id: str, fn):
207218 if id in self.change_handlers:
208219 raise ValueError("already have a handler for {}".format(id))
215226 return self.settings[id]
216227
217228 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
223229 try:
224230 with open(f'profiles/hex33board_{i}.json', 'r') as f:
225231 print(f"loading profile{i}")
226232 data = json.load(f)
227 for id in order:
233 for id in self.order:
228234 if id in data:
229235 self.settings[id].value = data[id]
230236 else:
233239 self.dispatch(id)
234240 except OSError:
235241 print(f"couldn't load profile{i}, falling back to defaults")
236 for id in order:
242 for id in self.order:
237243 self.settings[id].restore_default()
238244 self.dispatch(id)
239245
270276 settings: Settings
271277 ui_setting_ids: list[list[str]]
272278 ui_settings: list[list[Setting]]
279 active: tuple[int, int]
273280
274281 GROUP_ACTIVE = hsv_to_rgb(0.7, 1.0, 1.0)
275282 GROUP_ACTIVE_DIM = hsv_to_rgb(0.7, 1.0, 0.15)