Beispiel #1
0
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()
Beispiel #2
0
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()