X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/08ecc92023f15aaa5695a616f9712c980650c7c7..defc0789c198fe5af4d60fb4804d146807dd48e8:/wxPython/demo/Main.py diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 642d5427f1..69682c69fc 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -52,7 +52,7 @@ _treeList = [ ]), # managed windows == things with a (optional) caption you can close - ('Base Frames and Dialogs', [ + ('Frames and Dialogs', [ 'Dialog', 'Frame', 'MDIWindows', @@ -297,7 +297,8 @@ try: def ShowPosition(self, pos): line = self.LineFromPosition(pos) - self.EnsureVisible(line) + #self.EnsureVisible(line) + self.GotoLine(line) def GetLastPosition(self): return self.GetLength() @@ -355,9 +356,12 @@ try: # White space self.SetViewWhiteSpace(False) # Don't view white space - # EOL - #self.SetEOLMode(wx.stc.STC_EOL_CRLF) # Just leave it at the default (autosense) - self.SetViewEOL(False) + # EOL: Since we are loading/saving ourselves, and the + # strings will always have \n's in them, set the STC to + # edit them that way. + self.SetEOLMode(wx.stc.STC_EOL_LF) + self.SetViewEOL(False) + # No right-edge mode indicator self.SetEdgeMode(stc.STC_EDGE_NONE) @@ -506,6 +510,7 @@ class DemoCodePanel(wx.Panel): self.box = wx.BoxSizer(wx.VERTICAL) self.box.Add(self.controlBox, 0, wx.EXPAND) + self.box.Add(wx.StaticLine(self), 0, wx.EXPAND) self.box.Add(self.editor, 1, wx.EXPAND) self.box.Fit(self) @@ -526,7 +531,6 @@ class DemoCodePanel(wx.Panel): def ActiveModuleChanged(self): self.LoadDemoSource(self.demoModules.GetSource()) self.UpdateControlState() - self.ReloadDemo() def LoadDemoSource(self, source): @@ -570,11 +574,12 @@ class DemoCodePanel(wx.Panel): busy = wx.BusyInfo("Reloading demo module...") self.demoModules.SetActive(modSelected) self.ActiveModuleChanged() + self.ReloadDemo() def ReloadDemo(self): if self.demoModules.name != __name__: - self.mainFrame.RunModule() + self.mainFrame.RunModule(False) def OnCodeModified(self, event): @@ -610,7 +615,7 @@ class DemoCodePanel(wx.Panel): wx.LogMessage("Created directory for modified demos: %s" % GetModifiedDirectory()) # Save - f = open(modifiedFilename, "w") + f = open(modifiedFilename, "wt") source = self.editor.GetText() try: f.write(source) @@ -620,6 +625,7 @@ class DemoCodePanel(wx.Panel): busy = wx.BusyInfo("Reloading demo module...") self.demoModules.LoadFromFile(modModified, modifiedFilename) self.ActiveModuleChanged() + self.ReloadDemo() def OnRestore(self, event): # Handles the "Delete Modified" button @@ -628,6 +634,7 @@ class DemoCodePanel(wx.Panel): os.unlink(modifiedFilename) # Delete the modified copy busy = wx.BusyInfo("Reloading demo module...") self.ActiveModuleChanged() + self.ReloadDemo() #--------------------------------------------------------------------------- @@ -704,15 +711,18 @@ class DemoModules: # load original module self.LoadFromFile(modOriginal, GetOriginalFilename(name)) + self.SetActive(modOriginal) # load modified module (if one exists) if DoesModifiedExist(name): self.LoadFromFile(modModified, GetModifiedFilename(name)) + if (modDefault == modModified): + self.SetActive(modModified) def LoadFromFile(self, modID, filename): self.modules[modID][2] = filename - file = open(filename, "r") + file = open(filename, "rt") self.LoadFromSource(modID, file.read()) file.close() @@ -789,7 +799,7 @@ class DemoModules: filename = self.modules[modID][2] try: - file = open(filename, "w") + file = open(filename, "wt") file.write(source) finally: file.close() @@ -980,6 +990,7 @@ class wxPythonDemo(wx.Frame): self.demoPage = None self.codePage = None self.useModified = False + self.shell = None icon = images.getMondrianIcon() self.SetIcon(icon) @@ -1063,15 +1074,18 @@ class wxPythonDemo(wx.Frame): # # Make a Help menu - helpID = wx.NewId() - findID = wx.NewId() - findnextID = wx.NewId() menu = wx.Menu() findItem = menu.Append(-1, '&Find\tCtrl-F', 'Find in the Demo Code') findnextItem = menu.Append(-1, 'Find &Next\tF3', 'Find Next') menu.AppendSeparator() + + shellItem = menu.Append(-1, 'Open Py&Shell Window\tF5', + 'An interactive interpreter window with the demo app and frame objects in the namesapce') + menu.AppendSeparator() helpItem = menu.Append(-1, '&About\tCtrl-H', 'wxPython RULES!!!') wx.App_SetMacAboutMenuItemId(helpItem.GetId()) + + self.Bind(wx.EVT_MENU, self.OnOpenShellWindow, shellItem) self.Bind(wx.EVT_MENU, self.OnHelpAbout, helpItem) self.Bind(wx.EVT_MENU, self.OnHelpFind, findItem) self.Bind(wx.EVT_MENU, self.OnFindNext, findnextItem) @@ -1249,7 +1263,7 @@ class wxPythonDemo(wx.Frame): if os.path.exists(GetOriginalFilename(demoName)): wx.LogMessage("Loading demo %s.py..." % demoName) self.demoModules = DemoModules(demoName) - self.LoadDemoSource() + self.RunModule(True) self.tree.Refresh() else: self.SetOverview("wxPython", mainOverview) @@ -1265,7 +1279,7 @@ class wxPythonDemo(wx.Frame): self.codePage.LoadDemo(self.demoModules) #--------------------------------------------- - def RunModule(self): + def RunModule(self, loadSource): """Runs the active module""" module = self.demoModules.GetActive() @@ -1282,18 +1296,20 @@ class wxPythonDemo(wx.Frame): if hasattr(module, "overview"): overviewText = module.overview - # in case runTest is modal, make sure things look right... - wx.YieldIfNeeded() - try: self.demoPage = module.runTest(self, self.nb, self) if self.demoPage is None: self.demoPage = ReloadDemoPanel(self.nb, self.codePage, self) except: - self.demoPage = DemoErrorPanel(self.nb, self.codePage, DemoError(sys.exc_info()), self) + self.demoPage = DemoErrorPanel(self.nb, self.codePage, + DemoError(sys.exc_info()), self) else: # There was a previous error in compiling or exec-ing - self.demoPage = DemoErrorPanel(self.nb, self.codePage, self.demoModules.GetErrorInfo(), self) + self.demoPage = DemoErrorPanel(self.nb, self.codePage, + self.demoModules.GetErrorInfo(), self) + + if loadSource: + self.LoadDemoSource() self.SetOverview(self.demoModules.name + " Overview", overviewText) self.UpdateNotebook() @@ -1323,23 +1339,12 @@ class wxPythonDemo(wx.Frame): if page: if not pageExists: # Add a new page - - # panel = wx.Panel(nb, -1) - # page.Reparent(panel) - # panel.page = page - # nb.AddPage(panel, pageText) nb.AddPage(page, pageText) if debug: wx.LogMessage("DBG: ADDED %s" % pageText) else: - # if nb.GetPage(pagePos).page != page: if nb.GetPage(pagePos) != page: # Reload an existing page nb.Freeze() - - # panel = nb.GetPage(pagePos) - # panel.page = page - # page.Reparent(panel) - nb.DeletePage(pagePos) nb.InsertPage(pagePos, page, pageText) nb.Thaw() @@ -1360,7 +1365,7 @@ class wxPythonDemo(wx.Frame): UpdatePage(self.codePage, "Demo Code") UpdatePage(self.demoPage, "Demo") - if select >= 0: + if select >= 0 and select < nb.GetPageCount(): nb.SetSelection(select) #--------------------------------------------- @@ -1441,6 +1446,33 @@ class wxPythonDemo(wx.Frame): event.GetDialog().Destroy() + def OnOpenShellWindow(self, evt): + if self.shell: + # if it already exists then just make sure it's visible + s = self.shell + if s.IsIconized(): + s.Iconize(False) + s.Raise() + else: + # Make a PyShell window + from wx import py + namespace = { 'wx' : wx, + 'app' : wx.GetApp(), + 'frame' : self, + } + self.shell = py.shell.ShellFrame(None, locals=namespace) + self.shell.SetSize((640,480)) + self.shell.Show() + + # Hook the close event of the main frame window so that we + # close the shell at the same time if it still exists + def CloseShell(evt): + if self.shell: + self.shell.Close() + evt.Skip() + self.Bind(wx.EVT_CLOSE, CloseShell) + + #--------------------------------------------- def OnCloseWindow(self, event): self.dying = True @@ -1575,7 +1607,7 @@ def main(): os.chdir(demoPath) except: pass - app = MyApp(0) ##wx.Platform == "__WXMAC__") + app = MyApp(False) app.MainLoop() #---------------------------------------------------------------------------