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()
|
control._timer.cancel()
|
||||||
delattr(control, "_timer")
|
delattr(control, "_timer")
|
||||||
new_state = int(control.get_value())
|
new_state = int(control.get_value())
|
||||||
if self.sbox.setting._value[int(item)] != new_state:
|
value = self.sbox.setting._value
|
||||||
self.sbox.setting._value[int(item)] = new_state
|
if not isinstance(value, dict):
|
||||||
_write_async(self.sbox.setting, self.sbox.setting._value[int(item)], self.sbox, key=int(item))
|
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):
|
def set_value(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
return
|
return
|
||||||
b = ""
|
b = ""
|
||||||
n = len(self._items)
|
n = len(self._items)
|
||||||
|
stored = self.sbox.setting._value if isinstance(self.sbox.setting._value, dict) else {}
|
||||||
for vbox in self._items:
|
for vbox in self._items:
|
||||||
item = vbox._setting_item
|
item = vbox._setting_item
|
||||||
v = value.get(int(item), None)
|
v = value.get(int(item))
|
||||||
if v is not None:
|
if v is None:
|
||||||
|
v = stored.get(int(item), 0)
|
||||||
vbox.control.set_value(v)
|
vbox.control.set_value(v)
|
||||||
else:
|
|
||||||
v = self.sbox.setting._value[int(item)]
|
|
||||||
b += f"{str(item)}: ({str(v)}) "
|
b += f"{str(item)}: ({str(v)}) "
|
||||||
lbl_text = ngettext("%d value", "%d values", n) % n
|
lbl_text = ngettext("%d value", "%d values", n) % n
|
||||||
self._button.set_label(lbl_text)
|
self._button.set_label(lbl_text)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue