X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/64be6958940c1aea9c69c386b6bac9eb463f60a9..37f214d588b02079a3ddf64c2e46585ca1657c1b:/utils/wxPython/demo/Main.py diff --git a/utils/wxPython/demo/Main.py b/utils/wxPython/demo/Main.py index 949d747105..5e42ae882a 100644 --- a/utils/wxPython/demo/Main.py +++ b/utils/wxPython/demo/Main.py @@ -23,7 +23,8 @@ _treeList = [ ('Miscellaneous Windows', ['wxGrid', 'wxSashWindow', 'wxScrolledWindow', 'wxSplitterWindow', - 'wxStatusBar', 'wxToolBar', 'wxNotebook']), + 'wxStatusBar', 'wxToolBar', 'wxNotebook', + 'wxHtmlWindow']), ('Common Dialogs', ['wxColourDialog', 'wxDirDialog', 'wxFileDialog', 'wxSingleChoiceDialog', 'wxTextEntryDialog', @@ -35,15 +36,16 @@ _treeList = [ 'wxTreeCtrl', 'wxSpinButton', 'wxStaticText', 'wxStaticBitmap', 'wxRadioBox', 'wxSlider']), - ('Window Layout', ['wxLayoutConstraints', 'Sizers']), + ('Window Layout', ['wxLayoutConstraints', 'Sizers', 'OldSizers']), - ('Miscellaneous', ['wxTimer', 'wxGLCanvas', 'DialogUnits', 'wxImage', - 'PrintFramework']), + ('Miscellaneous', ['wxTimer', 'wxValidator', 'wxGLCanvas', 'DialogUnits', + 'wxImage', 'PrintFramework', 'wxOGL']), - ('wxPython Library', ['Sizers', 'Layoutf', 'wxScrolledMessageDialog', - 'wxMultipleChoiceDialog', 'wxPlotCanvas']), + ('wxPython Library', ['OldSizers', 'Layoutf', 'wxScrolledMessageDialog', + 'wxMultipleChoiceDialog', 'wxPlotCanvas', 'wxFloatBar', + 'PyShell']), - ('Cool Contribs', ['pyTree', 'hangman', 'SlashDot']), + ('Cool Contribs', ['pyTree', 'hangman', 'SlashDot', 'XMLtreeview']), ] @@ -51,8 +53,8 @@ _treeList = [ class wxPythonDemo(wxFrame): def __init__(self, parent, id, title): - wxFrame.__init__(self, parent, -1, title, - wxDefaultPosition, wxSize(700, 550)) + wxFrame.__init__(self, parent, -1, title, size = (725, 550)) + if wxPlatform == '__WXMSW__': self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO) self.SetIcon(self.icon) @@ -71,34 +73,47 @@ class wxPythonDemo(wxFrame): # Make a File menu self.mainmenu = wxMenuBar() menu = wxMenu() - mID = NewId() - menu.Append(mID, 'E&xit', 'Get the heck outta here!') - EVT_MENU(self, mID, self.OnFileExit) + exitID = wxNewId() + menu.Append(exitID, 'E&xit\tAlt-X', 'Get the heck outta here!') + EVT_MENU(self, exitID, self.OnFileExit) self.mainmenu.Append(menu, '&File') + # Make a Demo menu + menu = wxMenu() + for item in _treeList: + submenu = wxMenu() + for childItem in item[1]: + mID = wxNewId() + submenu.Append(mID, childItem) + EVT_MENU(self, mID, self.OnDemoMenu) + menu.AppendMenu(wxNewId(), item[0], submenu) + self.mainmenu.Append(menu, '&Demo') + + # Make a Help menu - mID = NewId() + helpID = wxNewId() menu = wxMenu() - menu.Append(mID, '&About', 'wxPython RULES!!!') - EVT_MENU(self, mID, self.OnHelpAbout) + menu.Append(helpID, '&About\tCtrl-H', 'wxPython RULES!!!') + EVT_MENU(self, helpID, self.OnHelpAbout) self.mainmenu.Append(menu, '&Help') self.SetMenuBar(self.mainmenu) - selectedDemo = None - selectedDemoName = "Nada" - if len(sys.argv) == 2: - selectedDemoName = sys.argv[1] + # set the menu accellerator table... + aTable = wxAcceleratorTable([(wxACCEL_ALT, ord('X'), exitID), + (wxACCEL_CTRL, ord('H'), helpID)]) + self.SetAcceleratorTable(aTable) + # Create a TreeCtrl - tID = NewId() + tID = wxNewId() + self.treeMap = {} self.tree = wxTreeCtrl(splitter, tID) root = self.tree.AddRoot("Overview") for item in _treeList: child = self.tree.AppendItem(root, item[0]) for childItem in item[1]: theDemo = self.tree.AppendItem(child, childItem) - if childItem == selectedDemoName: - selectedDemo = theDemo + self.treeMap[childItem] = theDemo self.tree.Expand(root) EVT_TREE_ITEM_EXPANDED (self.tree, tID, self.OnItemExpanded) @@ -109,23 +124,22 @@ class wxPythonDemo(wxFrame): self.nb = wxNotebook(splitter2, -1) # Set up a TextCtrl on the Overview Notebook page - self.ovr = wxTextCtrl(self.nb, -1, '', wxDefaultPosition, wxDefaultSize, - wxTE_MULTILINE|wxTE_READONLY) + self.ovr = wxTextCtrl(self.nb, -1, style = wxTE_MULTILINE|wxTE_READONLY) self.nb.AddPage(self.ovr, "Overview") # Set up a TextCtrl on the Demo Code Notebook page - self.txt = wxTextCtrl(self.nb, -1, '', wxDefaultPosition, wxDefaultSize, - wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL) + self.txt = wxTextCtrl(self.nb, -1, + style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL) self.txt.SetFont(wxFont(9, wxMODERN, wxNORMAL, wxNORMAL, false)) self.nb.AddPage(self.txt, "Demo Code") # Set up a log on the View Log Notebook page - self.log = wxTextCtrl(splitter2, -1, '', wxDefaultPosition, wxDefaultSize, - wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL) + self.log = wxTextCtrl(splitter2, -1, + style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL) (w, self.charHeight) = self.log.GetTextExtent('X') - #self.WriteText('wxPython Demo Log:\n') + self.WriteText('wxPython Demo Log:\n') # add the windows to the splitter and split it. @@ -143,9 +157,16 @@ class wxPythonDemo(wxFrame): # select initial items self.nb.SetSelection(0) self.tree.SelectItem(root) - if selectedDemo: - self.tree.SelectItem(selectedDemo) - self.tree.EnsureVisible(selectedDemo) + + if len(sys.argv) == 2: + try: + selectedDemo = self.treeMap[sys.argv[1]] + except: + selectedDemo = None + if selectedDemo: + self.tree.SelectItem(selectedDemo) + self.tree.EnsureVisible(selectedDemo) + #--------------------------------------------- def WriteText(self, text): @@ -153,7 +174,9 @@ class wxPythonDemo(wxFrame): 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)) + if y > numLines: + self.log.ShowPosition(self.log.XYToPosition(x, y-numLines)) + ##self.log.ShowPosition(self.log.GetLastPosition()) self.log.SetInsertionPointEnd() def write(self, txt): @@ -185,9 +208,8 @@ class wxPythonDemo(wxFrame): if itemText == 'Overview': self.GetDemoFile('Main.py') self.SetOverview('Overview', overview) - #self.nb.ResizeChildren(); self.nb.Refresh(); - #wxYield() + self.window = None else: if os.path.exists(itemText + '.py'): @@ -199,15 +221,17 @@ class wxPythonDemo(wxFrame): self.nb.Refresh(); wxYield() - window = module.runTest(self, self.nb, self) - if window: - self.nb.AddPage(window, 'Demo') + self.window = module.runTest(self, self.nb, self) + if self.window: + self.nb.AddPage(self.window, 'Demo') + self.nb.ResizeChildren() self.nb.SetSelection(2) - self.nb.ResizeChildren(); else: self.ovr.Clear() self.txt.Clear() + self.window = None + #--------------------------------------------- @@ -218,7 +242,7 @@ class wxPythonDemo(wxFrame): # self.txt.WriteText("Cannot open %s file." % filename) try: self.txt.SetValue(open(filename).read()) - except IOException: + except IOError: self.txt.WriteText("Cannot open %s file." % filename) @@ -240,13 +264,15 @@ class wxPythonDemo(wxFrame): def OnHelpAbout(self, event): - about = wxMessageDialog(self, - "wxPython is a Python extension module that\n" - "encapsulates the wxWindows GUI classes.\n\n" - "This demo shows off some of the capabilities\n" - "of wxPython.\n\n" - " Developed by Robin Dunn", - "About wxPython", wxOK) + #about = wxMessageDialog(self, + # "wxPython is a Python extension module that\n" + # "encapsulates the wxWindows GUI classes.\n\n" + # "This demo shows off some of the capabilities\n" + # "of wxPython.\n\n" + # " Developed by Robin Dunn", + # "About wxPython", wxOK) + from About import MyAboutBox + about = MyAboutBox(self) about.ShowModal() about.Destroy() @@ -254,14 +280,27 @@ class wxPythonDemo(wxFrame): #--------------------------------------------- def OnCloseWindow(self, event): self.dying = true + self.window = None + self.mainmenu = None self.Destroy() #--------------------------------------------- def OnIdle(self, event): if self.otherWin: self.otherWin.Raise() + self.window = self.otherWin self.otherWin = None + #--------------------------------------------- + def OnDemoMenu(self, event): + try: + selectedDemo = self.treeMap[self.mainmenu.GetLabel(event.GetId())] + except: + selectedDemo = None + if selectedDemo: + self.tree.SelectItem(selectedDemo) + self.tree.EnsureVisible(selectedDemo) + #--------------------------------------------------------------------------- #---------------------------------------------------------------------------