GraphicEQControl: tolerate a partial _value dict
_write and set_value both did a bare _value[int(item)] subscript while the slider grid has validator.count entries. A persister value with fewer keys than bands (stale data from an older EQ parser) raised KeyError on render and on every slider drag for a missing band, so slider changes never reached the persister. Use .get() with a 0 dB fallback for unset bands, and guard against _value not being a dict at all.
This commit is contained in:
parent
7593781367
commit
5853cf5a8e
|
|
@ -595,22 +595,25 @@ class GraphicEQControl(MultipleControl):
|
|||
control._timer.cancel()
|
||||
delattr(control, "_timer")
|
||||
new_state = int(control.get_value())
|
||||
if self.sbox.setting._value[int(item)] != new_state:
|
||||
self.sbox.setting._value[int(item)] = new_state
|
||||
_write_async(self.sbox.setting, self.sbox.setting._value[int(item)], self.sbox, key=int(item))
|
||||
value = self.sbox.setting._value
|
||||
if not isinstance(value, dict):
|
||||
return
|
||||
if value.get(int(item)) != new_state:
|
||||
value[int(item)] = new_state
|
||||
_write_async(self.sbox.setting, value[int(item)], self.sbox, key=int(item))
|
||||
|
||||
def set_value(self, value):
|
||||
if value is None:
|
||||
return
|
||||
b = ""
|
||||
n = len(self._items)
|
||||
stored = self.sbox.setting._value if isinstance(self.sbox.setting._value, dict) else {}
|
||||
for vbox in self._items:
|
||||
item = vbox._setting_item
|
||||
v = value.get(int(item), None)
|
||||
if v is not None:
|
||||
v = value.get(int(item))
|
||||
if v is None:
|
||||
v = stored.get(int(item), 0)
|
||||
vbox.control.set_value(v)
|
||||
else:
|
||||
v = self.sbox.setting._value[int(item)]
|
||||
b += f"{str(item)}: ({str(v)}) "
|
||||
lbl_text = ngettext("%d value", "%d values", n) % n
|
||||
self._button.set_label(lbl_text)
|
||||
|
|
|
|||
Loading…
Reference in New Issue