]),
# managed windows == things with a (optional) caption you can close
- ('Base Frames and Dialogs', [
+ ('Frames and Dialogs', [
'Dialog',
'Frame',
'MDIWindows',
def ShowPosition(self, pos):
line = self.LineFromPosition(pos)
- self.EnsureVisible(line)
+ #self.EnsureVisible(line)
+ self.GotoLine(line)
def GetLastPosition(self):
return self.GetLength()
# 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)
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)
def ActiveModuleChanged(self):
self.LoadDemoSource(self.demoModules.GetSource())
self.UpdateControlState()
- self.ReloadDemo()
def LoadDemoSource(self, source):
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):
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)
busy = wx.BusyInfo("Reloading demo module...")
self.demoModules.LoadFromFile(modModified, modifiedFilename)
self.ActiveModuleChanged()
+ self.ReloadDemo()
def OnRestore(self, event): # Handles the "Delete Modified" button
os.unlink(modifiedFilename) # Delete the modified copy
busy = wx.BusyInfo("Reloading demo module...")
self.ActiveModuleChanged()
+ self.ReloadDemo()
#---------------------------------------------------------------------------
# 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()
filename = self.modules[modID][2]
try:
- file = open(filename, "w")
+ file = open(filename, "wt")
file.write(source)
finally:
file.close()
self.demoPage = None
self.codePage = None
self.useModified = False
+ self.shell = None
icon = images.getMondrianIcon()
self.SetIcon(icon)
#
# 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)
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)
self.codePage.LoadDemo(self.demoModules)
#---------------------------------------------
- def RunModule(self):
+ def RunModule(self, loadSource):
"""Runs the active module"""
module = self.demoModules.GetActive()
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()
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()
UpdatePage(self.codePage, "Demo Code")
UpdatePage(self.demoPage, "Demo")
- if select >= 0:
+ if select >= 0 and select < nb.GetPageCount():
nb.SetSelection(select)
#---------------------------------------------
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
os.chdir(demoPath)
except:
pass
- app = MyApp(0) ##wx.Platform == "__WXMAC__")
+ app = MyApp(False)
app.MainLoop()
#---------------------------------------------------------------------------