]> git.saurik.com Git - wxWidgets.git/blob - wxPython/misc/drawwidget.py
wx.EvtHandler is OOR capable
[wxWidgets.git] / wxPython / misc / drawwidget.py
1
2
3 import wx
4
5 testItems = [
6 "",
7 "BitmapButton",
8 "Button",
9 "CalendarCtrl",
10 "CheckBox",
11 "CheckListBox",
12 "Choice",
13 "ComboBox",
14 "Gauge",
15 "GenericDirCtrl",
16 "ListBox",
17 "ListCtrl",
18 "ListCtrl With GridLines",
19 "RadioBox",
20 "RadioButton",
21 "ScrollBar",
22 "Slider",
23 "SpinButton",
24 "SpinCtrl",
25 "StaticBitmap",
26 "StaticBox",
27 "StaticLine",
28 "StaticText",
29 "TextCtrl",
30 "ToggleButton",
31 "TreeCtrl",
32 "--------------",
33 "Panel",
34 "Panel With Border",
35 "Panel With BG",
36 "Panel With Controls",
37 "Panel With RadioBox",
38 "--------------",
39 "GenericButton",
40
41 ]
42
43 import keyword
44 testChoices = keyword.kwlist
45
46 testChoices2 = "one two three four five six seven eight nine".split()
47
48
49
50
51 class Frame(wx.Frame):
52 def __init__(self):
53 wx.Frame.__init__(self, None, title="Draw Widget Test")
54 self.left = wx.Panel(self)
55 self.right = DisplayPanel(self)
56 self.widget = None
57
58 sizer = wx.BoxSizer(wx.HORIZONTAL)
59 sizer.Add(self.left, 1, wx.EXPAND)
60 sizer.Add(self.right, 1, wx.EXPAND)
61 self.SetSizer(sizer)
62
63 menu = wx.Menu()
64 menu.Append(wx.ID_EXIT, "E&xit\tAlt-X")
65 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
66 mbar = wx.MenuBar()
67 mbar.Append(menu, "&File")
68 self.SetMenuBar(mbar)
69
70 cb = wx.ComboBox(self.left, -1, pos=(20,20),
71 choices=testItems, style=wx.CB_READONLY)
72 self.Bind(wx.EVT_COMBOBOX, self.OnWidgetChosen, cb)
73
74
75 def OnWidgetChosen(self, evt):
76 item = evt.GetString()
77 item = item.replace(" ", "_")
78 func = getattr(self, "Test"+item, None)
79 if func is not None:
80 func(self.left)
81
82 def OnExit(self, evt):
83 self.Close()
84
85
86
87 def DoWidget(self, widget):
88 self.right.Empty()
89 if self.widget is not None:
90 self.widget.Destroy()
91 self.widget = widget
92 if widget is None:
93 return
94
95 visiblePos = (20,80)
96 hiddenPos = (-1000,-1000)
97
98 widget.SetPosition(visiblePos)
99 widget.Update()
100 self.GetBMP(0) # Uses just a DC.Blit, so it must be visible
101
102 # the rest should work when the widget is not visible.
103 widget.SetPosition(hiddenPos)
104 widget.Update()
105 self.Update()
106
107 ##self.GetBMP(1)
108 self.GetBMP(2)
109 ##self.GetBMP(4)
110
111 # make it visible again for the user to compare
112 widget.SetPosition(visiblePos)
113
114
115 def GetBMP(self, method):
116 w = self.widget
117 maskClr = wx.Colour(12, 34, 56)
118 sz = w.GetSize()
119 bmp = wx.EmptyBitmap(sz.width, sz.height)
120 dc = wx.MemoryDC()
121 dc.SelectObject(bmp)
122 dc.SetBackground(wx.Brush(maskClr))
123 dc.Clear()
124
125 if method == 0:
126 wdc = wx.WindowDC(w)
127 dc.Blit(0,0, sz.width, sz.height, wdc, 0, 0)
128 else:
129 ##wx.DrawWindowOnDC(w, dc, method)
130 wx.DrawWindowOnDC(w, dc)
131
132 dc.SelectObject(wx.NullBitmap)
133 bmp.SetMaskColour(maskClr)
134 self.right.SetBMP(bmp, method)
135
136
137
138
139
140 def Test(self, p):
141 self.DoWidget(None)
142
143 def TestBitmapButton(self, p):
144 self.DoWidget(wx.BitmapButton(p, -1,
145 wx.Bitmap("image.png")))
146 def TestButton(self, p):
147 self.DoWidget(wx.Button(p, -1, "A button"))
148
149 def TestCalendarCtrl(self, p):
150 import wx.calendar
151 w = wx.calendar.CalendarCtrl(p, style=wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION)
152 self.DoWidget(w)
153
154 def TestCheckBox(self, p):
155 self.DoWidget(wx.CheckBox(p, -1, "checkbox"))
156
157 def TestCheckListBox(self, p):
158 w = wx.CheckListBox(p, -1, choices=testChoices)
159 w.SetSelection(2)
160 self.DoWidget(w)
161
162 def TestChoice(self, p):
163 w = wx.Choice(p, -1, choices=testChoices)
164 w.SetSelection(2)
165 self.DoWidget(w)
166
167 def TestComboBox(self, p):
168 w = wx.ComboBox(p, -1, choices=testChoices)
169 w.SetSelection(2)
170 self.DoWidget(w)
171
172 def TestGauge(self, p):
173 w = wx.Gauge(p, -1, 100, size=(150, -1))
174 w.SetValue(65)
175 self.DoWidget(w)
176
177 def TestGenericDirCtrl(self, p):
178 w = wx.GenericDirCtrl(p, size=(150,200), style=wx.DIRCTRL_DIR_ONLY)
179 self.DoWidget(w)
180
181 def TestListBox(self, p):
182 w = wx.ListBox(p, -1, choices=testChoices)
183 w.SetSelection(2)
184 self.DoWidget(w)
185
186 def TestListCtrl(self, p, useGridLines=False):
187 style=wx.LC_REPORT
188 if useGridLines:
189 style = style | wx.LC_HRULES | wx.LC_VRULES
190 w = wx.ListCtrl(p, -1, size=(250, 100), style=style)
191 w.InsertColumn(0, "Col 1")
192 w.InsertColumn(1, "Col 2")
193 w.InsertColumn(2, "Col 3")
194 for x in range(10):
195 w.InsertStringItem(x, str(x))
196 w.SetStringItem(x, 1, str(x))
197 w.SetStringItem(x, 2, str(x))
198 self.DoWidget(w)
199
200 def TestListCtrl_With_GridLines(self, p):
201 self.TestListCtrl(p, True)
202
203 def TestRadioBox(self, p):
204 w = wx.RadioBox(p, -1, "RadioBox",
205 choices=testChoices2, majorDimension=3)
206 self.DoWidget(w)
207
208 def TestRadioButton(self, p):
209 self.DoWidget(wx.RadioButton(p, -1, "RadioButton"))
210
211 def TestScrollBar(self, p):
212 w = wx.ScrollBar(p, -1, size=(150,-1))
213 w.SetScrollbar(25, 5, 100, 10)
214 self.DoWidget(w)
215
216 def TestSlider(self, p):
217 w = wx.Slider(p, -1, size=(150,-1))
218 self.DoWidget(w)
219
220 def TestSpinButton(self, p):
221 w = wx.SpinButton(p, -1)
222 self.DoWidget(w)
223
224 def TestSpinCtrl(self, p):
225 w = wx.SpinCtrl(p, -1)
226 self.DoWidget(w)
227
228 def TestStaticBitmap(self, p):
229 w = wx.StaticBitmap(p, -1, wx.Bitmap("image.png"))
230 self.DoWidget(w)
231
232 def TestStaticBox(self, p):
233 w = wx.StaticBox(p, -1, "StaticBox", size=(150,75))
234 self.DoWidget(w)
235
236 def TestStaticLine(self, p):
237 w = wx.StaticLine(p, -1, size=(150,-1))
238 self.DoWidget(w)
239
240 def TestStaticText(self, p):
241 w = wx.StaticText(p, -1, "This is a wx.StaticText")
242 self.DoWidget(w)
243
244 def TestTextCtrl(self, p):
245 self.DoWidget(wx.TextCtrl(p, -1, "This is a TextCtrl", size=(150,-1)))
246
247 def TestToggleButton(self, p):
248 w = wx.ToggleButton(p, -1, "Toggle Button")
249 self.DoWidget(w)
250
251 def TestTreeCtrl(self, p):
252 w = wx.TreeCtrl(p, -1, size=(150,200))
253 root = w.AddRoot("The Root Item")
254 for x in range(15):
255 child = w.AppendItem(root, "Item %d" % x)
256 w.Expand(root)
257 self.DoWidget(w)
258
259 def TestPanel(self, p):
260 w = wx.Panel(p, size=(100,100))
261 self.DoWidget(w)
262
263 def TestPanel_With_Border(self, p):
264 w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
265 self.DoWidget(w)
266
267 def TestPanel_With_BG(self, p):
268 w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
269 w.SetBackgroundColour("pink")
270 self.DoWidget(w)
271
272 def TestPanel_With_Controls(self, p):
273 w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
274 l1 = wx.StaticText(w, -1, "Name:")
275 l2 = wx.StaticText(w, -1, "Email:")
276 t1 = wx.TextCtrl(w, -1, "", size=(120,-1))
277 t2 = wx.TextCtrl(w, -1, "", size=(120,-1))
278 btn = wx.Button(w, wx.ID_OK)
279 sizer = wx.BoxSizer(wx.VERTICAL)
280 fgs = wx.FlexGridSizer(2,2,5,5)
281 fgs.Add(l1)
282 fgs.Add(t1)
283 fgs.Add(l2)
284 fgs.Add(t2)
285 sizer.Add(fgs, 0, wx.ALL, 10)
286 sizer.Add(btn, 0, wx.ALL, 10)
287 w.SetSizerAndFit(sizer)
288 self.DoWidget(w)
289
290 def TestPanel_With_RadioBox(self, p):
291 w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
292 wx.RadioBox(w, -1, "RadioBox", pos=(10,10),
293 choices=testChoices2, majorDimension=3)
294 w.Fit()
295 self.DoWidget(w)
296
297 def TestGenericButton(self, p):
298 import wx.lib.buttons as b
299 w = b.GenButton(p, -1, "Generic Button")
300 w.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))
301 w.SetBezelWidth(5)
302 w.SetBestSize()
303 w.SetBackgroundColour("Navy")
304 w.SetForegroundColour(wx.WHITE)
305 self.DoWidget(w)
306
307 def TestT(self, p):
308 self.DoWidget(w)
309
310 def TestT(self, p):
311 self.DoWidget(w)
312
313 def TestT(self, p):
314 self.DoWidget(w)
315
316 def TestT(self, p):
317 self.DoWidget(w)
318
319
320
321
322
323
324
325 class DisplayPanel(wx.Panel):
326 def __init__(self, parent, ID=-1):
327 wx.Panel.__init__(self, parent, ID)
328 self.SetBackgroundColour("sky blue")
329 self.Empty()
330 self.Bind(wx.EVT_PAINT, self.OnPaint)
331 self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB)
332
333 def Empty(self):
334 self.bmps = [None] * 5
335 self.Refresh()
336
337 def SetBMP(self, bmp, method):
338 self.bmps[method] = bmp
339 self.Refresh()
340
341 def OEB(self, evt):
342 None
343
344 def OnPaint(self, evt):
345 dc = wx.BufferedPaintDC(self)
346 dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
347 dc.Clear()
348 y = 25
349 for idx, bmp in enumerate(self.bmps):
350 if bmp is not None:
351 dc.DrawText(str(idx), 15, y)
352 dc.DrawBitmap(bmp, 30,y, True)
353 y += bmp.GetHeight() + 15
354
355
356
357 app = wx.App(False)
358 f = Frame()
359 f.SetSize((600,600))
360 f.Show()
361 app.MainLoop()