aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2022-11-20 13:49:07 +0000
committers-ol <s+removethis@s-ol.nu>2022-11-20 13:49:07 +0000
commitd4aedccd16c988cea841d64a6f8125747effcfcc (patch)
treee448e7bbeca76edbf9d15408f6948af2e6b1e4bf
parentgroup settings into categories (diff)
downloadfirmware-d4aedccd16c988cea841d64a6f8125747effcfcc.tar.gz
firmware-d4aedccd16c988cea841d64a6f8125747effcfcc.zip
handle profile setting separately
-rw-r--r--hex33board/__init__.py8
-rw-r--r--hex33board/menu.py39
2 files changed, 18 insertions, 29 deletions
diff --git a/hex33board/__init__.py b/hex33board/__init__.py
index 9cebcdf..ad290c0 100644
--- a/hex33board/__init__.py
+++ b/hex33board/__init__.py
@@ -82,9 +82,6 @@ class Keyboard:
self.settings = Settings(
{
- "active_profile": SliderSetting(
- "CURRENT PROFILE", 24, fmt="Profile {}", thresh=_eq
- ),
# MIDI
"midi_ch_usb": Slider16Setting(
"USB MIDI CHANNEL", fmt="CH{}", thresh=_eq
@@ -175,7 +172,6 @@ class Keyboard:
self.settings.on('flip', self.on_flip)
self.settings.on('i2c_mode', self.on_i2c)
self.settings.on('i2c_addr', self.on_i2c)
- self.settings.on('active_profile', self.on_profile)
self.sticky_modes = {}
self.modes = {
@@ -254,10 +250,6 @@ class Keyboard:
self.modes["base"].update_scale()
self.modes["base_shift"].update_display()
- def on_profile(self, profile, last):
- self.settings.store(last)
- self.settings.load(profile)
-
@property
def mode(self) -> Mode:
return self._mode
diff --git a/hex33board/menu.py b/hex33board/menu.py
index 367b056..a078330 100644
--- a/hex33board/menu.py
+++ b/hex33board/menu.py
@@ -199,6 +199,10 @@ class Settings:
self.readonly = readonly
self.change_handlers = {}
+ self.profile_setting = SliderSetting(
+ "CURRENT PROFILE", 24, fmt="Profile {}", thresh=_eq
+ )
+
def on(self, id: str, fn):
if id in self.change_handlers:
raise ValueError("already have a handler for {}".format(id))
@@ -223,23 +227,21 @@ class Settings:
for id in order:
if id in data:
self.settings[id].value = data[id]
- elif id != 'active_profile':
+ else:
self.settings[id].restore_default()
- if id != 'active_profile':
- self.dispatch(id)
+ self.dispatch(id)
except OSError:
print(f"couldn't load profile{i}, falling back to defaults")
for id in order:
- if id != 'active_profile':
- self.settings[id].restore_default()
- self.dispatch(id)
+ self.settings[id].restore_default()
+ self.dispatch(id)
- self.settings['active_profile'].value = i
+ self.profile_setting.value = i
def store(self, i=None):
if i == None:
- i = self.settings['active_profile'].value
+ i = self.profile_setting.value
if self.readonly:
print(f"readonly, skipped storing profile{i}")
@@ -247,8 +249,7 @@ class Settings:
data = {}
for id in self.settings:
- if id != 'active_profile':
- data[id] = self.settings[id].value
+ data[id] = self.settings[id].value
try:
with open(f'profile{i}.hex.json', 'w') as f:
@@ -327,18 +328,10 @@ class MenuMode(Mode):
self.settings.store()
@property
- def setting_id(self) -> str:
- gi, si = self.active
- if gi == 0:
- return 'active_profile'
-
- return self.ui_setting_ids[gi][si]
-
- @property
def setting(self) -> Setting:
gi, si = self.active
if gi == 0:
- return self.settings.get('active_profile')
+ return self.settings.profile_setting
return self.ui_settings[gi][si]
@@ -407,6 +400,10 @@ class MenuMode(Mode):
if handled:
self.update_display()
- self.settings.dispatch(self.setting_id, last_val)
- return handled
+ if gi == 0:
+ # profile switched
+ self.settings.store(last_val)
+ self.settings.load(self.setting.value)
+ else:
+ self.settings.dispatch(self.ui_setting_ids[gi][si], last_val)