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
= ColoredPanel(nb
, wxRED
)
275 nb
.AddPage(win
, "Red")
277 win
= ColoredPanel(nb
, wxGREEN
)
278 nb
.AddPage(win
, "Green")
280 win
= ColoredPanel(nb
, wxCYAN
)
281 nb
.AddPage(win
, "Cyan")
283 win
= ColoredPanel(nb
, wxWHITE
)
284 nb
.AddPage(win
, "White")
286 win
= ColoredPanel(nb
, wxBLACK
)
287 nb
.AddPage(win
, "Black")
289 win
= ColoredPanel(nb
, wxNamedColour('MIDNIGHT BLUE'))
290 nb
.AddPage(win
, "MIDNIGHT BLUE")
292 win
= ColoredPanel(nb
, wxNamedColour('INDIAN RED'))
293 nb
.AddPage(win
, "INDIAN RED")
297 self
.SetSize(wxSize(350, 300)) # force a redraw so the notebook will draw
300 def OnCloseWindow(self
, event
):
303 #---------------------------------------------------------------------------
305 class TestSplitterWindow(wxFrame
):
306 def __init__(self
, parent
):
307 wxFrame
.__init
__(self
, parent
, -1, 'Test wxSplitterWindow',
308 wxDefaultPosition
, wxSize(500, 300))
310 splitter
= wxSplitterWindow(self
, -1)
312 p1
= ColoredPanel(splitter
, wxRED
)
313 wxStaticText(p1
, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED
)
315 p2
= ColoredPanel(splitter
, wxBLUE
)
316 wxStaticText(p2
, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE
)
318 splitter
.SplitVertically(p1
, p2
)
321 def OnCloseWindow(self
, event
):
325 #---------------------------------------------------------------------------
327 class CustomStatusBar(wxStatusBar
):
328 def __init__(self
, parent
):
329 wxStatusBar
.__init
__(self
, parent
, -1)
330 self
.SetFieldsCount(3)
332 self
.SetStatusText("A Custom StatusBar...", 0)
334 self
.cb
= wxCheckBox(self
, 1001, "toggle clock")
335 EVT_CHECKBOX(self
, 1001, self
.OnToggleClock
)
336 self
.cb
.SetValue(true
)
338 # figure out how tall to make it.
339 dc
= wxClientDC(self
)
340 dc
.SetFont(self
.GetFont())
341 (w
,h
, d
,e
) = dc
.GetTextExtent('X')
343 self
.SetSize(wxSize(100, h
))
346 self
.timer
= wxPyTimer(self
.Notify
)
347 self
.timer
.Start(1000)
353 t
= time
.localtime(time
.time())
354 st
= time
.strftime("%d-%b-%Y %I:%M:%S", t
)
355 self
.SetStatusText(st
, 2)
357 # the checkbox was clicked
358 def OnToggleClock(self
, event
):
359 if self
.cb
.GetValue():
360 self
.timer
.Start(1000)
365 # reposition the checkbox
366 def OnSize(self
, event
):
367 rect
= self
.GetFieldRect(1)
368 print "%s, %s" % (rect
.x
, rect
.y
)
369 self
.cb
.SetPosition(wxPoint(rect
.x
+2, rect
.y
+2))
370 self
.cb
.SetSize(wxSize(rect
.width
-4, rect
.height
-4))
374 class TestCustomStatusBar(wxFrame
):
375 def __init__(self
, parent
):
376 wxFrame
.__init
__(self
, parent
, -1, 'Test Custom StatusBar',
377 wxDefaultPosition
, wxSize(500, 300))
378 wxWindow(self
, -1).SetBackgroundColour(wxNamedColour("WHITE"))
380 self
.sb
= CustomStatusBar(self
)
381 self
.SetStatusBar(self
.sb
)
383 def OnCloseWindow(self
, event
):
388 #---------------------------------------------------------------------------
390 class TestToolBar(wxFrame
):
391 def __init__(self
, parent
, log
):
392 wxFrame
.__init
__(self
, parent
, -1, 'Test ToolBar',
393 wxDefaultPosition
, wxSize(500, 300))
396 wxWindow(self
, -1).SetBackgroundColour(wxNamedColour("WHITE"))
398 tb
= self
.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER
)
399 #tb = wxToolBar(self, -1, wxDefaultPosition, wxDefaultSize,
400 # wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT)
403 self
.CreateStatusBar()
405 tb
.AddTool(10, wxNoRefBitmap('bitmaps/new.bmp', wxBITMAP_TYPE_BMP
),
406 wxNullBitmap
, false
, -1, -1, "New", "Long help for 'New'")
407 EVT_TOOL(self
, 10, self
.OnToolClick
)
408 EVT_TOOL_RCLICKED(self
, 10, self
.OnToolRClick
)
410 tb
.AddTool(20, wxNoRefBitmap('bitmaps/open.bmp', wxBITMAP_TYPE_BMP
),
411 wxNullBitmap
, false
, -1, -1, "Open")
412 EVT_TOOL(self
, 20, self
.OnToolClick
)
413 EVT_TOOL_RCLICKED(self
, 20, self
.OnToolRClick
)
416 tb
.AddTool(30, wxNoRefBitmap('bitmaps/copy.bmp', wxBITMAP_TYPE_BMP
),
417 wxNullBitmap
, false
, -1, -1, "Copy")
418 EVT_TOOL(self
, 30, self
.OnToolClick
)
419 EVT_TOOL_RCLICKED(self
, 30, self
.OnToolRClick
)
421 tb
.AddTool(40, wxNoRefBitmap('bitmaps/paste.bmp', wxBITMAP_TYPE_BMP
),
422 wxNullBitmap
, false
, -1, -1, "Paste")
423 EVT_TOOL(self
, 40, self
.OnToolClick
)
424 EVT_TOOL_RCLICKED(self
, 40, self
.OnToolRClick
)
428 tb
.AddTool(50, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP
),
429 wxNullBitmap
, true
, -1, -1, "Toggle this")
430 EVT_TOOL(self
, 50, self
.OnToolClick
)
431 EVT_TOOL_RCLICKED(self
, 50, self
.OnToolRClick
)
433 tb
.AddTool(60, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP
),
434 wxNoRefBitmap('bitmaps/tog2.bmp', wxBITMAP_TYPE_BMP
),
435 true
, -1, -1, "Toggle with 2 bitmaps")
436 EVT_TOOL(self
, 60, self
.OnToolClick
)
437 EVT_TOOL_RCLICKED(self
, 60, self
.OnToolRClick
)
442 def OnCloseWindow(self
, event
):
445 def OnToolClick(self
, event
):
446 self
.log
.WriteText("tool %s clicked\n" % event
.GetId())
448 def OnToolRClick(self
, event
):
449 self
.log
.WriteText("tool %s right-clicked\n" % event
.GetId())
452 #---------------------------------------------------------------------------
454 class TestTreeCtrlPanel(wxPanel
):
455 def __init__(self
, parent
, log
):
456 wxPanel
.__init
__(self
, parent
, -1)
461 self
.tree
= wxTreeCtrl(self
, tID
)
462 root
= self
.tree
.AddRoot("The Root Item")
464 child
= self
.tree
.AppendItem(root
, "Item %d" % x
)
466 last
= self
.tree
.AppendItem(child
, "item %d-%s" % (x
, chr(ord("a")+y
)))
468 self
.tree
.Expand(root
)
469 EVT_TREE_ITEM_EXPANDED (self
, tID
, self
.OnItemExpanded
)
470 EVT_TREE_ITEM_COLLAPSED (self
, tID
, self
.OnItemCollapsed
)
471 EVT_TREE_SEL_CHANGED (self
, tID
, self
.OnSelChanged
)
474 def OnSize(self
, event
):
475 w
,h
= self
.GetClientSizeTuple()
476 self
.tree
.SetDimensions(0, 0, w
, h
)
479 def OnItemExpanded(self
, event
):
480 item
= event
.GetItem()
481 self
.log
.WriteText("OnItemExpanded: %s\n" % self
.tree
.GetItemText(item
))
483 def OnItemCollapsed(self
, event
):
484 item
= event
.GetItem()
485 self
.log
.WriteText("OnItemCollapsed: %s\n" % self
.tree
.GetItemText(item
))
487 def OnSelChanged(self
, event
):
488 item
= event
.GetItem()
489 self
.log
.WriteText("OnSelChanged: %s\n" % self
.tree
.GetItemText(item
))
494 class TestTreeCtrl(wxFrame
):
495 def __init__(self
, parent
, log
):
496 wxFrame
.__init
__(self
, parent
, -1, 'Test TreeCtrl',
497 wxDefaultPosition
, wxSize(250, 300))
499 p
= TestTreeCtrlPanel(self
, log
)
502 #---------------------------------------------------------------------------
504 class TestSashWindow(wxMDIParentFrame
):
509 ID_WINDOW_LEFT1
= 5101
510 ID_WINDOW_LEFT2
= 5102
511 ID_WINDOW_BOTTOM
= 5103
514 def __init__(self
, parent
, log
):
515 wxMDIParentFrame
.__init
__(self
, parent
, -1, 'Test Sash Window',
516 wxDefaultPosition
, wxSize(250, 300))
520 menu
.Append(self
.NEW_WINDOW
, "&New Window")
521 menu
.Append(self
.TOGGLE_WINDOW
, "&Toggle window")
522 menu
.Append(self
.QUIT
, "E&xit")
524 menubar
= wxMenuBar()
525 menubar
.Append(menu
, "&File")
527 self
.SetMenuBar(menubar
)
528 self
.CreateStatusBar()
530 EVT_MENU(self
, self
.NEW_WINDOW
, self
.OnNewWindow
)
531 EVT_MENU(self
, self
.TOGGLE_WINDOW
, self
.OnToggleWindow
)
532 EVT_MENU(self
, self
.QUIT
, self
.OnQuit
)
534 EVT_SASH_DRAGGED_RANGE(self
, self
.ID_WINDOW_TOP
,
535 self
.ID_WINDOW_BOTTOM
, self
.OnSashDrag
)
538 # Create some layout windows
539 # A window like a toolbar
540 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_TOP
, wxDefaultPosition
,
541 wxSize(200, 30), wxNO_BORDER|wxSW_3D
)
542 win
.SetDefaultSize(wxSize(1000, 30))
543 win
.SetOrientation(wxLAYOUT_HORIZONTAL
)
544 win
.SetAlignment(wxLAYOUT_TOP
)
545 win
.SetBackgroundColour(wxColour(255, 0, 0))
546 win
.SetSashVisible(wxSASH_BOTTOM
, true
)
551 # A window like a statusbar
552 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_BOTTOM
,
553 wxDefaultPosition
, wxSize(200, 30),
555 win
.SetDefaultSize(wxSize(1000, 30))
556 win
.SetOrientation(wxLAYOUT_HORIZONTAL
)
557 win
.SetAlignment(wxLAYOUT_BOTTOM
)
558 win
.SetBackgroundColour(wxColour(0, 0, 255))
559 win
.SetSashVisible(wxSASH_TOP
, true
)
561 self
.bottomWindow
= win
564 # A window to the left of the client window
565 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_LEFT1
,
566 wxDefaultPosition
, wxSize(200, 30),
568 win
.SetDefaultSize(wxSize(120, 1000))
569 win
.SetOrientation(wxLAYOUT_VERTICAL
)
570 win
.SetAlignment(wxLAYOUT_LEFT
)
571 win
.SetBackgroundColour(wxColour(0, 255, 0))
572 win
.SetSashVisible(wxSASH_RIGHT
, TRUE
)
573 win
.SetExtraBorderSize(10)
575 textWindow
= wxTextCtrl(win
, -1, "", wxDefaultPosition
, wxDefaultSize
,
576 wxTE_MULTILINE|wxSUNKEN_BORDER
)
577 textWindow
.SetValue("A help window")
579 self
.leftWindow1
= win
582 # Another window to the left of the client window
583 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_LEFT2
,
584 wxDefaultPosition
, wxSize(200, 30),
586 win
.SetDefaultSize(wxSize(120, 1000))
587 win
.SetOrientation(wxLAYOUT_VERTICAL
)
588 win
.SetAlignment(wxLAYOUT_LEFT
)
589 win
.SetBackgroundColour(wxColour(0, 255, 255))
590 win
.SetSashVisible(wxSASH_RIGHT
, TRUE
)
592 self
.leftWindow2
= win
595 def OnNewWindow(self
, event
):
598 def OnToggleWindow(self
, event
):
601 def OnQuit(self
, event
):
604 def OnSashDrag(self
, event
):
605 if event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
:
609 if eID
== self
.ID_WINDOW_TOP
:
610 self
.topWindow
.SetDefaultSize(wxSize(1000, event
.GetDragRect().height
))
612 elif eID
== self
.ID_WINDOW_LEFT1
:
613 self
.leftWindow1
.SetDefaultSize(wxSize(event
.GetDragRect().width
, 1000))
616 elif eID
== self
.ID_WINDOW_LEFT2
:
617 self
.leftWindow2
.SetDefaultSize(wxSize(event
.GetDragRect().width
, 1000))
619 elif eID
== self
.ID_WINDOW_BOTTOM
:
620 self
.bottomWindow
.SetDefaultSize(wxSize(1000, event
.GetDragRect().height
))
622 wxLayoutAlgorithm().LayoutMDIFrame(self
)
624 # Leaves bits of itself behind sometimes
625 self
.GetClientWindow().Refresh()
628 def OnSize(self
, event
):
629 wxLayoutAlgorithm().LayoutMDIFrame(self
)
631 #---------------------------------------------------------------------------
632 #---------------------------------------------------------------------------
633 #---------------------------------------------------------------------------
635 class AppFrame(wxFrame
):
636 def __init__(self
, parent
, id, title
):
637 wxFrame
.__init
__(self
, parent
, id, title
, wxDefaultPosition
,
639 if wxPlatform
== '__WXMSW__':
640 self
.icon
= wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO
)
641 self
.SetIcon(self
.icon
)
643 self
.mainmenu
= wxMenuBar()
645 menu
.Append(200, 'E&xit', 'Get the heck outta here!')
646 EVT_MENU(self
, 200, self
.OnFileExit
)
647 self
.mainmenu
.Append(menu
, '&File')
649 menu
= self
.MakeTestsMenu()
650 self
.mainmenu
.Append(menu
, '&Tests')
651 self
.SetMenuBar(self
.mainmenu
)
653 self
.log
= wxTextCtrl(self
, -1, '', wxDefaultPosition
, wxDefaultSize
,
654 wxTE_MULTILINE|wxTE_READONLY
)
655 self
.log
.WriteText('Test 4:\n')
656 (w
, self
.charHeight
) = self
.log
.GetTextExtent('X')
659 def MakeTestsMenu(self
):
663 menu
.Append(mID
, '&Simple Controls')
664 EVT_MENU(self
, mID
, self
.OnTestSimpleControls
)
667 menu
.Append(mID
, '&Timer', '', true
)
668 EVT_MENU(self
, mID
, self
.OnTestTimer
)
673 menu
.Append(mID
, '&Layout Constraints')
674 EVT_MENU(self
, mID
, self
.OnTestLayoutConstraints
)
677 menu
.Append(mID
, '&Grid')
678 EVT_MENU(self
, mID
, self
.OnTestGrid
)
681 smenu
= wxMenu() # make a sub-menu
684 smenu
.Append(mID
, '&Colour')
685 EVT_MENU(self
, mID
, self
.OnTestColourDlg
)
688 smenu
.Append(mID
, '&Directory')
689 EVT_MENU(self
, mID
, self
.OnTestDirDlg
)
692 smenu
.Append(mID
, '&File')
693 EVT_MENU(self
, mID
, self
.OnTestFileDlg
)
696 smenu
.Append(mID
, '&Single Choice')
697 EVT_MENU(self
, mID
, self
.OnTestSingleChoiceDlg
)
700 smenu
.Append(mID
, '&TextEntry')
701 EVT_MENU(self
, mID
, self
.OnTestTextEntryDlg
)
704 smenu
.Append(mID
, '&Font')
705 EVT_MENU(self
, mID
, self
.OnTestFontDlg
)
708 smenu
.Append(mID
, '&PageSetup')
709 EVT_MENU(self
, mID
, self
.OnTestPageSetupDlg
)
712 smenu
.Append(mID
, '&Print')
713 EVT_MENU(self
, mID
, self
.OnTestPrintDlg
)
716 smenu
.Append(mID
, '&Message')
717 EVT_MENU(self
, mID
, self
.OnTestMessageDlg
)
720 menu
.AppendMenu(NewId(), '&Common Dialogs', smenu
)
724 menu
.Append(mID
, '&Notebook')
725 EVT_MENU(self
, mID
, self
.OnTestNotebook
)
728 menu
.Append(mID
, '&Splitter Window')
729 EVT_MENU(self
, mID
, self
.OnTestSplitter
)
732 menu
.Append(mID
, '&Custom StatusBar')
733 EVT_MENU(self
, mID
, self
.OnTestCustomStatusBar
)
736 menu
.Append(mID
, '&ToolBar')
737 EVT_MENU(self
, mID
, self
.OnTestToolBar
)
740 menu
.Append(mID
, 'T&ree Control')
741 EVT_MENU(self
, mID
, self
.OnTestTreeCtrl
)
744 menu
.Append(mID
, 'S&ash Window and Layout Algorithm')
745 EVT_MENU(self
, mID
, self
.OnTestSashWindow
)
752 def WriteText(self
, str):
753 self
.log
.WriteText(str)
754 if wxPlatform
== '__WXMSW__':
755 w
, h
= self
.log
.GetClientSizeTuple()
756 numLines
= h
/self
.charHeight
757 x
, y
= self
.log
.PositionToXY(self
.log
.GetLastPosition())
758 self
.log
.ShowPosition(self
.log
.XYToPosition(x
, y
-numLines
+1))
760 def OnFileExit(self
, event
):
763 def OnCloseWindow(self
, event
):
769 def OnTestSimpleControls(self
, event
):
770 dlg
= TestSimpleControlsDlg(self
, self
)
775 def OnTestTimer(self
, event
):
777 self
.mainmenu
.Check(self
.timerID
, false
)
781 self
.mainmenu
.Check(self
.timerID
, true
)
782 self
.timer
= TestTimer(self
)
783 self
.timer
.Start(1000)
785 def OnTestLayoutConstraints(self
, event
):
786 win
= TestLayoutConstraints(self
)
789 def OnTestGrid(self
, event
):
790 win
= TestGrid(self
, self
)
792 win
.SetSize(wxSize(505, 300)) # have to force a resize, or the grid doesn't
793 # show up for some reason....
795 def OnTestColourDlg(self
, event
):
796 data
= wxColourData()
797 data
.SetChooseFull(true
)
798 dlg
= wxColourDialog(self
, data
)
799 if dlg
.ShowModal() == wxID_OK
:
800 data
= dlg
.GetColourData()
801 self
.log
.WriteText('You selected: %s\n' % str(data
.GetColour().Get()))
804 def OnTestDirDlg(self
, event
):
805 dlg
= wxDirDialog(self
)
806 if dlg
.ShowModal() == wxID_OK
:
807 self
.log
.WriteText('You selected: %s\n' % dlg
.GetPath())
810 def OnTestFileDlg(self
, event
):
811 dlg
= wxFileDialog(self
, "Choose a file", ".", "", "*.*", wxOPEN
)
812 if dlg
.ShowModal() == wxID_OK
:
813 self
.log
.WriteText('You selected: %s\n' % dlg
.GetPath())
816 def OnTestSingleChoiceDlg(self
, event
):
817 dlg
= wxSingleChoiceDialog(self
, 'Test Single Choice', 'The Caption',
818 ['zero', 'one', 'two', 'three', 'four', 'five',
819 'six', 'seven', 'eight'])
820 if dlg
.ShowModal() == wxID_OK
:
821 self
.log
.WriteText('You selected: %s\n' % dlg
.GetStringSelection())
824 def OnTestTextEntryDlg(self
, event
):
825 dlg
= wxTextEntryDialog(self
, 'What is your favorite programming language?',
827 #dlg.SetValue("Python is the best!") #### this doesn't work?
828 if dlg
.ShowModal() == wxID_OK
:
829 self
.log
.WriteText('You entered: %s\n' % dlg
.GetValue())
833 def OnTestFontDlg(self
, event
):
834 dlg
= wxFontDialog(self
)
835 if dlg
.ShowModal() == wxID_OK
:
836 data
= dlg
.GetFontData()
837 font
= data
.GetChosenFont()
838 self
.log
.WriteText('You selected: "%s", %d points, color %s\n' %
839 (font
.GetFaceName(), font
.GetPointSize(),
840 data
.GetColour().Get()))
844 def OnTestPageSetupDlg(self
, event
):
845 data
= wxPageSetupData()
846 data
.SetMarginTopLeft(wxPoint(50,50))
847 data
.SetMarginBottomRight(wxPoint(50,50))
848 dlg
= wxPageSetupDialog(self
, data
)
849 if dlg
.ShowModal() == wxID_OK
:
850 data
= dlg
.GetPageSetupData()
851 tl
= data
.GetMarginTopLeft()
852 br
= data
.GetMarginBottomRight()
853 self
.log
.WriteText('Margins are: %s %s\n' % (str(tl
), str(br
)))
856 def OnTestPrintDlg(self
, event
):
858 data
.EnablePrintToFile(true
)
859 data
.EnablePageNumbers(true
)
860 data
.EnableSelection(true
)
861 dlg
= wxPrintDialog(self
, data
)
862 if dlg
.ShowModal() == wxID_OK
:
863 self
.log
.WriteText('\n')
866 def OnTestMessageDlg(self
, event
):
867 dlg
= wxMessageDialog(self
, 'Hello from Python and wxWindows!',
868 'A Message Box', wxOK | wxICON_INFORMATION
)
873 def OnTestNotebook(self
, event
):
874 win
= TestNotebookWindow(self
, self
)
877 def OnTestSplitter(self
, event
):
878 win
= TestSplitterWindow(self
)
881 def OnTestCustomStatusBar(self
, event
):
882 win
= TestCustomStatusBar(self
)
885 def OnTestToolBar(self
, event
):
886 win
= TestToolBar(self
, self
)
889 def OnTestTreeCtrl(self
, event
):
890 win
= TestTreeCtrl(self
, self
)
893 def OnTestSashWindow(self
, event
):
894 win
= TestSashWindow(self
, self
)
897 #---------------------------------------------------------------------------
902 frame
= AppFrame(NULL
, -1, "Test 4: (lots of little tests...)")
904 self
.SetTopWindow(frame
)
907 #---------------------------------------------------------------------------
920 # for focused testing...
924 frame
= TestLayoutConstraints(NULL
)
926 self
.SetTopWindow(frame
)
938 if __name__
== '__main__':
942 #----------------------------------------------------------------------------
945 # Revision 1.12 1999/01/30 07:31:33 RD
946 # Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc.
948 # Various cleanup, tweaks, minor additions, etc. to maintain
949 # compatibility with the current wxWindows.
951 # Revision 1.11 1999/01/29 16:17:59 HH
952 # In test4's toolbar sample, changed NULL to wxNullBitmap to prevent SIGSEVS
953 # with wxGTK. The sample works now.
955 # Revision 1.10 1998/12/16 22:12:47 RD
957 # Tweaks needed to be able to build wxPython with wxGTK.
959 # Revision 1.9 1998/12/15 20:44:35 RD
960 # Changed the import semantics from "from wxPython import *" to "from
961 # wxPython.wx import *" This is for people who are worried about
962 # namespace pollution, they can use "from wxPython import wx" and then
963 # prefix all the wxPython identifiers with "wx."
965 # Added wxTaskbarIcon for wxMSW.
967 # Made the events work for wxGrid.
971 # Added wxMiniFrame for wxGTK, (untested.)
973 # Changed many of the args and return values that were pointers to gdi
974 # objects to references to reflect changes in the wxWindows API.
976 # Other assorted fixes and additions.
978 # Revision 1.8 1998/11/25 08:47:11 RD
980 # Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon
981 # Added events for wxGrid
982 # Other various fixes and additions
984 # Revision 1.7 1998/11/11 03:13:19 RD
986 # Additions for wxTreeCtrl
988 # Revision 1.6 1998/10/20 06:45:33 RD
989 # New wxTreeCtrl wrappers (untested)
990 # some changes in helpers
993 # Revision 1.5 1998/10/02 06:42:28 RD
995 # Version 0.4 of wxPython for MSW.
997 # Revision 1.4 1998/08/27 21:59:51 RD
998 # Some chicken-and-egg problems solved for wxPython on wxGTK
1000 # Revision 1.3 1998/08/27 00:01:17 RD
1002 # - have discovered some problems but not yet discovered solutions...
1004 # Revision 1.2 1998/08/22 19:51:18 RD
1005 # some tweaks for wxGTK
1007 # Revision 1.1 1998/08/09 08:28:05 RD