#!/bin/env python #---------------------------------------------------------------------------- # Name: test4.py # Purpose: Testing lots of stuff, controls, window types, etc. # # Author: Robin Dunn # # Created: # RCS-ID: $Id$ # Copyright: (c) 1998 by Total Control Software # Licence: wxWindows license #---------------------------------------------------------------------------- from wxPython.wx import * import time #--------------------------------------------------------------------------- class TestSimpleControlsDlg(wxDialog): def __init__(self, parent, log): self.log = log wxDialog.__init__(self, parent, -1, "Test Simple Controls", wxDefaultPosition, wxSize(350, 400)) sampleList = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"] y_pos = 5 delta = 25 wxStaticText(self, -1, "wxTextCtrl", wxPoint(5, y_pos), wxSize(75, 20)) wxTextCtrl(self, 10, "", wxPoint(80, y_pos), wxSize(150, 20)) EVT_TEXT(self, 10, self.EvtText) y_pos = y_pos + delta wxCheckBox(self, 20, "wxCheckBox", wxPoint(80, y_pos), wxSize(150, 20), wxNO_BORDER) EVT_CHECKBOX(self, 20, self.EvtCheckBox) y_pos = y_pos + delta rb = wxRadioBox(self, 30, "wxRadioBox", wxPoint(80, y_pos), wxDefaultSize, sampleList, 3, wxRA_SPECIFY_COLS | wxNO_BORDER) EVT_RADIOBOX(self, 30, self.EvtRadioBox) width, height = rb.GetSizeTuple() y_pos = y_pos + height + 5 wxStaticText(self, -1, "wxChoice", wxPoint(5, y_pos), wxSize(75, 20)) wxChoice(self, 40, wxPoint(80, y_pos), wxSize(95, 20), #wxDefaultSize, sampleList) EVT_CHOICE(self, 40, self.EvtChoice) y_pos = y_pos + delta wxStaticText(self, -1, "wxComboBox", wxPoint(5, y_pos), wxSize(75, 18)) wxComboBox(self, 50, "default value", wxPoint(80, y_pos), wxSize(95, -1), sampleList, wxCB_DROPDOWN) EVT_COMBOBOX(self, 50, self.EvtComboBox) y_pos = y_pos + delta wxStaticText(self, -1, "wxListBox", wxPoint(5, y_pos), wxSize(75, 18)) lb = wxListBox(self, 60, wxPoint(80, y_pos), wxSize(95, 80), sampleList, wxLB_SINGLE) EVT_LISTBOX(self, 60, self.EvtListBox) EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick) lb.SetSelection(0) width, height = lb.GetSizeTuple() y_pos = y_pos + height + 5 y_pos = y_pos + 15 wxButton(self, wxID_OK, ' OK ', wxPoint(80, y_pos), wxDefaultSize).SetDefault() wxButton(self, wxID_CANCEL, ' Cancel ', wxPoint(140, y_pos)) def EvtText(self, event): self.log.WriteText('EvtText: %s\n' % event.GetString()) def EvtCheckBox(self, event): self.log.WriteText('EvtCheckBox: %d\n' % event.GetInt()) def EvtRadioBox(self, event): self.log.WriteText('EvtRadioBox: %d\n' % event.GetInt()) def EvtChoice(self, event): self.log.WriteText('EvtChoice: %s\n' % event.GetString()) def EvtComboBox(self, event): self.log.WriteText('EvtComboBox: %s\n' % event.GetString()) def EvtListBox(self, event): self.log.WriteText('EvtListBox: %s\n' % event.GetString()) def EvtListBoxDClick(self, event): self.log.WriteText('EvtListBoxDClick:\n') #--------------------------------------------------------------------------- class TestTimer(wxTimer): def __init__(self, log): wxTimer.__init__(self) self.log = log def Notify(self): wxBell() self.log.WriteText('beep!\n') #--------------------------------------------------------------------------- class TestLayoutConstraints(wxFrame): def __init__(self, parent): wxFrame.__init__(self, parent, -1, 'Test Layout Constraints', wxDefaultPosition, wxSize(500, 300)) self.SetAutoLayout(true) EVT_BUTTON(self, 100, self.OnButton) self.panelA = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER) self.panelA.SetBackgroundColour(wxBLUE) lc = wxLayoutConstraints() lc.top.SameAs(self, wxTop, 10) lc.left.SameAs(self, wxLeft, 10) lc.bottom.SameAs(self, wxBottom, 10) lc.right.PercentOf(self, wxRight, 50) self.panelA.SetConstraints(lc) self.panelB = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER) self.panelB.SetBackgroundColour(wxRED) lc = wxLayoutConstraints() lc.top.SameAs(self, wxTop, 10) lc.right.SameAs(self, wxRight, 10) lc.bottom.PercentOf(self, wxBottom, 30) lc.left.RightOf(self.panelA, 10) self.panelB.SetConstraints(lc) self.panelC = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER) self.panelC.SetBackgroundColour(wxWHITE) lc = wxLayoutConstraints() lc.top.Below(self.panelB, 10) lc.right.SameAs(self, wxRight, 10) lc.bottom.SameAs(self, wxBottom, 10) lc.left.RightOf(self.panelA, 10) self.panelC.SetConstraints(lc) b = wxButton(self.panelA, 100, ' Panel A ') lc = wxLayoutConstraints() lc.centreX.SameAs (self.panelA, wxCentreX) lc.centreY.SameAs (self.panelA, wxCentreY) lc.height.AsIs () lc.width.PercentOf (self.panelA, wxWidth, 50) b.SetConstraints(lc); b = wxButton(self.panelB, 100, ' Panel B ') lc = wxLayoutConstraints() lc.top.SameAs (self.panelB, wxTop, 2) lc.right.SameAs (self.panelB, wxRight, 4) lc.height.AsIs () lc.width.AsIs () b.SetConstraints(lc); self.panelD = wxWindow(self.panelC, -1, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER) self.panelD.SetBackgroundColour(wxGREEN) wxStaticText(self.panelD, -1, "Panel D", wxPoint(4, 4)).SetBackgroundColour(wxGREEN) b = wxButton(self.panelC, 100, ' Panel C ') lc = wxLayoutConstraints() lc.top.Below (self.panelD) lc.left.RightOf (self.panelD) lc.height.AsIs () lc.width.AsIs () b.SetConstraints(lc); lc = wxLayoutConstraints() lc.bottom.PercentOf (self.panelC, wxHeight, 50) lc.right.PercentOf (self.panelC, wxWidth, 50) lc.height.SameAs (b, wxHeight) lc.width.SameAs (b, wxWidth) self.panelD.SetConstraints(lc); def OnButton(self, event): self.Close(true) def OnCloseWindow(self, event): self.Destroy() #--------------------------------------------------------------------------- class TestGrid(wxFrame): def __init__(self, parent, log): wxFrame.__init__(self, parent, -1, 'Test Grid', wxDefaultPosition, wxSize(500, 300)) self.log = log grid = wxGrid(self, -1) grid.CreateGrid(16, 16) grid.SetColumnWidth(3, 200) grid.SetRowHeight(4, 45) grid.SetCellValue("First cell", 0, 0) grid.SetCellValue("Another cell", 1, 1) grid.SetCellValue("Yet another cell", 2, 2) grid.SetCellTextFont(wxFont(12, wxROMAN, wxITALIC, wxNORMAL), 0, 0) grid.SetCellTextColour(wxRED, 1, 1) grid.SetCellBackgroundColour(wxCYAN, 2, 2) grid.UpdateDimensions() grid.AdjustScrollbars() EVT_GRID_SELECT_CELL(grid, self.OnSelectCell) EVT_GRID_CELL_CHANGE(grid, self.OnCellChange) EVT_GRID_CELL_LCLICK(grid, self.OnCellClick) EVT_GRID_LABEL_LCLICK(grid, self.OnLabelClick) def OnCloseWindow(self, event): self.Destroy() def OnSelectCell(self, event): self.log.WriteText("OnSelectCell: (%d, %d)\n" % (event.m_row, event.m_col)) def OnCellChange(self, event): self.log.WriteText("OnCellChange: (%d, %d)\n" % (event.m_row, event.m_col)) def OnCellClick(self, event): self.log.WriteText("OnCellClick: (%d, %d)\n" % (event.m_row, event.m_col)) def OnLabelClick(self, event): self.log.WriteText("OnLabelClick: (%d, %d)\n" % (event.m_row, event.m_col)) #--------------------------------------------------------------------------- class ColoredPanel(wxWindow): def __init__(self, parent, color): wxWindow.__init__(self, parent, -1, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER) self.SetBackgroundColour(color) class TestNotebookWindow(wxFrame): def __init__(self, parent, log): wxFrame.__init__(self, parent, -1, 'Test wxNotebook') nb = wxNotebook(self, -1, wxPoint(0,0), self.GetClientSize()) win = ColoredPanel(nb, wxBLUE) nb.AddPage(win, "Blue") st = wxStaticText(win, -1, "You can put nearly any type of window here!", wxPoint(10, 10)) st.SetForegroundColour(wxWHITE) st.SetBackgroundColour(wxBLUE) st = wxStaticText(win, -1, "Check the next tab for an example...", wxPoint(10, 30)) st.SetForegroundColour(wxWHITE) st.SetBackgroundColour(wxBLUE) win = TestTreeCtrlPanel(nb, log) nb.AddPage(win, "TreeCtrl") win = TestListCtrlPanel(nb, log) nb.AddPage(win, "ListCtrl") win = ColoredPanel(nb, wxRED) nb.AddPage(win, "Red") win = ColoredPanel(nb, wxGREEN) nb.AddPage(win, "Green") win = ColoredPanel(nb, wxCYAN) nb.AddPage(win, "Cyan") win = ColoredPanel(nb, wxWHITE) nb.AddPage(win, "White") win = ColoredPanel(nb, wxBLACK) nb.AddPage(win, "Black") win = ColoredPanel(nb, wxNamedColour('MIDNIGHT BLUE')) nb.AddPage(win, "MIDNIGHT BLUE") win = ColoredPanel(nb, wxNamedColour('INDIAN RED')) nb.AddPage(win, "INDIAN RED") nb.SetSelection(0) self.SetSize(wxSize(350, 300)) def OnCloseWindow(self, event): self.Destroy() #--------------------------------------------------------------------------- class TestSplitterWindow(wxFrame): def __init__(self, parent): wxFrame.__init__(self, parent, -1, 'Test wxSplitterWindow', wxDefaultPosition, wxSize(500, 300)) splitter = wxSplitterWindow(self, -1) p1 = ColoredPanel(splitter, wxRED) wxStaticText(p1, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED) p2 = ColoredPanel(splitter, wxBLUE) wxStaticText(p2, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE) splitter.SplitVertically(p1, p2) def OnCloseWindow(self, event): self.Destroy() #--------------------------------------------------------------------------- class CustomStatusBar(wxStatusBar): def __init__(self, parent): wxStatusBar.__init__(self, parent, -1) self.SetFieldsCount(3) self.SetStatusText("A Custom StatusBar...", 0) self.cb = wxCheckBox(self, 1001, "toggle clock") EVT_CHECKBOX(self, 1001, self.OnToggleClock) self.cb.SetValue(true) # figure out how tall to make it. dc = wxClientDC(self) dc.SetFont(self.GetFont()) (w,h) = dc.GetTextExtent('X') h = int(h * 1.8) self.SetSize(wxSize(100, h)) # start our timer self.timer = wxPyTimer(self.Notify) self.timer.Start(1000) self.Notify() # Time-out handler def Notify(self): t = time.localtime(time.time()) st = time.strftime("%d-%b-%Y %I:%M:%S", t) self.SetStatusText(st, 2) # the checkbox was clicked def OnToggleClock(self, event): if self.cb.GetValue(): self.timer.Start(1000) self.Notify() else: self.timer.Stop() # reposition the checkbox def OnSize(self, event): rect = self.GetFieldRect(1) print "%s, %s" % (rect.x, rect.y) self.cb.SetPosition(wxPoint(rect.x+2, rect.y+2)) self.cb.SetSize(wxSize(rect.width-4, rect.height-4)) class TestCustomStatusBar(wxFrame): def __init__(self, parent): wxFrame.__init__(self, parent, -1, 'Test Custom StatusBar', wxDefaultPosition, wxSize(500, 300)) wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE")) self.sb = CustomStatusBar(self) self.SetStatusBar(self.sb) def OnCloseWindow(self, event): self.sb.timer.Stop() self.Destroy() #--------------------------------------------------------------------------- class TestToolBar(wxFrame): def __init__(self, parent, log): wxFrame.__init__(self, parent, -1, 'Test ToolBar', wxDefaultPosition, wxSize(500, 300)) self.log = log wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE")) tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER) #tb = wxToolBar(self, -1, wxDefaultPosition, wxDefaultSize, # wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT) #self.SetToolBar(tb) self.CreateStatusBar() tb.AddTool(10, wxNoRefBitmap('bitmaps/new.bmp', wxBITMAP_TYPE_BMP), wxNullBitmap, false, -1, -1, "New", "Long help for 'New'") EVT_TOOL(self, 10, self.OnToolClick) EVT_TOOL_RCLICKED(self, 10, self.OnToolRClick) tb.AddTool(20, wxNoRefBitmap('bitmaps/open.bmp', wxBITMAP_TYPE_BMP), wxNullBitmap, false, -1, -1, "Open") EVT_TOOL(self, 20, self.OnToolClick) EVT_TOOL_RCLICKED(self, 20, self.OnToolRClick) tb.AddSeparator() tb.AddTool(30, wxNoRefBitmap('bitmaps/copy.bmp', wxBITMAP_TYPE_BMP), wxNullBitmap, false, -1, -1, "Copy") EVT_TOOL(self, 30, self.OnToolClick) EVT_TOOL_RCLICKED(self, 30, self.OnToolRClick) tb.AddTool(40, wxNoRefBitmap('bitmaps/paste.bmp', wxBITMAP_TYPE_BMP), wxNullBitmap, false, -1, -1, "Paste") EVT_TOOL(self, 40, self.OnToolClick) EVT_TOOL_RCLICKED(self, 40, self.OnToolRClick) tb.AddSeparator() tb.AddTool(50, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP), wxNullBitmap, true, -1, -1, "Toggle this") EVT_TOOL(self, 50, self.OnToolClick) EVT_TOOL_RCLICKED(self, 50, self.OnToolRClick) tb.AddTool(60, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP), wxNoRefBitmap('bitmaps/tog2.bmp', wxBITMAP_TYPE_BMP), true, -1, -1, "Toggle with 2 bitmaps") EVT_TOOL(self, 60, self.OnToolClick) EVT_TOOL_RCLICKED(self, 60, self.OnToolRClick) tb.Realize() def OnCloseWindow(self, event): self.Destroy() def OnToolClick(self, event): self.log.WriteText("tool %s clicked\n" % event.GetId()) def OnToolRClick(self, event): self.log.WriteText("tool %s right-clicked\n" % event.GetId()) #--------------------------------------------------------------------------- class TestTreeCtrlPanel(wxPanel): def __init__(self, parent, log): wxPanel.__init__(self, parent, -1) self.log = log tID = 1101 self.tree = wxTreeCtrl(self, tID) root = self.tree.AddRoot("The Root Item") for x in range(10): child = self.tree.AppendItem(root, "Item %d" % x) for y in range(5): last = self.tree.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y))) self.tree.Expand(root) EVT_TREE_ITEM_EXPANDED (self, tID, self.OnItemExpanded) EVT_TREE_ITEM_COLLAPSED (self, tID, self.OnItemCollapsed) EVT_TREE_SEL_CHANGED (self, tID, self.OnSelChanged) def OnSize(self, event): w,h = self.GetClientSizeTuple() self.tree.SetDimensions(0, 0, w, h) def OnItemExpanded(self, event): item = event.GetItem() self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item)) def OnItemCollapsed(self, event): item = event.GetItem() self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item)) def OnSelChanged(self, event): item = event.GetItem() self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(item)) class TestTreeCtrl(wxFrame): def __init__(self, parent, log): wxFrame.__init__(self, parent, -1, 'Test TreeCtrl', wxDefaultPosition, wxSize(250, 300)) p = TestTreeCtrlPanel(self, log) #--------------------------------------------------------------------------- class TestListCtrlPanel(wxPanel): def __init__(self, parent, log): wxPanel.__init__(self, parent, -1) self.log = log tID = 1101 self.il = wxImageList(16, 16) idx1 = self.il.Add(wxNoRefBitmap('bitmaps/smiles.bmp', wxBITMAP_TYPE_BMP)) self.list = wxListCtrl(self, tID, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxSUNKEN_BORDER) self.list.SetImageList(self.il, wxIMAGE_LIST_SMALL) #self.list.SetToolTip(wxToolTip("This is a ToolTip!")) #wxToolTip_Enable(true) self.list.InsertColumn(0, "Column 0") self.list.InsertColumn(1, "Column 1") self.list.InsertColumn(2, "One More Column (2)") for x in range(50): self.list.InsertImageStringItem(x, "This is item %d" % x, idx1) self.list.SetStringItem(x, 1, "Col 1, item %d" % x) self.list.SetStringItem(x, 2, "item %d in column 2" % x) self.list.SetColumnWidth(0, wxLIST_AUTOSIZE) self.list.SetColumnWidth(1, wxLIST_AUTOSIZE) self.list.SetColumnWidth(2, wxLIST_AUTOSIZE) def OnSize(self, event): w,h = self.GetClientSizeTuple() self.list.SetDimensions(0, 0, w, h) class TestListCtrl(wxFrame): def __init__(self, parent, log): wxFrame.__init__(self, parent, -1, 'Test ListCtrl', wxDefaultPosition, wxSize(250, 300)) p = TestListCtrlPanel(self, log) #--------------------------------------------------------------------------- class TestSashWindow(wxMDIParentFrame): NEW_WINDOW = 5000 TOGGLE_WINDOW = 5001 QUIT = 5002 ID_WINDOW_TOP = 5100 ID_WINDOW_LEFT1 = 5101 ID_WINDOW_LEFT2 = 5102 ID_WINDOW_BOTTOM = 5103 def __init__(self, parent, log): wxMDIParentFrame.__init__(self, parent, -1, 'Test Sash Window', wxDefaultPosition, wxSize(250, 300)) self.log = log menu = wxMenu() menu.Append(self.NEW_WINDOW, "&New Window") menu.Append(self.TOGGLE_WINDOW, "&Toggle window") menu.Append(self.QUIT, "E&xit") menubar = wxMenuBar() menubar.Append(menu, "&File") self.SetMenuBar(menubar) self.CreateStatusBar() EVT_MENU(self, self.NEW_WINDOW, self.OnNewWindow) EVT_MENU(self, self.TOGGLE_WINDOW, self.OnToggleWindow) EVT_MENU(self, self.QUIT, self.OnQuit) EVT_SASH_DRAGGED_RANGE(self, self.ID_WINDOW_TOP, self.ID_WINDOW_BOTTOM, self.OnSashDrag) # Create some layout windows # A window like a toolbar win = wxSashLayoutWindow(self, self.ID_WINDOW_TOP, wxDefaultPosition, wxSize(200, 30), wxNO_BORDER|wxSW_3D) win.SetDefaultSize(wxSize(1000, 30)) win.SetOrientation(wxLAYOUT_HORIZONTAL) win.SetAlignment(wxLAYOUT_TOP) win.SetBackgroundColour(wxColour(255, 0, 0)) win.SetSashVisible(wxSASH_BOTTOM, true) self.topWindow = win # A window like a statusbar win = wxSashLayoutWindow(self, self.ID_WINDOW_BOTTOM, wxDefaultPosition, wxSize(200, 30), wxNO_BORDER|wxSW_3D) win.SetDefaultSize(wxSize(1000, 30)) win.SetOrientation(wxLAYOUT_HORIZONTAL) win.SetAlignment(wxLAYOUT_BOTTOM) win.SetBackgroundColour(wxColour(0, 0, 255)) win.SetSashVisible(wxSASH_TOP, true) self.bottomWindow = win # A window to the left of the client window win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT1, wxDefaultPosition, wxSize(200, 30), wxNO_BORDER|wxSW_3D) win.SetDefaultSize(wxSize(120, 1000)) win.SetOrientation(wxLAYOUT_VERTICAL) win.SetAlignment(wxLAYOUT_LEFT) win.SetBackgroundColour(wxColour(0, 255, 0)) win.SetSashVisible(wxSASH_RIGHT, TRUE) win.SetExtraBorderSize(10) textWindow = wxTextCtrl(win, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxSUNKEN_BORDER) textWindow.SetValue("A help window") self.leftWindow1 = win # Another window to the left of the client window win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT2, wxDefaultPosition, wxSize(200, 30), wxNO_BORDER|wxSW_3D) win.SetDefaultSize(wxSize(120, 1000)) win.SetOrientation(wxLAYOUT_VERTICAL) win.SetAlignment(wxLAYOUT_LEFT) win.SetBackgroundColour(wxColour(0, 255, 255)) win.SetSashVisible(wxSASH_RIGHT, TRUE) self.leftWindow2 = win def OnNewWindow(self, event): pass def OnToggleWindow(self, event): pass def OnQuit(self, event): self.Close(true) def OnSashDrag(self, event): if event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE: return eID = event.GetId() if eID == self.ID_WINDOW_TOP: self.topWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height)) elif eID == self.ID_WINDOW_LEFT1: self.leftWindow1.SetDefaultSize(wxSize(event.GetDragRect().width, 1000)) elif eID == self.ID_WINDOW_LEFT2: self.leftWindow2.SetDefaultSize(wxSize(event.GetDragRect().width, 1000)) elif eID == self.ID_WINDOW_BOTTOM: self.bottomWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height)) wxLayoutAlgorithm().LayoutMDIFrame(self) # Leaves bits of itself behind sometimes self.GetClientWindow().Refresh() def OnSize(self, event): wxLayoutAlgorithm().LayoutMDIFrame(self) #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- class AppFrame(wxFrame): def __init__(self, parent, id, title): wxFrame.__init__(self, parent, id, title, wxDefaultPosition, wxSize(420, 200)) if wxPlatform == '__WXMSW__': self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO) self.SetIcon(self.icon) self.mainmenu = wxMenuBar() menu = wxMenu() menu.Append(200, 'E&xit', 'Get the heck outta here!') EVT_MENU(self, 200, self.OnFileExit) self.mainmenu.Append(menu, '&File') menu = self.MakeTestsMenu() self.mainmenu.Append(menu, '&Tests') self.SetMenuBar(self.mainmenu) self.log = wxTextCtrl(self, -1, '', wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY) self.log.WriteText('Test 4:\n') (w, self.charHeight) = self.log.GetTextExtent('X') def MakeTestsMenu(self): menu = wxMenu() mID = NewId() menu.Append(mID, '&Simple Controls') EVT_MENU(self, mID, self.OnTestSimpleControls) mID = NewId() menu.Append(mID, '&Timer', '', true) EVT_MENU(self, mID, self.OnTestTimer) self.timerID = mID self.timer = None mID = NewId() menu.Append(mID, '&Layout Constraints') EVT_MENU(self, mID, self.OnTestLayoutConstraints) mID = NewId() menu.Append(mID, '&Grid') EVT_MENU(self, mID, self.OnTestGrid) smenu = wxMenu() # make a sub-menu mID = NewId() smenu.Append(mID, '&Colour') EVT_MENU(self, mID, self.OnTestColourDlg) mID = NewId() smenu.Append(mID, '&Directory') EVT_MENU(self, mID, self.OnTestDirDlg) mID = NewId() smenu.Append(mID, '&File') EVT_MENU(self, mID, self.OnTestFileDlg) mID = NewId() smenu.Append(mID, '&Single Choice') EVT_MENU(self, mID, self.OnTestSingleChoiceDlg) mID = NewId() smenu.Append(mID, '&TextEntry') EVT_MENU(self, mID, self.OnTestTextEntryDlg) mID = NewId() smenu.Append(mID, '&Font') EVT_MENU(self, mID, self.OnTestFontDlg) mID = NewId() smenu.Append(mID, '&PageSetup') EVT_MENU(self, mID, self.OnTestPageSetupDlg) mID = NewId() smenu.Append(mID, '&Print') EVT_MENU(self, mID, self.OnTestPrintDlg) mID = NewId() smenu.Append(mID, '&Message') EVT_MENU(self, mID, self.OnTestMessageDlg) menu.AppendMenu(NewId(), '&Common Dialogs', smenu) mID = NewId() menu.Append(mID, '&Notebook') EVT_MENU(self, mID, self.OnTestNotebook) mID = NewId() menu.Append(mID, '&Splitter Window') EVT_MENU(self, mID, self.OnTestSplitter) mID = NewId() menu.Append(mID, '&Custom StatusBar') EVT_MENU(self, mID, self.OnTestCustomStatusBar) mID = NewId() menu.Append(mID, '&ToolBar') EVT_MENU(self, mID, self.OnTestToolBar) mID = NewId() menu.Append(mID, 'T&ree Control') EVT_MENU(self, mID, self.OnTestTreeCtrl) mID = NewId() menu.Append(mID, '&List Control') EVT_MENU(self, mID, self.OnTestListCtrl) mID = NewId() menu.Append(mID, 'S&ash Window and Layout Algorithm') EVT_MENU(self, mID, self.OnTestSashWindow) return menu def WriteText(self, str): self.log.WriteText(str) if wxPlatform == '__WXMSW__': w, h = self.log.GetClientSizeTuple() numLines = h/self.charHeight x, y = self.log.PositionToXY(self.log.GetLastPosition()) self.log.ShowPosition(self.log.XYToPosition(x, y-numLines+1)) def OnFileExit(self, event): self.Close() def OnCloseWindow(self, event): self.Destroy() def OnTestSimpleControls(self, event): dlg = TestSimpleControlsDlg(self, self) dlg.Centre() dlg.ShowModal() dlg.Destroy() def OnTestTimer(self, event): if self.timer: self.mainmenu.Check(self.timerID, false) self.timer.Stop() self.timer = None else: self.mainmenu.Check(self.timerID, true) self.timer = TestTimer(self) self.timer.Start(1000) def OnTestLayoutConstraints(self, event): win = TestLayoutConstraints(self) win.Show(true) def OnTestGrid(self, event): win = TestGrid(self, self) win.Show(true) win.SetSize(wxSize(505, 300)) # have to force a resize, or the grid doesn't # show up for some reason.... def OnTestColourDlg(self, event): data = wxColourData() data.SetChooseFull(true) dlg = wxColourDialog(self, data) if dlg.ShowModal() == wxID_OK: data = dlg.GetColourData() self.log.WriteText('You selected: %s\n' % str(data.GetColour().Get())) dlg.Destroy() def OnTestDirDlg(self, event): dlg = wxDirDialog(self) if dlg.ShowModal() == wxID_OK: self.log.WriteText('You selected: %s\n' % dlg.GetPath()) dlg.Destroy() def OnTestFileDlg(self, event): dlg = wxFileDialog(self, "Choose a file", ".", "", "*.*", wxOPEN) if dlg.ShowModal() == wxID_OK: self.log.WriteText('You selected: %s\n' % dlg.GetPath()) dlg.Destroy() def OnTestSingleChoiceDlg(self, event): dlg = wxSingleChoiceDialog(self, 'Test Single Choice', 'The Caption', ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight']) if dlg.ShowModal() == wxID_OK: self.log.WriteText('You selected: %s\n' % dlg.GetStringSelection()) dlg.Destroy() def OnTestTextEntryDlg(self, event): dlg = wxTextEntryDialog(self, 'What is your favorite programming language?', 'Duh??', 'Python') #dlg.SetValue("Python is the best!") #### this doesn't work? if dlg.ShowModal() == wxID_OK: self.log.WriteText('You entered: %s\n' % dlg.GetValue()) dlg.Destroy() def OnTestFontDlg(self, event): dlg = wxFontDialog(self) if dlg.ShowModal() == wxID_OK: data = dlg.GetFontData() font = data.GetChosenFont() self.log.WriteText('You selected: "%s", %d points, color %s\n' % (font.GetFaceName(), font.GetPointSize(), data.GetColour().Get())) dlg.Destroy() def OnTestPageSetupDlg(self, event): data = wxPageSetupDialogData() data.SetMarginTopLeft(wxPoint(50,50)) data.SetMarginBottomRight(wxPoint(50,50)) dlg = wxPageSetupDialog(self, data) if dlg.ShowModal() == wxID_OK: data = dlg.GetPageSetupData() tl = data.GetMarginTopLeft() br = data.GetMarginBottomRight() self.log.WriteText('Margins are: %s %s\n' % (str(tl), str(br))) dlg.Destroy() def OnTestPrintDlg(self, event): data = wxPrintDialogData() data.EnablePrintToFile(true) data.EnablePageNumbers(true) data.EnableSelection(true) dlg = wxPrintDialog(self, data) if dlg.ShowModal() == wxID_OK: self.log.WriteText('\n') dlg.Destroy() def OnTestMessageDlg(self, event): dlg = wxMessageDialog(self, 'Hello from Python and wxWindows!', 'A Message Box', wxOK | wxICON_INFORMATION) dlg.ShowModal() dlg.Destroy() def OnTestNotebook(self, event): win = TestNotebookWindow(self, self) win.Show(true) def OnTestSplitter(self, event): win = TestSplitterWindow(self) win.Show(true) def OnTestCustomStatusBar(self, event): win = TestCustomStatusBar(self) win.Show(true) def OnTestToolBar(self, event): win = TestToolBar(self, self) win.Show(true) def OnTestTreeCtrl(self, event): win = TestTreeCtrl(self, self) win.Show(true) def OnTestListCtrl(self, event): win = TestListCtrl(self, self) win.Show(true) def OnTestSashWindow(self, event): win = TestSashWindow(self, self) win.Show(true) #--------------------------------------------------------------------------- class MyApp(wxApp): def OnInit(self): frame = AppFrame(NULL, -1, "Test 4: (lots of little tests...)") frame.Show(true) self.SetTopWindow(frame) return true #--------------------------------------------------------------------------- def main(): app = MyApp(0) app.MainLoop() def t(): import pdb pdb.run('main()') # for focused testing... def main2(): class T2App(wxApp): def OnInit(self): frame = TestLayoutConstraints(NULL) frame.Show(true) self.SetTopWindow(frame) return true app = T2App(0) app.MainLoop() def t2(): import pdb pdb.run('main2()') if __name__ == '__main__': main() #---------------------------------------------------------------------------- # # $Log$ # Revision 1.2 2000/07/15 19:51:33 cvsuser # merged 2.2 branch # # Revision 1.1.2.1 2000/05/16 02:07:02 RD # # Moved and reorganized wxPython directories # # Now builds into an intermediate wxPython package directory before # installing # # Revision 1.17 1999/08/05 05:06:50 RD # # Some minor tweaks # # Revision 1.16 1999/04/30 03:29:54 RD # # wxPython 2.0b9, first phase (win32) # Added gobs of stuff, see wxPython/README.txt for details # # Revision 1.15.2.1 1999/03/16 06:05:50 RD # # wxPython 2.0b7 # # Revision 1.15 1999/03/05 07:23:42 RD # # Minor wxPython changes for wxWin 2.0 # # Revision 1.14 1999/02/27 04:20:50 RD # # minor tweaks for testing # # Revision 1.13 1999/02/20 09:04:44 RD # Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a # window handle. If you can get the window handle into the python code, # it should just work... More news on this later. # # Added wxImageList, wxToolTip. # # Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the # wxRegConfig class. # # As usual, some bug fixes, tweaks, etc. # # Revision 1.12 1999/01/30 07:31:33 RD # # Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc. # # Various cleanup, tweaks, minor additions, etc. to maintain # compatibility with the current wxWindows. # # Revision 1.11 1999/01/29 16:17:59 HH # In test4's toolbar sample, changed NULL to wxNullBitmap to prevent SIGSEVS # with wxGTK. The sample works now. # # Revision 1.10 1998/12/16 22:12:47 RD # # Tweaks needed to be able to build wxPython with wxGTK. # # Revision 1.9 1998/12/15 20:44:35 RD # Changed the import semantics from "from wxPython import *" to "from # wxPython.wx import *" This is for people who are worried about # namespace pollution, they can use "from wxPython import wx" and then # prefix all the wxPython identifiers with "wx." # # Added wxTaskbarIcon for wxMSW. # # Made the events work for wxGrid. # # Added wxConfig. # # Added wxMiniFrame for wxGTK, (untested.) # # Changed many of the args and return values that were pointers to gdi # objects to references to reflect changes in the wxWindows API. # # Other assorted fixes and additions. # # Revision 1.8 1998/11/25 08:47:11 RD # # Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon # Added events for wxGrid # Other various fixes and additions # # Revision 1.7 1998/11/11 03:13:19 RD # # Additions for wxTreeCtrl # # Revision 1.6 1998/10/20 06:45:33 RD # New wxTreeCtrl wrappers (untested) # some changes in helpers # etc. # # Revision 1.5 1998/10/02 06:42:28 RD # # Version 0.4 of wxPython for MSW. # # Revision 1.4 1998/08/27 21:59:51 RD # Some chicken-and-egg problems solved for wxPython on wxGTK # # Revision 1.3 1998/08/27 00:01:17 RD # - more tweaks # - have discovered some problems but not yet discovered solutions... # # Revision 1.2 1998/08/22 19:51:18 RD # some tweaks for wxGTK # # Revision 1.1 1998/08/09 08:28:05 RD # Initial version # #