2 #----------------------------------------------------------------------------
4 # Purpose: Testing lots of stuff, controls, window types, etc.
10 # Copyright: (c) 1998 by Total Control Software
11 # Licence: wxWindows license
12 #----------------------------------------------------------------------------
15 from wxPython
.wx
import *
19 #---------------------------------------------------------------------------
21 class TestSimpleControlsDlg(wxDialog
):
22 def __init__(self
, parent
, log
):
24 wxDialog
.__init
__(self
, parent
, -1, "Test Simple Controls",
25 wxDefaultPosition
, wxSize(350, 350))
28 sampleList
= ['zero', 'one', 'two', 'three', 'four', 'five',
29 'six', 'seven', 'eight']
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
)
39 wxCheckBox(self
, 20, "wxCheckBox", wxPoint(80, y_pos
), wxSize(150, 20), wxNO_BORDER
)
40 EVT_CHECKBOX(self
, 20, self
.EvtCheckBox
)
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
49 wxStaticText(self
, -1, "wxChoice", wxPoint(5, y_pos
), wxSize(75, 20))
50 wxChoice(self
, 40, wxPoint(80, y_pos
), wxSize(95, 20), #wxDefaultSize,
52 EVT_CHOICE(self
, 40, self
.EvtChoice
)
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
)
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
)
67 width
, height
= lb
.GetSizeTuple()
68 y_pos
= y_pos
+ height
+ 5
73 wxButton(self
, wxID_OK
, ' OK ', wxPoint(80, y_pos
), wxDefaultSize
).SetDefault()
74 wxButton(self
, wxID_CANCEL
, ' Cancel ', wxPoint(140, y_pos
))
77 def EvtText(self
, event
):
78 self
.log
.WriteText('EvtText: %s\n' % event
.GetString())
80 def EvtCheckBox(self
, event
):
81 self
.log
.WriteText('EvtCheckBox: %d\n' % event
.GetInt())
83 def EvtRadioBox(self
, event
):
84 self
.log
.WriteText('EvtRadioBox: %d\n' % event
.GetInt())
86 def EvtChoice(self
, event
):
87 self
.log
.WriteText('EvtChoice: %s\n' % event
.GetString())
89 def EvtComboBox(self
, event
):
90 self
.log
.WriteText('EvtComboBox: %s\n' % event
.GetString())
92 def EvtListBox(self
, event
):
93 self
.log
.WriteText('EvtListBox: %s\n' % event
.GetString())
95 def EvtListBoxDClick(self
, event
):
96 self
.log
.WriteText('EvtListBoxDClick:\n')
100 #---------------------------------------------------------------------------
102 class TestTimer(wxTimer
):
103 def __init__(self
, log
):
104 wxTimer
.__init
__(self
)
109 self
.log
.WriteText('beep!\n')
112 #---------------------------------------------------------------------------
114 class TestLayoutConstraints(wxFrame
):
115 def __init__(self
, parent
):
116 wxFrame
.__init
__(self
, parent
, -1, 'Test Layout Constraints',
117 wxDefaultPosition
, wxSize(500, 300))
119 self
.SetAutoLayout(true
)
120 EVT_BUTTON(self
, 100, self
.OnButton
)
122 self
.panelA
= wxWindow(self
, -1, wxDefaultPosition
, wxDefaultSize
,
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
)
132 self
.panelB
= wxWindow(self
, -1, wxDefaultPosition
, wxDefaultSize
,
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
)
142 self
.panelC
= wxWindow(self
, -1, wxDefaultPosition
, wxDefaultSize
,
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
)
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
)
157 lc
.width
.PercentOf (self
.panelA
, wxWidth
, 50)
158 b
.SetConstraints(lc
);
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)
166 b
.SetConstraints(lc
);
168 self
.panelD
= wxWindow(self
.panelC
, -1, wxDefaultPosition
, wxDefaultSize
,
170 self
.panelD
.SetBackgroundColour(wxGREEN
)
171 wxStaticText(self
.panelD
, -1, "Panel D", wxPoint(4, 4)).SetBackgroundColour(wxGREEN
)
173 b
= wxButton(self
.panelC
, 100, ' Panel C ')
174 lc
= wxLayoutConstraints()
175 lc
.top
.Below (self
.panelD
)
176 lc
.left
.RightOf (self
.panelD
)
179 b
.SetConstraints(lc
);
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
);
189 def OnButton(self
, event
):
193 def OnCloseWindow(self
, event
):
197 #---------------------------------------------------------------------------
199 class TestGrid(wxFrame
):
200 def __init__(self
, parent
, log
):
201 wxFrame
.__init
__(self
, parent
, -1, 'Test Grid',
202 wxDefaultPosition
, wxSize(500, 300))
205 grid
= wxGrid(self
, -1)
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()
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
)
226 def OnCloseWindow(self
, event
):
229 def OnSelectCell(self
, event
):
230 self
.log
.WriteText("OnSelectCell: (%d, %d)\n" % (event
.m_row
, event
.m_col
))
232 def OnCellChange(self
, event
):
233 self
.log
.WriteText("OnCellChange: (%d, %d)\n" % (event
.m_row
, event
.m_col
))
235 def OnCellClick(self
, event
):
236 self
.log
.WriteText("OnCellClick: (%d, %d)\n" % (event
.m_row
, event
.m_col
))
238 def OnLabelClick(self
, event
):
239 self
.log
.WriteText("OnLabelClick: (%d, %d)\n" % (event
.m_row
, event
.m_col
))
241 #---------------------------------------------------------------------------
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
)
251 class TestNotebookWindow(wxFrame
):
252 def __init__(self
, parent
, log
):
253 wxFrame
.__init
__(self
, parent
, -1, 'Test wxNotebook',
254 wxDefaultPosition
, wxDefaultSize
)
256 nb
= wxNotebook(self
, -1)
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!",
263 st
.SetForegroundColour(wxWHITE
)
264 st
.SetBackgroundColour(wxBLUE
)
265 st
= wxStaticText(win
, -1,
266 "Check the next tab for an example...",
268 st
.SetForegroundColour(wxWHITE
)
269 st
.SetBackgroundColour(wxBLUE
)
271 win
= TestTreeCtrlPanel(nb
, log
)
272 nb
.AddPage(win
, "TreeCtrl")
274 win
= TestListCtrlPanel(nb
, log
)
275 nb
.AddPage(win
, "ListCtrl")
277 win
= ColoredPanel(nb
, wxRED
)
278 nb
.AddPage(win
, "Red")
280 win
= ColoredPanel(nb
, wxGREEN
)
281 nb
.AddPage(win
, "Green")
283 win
= ColoredPanel(nb
, wxCYAN
)
284 nb
.AddPage(win
, "Cyan")
286 win
= ColoredPanel(nb
, wxWHITE
)
287 nb
.AddPage(win
, "White")
289 win
= ColoredPanel(nb
, wxBLACK
)
290 nb
.AddPage(win
, "Black")
292 win
= ColoredPanel(nb
, wxNamedColour('MIDNIGHT BLUE'))
293 nb
.AddPage(win
, "MIDNIGHT BLUE")
295 win
= ColoredPanel(nb
, wxNamedColour('INDIAN RED'))
296 nb
.AddPage(win
, "INDIAN RED")
300 self
.SetSize(wxSize(350, 300)) # force a redraw so the notebook will draw
303 def OnCloseWindow(self
, event
):
306 #---------------------------------------------------------------------------
308 class TestSplitterWindow(wxFrame
):
309 def __init__(self
, parent
):
310 wxFrame
.__init
__(self
, parent
, -1, 'Test wxSplitterWindow',
311 wxDefaultPosition
, wxSize(500, 300))
313 splitter
= wxSplitterWindow(self
, -1)
315 p1
= ColoredPanel(splitter
, wxRED
)
316 wxStaticText(p1
, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED
)
318 p2
= ColoredPanel(splitter
, wxBLUE
)
319 wxStaticText(p2
, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE
)
321 splitter
.SplitVertically(p1
, p2
)
324 def OnCloseWindow(self
, event
):
328 #---------------------------------------------------------------------------
330 class CustomStatusBar(wxStatusBar
):
331 def __init__(self
, parent
):
332 wxStatusBar
.__init
__(self
, parent
, -1)
333 self
.SetFieldsCount(3)
335 self
.SetStatusText("A Custom StatusBar...", 0)
337 self
.cb
= wxCheckBox(self
, 1001, "toggle clock")
338 EVT_CHECKBOX(self
, 1001, self
.OnToggleClock
)
339 self
.cb
.SetValue(true
)
341 # figure out how tall to make it.
342 dc
= wxClientDC(self
)
343 dc
.SetFont(self
.GetFont())
344 (w
,h
) = dc
.GetTextExtent('X')
346 self
.SetSize(wxSize(100, h
))
349 self
.timer
= wxPyTimer(self
.Notify
)
350 self
.timer
.Start(1000)
356 t
= time
.localtime(time
.time())
357 st
= time
.strftime("%d-%b-%Y %I:%M:%S", t
)
358 self
.SetStatusText(st
, 2)
360 # the checkbox was clicked
361 def OnToggleClock(self
, event
):
362 if self
.cb
.GetValue():
363 self
.timer
.Start(1000)
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))
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"))
383 self
.sb
= CustomStatusBar(self
)
384 self
.SetStatusBar(self
.sb
)
386 def OnCloseWindow(self
, event
):
391 #---------------------------------------------------------------------------
393 class TestToolBar(wxFrame
):
394 def __init__(self
, parent
, log
):
395 wxFrame
.__init
__(self
, parent
, -1, 'Test ToolBar',
396 wxDefaultPosition
, wxSize(500, 300))
399 wxWindow(self
, -1).SetBackgroundColour(wxNamedColour("WHITE"))
401 tb
= self
.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER
)
402 #tb = wxToolBar(self, -1, wxDefaultPosition, wxDefaultSize,
403 # wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT)
406 self
.CreateStatusBar()
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
)
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
)
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
)
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
)
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
)
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
)
445 def OnCloseWindow(self
, event
):
448 def OnToolClick(self
, event
):
449 self
.log
.WriteText("tool %s clicked\n" % event
.GetId())
451 def OnToolRClick(self
, event
):
452 self
.log
.WriteText("tool %s right-clicked\n" % event
.GetId())
455 #---------------------------------------------------------------------------
457 class TestTreeCtrlPanel(wxPanel
):
458 def __init__(self
, parent
, log
):
459 wxPanel
.__init
__(self
, parent
, -1)
464 self
.tree
= wxTreeCtrl(self
, tID
)
465 root
= self
.tree
.AddRoot("The Root Item")
467 child
= self
.tree
.AppendItem(root
, "Item %d" % x
)
469 last
= self
.tree
.AppendItem(child
, "item %d-%s" % (x
, chr(ord("a")+y
)))
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
)
477 def OnSize(self
, event
):
478 w
,h
= self
.GetClientSizeTuple()
479 self
.tree
.SetDimensions(0, 0, w
, h
)
482 def OnItemExpanded(self
, event
):
483 item
= event
.GetItem()
484 self
.log
.WriteText("OnItemExpanded: %s\n" % self
.tree
.GetItemText(item
))
486 def OnItemCollapsed(self
, event
):
487 item
= event
.GetItem()
488 self
.log
.WriteText("OnItemCollapsed: %s\n" % self
.tree
.GetItemText(item
))
490 def OnSelChanged(self
, event
):
491 item
= event
.GetItem()
492 self
.log
.WriteText("OnSelChanged: %s\n" % self
.tree
.GetItemText(item
))
497 class TestTreeCtrl(wxFrame
):
498 def __init__(self
, parent
, log
):
499 wxFrame
.__init
__(self
, parent
, -1, 'Test TreeCtrl',
500 wxDefaultPosition
, wxSize(250, 300))
502 p
= TestTreeCtrlPanel(self
, log
)
505 #---------------------------------------------------------------------------
507 class TestListCtrlPanel(wxPanel
):
508 def __init__(self
, parent
, log
):
509 wxPanel
.__init
__(self
, parent
, -1)
514 self
.il
= wxImageList(16, 16)
515 idx1
= self
.il
.Add(wxNoRefBitmap('bitmaps/smiles.bmp', wxBITMAP_TYPE_BMP
))
517 self
.list = wxListCtrl(self
, tID
, wxDefaultPosition
, wxDefaultSize
,
518 wxLC_REPORT|wxSUNKEN_BORDER
)
519 self
.list.SetImageList(self
.il
, wxIMAGE_LIST_SMALL
)
521 self
.list.SetToolTip(wxToolTip("This is a ToolTip!"))
522 wxToolTip_Enable(true
)
524 self
.list.InsertColumn(0, "Column 0")
525 self
.list.InsertColumn(1, "Column 1")
526 self
.list.InsertColumn(2, "One More Column (2)")
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
)
532 self
.list.SetColumnWidth(0, wxLIST_AUTOSIZE
)
533 self
.list.SetColumnWidth(1, wxLIST_AUTOSIZE
)
534 self
.list.SetColumnWidth(2, wxLIST_AUTOSIZE
)
537 def OnSize(self
, event
):
538 w
,h
= self
.GetClientSizeTuple()
539 self
.list.SetDimensions(0, 0, w
, h
)
544 class TestListCtrl(wxFrame
):
545 def __init__(self
, parent
, log
):
546 wxFrame
.__init
__(self
, parent
, -1, 'Test ListCtrl',
547 wxDefaultPosition
, wxSize(250, 300))
549 p
= TestListCtrlPanel(self
, log
)
552 #---------------------------------------------------------------------------
554 class TestSashWindow(wxMDIParentFrame
):
559 ID_WINDOW_LEFT1
= 5101
560 ID_WINDOW_LEFT2
= 5102
561 ID_WINDOW_BOTTOM
= 5103
564 def __init__(self
, parent
, log
):
565 wxMDIParentFrame
.__init
__(self
, parent
, -1, 'Test Sash Window',
566 wxDefaultPosition
, wxSize(250, 300))
570 menu
.Append(self
.NEW_WINDOW
, "&New Window")
571 menu
.Append(self
.TOGGLE_WINDOW
, "&Toggle window")
572 menu
.Append(self
.QUIT
, "E&xit")
574 menubar
= wxMenuBar()
575 menubar
.Append(menu
, "&File")
577 self
.SetMenuBar(menubar
)
578 self
.CreateStatusBar()
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
)
584 EVT_SASH_DRAGGED_RANGE(self
, self
.ID_WINDOW_TOP
,
585 self
.ID_WINDOW_BOTTOM
, self
.OnSashDrag
)
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
)
601 # A window like a statusbar
602 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_BOTTOM
,
603 wxDefaultPosition
, wxSize(200, 30),
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
)
611 self
.bottomWindow
= win
614 # A window to the left of the client window
615 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_LEFT1
,
616 wxDefaultPosition
, wxSize(200, 30),
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)
625 textWindow
= wxTextCtrl(win
, -1, "", wxDefaultPosition
, wxDefaultSize
,
626 wxTE_MULTILINE|wxSUNKEN_BORDER
)
627 textWindow
.SetValue("A help window")
629 self
.leftWindow1
= win
632 # Another window to the left of the client window
633 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_LEFT2
,
634 wxDefaultPosition
, wxSize(200, 30),
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
)
642 self
.leftWindow2
= win
645 def OnNewWindow(self
, event
):
648 def OnToggleWindow(self
, event
):
651 def OnQuit(self
, event
):
654 def OnSashDrag(self
, event
):
655 if event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
:
659 if eID
== self
.ID_WINDOW_TOP
:
660 self
.topWindow
.SetDefaultSize(wxSize(1000, event
.GetDragRect().height
))
662 elif eID
== self
.ID_WINDOW_LEFT1
:
663 self
.leftWindow1
.SetDefaultSize(wxSize(event
.GetDragRect().width
, 1000))
666 elif eID
== self
.ID_WINDOW_LEFT2
:
667 self
.leftWindow2
.SetDefaultSize(wxSize(event
.GetDragRect().width
, 1000))
669 elif eID
== self
.ID_WINDOW_BOTTOM
:
670 self
.bottomWindow
.SetDefaultSize(wxSize(1000, event
.GetDragRect().height
))
672 wxLayoutAlgorithm().LayoutMDIFrame(self
)
674 # Leaves bits of itself behind sometimes
675 self
.GetClientWindow().Refresh()
678 def OnSize(self
, event
):
679 wxLayoutAlgorithm().LayoutMDIFrame(self
)
681 #---------------------------------------------------------------------------
682 #---------------------------------------------------------------------------
683 #---------------------------------------------------------------------------
685 class AppFrame(wxFrame
):
686 def __init__(self
, parent
, id, title
):
687 wxFrame
.__init
__(self
, parent
, id, title
, wxDefaultPosition
,
689 if wxPlatform
== '__WXMSW__':
690 self
.icon
= wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO
)
691 self
.SetIcon(self
.icon
)
693 self
.mainmenu
= wxMenuBar()
695 menu
.Append(200, 'E&xit', 'Get the heck outta here!')
696 EVT_MENU(self
, 200, self
.OnFileExit
)
697 self
.mainmenu
.Append(menu
, '&File')
699 menu
= self
.MakeTestsMenu()
700 self
.mainmenu
.Append(menu
, '&Tests')
701 self
.SetMenuBar(self
.mainmenu
)
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')
709 def MakeTestsMenu(self
):
713 menu
.Append(mID
, '&Simple Controls')
714 EVT_MENU(self
, mID
, self
.OnTestSimpleControls
)
717 menu
.Append(mID
, '&Timer', '', true
)
718 EVT_MENU(self
, mID
, self
.OnTestTimer
)
723 menu
.Append(mID
, '&Layout Constraints')
724 EVT_MENU(self
, mID
, self
.OnTestLayoutConstraints
)
727 menu
.Append(mID
, '&Grid')
728 EVT_MENU(self
, mID
, self
.OnTestGrid
)
731 smenu
= wxMenu() # make a sub-menu
734 smenu
.Append(mID
, '&Colour')
735 EVT_MENU(self
, mID
, self
.OnTestColourDlg
)
738 smenu
.Append(mID
, '&Directory')
739 EVT_MENU(self
, mID
, self
.OnTestDirDlg
)
742 smenu
.Append(mID
, '&File')
743 EVT_MENU(self
, mID
, self
.OnTestFileDlg
)
746 smenu
.Append(mID
, '&Single Choice')
747 EVT_MENU(self
, mID
, self
.OnTestSingleChoiceDlg
)
750 smenu
.Append(mID
, '&TextEntry')
751 EVT_MENU(self
, mID
, self
.OnTestTextEntryDlg
)
754 smenu
.Append(mID
, '&Font')
755 EVT_MENU(self
, mID
, self
.OnTestFontDlg
)
758 smenu
.Append(mID
, '&PageSetup')
759 EVT_MENU(self
, mID
, self
.OnTestPageSetupDlg
)
762 smenu
.Append(mID
, '&Print')
763 EVT_MENU(self
, mID
, self
.OnTestPrintDlg
)
766 smenu
.Append(mID
, '&Message')
767 EVT_MENU(self
, mID
, self
.OnTestMessageDlg
)
770 menu
.AppendMenu(NewId(), '&Common Dialogs', smenu
)
774 menu
.Append(mID
, '&Notebook')
775 EVT_MENU(self
, mID
, self
.OnTestNotebook
)
778 menu
.Append(mID
, '&Splitter Window')
779 EVT_MENU(self
, mID
, self
.OnTestSplitter
)
782 menu
.Append(mID
, '&Custom StatusBar')
783 EVT_MENU(self
, mID
, self
.OnTestCustomStatusBar
)
786 menu
.Append(mID
, '&ToolBar')
787 EVT_MENU(self
, mID
, self
.OnTestToolBar
)
790 menu
.Append(mID
, 'T&ree Control')
791 EVT_MENU(self
, mID
, self
.OnTestTreeCtrl
)
794 menu
.Append(mID
, '&List Control')
795 EVT_MENU(self
, mID
, self
.OnTestListCtrl
)
798 menu
.Append(mID
, 'S&ash Window and Layout Algorithm')
799 EVT_MENU(self
, mID
, self
.OnTestSashWindow
)
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))
814 def OnFileExit(self
, event
):
817 def OnCloseWindow(self
, event
):
823 def OnTestSimpleControls(self
, event
):
824 dlg
= TestSimpleControlsDlg(self
, self
)
829 def OnTestTimer(self
, event
):
831 self
.mainmenu
.Check(self
.timerID
, false
)
835 self
.mainmenu
.Check(self
.timerID
, true
)
836 self
.timer
= TestTimer(self
)
837 self
.timer
.Start(1000)
839 def OnTestLayoutConstraints(self
, event
):
840 win
= TestLayoutConstraints(self
)
843 def OnTestGrid(self
, event
):
844 win
= TestGrid(self
, self
)
846 win
.SetSize(wxSize(505, 300)) # have to force a resize, or the grid doesn't
847 # show up for some reason....
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()))
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())
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())
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())
878 def OnTestTextEntryDlg(self
, event
):
879 dlg
= wxTextEntryDialog(self
, 'What is your favorite programming language?',
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())
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()))
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
)))
910 def OnTestPrintDlg(self
, event
):
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')
920 def OnTestMessageDlg(self
, event
):
921 dlg
= wxMessageDialog(self
, 'Hello from Python and wxWindows!',
922 'A Message Box', wxOK | wxICON_INFORMATION
)
927 def OnTestNotebook(self
, event
):
928 win
= TestNotebookWindow(self
, self
)
931 def OnTestSplitter(self
, event
):
932 win
= TestSplitterWindow(self
)
935 def OnTestCustomStatusBar(self
, event
):
936 win
= TestCustomStatusBar(self
)
939 def OnTestToolBar(self
, event
):
940 win
= TestToolBar(self
, self
)
943 def OnTestTreeCtrl(self
, event
):
944 win
= TestTreeCtrl(self
, self
)
947 def OnTestListCtrl(self
, event
):
948 win
= TestListCtrl(self
, self
)
951 def OnTestSashWindow(self
, event
):
952 win
= TestSashWindow(self
, self
)
955 #---------------------------------------------------------------------------
960 frame
= AppFrame(NULL
, -1, "Test 4: (lots of little tests...)")
962 self
.SetTopWindow(frame
)
965 #---------------------------------------------------------------------------
978 # for focused testing...
982 frame
= TestLayoutConstraints(NULL
)
984 self
.SetTopWindow(frame
)
996 if __name__
== '__main__':
1000 #----------------------------------------------------------------------------
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.
1008 # Added wxImageList, wxToolTip.
1010 # Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
1011 # wxRegConfig class.
1013 # As usual, some bug fixes, tweaks, etc.
1015 # Revision 1.12 1999/01/30 07:31:33 RD
1017 # Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc.
1019 # Various cleanup, tweaks, minor additions, etc. to maintain
1020 # compatibility with the current wxWindows.
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.
1026 # Revision 1.10 1998/12/16 22:12:47 RD
1028 # Tweaks needed to be able to build wxPython with wxGTK.
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."
1036 # Added wxTaskbarIcon for wxMSW.
1038 # Made the events work for wxGrid.
1042 # Added wxMiniFrame for wxGTK, (untested.)
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.
1047 # Other assorted fixes and additions.
1049 # Revision 1.8 1998/11/25 08:47:11 RD
1051 # Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon
1052 # Added events for wxGrid
1053 # Other various fixes and additions
1055 # Revision 1.7 1998/11/11 03:13:19 RD
1057 # Additions for wxTreeCtrl
1059 # Revision 1.6 1998/10/20 06:45:33 RD
1060 # New wxTreeCtrl wrappers (untested)
1061 # some changes in helpers
1064 # Revision 1.5 1998/10/02 06:42:28 RD
1066 # Version 0.4 of wxPython for MSW.
1068 # Revision 1.4 1998/08/27 21:59:51 RD
1069 # Some chicken-and-egg problems solved for wxPython on wxGTK
1071 # Revision 1.3 1998/08/27 00:01:17 RD
1073 # - have discovered some problems but not yet discovered solutions...
1075 # Revision 1.2 1998/08/22 19:51:18 RD
1076 # some tweaks for wxGTK
1078 # Revision 1.1 1998/08/09 08:28:05 RD