]> git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/tests/test4.py
Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
[wxWidgets.git] / utils / wxPython / tests / test4.py
1 #!/bin/env python
2 #----------------------------------------------------------------------------
3 # Name: test4.py
4 # Purpose: Testing lots of stuff, controls, window types, etc.
5 #
6 # Author: Robin Dunn
7 #
8 # Created:
9 # RCS-ID: $Id$
10 # Copyright: (c) 1998 by Total Control Software
11 # Licence: wxWindows license
12 #----------------------------------------------------------------------------
13
14
15 from wxPython.wx import *
16
17 import time
18
19 #---------------------------------------------------------------------------
20
21 class TestSimpleControlsDlg(wxDialog):
22 def __init__(self, parent, log):
23 self.log = log
24 wxDialog.__init__(self, parent, -1, "Test Simple Controls",
25 wxDefaultPosition, wxSize(350, 350))
26
27
28 sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
29 'six', 'seven', 'eight']
30
31 y_pos = 5
32 delta = 25
33
34 wxStaticText(self, -1, "wxTextCtrl", wxPoint(5, y_pos), wxSize(75, 20))
35 wxTextCtrl(self, 10, "", wxPoint(80, y_pos), wxSize(150, 20))
36 EVT_TEXT(self, 10, self.EvtText)
37 y_pos = y_pos + delta
38
39 wxCheckBox(self, 20, "wxCheckBox", wxPoint(80, y_pos), wxSize(150, 20), wxNO_BORDER)
40 EVT_CHECKBOX(self, 20, self.EvtCheckBox)
41 y_pos = y_pos + delta
42
43 rb = wxRadioBox(self, 30, "wxRadioBox", wxPoint(80, y_pos), wxDefaultSize,
44 sampleList, 3, wxRA_HORIZONTAL| wxNO_BORDER)
45 EVT_RADIOBOX(self, 30, self.EvtRadioBox)
46 width, height = rb.GetSizeTuple()
47 y_pos = y_pos + height + 5
48
49 wxStaticText(self, -1, "wxChoice", wxPoint(5, y_pos), wxSize(75, 20))
50 wxChoice(self, 40, wxPoint(80, y_pos), wxSize(95, 20), #wxDefaultSize,
51 sampleList)
52 EVT_CHOICE(self, 40, self.EvtChoice)
53 y_pos = y_pos + delta
54
55 wxStaticText(self, -1, "wxComboBox", wxPoint(5, y_pos), wxSize(75, 18))
56 wxComboBox(self, 50, "default value", wxPoint(80, y_pos), wxSize(95, 20),
57 sampleList, wxCB_DROPDOWN)
58 EVT_COMBOBOX(self, 50, self.EvtComboBox)
59 y_pos = y_pos + delta
60
61 wxStaticText(self, -1, "wxListBox", wxPoint(5, y_pos), wxSize(75, 18))
62 lb = wxListBox(self, 60, wxPoint(80, y_pos), wxDefaultSize,
63 sampleList, wxLB_SINGLE)
64 EVT_LISTBOX(self, 60, self.EvtListBox)
65 EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick)
66 lb.SetSelection(0)
67 width, height = lb.GetSizeTuple()
68 y_pos = y_pos + height + 5
69
70
71
72 y_pos = y_pos + 15
73 wxButton(self, wxID_OK, ' OK ', wxPoint(80, y_pos), wxDefaultSize).SetDefault()
74 wxButton(self, wxID_CANCEL, ' Cancel ', wxPoint(140, y_pos))
75
76
77 def EvtText(self, event):
78 self.log.WriteText('EvtText: %s\n' % event.GetString())
79
80 def EvtCheckBox(self, event):
81 self.log.WriteText('EvtCheckBox: %d\n' % event.GetInt())
82
83 def EvtRadioBox(self, event):
84 self.log.WriteText('EvtRadioBox: %d\n' % event.GetInt())
85
86 def EvtChoice(self, event):
87 self.log.WriteText('EvtChoice: %s\n' % event.GetString())
88
89 def EvtComboBox(self, event):
90 self.log.WriteText('EvtComboBox: %s\n' % event.GetString())
91
92 def EvtListBox(self, event):
93 self.log.WriteText('EvtListBox: %s\n' % event.GetString())
94
95 def EvtListBoxDClick(self, event):
96 self.log.WriteText('EvtListBoxDClick:\n')
97
98
99
100 #---------------------------------------------------------------------------
101
102 class TestTimer(wxTimer):
103 def __init__(self, log):
104 wxTimer.__init__(self)
105 self.log = log
106
107 def Notify(self):
108 wxBell()
109 self.log.WriteText('beep!\n')
110
111
112 #---------------------------------------------------------------------------
113
114 class TestLayoutConstraints(wxFrame):
115 def __init__(self, parent):
116 wxFrame.__init__(self, parent, -1, 'Test Layout Constraints',
117 wxDefaultPosition, wxSize(500, 300))
118
119 self.SetAutoLayout(true)
120 EVT_BUTTON(self, 100, self.OnButton)
121
122 self.panelA = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
123 wxSIMPLE_BORDER)
124 self.panelA.SetBackgroundColour(wxBLUE)
125 lc = wxLayoutConstraints()
126 lc.top.SameAs(self, wxTop, 10)
127 lc.left.SameAs(self, wxLeft, 10)
128 lc.bottom.SameAs(self, wxBottom, 10)
129 lc.right.PercentOf(self, wxRight, 50)
130 self.panelA.SetConstraints(lc)
131
132 self.panelB = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
133 wxSIMPLE_BORDER)
134 self.panelB.SetBackgroundColour(wxRED)
135 lc = wxLayoutConstraints()
136 lc.top.SameAs(self, wxTop, 10)
137 lc.right.SameAs(self, wxRight, 10)
138 lc.bottom.PercentOf(self, wxBottom, 30)
139 lc.left.RightOf(self.panelA, 10)
140 self.panelB.SetConstraints(lc)
141
142 self.panelC = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
143 wxSIMPLE_BORDER)
144 self.panelC.SetBackgroundColour(wxWHITE)
145 lc = wxLayoutConstraints()
146 lc.top.Below(self.panelB, 10)
147 lc.right.SameAs(self, wxRight, 10)
148 lc.bottom.SameAs(self, wxBottom, 10)
149 lc.left.RightOf(self.panelA, 10)
150 self.panelC.SetConstraints(lc)
151
152 b = wxButton(self.panelA, 100, ' Panel A ')
153 lc = wxLayoutConstraints()
154 lc.centreX.SameAs (self.panelA, wxCentreX)
155 lc.centreY.SameAs (self.panelA, wxCentreY)
156 lc.height.AsIs ()
157 lc.width.PercentOf (self.panelA, wxWidth, 50)
158 b.SetConstraints(lc);
159
160 b = wxButton(self.panelB, 100, ' Panel B ')
161 lc = wxLayoutConstraints()
162 lc.top.SameAs (self.panelB, wxTop, 2)
163 lc.right.SameAs (self.panelB, wxRight, 4)
164 lc.height.AsIs ()
165 lc.width.AsIs ()
166 b.SetConstraints(lc);
167
168 self.panelD = wxWindow(self.panelC, -1, wxDefaultPosition, wxDefaultSize,
169 wxSIMPLE_BORDER)
170 self.panelD.SetBackgroundColour(wxGREEN)
171 wxStaticText(self.panelD, -1, "Panel D", wxPoint(4, 4)).SetBackgroundColour(wxGREEN)
172
173 b = wxButton(self.panelC, 100, ' Panel C ')
174 lc = wxLayoutConstraints()
175 lc.top.Below (self.panelD)
176 lc.left.RightOf (self.panelD)
177 lc.height.AsIs ()
178 lc.width.AsIs ()
179 b.SetConstraints(lc);
180
181 lc = wxLayoutConstraints()
182 lc.bottom.PercentOf (self.panelC, wxHeight, 50)
183 lc.right.PercentOf (self.panelC, wxWidth, 50)
184 lc.height.SameAs (b, wxHeight)
185 lc.width.SameAs (b, wxWidth)
186 self.panelD.SetConstraints(lc);
187
188
189 def OnButton(self, event):
190 self.Close(true)
191
192
193 def OnCloseWindow(self, event):
194 self.Destroy()
195
196
197 #---------------------------------------------------------------------------
198
199 class TestGrid(wxFrame):
200 def __init__(self, parent, log):
201 wxFrame.__init__(self, parent, -1, 'Test Grid',
202 wxDefaultPosition, wxSize(500, 300))
203 self.log = log
204
205 grid = wxGrid(self, -1)
206
207 grid.CreateGrid(16, 16)
208 grid.SetColumnWidth(3, 200)
209 grid.SetRowHeight(4, 45)
210 grid.SetCellValue("First cell", 0, 0)
211 grid.SetCellValue("Another cell", 1, 1)
212 grid.SetCellValue("Yet another cell", 2, 2)
213 grid.SetCellTextFont(wxFont(12, wxROMAN, wxITALIC, wxNORMAL), 0, 0)
214 grid.SetCellTextColour(wxRED, 1, 1)
215 grid.SetCellBackgroundColour(wxCYAN, 2, 2)
216 grid.UpdateDimensions()
217 grid.AdjustScrollbars()
218
219 EVT_GRID_SELECT_CELL(grid, self.OnSelectCell)
220 EVT_GRID_CELL_CHANGE(grid, self.OnCellChange)
221 EVT_GRID_CELL_LCLICK(grid, self.OnCellClick)
222 EVT_GRID_LABEL_LCLICK(grid, self.OnLabelClick)
223
224
225
226 def OnCloseWindow(self, event):
227 self.Destroy()
228
229 def OnSelectCell(self, event):
230 self.log.WriteText("OnSelectCell: (%d, %d)\n" % (event.m_row, event.m_col))
231
232 def OnCellChange(self, event):
233 self.log.WriteText("OnCellChange: (%d, %d)\n" % (event.m_row, event.m_col))
234
235 def OnCellClick(self, event):
236 self.log.WriteText("OnCellClick: (%d, %d)\n" % (event.m_row, event.m_col))
237
238 def OnLabelClick(self, event):
239 self.log.WriteText("OnLabelClick: (%d, %d)\n" % (event.m_row, event.m_col))
240
241 #---------------------------------------------------------------------------
242
243
244 class ColoredPanel(wxWindow):
245 def __init__(self, parent, color):
246 wxWindow.__init__(self, parent, -1,
247 wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER)
248 self.SetBackgroundColour(color)
249
250
251 class TestNotebookWindow(wxFrame):
252 def __init__(self, parent, log):
253 wxFrame.__init__(self, parent, -1, 'Test wxNotebook',
254 wxDefaultPosition, wxDefaultSize)
255
256 nb = wxNotebook(self, -1)
257
258 win = ColoredPanel(nb, wxBLUE)
259 nb.AddPage(win, "Blue")
260 st = wxStaticText(win, -1,
261 "You can put nearly any type of window here!",
262 wxPoint(10, 10))
263 st.SetForegroundColour(wxWHITE)
264 st.SetBackgroundColour(wxBLUE)
265 st = wxStaticText(win, -1,
266 "Check the next tab for an example...",
267 wxPoint(10, 30))
268 st.SetForegroundColour(wxWHITE)
269 st.SetBackgroundColour(wxBLUE)
270
271 win = TestTreeCtrlPanel(nb, log)
272 nb.AddPage(win, "TreeCtrl")
273
274 win = TestListCtrlPanel(nb, log)
275 nb.AddPage(win, "ListCtrl")
276
277 win = ColoredPanel(nb, wxRED)
278 nb.AddPage(win, "Red")
279
280 win = ColoredPanel(nb, wxGREEN)
281 nb.AddPage(win, "Green")
282
283 win = ColoredPanel(nb, wxCYAN)
284 nb.AddPage(win, "Cyan")
285
286 win = ColoredPanel(nb, wxWHITE)
287 nb.AddPage(win, "White")
288
289 win = ColoredPanel(nb, wxBLACK)
290 nb.AddPage(win, "Black")
291
292 win = ColoredPanel(nb, wxNamedColour('MIDNIGHT BLUE'))
293 nb.AddPage(win, "MIDNIGHT BLUE")
294
295 win = ColoredPanel(nb, wxNamedColour('INDIAN RED'))
296 nb.AddPage(win, "INDIAN RED")
297
298
299 nb.SetSelection(0)
300 self.SetSize(wxSize(350, 300)) # force a redraw so the notebook will draw
301
302
303 def OnCloseWindow(self, event):
304 self.Destroy()
305
306 #---------------------------------------------------------------------------
307
308 class TestSplitterWindow(wxFrame):
309 def __init__(self, parent):
310 wxFrame.__init__(self, parent, -1, 'Test wxSplitterWindow',
311 wxDefaultPosition, wxSize(500, 300))
312
313 splitter = wxSplitterWindow(self, -1)
314
315 p1 = ColoredPanel(splitter, wxRED)
316 wxStaticText(p1, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED)
317
318 p2 = ColoredPanel(splitter, wxBLUE)
319 wxStaticText(p2, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE)
320
321 splitter.SplitVertically(p1, p2)
322
323
324 def OnCloseWindow(self, event):
325 self.Destroy()
326
327
328 #---------------------------------------------------------------------------
329
330 class CustomStatusBar(wxStatusBar):
331 def __init__(self, parent):
332 wxStatusBar.__init__(self, parent, -1)
333 self.SetFieldsCount(3)
334
335 self.SetStatusText("A Custom StatusBar...", 0)
336
337 self.cb = wxCheckBox(self, 1001, "toggle clock")
338 EVT_CHECKBOX(self, 1001, self.OnToggleClock)
339 self.cb.SetValue(true)
340
341 # figure out how tall to make it.
342 dc = wxClientDC(self)
343 dc.SetFont(self.GetFont())
344 (w,h) = dc.GetTextExtent('X')
345 h = int(h * 1.8)
346 self.SetSize(wxSize(100, h))
347
348 # start our timer
349 self.timer = wxPyTimer(self.Notify)
350 self.timer.Start(1000)
351 self.Notify()
352
353
354 # Time-out handler
355 def Notify(self):
356 t = time.localtime(time.time())
357 st = time.strftime("%d-%b-%Y %I:%M:%S", t)
358 self.SetStatusText(st, 2)
359
360 # the checkbox was clicked
361 def OnToggleClock(self, event):
362 if self.cb.GetValue():
363 self.timer.Start(1000)
364 self.Notify()
365 else:
366 self.timer.Stop()
367
368 # reposition the checkbox
369 def OnSize(self, event):
370 rect = self.GetFieldRect(1)
371 print "%s, %s" % (rect.x, rect.y)
372 self.cb.SetPosition(wxPoint(rect.x+2, rect.y+2))
373 self.cb.SetSize(wxSize(rect.width-4, rect.height-4))
374
375
376
377 class TestCustomStatusBar(wxFrame):
378 def __init__(self, parent):
379 wxFrame.__init__(self, parent, -1, 'Test Custom StatusBar',
380 wxDefaultPosition, wxSize(500, 300))
381 wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
382
383 self.sb = CustomStatusBar(self)
384 self.SetStatusBar(self.sb)
385
386 def OnCloseWindow(self, event):
387 self.sb.timer.Stop()
388 self.Destroy()
389
390
391 #---------------------------------------------------------------------------
392
393 class TestToolBar(wxFrame):
394 def __init__(self, parent, log):
395 wxFrame.__init__(self, parent, -1, 'Test ToolBar',
396 wxDefaultPosition, wxSize(500, 300))
397 self.log = log
398
399 wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
400
401 tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER)
402 #tb = wxToolBar(self, -1, wxDefaultPosition, wxDefaultSize,
403 # wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT)
404 #self.SetToolBar(tb)
405
406 self.CreateStatusBar()
407
408 tb.AddTool(10, wxNoRefBitmap('bitmaps/new.bmp', wxBITMAP_TYPE_BMP),
409 wxNullBitmap, false, -1, -1, "New", "Long help for 'New'")
410 EVT_TOOL(self, 10, self.OnToolClick)
411 EVT_TOOL_RCLICKED(self, 10, self.OnToolRClick)
412
413 tb.AddTool(20, wxNoRefBitmap('bitmaps/open.bmp', wxBITMAP_TYPE_BMP),
414 wxNullBitmap, false, -1, -1, "Open")
415 EVT_TOOL(self, 20, self.OnToolClick)
416 EVT_TOOL_RCLICKED(self, 20, self.OnToolRClick)
417
418 tb.AddSeparator()
419 tb.AddTool(30, wxNoRefBitmap('bitmaps/copy.bmp', wxBITMAP_TYPE_BMP),
420 wxNullBitmap, false, -1, -1, "Copy")
421 EVT_TOOL(self, 30, self.OnToolClick)
422 EVT_TOOL_RCLICKED(self, 30, self.OnToolRClick)
423
424 tb.AddTool(40, wxNoRefBitmap('bitmaps/paste.bmp', wxBITMAP_TYPE_BMP),
425 wxNullBitmap, false, -1, -1, "Paste")
426 EVT_TOOL(self, 40, self.OnToolClick)
427 EVT_TOOL_RCLICKED(self, 40, self.OnToolRClick)
428
429 tb.AddSeparator()
430
431 tb.AddTool(50, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
432 wxNullBitmap, true, -1, -1, "Toggle this")
433 EVT_TOOL(self, 50, self.OnToolClick)
434 EVT_TOOL_RCLICKED(self, 50, self.OnToolRClick)
435
436 tb.AddTool(60, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
437 wxNoRefBitmap('bitmaps/tog2.bmp', wxBITMAP_TYPE_BMP),
438 true, -1, -1, "Toggle with 2 bitmaps")
439 EVT_TOOL(self, 60, self.OnToolClick)
440 EVT_TOOL_RCLICKED(self, 60, self.OnToolRClick)
441
442 tb.Realize()
443
444
445 def OnCloseWindow(self, event):
446 self.Destroy()
447
448 def OnToolClick(self, event):
449 self.log.WriteText("tool %s clicked\n" % event.GetId())
450
451 def OnToolRClick(self, event):
452 self.log.WriteText("tool %s right-clicked\n" % event.GetId())
453
454
455 #---------------------------------------------------------------------------
456
457 class TestTreeCtrlPanel(wxPanel):
458 def __init__(self, parent, log):
459 wxPanel.__init__(self, parent, -1)
460
461 self.log = log
462 tID = 1101
463
464 self.tree = wxTreeCtrl(self, tID)
465 root = self.tree.AddRoot("The Root Item")
466 for x in range(10):
467 child = self.tree.AppendItem(root, "Item %d" % x)
468 for y in range(5):
469 last = self.tree.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
470
471 self.tree.Expand(root)
472 EVT_TREE_ITEM_EXPANDED (self, tID, self.OnItemExpanded)
473 EVT_TREE_ITEM_COLLAPSED (self, tID, self.OnItemCollapsed)
474 EVT_TREE_SEL_CHANGED (self, tID, self.OnSelChanged)
475
476
477 def OnSize(self, event):
478 w,h = self.GetClientSizeTuple()
479 self.tree.SetDimensions(0, 0, w, h)
480
481
482 def OnItemExpanded(self, event):
483 item = event.GetItem()
484 self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item))
485
486 def OnItemCollapsed(self, event):
487 item = event.GetItem()
488 self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
489
490 def OnSelChanged(self, event):
491 item = event.GetItem()
492 self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(item))
493
494
495
496
497 class TestTreeCtrl(wxFrame):
498 def __init__(self, parent, log):
499 wxFrame.__init__(self, parent, -1, 'Test TreeCtrl',
500 wxDefaultPosition, wxSize(250, 300))
501
502 p = TestTreeCtrlPanel(self, log)
503
504
505 #---------------------------------------------------------------------------
506
507 class TestListCtrlPanel(wxPanel):
508 def __init__(self, parent, log):
509 wxPanel.__init__(self, parent, -1)
510
511 self.log = log
512 tID = 1101
513
514 self.il = wxImageList(16, 16)
515 idx1 = self.il.Add(wxNoRefBitmap('bitmaps/smiles.bmp', wxBITMAP_TYPE_BMP))
516
517 self.list = wxListCtrl(self, tID, wxDefaultPosition, wxDefaultSize,
518 wxLC_REPORT|wxSUNKEN_BORDER)
519 self.list.SetImageList(self.il, wxIMAGE_LIST_SMALL)
520
521 self.list.SetToolTip(wxToolTip("This is a ToolTip!"))
522 wxToolTip_Enable(true)
523
524 self.list.InsertColumn(0, "Column 0")
525 self.list.InsertColumn(1, "Column 1")
526 self.list.InsertColumn(2, "One More Column (2)")
527 for x in range(50):
528 self.list.InsertImageStringItem(x, "This is item %d" % x, idx1)
529 self.list.SetStringItem(x, 1, "Col 1, item %d" % x)
530 self.list.SetStringItem(x, 2, "item %d in column 2" % x)
531
532 self.list.SetColumnWidth(0, wxLIST_AUTOSIZE)
533 self.list.SetColumnWidth(1, wxLIST_AUTOSIZE)
534 self.list.SetColumnWidth(2, wxLIST_AUTOSIZE)
535
536
537 def OnSize(self, event):
538 w,h = self.GetClientSizeTuple()
539 self.list.SetDimensions(0, 0, w, h)
540
541
542
543
544 class TestListCtrl(wxFrame):
545 def __init__(self, parent, log):
546 wxFrame.__init__(self, parent, -1, 'Test ListCtrl',
547 wxDefaultPosition, wxSize(250, 300))
548
549 p = TestListCtrlPanel(self, log)
550
551
552 #---------------------------------------------------------------------------
553
554 class TestSashWindow(wxMDIParentFrame):
555 NEW_WINDOW = 5000
556 TOGGLE_WINDOW = 5001
557 QUIT = 5002
558 ID_WINDOW_TOP = 5100
559 ID_WINDOW_LEFT1 = 5101
560 ID_WINDOW_LEFT2 = 5102
561 ID_WINDOW_BOTTOM = 5103
562
563
564 def __init__(self, parent, log):
565 wxMDIParentFrame.__init__(self, parent, -1, 'Test Sash Window',
566 wxDefaultPosition, wxSize(250, 300))
567
568 self.log = log
569 menu = wxMenu()
570 menu.Append(self.NEW_WINDOW, "&New Window")
571 menu.Append(self.TOGGLE_WINDOW, "&Toggle window")
572 menu.Append(self.QUIT, "E&xit")
573
574 menubar = wxMenuBar()
575 menubar.Append(menu, "&File")
576
577 self.SetMenuBar(menubar)
578 self.CreateStatusBar()
579
580 EVT_MENU(self, self.NEW_WINDOW, self.OnNewWindow)
581 EVT_MENU(self, self.TOGGLE_WINDOW, self.OnToggleWindow)
582 EVT_MENU(self, self.QUIT, self.OnQuit)
583
584 EVT_SASH_DRAGGED_RANGE(self, self.ID_WINDOW_TOP,
585 self.ID_WINDOW_BOTTOM, self.OnSashDrag)
586
587
588 # Create some layout windows
589 # A window like a toolbar
590 win = wxSashLayoutWindow(self, self.ID_WINDOW_TOP, wxDefaultPosition,
591 wxSize(200, 30), wxNO_BORDER|wxSW_3D)
592 win.SetDefaultSize(wxSize(1000, 30))
593 win.SetOrientation(wxLAYOUT_HORIZONTAL)
594 win.SetAlignment(wxLAYOUT_TOP)
595 win.SetBackgroundColour(wxColour(255, 0, 0))
596 win.SetSashVisible(wxSASH_BOTTOM, true)
597
598 self.topWindow = win
599
600
601 # A window like a statusbar
602 win = wxSashLayoutWindow(self, self.ID_WINDOW_BOTTOM,
603 wxDefaultPosition, wxSize(200, 30),
604 wxNO_BORDER|wxSW_3D)
605 win.SetDefaultSize(wxSize(1000, 30))
606 win.SetOrientation(wxLAYOUT_HORIZONTAL)
607 win.SetAlignment(wxLAYOUT_BOTTOM)
608 win.SetBackgroundColour(wxColour(0, 0, 255))
609 win.SetSashVisible(wxSASH_TOP, true)
610
611 self.bottomWindow = win
612
613
614 # A window to the left of the client window
615 win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT1,
616 wxDefaultPosition, wxSize(200, 30),
617 wxNO_BORDER|wxSW_3D)
618 win.SetDefaultSize(wxSize(120, 1000))
619 win.SetOrientation(wxLAYOUT_VERTICAL)
620 win.SetAlignment(wxLAYOUT_LEFT)
621 win.SetBackgroundColour(wxColour(0, 255, 0))
622 win.SetSashVisible(wxSASH_RIGHT, TRUE)
623 win.SetExtraBorderSize(10)
624
625 textWindow = wxTextCtrl(win, -1, "", wxDefaultPosition, wxDefaultSize,
626 wxTE_MULTILINE|wxSUNKEN_BORDER)
627 textWindow.SetValue("A help window")
628
629 self.leftWindow1 = win
630
631
632 # Another window to the left of the client window
633 win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT2,
634 wxDefaultPosition, wxSize(200, 30),
635 wxNO_BORDER|wxSW_3D)
636 win.SetDefaultSize(wxSize(120, 1000))
637 win.SetOrientation(wxLAYOUT_VERTICAL)
638 win.SetAlignment(wxLAYOUT_LEFT)
639 win.SetBackgroundColour(wxColour(0, 255, 255))
640 win.SetSashVisible(wxSASH_RIGHT, TRUE)
641
642 self.leftWindow2 = win
643
644
645 def OnNewWindow(self, event):
646 pass
647
648 def OnToggleWindow(self, event):
649 pass
650
651 def OnQuit(self, event):
652 self.Close(true)
653
654 def OnSashDrag(self, event):
655 if event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE:
656 return
657
658 eID = event.GetId()
659 if eID == self.ID_WINDOW_TOP:
660 self.topWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))
661
662 elif eID == self.ID_WINDOW_LEFT1:
663 self.leftWindow1.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
664
665
666 elif eID == self.ID_WINDOW_LEFT2:
667 self.leftWindow2.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
668
669 elif eID == self.ID_WINDOW_BOTTOM:
670 self.bottomWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))
671
672 wxLayoutAlgorithm().LayoutMDIFrame(self)
673
674 # Leaves bits of itself behind sometimes
675 self.GetClientWindow().Refresh()
676
677
678 def OnSize(self, event):
679 wxLayoutAlgorithm().LayoutMDIFrame(self)
680
681 #---------------------------------------------------------------------------
682 #---------------------------------------------------------------------------
683 #---------------------------------------------------------------------------
684
685 class AppFrame(wxFrame):
686 def __init__(self, parent, id, title):
687 wxFrame.__init__(self, parent, id, title, wxDefaultPosition,
688 wxSize(420, 200))
689 if wxPlatform == '__WXMSW__':
690 self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO)
691 self.SetIcon(self.icon)
692
693 self.mainmenu = wxMenuBar()
694 menu = wxMenu()
695 menu.Append(200, 'E&xit', 'Get the heck outta here!')
696 EVT_MENU(self, 200, self.OnFileExit)
697 self.mainmenu.Append(menu, '&File')
698
699 menu = self.MakeTestsMenu()
700 self.mainmenu.Append(menu, '&Tests')
701 self.SetMenuBar(self.mainmenu)
702
703 self.log = wxTextCtrl(self, -1, '', wxDefaultPosition, wxDefaultSize,
704 wxTE_MULTILINE|wxTE_READONLY)
705 self.log.WriteText('Test 4:\n')
706 (w, self.charHeight) = self.log.GetTextExtent('X')
707
708
709 def MakeTestsMenu(self):
710 menu = wxMenu()
711
712 mID = NewId()
713 menu.Append(mID, '&Simple Controls')
714 EVT_MENU(self, mID, self.OnTestSimpleControls)
715
716 mID = NewId()
717 menu.Append(mID, '&Timer', '', true)
718 EVT_MENU(self, mID, self.OnTestTimer)
719 self.timerID = mID
720 self.timer = None
721
722 mID = NewId()
723 menu.Append(mID, '&Layout Constraints')
724 EVT_MENU(self, mID, self.OnTestLayoutConstraints)
725
726 mID = NewId()
727 menu.Append(mID, '&Grid')
728 EVT_MENU(self, mID, self.OnTestGrid)
729
730
731 smenu = wxMenu() # make a sub-menu
732
733 mID = NewId()
734 smenu.Append(mID, '&Colour')
735 EVT_MENU(self, mID, self.OnTestColourDlg)
736
737 mID = NewId()
738 smenu.Append(mID, '&Directory')
739 EVT_MENU(self, mID, self.OnTestDirDlg)
740
741 mID = NewId()
742 smenu.Append(mID, '&File')
743 EVT_MENU(self, mID, self.OnTestFileDlg)
744
745 mID = NewId()
746 smenu.Append(mID, '&Single Choice')
747 EVT_MENU(self, mID, self.OnTestSingleChoiceDlg)
748
749 mID = NewId()
750 smenu.Append(mID, '&TextEntry')
751 EVT_MENU(self, mID, self.OnTestTextEntryDlg)
752
753 mID = NewId()
754 smenu.Append(mID, '&Font')
755 EVT_MENU(self, mID, self.OnTestFontDlg)
756
757 mID = NewId()
758 smenu.Append(mID, '&PageSetup')
759 EVT_MENU(self, mID, self.OnTestPageSetupDlg)
760
761 mID = NewId()
762 smenu.Append(mID, '&Print')
763 EVT_MENU(self, mID, self.OnTestPrintDlg)
764
765 mID = NewId()
766 smenu.Append(mID, '&Message')
767 EVT_MENU(self, mID, self.OnTestMessageDlg)
768
769
770 menu.AppendMenu(NewId(), '&Common Dialogs', smenu)
771
772
773 mID = NewId()
774 menu.Append(mID, '&Notebook')
775 EVT_MENU(self, mID, self.OnTestNotebook)
776
777 mID = NewId()
778 menu.Append(mID, '&Splitter Window')
779 EVT_MENU(self, mID, self.OnTestSplitter)
780
781 mID = NewId()
782 menu.Append(mID, '&Custom StatusBar')
783 EVT_MENU(self, mID, self.OnTestCustomStatusBar)
784
785 mID = NewId()
786 menu.Append(mID, '&ToolBar')
787 EVT_MENU(self, mID, self.OnTestToolBar)
788
789 mID = NewId()
790 menu.Append(mID, 'T&ree Control')
791 EVT_MENU(self, mID, self.OnTestTreeCtrl)
792
793 mID = NewId()
794 menu.Append(mID, '&List Control')
795 EVT_MENU(self, mID, self.OnTestListCtrl)
796
797 mID = NewId()
798 menu.Append(mID, 'S&ash Window and Layout Algorithm')
799 EVT_MENU(self, mID, self.OnTestSashWindow)
800
801 return menu
802
803
804
805
806 def WriteText(self, str):
807 self.log.WriteText(str)
808 if wxPlatform == '__WXMSW__':
809 w, h = self.log.GetClientSizeTuple()
810 numLines = h/self.charHeight
811 x, y = self.log.PositionToXY(self.log.GetLastPosition())
812 self.log.ShowPosition(self.log.XYToPosition(x, y-numLines+1))
813
814 def OnFileExit(self, event):
815 self.Close()
816
817 def OnCloseWindow(self, event):
818 self.Destroy()
819
820
821
822
823 def OnTestSimpleControls(self, event):
824 dlg = TestSimpleControlsDlg(self, self)
825 dlg.Centre()
826 dlg.ShowModal()
827 dlg.Destroy()
828
829 def OnTestTimer(self, event):
830 if self.timer:
831 self.mainmenu.Check(self.timerID, false)
832 self.timer.Stop()
833 self.timer = None
834 else:
835 self.mainmenu.Check(self.timerID, true)
836 self.timer = TestTimer(self)
837 self.timer.Start(1000)
838
839 def OnTestLayoutConstraints(self, event):
840 win = TestLayoutConstraints(self)
841 win.Show(true)
842
843 def OnTestGrid(self, event):
844 win = TestGrid(self, self)
845 win.Show(true)
846 win.SetSize(wxSize(505, 300)) # have to force a resize, or the grid doesn't
847 # show up for some reason....
848
849 def OnTestColourDlg(self, event):
850 data = wxColourData()
851 data.SetChooseFull(true)
852 dlg = wxColourDialog(self, data)
853 if dlg.ShowModal() == wxID_OK:
854 data = dlg.GetColourData()
855 self.log.WriteText('You selected: %s\n' % str(data.GetColour().Get()))
856 dlg.Destroy()
857
858 def OnTestDirDlg(self, event):
859 dlg = wxDirDialog(self)
860 if dlg.ShowModal() == wxID_OK:
861 self.log.WriteText('You selected: %s\n' % dlg.GetPath())
862 dlg.Destroy()
863
864 def OnTestFileDlg(self, event):
865 dlg = wxFileDialog(self, "Choose a file", ".", "", "*.*", wxOPEN)
866 if dlg.ShowModal() == wxID_OK:
867 self.log.WriteText('You selected: %s\n' % dlg.GetPath())
868 dlg.Destroy()
869
870 def OnTestSingleChoiceDlg(self, event):
871 dlg = wxSingleChoiceDialog(self, 'Test Single Choice', 'The Caption',
872 ['zero', 'one', 'two', 'three', 'four', 'five',
873 'six', 'seven', 'eight'])
874 if dlg.ShowModal() == wxID_OK:
875 self.log.WriteText('You selected: %s\n' % dlg.GetStringSelection())
876 dlg.Destroy()
877
878 def OnTestTextEntryDlg(self, event):
879 dlg = wxTextEntryDialog(self, 'What is your favorite programming language?',
880 'Duh??', 'Python')
881 #dlg.SetValue("Python is the best!") #### this doesn't work?
882 if dlg.ShowModal() == wxID_OK:
883 self.log.WriteText('You entered: %s\n' % dlg.GetValue())
884 dlg.Destroy()
885
886
887 def OnTestFontDlg(self, event):
888 dlg = wxFontDialog(self)
889 if dlg.ShowModal() == wxID_OK:
890 data = dlg.GetFontData()
891 font = data.GetChosenFont()
892 self.log.WriteText('You selected: "%s", %d points, color %s\n' %
893 (font.GetFaceName(), font.GetPointSize(),
894 data.GetColour().Get()))
895 dlg.Destroy()
896
897
898 def OnTestPageSetupDlg(self, event):
899 data = wxPageSetupData()
900 data.SetMarginTopLeft(wxPoint(50,50))
901 data.SetMarginBottomRight(wxPoint(50,50))
902 dlg = wxPageSetupDialog(self, data)
903 if dlg.ShowModal() == wxID_OK:
904 data = dlg.GetPageSetupData()
905 tl = data.GetMarginTopLeft()
906 br = data.GetMarginBottomRight()
907 self.log.WriteText('Margins are: %s %s\n' % (str(tl), str(br)))
908 dlg.Destroy()
909
910 def OnTestPrintDlg(self, event):
911 data = wxPrintData()
912 data.EnablePrintToFile(true)
913 data.EnablePageNumbers(true)
914 data.EnableSelection(true)
915 dlg = wxPrintDialog(self, data)
916 if dlg.ShowModal() == wxID_OK:
917 self.log.WriteText('\n')
918 dlg.Destroy()
919
920 def OnTestMessageDlg(self, event):
921 dlg = wxMessageDialog(self, 'Hello from Python and wxWindows!',
922 'A Message Box', wxOK | wxICON_INFORMATION)
923 dlg.ShowModal()
924 dlg.Destroy()
925
926
927 def OnTestNotebook(self, event):
928 win = TestNotebookWindow(self, self)
929 win.Show(true)
930
931 def OnTestSplitter(self, event):
932 win = TestSplitterWindow(self)
933 win.Show(true)
934
935 def OnTestCustomStatusBar(self, event):
936 win = TestCustomStatusBar(self)
937 win.Show(true)
938
939 def OnTestToolBar(self, event):
940 win = TestToolBar(self, self)
941 win.Show(true)
942
943 def OnTestTreeCtrl(self, event):
944 win = TestTreeCtrl(self, self)
945 win.Show(true)
946
947 def OnTestListCtrl(self, event):
948 win = TestListCtrl(self, self)
949 win.Show(true)
950
951 def OnTestSashWindow(self, event):
952 win = TestSashWindow(self, self)
953 win.Show(true)
954
955 #---------------------------------------------------------------------------
956
957
958 class MyApp(wxApp):
959 def OnInit(self):
960 frame = AppFrame(NULL, -1, "Test 4: (lots of little tests...)")
961 frame.Show(true)
962 self.SetTopWindow(frame)
963 return true
964
965 #---------------------------------------------------------------------------
966
967
968 def main():
969 app = MyApp(0)
970 app.MainLoop()
971
972
973 def t():
974 import pdb
975 pdb.run('main()')
976
977
978 # for focused testing...
979 def main2():
980 class T2App(wxApp):
981 def OnInit(self):
982 frame = TestLayoutConstraints(NULL)
983 frame.Show(true)
984 self.SetTopWindow(frame)
985 return true
986
987 app = T2App(0)
988 app.MainLoop()
989
990 def t2():
991 import pdb
992 pdb.run('main2()')
993
994
995
996 if __name__ == '__main__':
997 main()
998
999
1000 #----------------------------------------------------------------------------
1001 #
1002 # $Log$
1003 # Revision 1.13 1999/02/20 09:04:44 RD
1004 # Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
1005 # window handle. If you can get the window handle into the python code,
1006 # it should just work... More news on this later.
1007 #
1008 # Added wxImageList, wxToolTip.
1009 #
1010 # Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
1011 # wxRegConfig class.
1012 #
1013 # As usual, some bug fixes, tweaks, etc.
1014 #
1015 # Revision 1.12 1999/01/30 07:31:33 RD
1016 #
1017 # Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc.
1018 #
1019 # Various cleanup, tweaks, minor additions, etc. to maintain
1020 # compatibility with the current wxWindows.
1021 #
1022 # Revision 1.11 1999/01/29 16:17:59 HH
1023 # In test4's toolbar sample, changed NULL to wxNullBitmap to prevent SIGSEVS
1024 # with wxGTK. The sample works now.
1025 #
1026 # Revision 1.10 1998/12/16 22:12:47 RD
1027 #
1028 # Tweaks needed to be able to build wxPython with wxGTK.
1029 #
1030 # Revision 1.9 1998/12/15 20:44:35 RD
1031 # Changed the import semantics from "from wxPython import *" to "from
1032 # wxPython.wx import *" This is for people who are worried about
1033 # namespace pollution, they can use "from wxPython import wx" and then
1034 # prefix all the wxPython identifiers with "wx."
1035 #
1036 # Added wxTaskbarIcon for wxMSW.
1037 #
1038 # Made the events work for wxGrid.
1039 #
1040 # Added wxConfig.
1041 #
1042 # Added wxMiniFrame for wxGTK, (untested.)
1043 #
1044 # Changed many of the args and return values that were pointers to gdi
1045 # objects to references to reflect changes in the wxWindows API.
1046 #
1047 # Other assorted fixes and additions.
1048 #
1049 # Revision 1.8 1998/11/25 08:47:11 RD
1050 #
1051 # Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon
1052 # Added events for wxGrid
1053 # Other various fixes and additions
1054 #
1055 # Revision 1.7 1998/11/11 03:13:19 RD
1056 #
1057 # Additions for wxTreeCtrl
1058 #
1059 # Revision 1.6 1998/10/20 06:45:33 RD
1060 # New wxTreeCtrl wrappers (untested)
1061 # some changes in helpers
1062 # etc.
1063 #
1064 # Revision 1.5 1998/10/02 06:42:28 RD
1065 #
1066 # Version 0.4 of wxPython for MSW.
1067 #
1068 # Revision 1.4 1998/08/27 21:59:51 RD
1069 # Some chicken-and-egg problems solved for wxPython on wxGTK
1070 #
1071 # Revision 1.3 1998/08/27 00:01:17 RD
1072 # - more tweaks
1073 # - have discovered some problems but not yet discovered solutions...
1074 #
1075 # Revision 1.2 1998/08/22 19:51:18 RD
1076 # some tweaks for wxGTK
1077 #
1078 # Revision 1.1 1998/08/09 08:28:05 RD
1079 # Initial version
1080 #
1081 #