]),
# managed windows == things with a (optional) caption you can close
- ('Base Frames and Dialogs', [
+ ('Frames and Dialogs', [
'Dialog',
'Frame',
'MDIWindows',
'ColourDialog',
'DirDialog',
'FileDialog',
- 'FileDialog_Save',
'FindReplaceDialog',
'FontDialog',
'MessageDialog',
'PythonEvents',
'Threads',
'Timer',
- 'infoframe',
+ ##'infoframe', # needs better explaination and some fixing
]),
# Clipboard and DnD
# Other stuff
('Miscellaneous', [
'ColourDB',
- 'DialogUnits',
+ ##'DialogUnits', # needs more explainations
'DrawXXXList',
'FileHistory',
'FontEnumerator',
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)
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)
# load original module
self.LoadFromFile(modOriginal, GetOriginalFilename(name))
+ self.SetActive(modOriginal)
# load modified module (if one exists)
if DoesModifiedExist(name):
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.modules[modID][2] = ""
-#---------------------------------------------------------------------------
-class ReloadDemoPanel(wx.Panel):
- """
- Panel put into the demo tab when the demo just shows some
- top-level window. Enables the demo to be reloaded after being
- closed.
- """
-
- infoText = "This demo runs outside the main window"
-
- def __init__(self, parent, codePanel, log):
- wx.Panel.__init__(self, parent, -1)
- self.codePanel = codePanel
- self.log = log
-
- self.label = wx.StaticText(self, -1, self.infoText)
- self.btnReload = wx.Button(self, -1, "Reload Demo")
- self.btnReload.Bind(wx.EVT_BUTTON, self.OnReload)
-
- self.box = wx.BoxSizer(wx.VERTICAL)
- self.box.Add(self.label, 0, wx.ALIGN_CENTER | wx.ALL, 10)
- self.box.Add(self.btnReload, 0, wx.ALIGN_CENTER | wx.ALL, 10)
-
- self.box.Fit(self)
- self.SetSizer(self.box)
-
- def OnReload(self, event):
- self.codePanel.ReloadDemo()
-
#---------------------------------------------------------------------------
class DemoError:
overviewText = "wxPython Overview"
def __init__(self, parent, title):
- wx.Frame.__init__(self, parent, -1, title, size = (950, 750),
+ wx.Frame.__init__(self, parent, -1, title, size = (950, 720),
style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
self.loaded = False
self.curOverview = ""
self.demoPage = None
self.codePage = None
- self.useModified = False
+ self.shell = None
+ self.firstTime = True
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 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)
+
+ assert self.demoPage is not None, "runTest must return a window!"
+
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)
+
self.SetOverview(self.demoModules.name + " Overview", overviewText)
- self.UpdateNotebook()
+
+ if self.firstTime:
+ # cahnge to the demo page the first time a module is run
+ self.UpdateNotebook(2)
+ self.firstTime = False
+ else:
+ # otherwise just stay on the same tab in case the user has changed to another one
+ self.UpdateNotebook()
#---------------------------------------------
def ShutdownDemoModule(self):
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()
#---------------------------------------------------------------------------