git.s-ol.nu hw/0x33.board/firmware / d4aedcc
handle profile setting separately s-ol 4 months ago
2 changed file(s) with 20 addition(s) and 31 deletion(s). Raw diff Collapse all Expand all
8181
8282 self.settings = Settings(
8383 {
84 "active_profile": SliderSetting(
85 "CURRENT PROFILE", 24, fmt="Profile {}", thresh=_eq
86 ),
8784 # MIDI
8885 "midi_ch_usb": Slider16Setting(
8986 "USB MIDI CHANNEL", fmt="CH{}", thresh=_eq
174171 self.settings.on('flip', self.on_flip)
175172 self.settings.on('i2c_mode', self.on_i2c)
176173 self.settings.on('i2c_addr', self.on_i2c)
177 self.settings.on('active_profile', self.on_profile)
178174
179175 self.sticky_modes = {}
180176 self.modes = {
253249 self.modes["base"].update_scale()
254250 self.modes["base_shift"].update_display()
255251
256 def on_profile(self, profile, last):
257 self.settings.store(last)
258 self.settings.load(profile)
259
260252 @property
261253 def mode(self) -> Mode:
262254 return self._mode
198198 self.readonly = readonly
199199 self.change_handlers = {}
200200
201 self.profile_setting = SliderSetting(
202 "CURRENT PROFILE", 24, fmt="Profile {}", thresh=_eq
203 )
204
201205 def on(self, id: str, fn):
202206 if id in self.change_handlers:
203207 raise ValueError("already have a handler for {}".format(id))
222226 for id in order:
223227 if id in data:
224228 self.settings[id].value = data[id]
225 elif id != 'active_profile':
229 else:
226230 self.settings[id].restore_default()
227231
228 if id != 'active_profile':
229 self.dispatch(id)
232 self.dispatch(id)
230233 except OSError:
231234 print(f"couldn't load profile{i}, falling back to defaults")
232235 for id in order:
233 if id != 'active_profile':
234 self.settings[id].restore_default()
235 self.dispatch(id)
236
237 self.settings['active_profile'].value = i
236 self.settings[id].restore_default()
237 self.dispatch(id)
238
239 self.profile_setting.value = i
238240
239241 def store(self, i=None):
240242 if i == None:
241 i = self.settings['active_profile'].value
243 i = self.profile_setting.value
242244
243245 if self.readonly:
244246 print(f"readonly, skipped storing profile{i}")
246248
247249 data = {}
248250 for id in self.settings:
249 if id != 'active_profile':
250 data[id] = self.settings[id].value
251 data[id] = self.settings[id].value
251252
252253 try:
253254 with open(f'profile{i}.hex.json', 'w') as f:
326327 self.settings.store()
327328
328329 @property
329 def setting_id(self) -> str:
330 gi, si = self.active
331 if gi == 0:
332 return 'active_profile'
333
334 return self.ui_setting_ids[gi][si]
335
336 @property
337330 def setting(self) -> Setting:
338331 gi, si = self.active
339332 if gi == 0:
340 return self.settings.get('active_profile')
333 return self.settings.profile_setting
341334
342335 return self.ui_settings[gi][si]
343336
406399
407400 if handled:
408401 self.update_display()
409 self.settings.dispatch(self.setting_id, last_val)
410
411 return handled
402
403 if gi == 0:
404 # profile switched
405 self.settings.store(last_val)
406 self.settings.load(self.setting.value)
407 else:
408 self.settings.dispatch(self.ui_setting_ids[gi][si], last_val)