]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/wxListBox.py
use -pthread or equivalent when using threads; many fixes (?) for the threads detecti...
[wxWidgets.git] / wxPython / demo / wxListBox.py
CommitLineData
cf694132
RD
1
2from wxPython.wx import *
3
185d7c3e
RD
4import string
5
6#---------------------------------------------------------------------------
7
8class wxFindPrefixListBox(wxListBox):
9 def __init__(self, parent, id, pos=wxDefaultPosition, size=wxDefaultSize,
10 choices=[], style=0, validator=wxDefaultValidator):
11 wxListBox.__init__(self, parent, id, pos, size, choices, style, validator)
12 self.typedText = ''
13 EVT_KEY_UP(self, self.OnKey)
14
15
16 def FindPrefix(self, prefix):
17 if prefix:
18 prefix = string.lower(prefix)
19 length = len(prefix)
20 for x in range(self.Number()):
21 text = self.GetString(x)
22 text = string.lower(text)
23 if text[:length] == prefix:
24 return x
25 return -1
26
27
28 def OnKey(self, evt):
29 key = evt.GetKeyCode()
30 if key >= 32 and key <= 127:
31 self.typedText = self.typedText + chr(key)
32 item = self.FindPrefix(self.typedText)
33 if item != -1:
34 self.SetSelection(item)
35
36 elif key == WXK_BACK: # backspace removes one character and backs up
37 self.typedText = self.typedText[:-1]
38 if not self.typedText:
39 self.SetSelection(0)
40 else:
41 item = self.FindPrefix(self.typedText)
42 if item != -1:
43 self.SetSelection(item)
44
45 else:
46 evt.Skip()
47
48
cf694132
RD
49#---------------------------------------------------------------------------
50
51class TestListBox(wxPanel):
52 def __init__(self, parent, log):
53 self.log = log
54 wxPanel.__init__(self, parent, -1)
55
56 sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
57 'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
58 'twelve', 'thirteen', 'fourteen']
59
60 wxStaticText(self, -1, "This example uses the wxListBox control.",
61 wxPoint(45, 10))
62
63 wxStaticText(self, -1, "Select one:", wxPoint(15, 50), wxSize(65, 18))
bb0054cd 64 self.lb1 = wxListBox(self, 60, wxPoint(80, 50), wxSize(80, 120),
cf694132
RD
65 sampleList, wxLB_SINGLE)
66 EVT_LISTBOX(self, 60, self.EvtListBox)
67 EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick)
bb0054cd 68 EVT_RIGHT_UP(self.lb1, self.EvtRightButton)
1b62f00d 69 self.lb1.SetSelection(3)
900d9886
RD
70 self.lb1.Append("with data", "This one has data");
71 self.lb1.SetClientData(2, "This one has data");
cf694132
RD
72
73
74 wxStaticText(self, -1, "Select many:", wxPoint(200, 50), wxSize(65, 18))
bb0054cd 75 self.lb2 = wxListBox(self, 70, wxPoint(280, 50), wxSize(80, 120),
cf694132
RD
76 sampleList, wxLB_EXTENDED)
77 EVT_LISTBOX(self, 70, self.EvtMultiListBox)
900d9886 78 EVT_RIGHT_UP(self.lb2, self.EvtRightButton)
bb0054cd 79 self.lb2.SetSelection(0)
cf694132
RD
80
81
185d7c3e
RD
82 sampleList = sampleList + ['test a', 'test aa', 'test aab',
83 'test ab', 'test abc', 'test abcc',
84 'test abcd' ]
85 sampleList.sort()
86 wxStaticText(self, -1, "Find Prefix:", wxPoint(15, 250))
87 fp = wxFindPrefixListBox(self, -1, wxPoint(80, 250), wxSize(80, 120),
88 sampleList, wxLB_SINGLE)
89 fp.SetSelection(0)
90
91
cf694132
RD
92 def EvtListBox(self, event):
93 self.log.WriteText('EvtListBox: %s\n' % event.GetString())
900d9886
RD
94 lb = event.GetEventObject()
95 data = lb.GetClientData(lb.GetSelection())
96 if data is not None:
97 self.log.WriteText('\tdata: %s\n' % data)
98
cf694132
RD
99
100 def EvtListBoxDClick(self, event):
bb0054cd 101 self.log.WriteText('EvtListBoxDClick: %s\n' % self.lb1.GetSelection())
5d1bd859 102 self.lb1.Delete(self.lb1.GetSelection())
cf694132
RD
103
104 def EvtMultiListBox(self, event):
bb0054cd 105 self.log.WriteText('EvtMultiListBox: %s\n' % str(self.lb2.GetSelections()))
cf694132 106
bb0054cd
RD
107 def EvtRightButton(self, event):
108 self.log.WriteText('EvtRightButton: %s\n' % event.GetPosition())
900d9886
RD
109 if event.GetEventObject().GetId() == 70:
110 selections = list(self.lb2.GetSelections())
111 selections.reverse()
112 for index in selections:
113 self.lb2.Delete(index)
114
cf694132
RD
115
116#---------------------------------------------------------------------------
117
118def runTest(frame, nb, log):
119 win = TestListBox(nb, log)
120 return win
121
122#---------------------------------------------------------------------------
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137overview = """\
138A listbox is used to select one or more of a list of strings. The strings are displayed in a scrolling box, with the selected string(s) marked in reverse video. A listbox can be single selection (if an item is selected, the previous selection is removed) or multiple selection (clicking an item toggles the item on or off independently of other selections).
139
cf694132 140"""