class AutoCompleteListEditor(wx.Frame): def __init__(self, *a, **k): wx.Frame.__init__(self, *a, **k) self._panel = p = wx.Panel(self, -1) self._text = _AutoCombo(p, -1, style=wx.TE_PROCESS_ENTER) listvals = self.get_values() self.list = AnyList(p, data=listvals, row_control=PrivacyListRow, style=8, draggable_items=False) self.list.BackgroundColour = wx.WHITE self.populate_combo() self.add_btn = wx.Button(p, -1, _('Add'), style=wx.BU_EXACTFIT) self.add_btn.MinSize = wx.Size(-1, 0) if platformName != 'mac': self.add_btn.Font = CopyFont(self.add_btn.Font, weight=wx.BOLD) else: self.add_btn.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) tb_sz = HSizer() tb_sz.Add(self._text, 1, ALIGN_CENTER_VERTICAL) tb_sz.Add(self.add_btn, 0, EXPAND | ALL | ALIGN_CENTER_VERTICAL) p.Sizer = sz = VSizer() sz.Add(tb_sz, 0, EXPAND | ALL, border=3) sz.Add(self.list, 1, EXPAND | ALL, border=3) self.add_btn.Bind(wx.EVT_BUTTON, self._add_clicked) self._text.Bind(wx.EVT_TEXT, self.set_btn_enable) self._text.Bind(wx.EVT_TEXT_ENTER, self._add_clicked) self.set_btn_enable() self.Layout() text = wx_prop('_text') def set_btn_enable(self, e=None): self.add_btn.Enable(self.validate(self.text)) def populate_combo(self): self._text.Clear() self._text.AppendItems(self.get_autovalues()) def _add_clicked(self, e): if not self.validate(self.text): log.error('%s does not validate. Not adding item.', self.text) return if self.text: self.add_item(self.text) self.text = '' def _rem_clicked(self, e): sel = self.list.Selection if sel == wx.NOT_FOUND: return obj = self.list.data[sel] #_str = self.list.GetString(sel) self.remove_item(obj) first = clamp(sel, 0, len(self.list.data) - 1) print first, len(self.list.data) - 1 if first >= 0: self.list.Selections = [first] def _get_list(self): return self.list.data def _set_list(self, val): self.list.data[:] = val self.list.on_data_changed() mylist = property(_get_list, _set_list) def get_values(self): raise NotImplementedError def add_item(self, _str): self.list.data.append(_str) self.populate_combo() self.set_btn_enable() self.list.on_data_changed() def remove_item(self, obj): assert obj in self.list.data self.list.RemoveItem(obj) self.populate_combo() def get_matches(self, _str): raise NotImplementedError def get_autovalues(self): raise NotImplementedError def __contains__(self, x): return x in self.list def on_close(self): self._text.on_close() self.list.on_close()
class AutoCompleteListEditor(wx.Frame): def __init__(self, *a, **k): wx.Frame.__init__(self, *a, **k) self._panel = p = wx.Panel(self, -1) self._text = _AutoCombo(p, -1, style=wx.TE_PROCESS_ENTER) listvals = self.get_values() self.list = AnyList(p, data = listvals, row_control = PrivacyListRow, style = 8, draggable_items = False) self.list.BackgroundColour = wx.WHITE self.populate_combo() self.add_btn = wx.Button(p, -1, _('Add'), style = wx.BU_EXACTFIT) self.add_btn.MinSize = wx.Size(-1, 0) if platformName != 'mac': self.add_btn.Font = CopyFont(self.add_btn.Font, weight = wx.BOLD) else: self.add_btn.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) tb_sz = HSizer() tb_sz.Add(self._text, 1, ALIGN_CENTER_VERTICAL) tb_sz.Add(self.add_btn, 0, EXPAND | ALL | ALIGN_CENTER_VERTICAL) p.Sizer = sz = VSizer() sz.Add(tb_sz, 0, EXPAND | ALL, border=3) sz.Add(self.list, 1, EXPAND | ALL, border=3) self.add_btn.Bind(wx.EVT_BUTTON, self._add_clicked) self._text.Bind(wx.EVT_TEXT, self.set_btn_enable) self._text.Bind(wx.EVT_TEXT_ENTER, self._add_clicked) self.set_btn_enable() self.Layout() text = wx_prop('_text') def set_btn_enable(self, e=None): self.add_btn.Enable(self.validate(self.text)) def populate_combo(self): self._text.Clear() self._text.AppendItems(self.get_autovalues()) def _add_clicked(self, e): if not self.validate(self.text): log.error('%s does not validate. Not adding item.', self.text) return if self.text: self.add_item(self.text) self.text = '' def _rem_clicked(self, e): sel = self.list.Selection if sel == wx.NOT_FOUND: return obj = self.list.data[sel] #_str = self.list.GetString(sel) self.remove_item(obj) first = clamp(sel, 0, len(self.list.data)-1) print first, len(self.list.data)-1 if first >= 0: self.list.Selections = [first] def _get_list(self): return self.list.data def _set_list(self, val): self.list.data[:] = val self.list.on_data_changed() mylist = property(_get_list, _set_list) def get_values(self): raise NotImplementedError def add_item(self, _str): self.list.data.append(_str) self.populate_combo() self.set_btn_enable() self.list.on_data_changed() def remove_item(self, obj): assert obj in self.list.data self.list.RemoveItem(obj) self.populate_combo() def get_matches(self, _str): raise NotImplementedError def get_autovalues(self): raise NotImplementedError def __contains__(self, x): return x in self.list def on_close(self): self._text.on_close() self.list.on_close()