import wx from mathentry import MathEntry from listentry import ListEntry class SettingsList(wx.GridSizer): def __init__(self, parent, hgap=5, vgap=5): super().__init__(cols=2, hgap=hgap, vgap=vgap) self.parent = parent self.children = {} def update(self, cfg, names=None): if names is None: names = {} for k, v in cfg.items(): n = names.get(k, k) self.add(k, n, v) def clear(self): self.Clear(True) def add(self, name, label, value): new = Setting(self.parent, name, label, value) self.children[name] = new self.Add(new.state) self.Add(new.text, 0, wx.EXPAND|wx.ALL) def get(self): res = {} for i in self.children.values(): name = i.name if i.get_state(): value = i.get_value() else: value = None res[name] = value return res def set(self, name, value): self.children[name].set_value(value) def __getitem__(self, key): return self.children[key] class Setting: def __init__(self, parent, name, label, value): self.name = name self.state = state = wx.CheckBox(parent, label=label) if isinstance(value, list): self.text = text = ListEntry(parent, style=wx.TE_RIGHT) else: self.text = text = MathEntry(parent, style=wx.TE_RIGHT) state.Bind(wx.EVT_CHECKBOX, self.on_state_change) if value is None: state.SetValue(False) text.Disable() else: state.SetValue(True) text.SetValue(value) def get_state(self): return self.state.GetValue() def get_value(self): return self.text.GetValue() def set_value(self, val): self.text.SetValue(val) def on_state_change(self, event): if self.get_state(): self.text.Enable() else: self.text.Disable() # def enable(self): # self.state.SetValue(True) # self.text.Enable() def disable(self): self.state.SetValue(False) self.text.Disable() def clear(self): self.text.clear()