2000-07-15 19:51:35 +00:00
|
|
|
#!/usr/bin/env python
|
2000-03-11 03:20:42 +00:00
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
# Name: run.py
|
|
|
|
# Purpose: Simple framework for running individual demos
|
|
|
|
#
|
|
|
|
# Author: Robin Dunn
|
|
|
|
#
|
|
|
|
# Created: 6-March-2000
|
|
|
|
# RCS-ID: $Id$
|
|
|
|
# Copyright: (c) 2000 by Total Control Software
|
|
|
|
# Licence: wxWindows license
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
"""
|
|
|
|
This program will load and run one of the individual demos in this
|
|
|
|
directory within its own frame window. Just specify the module name
|
|
|
|
on the command line.
|
|
|
|
"""
|
|
|
|
|
2003-07-02 23:13:10 +00:00
|
|
|
import wx # This module uses the new wx namespace
|
2003-07-31 19:21:05 +00:00
|
|
|
print "wx.VERSION_STRING = ", wx.VERSION_STRING
|
2000-03-11 03:20:42 +00:00
|
|
|
|
2003-11-12 21:34:20 +00:00
|
|
|
assertMode = wx.PYAPP_ASSERT_DIALOG
|
|
|
|
##assertMode = wx.PYAPP_ASSERT_EXCEPTION
|
|
|
|
|
2002-01-05 23:45:33 +00:00
|
|
|
import sys, os
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class Log:
|
|
|
|
def WriteText(self, text):
|
2003-03-25 06:35:27 +00:00
|
|
|
if text[-1:] == '\n':
|
|
|
|
text = text[:-1]
|
2003-07-02 23:13:10 +00:00
|
|
|
wx.LogMessage(text)
|
2000-03-11 03:20:42 +00:00
|
|
|
write = WriteText
|
|
|
|
|
|
|
|
|
2003-07-02 23:13:10 +00:00
|
|
|
class RunDemoApp(wx.App):
|
2000-03-11 03:20:42 +00:00
|
|
|
def __init__(self, name, module):
|
|
|
|
self.name = name
|
|
|
|
self.demoModule = module
|
2003-07-02 23:13:10 +00:00
|
|
|
wx.App.__init__(self, 0)
|
2002-05-15 05:05:02 +00:00
|
|
|
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
def OnInit(self):
|
2003-07-02 23:13:10 +00:00
|
|
|
wx.InitAllImageHandlers()
|
|
|
|
wx.Log_SetActiveTarget(wx.LogStderr())
|
2003-03-25 06:35:27 +00:00
|
|
|
|
2003-11-12 21:34:20 +00:00
|
|
|
self.SetAssertMode(assertMode)
|
2003-07-02 23:13:10 +00:00
|
|
|
|
2003-11-22 22:57:49 +00:00
|
|
|
frame = wx.Frame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(200,100),
|
2003-07-02 23:13:10 +00:00
|
|
|
style=wx.NO_FULL_REPAINT_ON_RESIZE|wx.DEFAULT_FRAME_STYLE)
|
2000-03-11 03:20:42 +00:00
|
|
|
frame.CreateStatusBar()
|
2003-07-02 23:13:10 +00:00
|
|
|
menuBar = wx.MenuBar()
|
|
|
|
menu = wx.Menu()
|
2001-10-17 05:29:57 +00:00
|
|
|
menu.Append(101, "E&xit\tAlt-X", "Exit demo")
|
2003-07-02 23:13:10 +00:00
|
|
|
wx.EVT_MENU(self, 101, self.OnButton)
|
2001-10-17 05:29:57 +00:00
|
|
|
menuBar.Append(menu, "&File")
|
|
|
|
frame.SetMenuBar(menuBar)
|
2003-03-25 06:35:27 +00:00
|
|
|
frame.Show(True)
|
2003-07-02 23:13:10 +00:00
|
|
|
wx.EVT_CLOSE(frame, self.OnCloseFrame)
|
2003-03-25 06:35:27 +00:00
|
|
|
|
2000-03-11 03:20:42 +00:00
|
|
|
win = self.demoModule.runTest(frame, frame, Log())
|
|
|
|
|
|
|
|
# a window will be returned if the demo does not create
|
|
|
|
# its own top-level window
|
|
|
|
if win:
|
|
|
|
# so set the frame to a good size for showing stuff
|
2000-07-15 19:51:35 +00:00
|
|
|
frame.SetSize((640, 480))
|
|
|
|
win.SetFocus()
|
2003-03-25 06:35:27 +00:00
|
|
|
self.window = win
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
else:
|
|
|
|
# otherwise the demo made its own frame, so just put a
|
|
|
|
# button in this one
|
|
|
|
if hasattr(frame, 'otherWin'):
|
2003-11-12 21:34:20 +00:00
|
|
|
p = wx.Panel(frame, -1)
|
|
|
|
b = wx.Button(p, -1, " Exit ", (10,10))
|
|
|
|
p.Fit()
|
|
|
|
frame.SetClientSize(p.GetSize())
|
|
|
|
#frame.SetSize((200, 100))
|
2003-07-02 23:13:10 +00:00
|
|
|
wx.EVT_BUTTON(frame, b.GetId(), self.OnButton)
|
2000-03-11 03:20:42 +00:00
|
|
|
else:
|
|
|
|
# It was probably a dialog or something that is already
|
|
|
|
# gone, so we're done.
|
|
|
|
frame.Destroy()
|
2003-03-25 06:35:27 +00:00
|
|
|
return True
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
self.SetTopWindow(frame)
|
|
|
|
self.frame = frame
|
2003-07-02 23:13:10 +00:00
|
|
|
#wx.Log_SetActiveTarget(wx.LogStderr())
|
|
|
|
#wx.Log_SetTraceMask(wx.TraceMessages)
|
2003-03-25 06:35:27 +00:00
|
|
|
return True
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
def OnButton(self, evt):
|
2003-03-25 06:35:27 +00:00
|
|
|
self.frame.Close(True)
|
|
|
|
|
|
|
|
|
|
|
|
def OnCloseFrame(self, evt):
|
|
|
|
if hasattr(self, "window") and hasattr(self.window, "ShutdownDemo"):
|
|
|
|
self.window.ShutdownDemo()
|
|
|
|
evt.Skip()
|
|
|
|
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
2000-03-11 07:24:00 +00:00
|
|
|
def main(argv):
|
2002-08-16 19:44:51 +00:00
|
|
|
if len(argv) < 2:
|
2000-03-11 03:20:42 +00:00
|
|
|
print "Please specify a demo module name on the command-line"
|
|
|
|
raise SystemExit
|
|
|
|
|
2000-03-11 07:24:00 +00:00
|
|
|
name = argv[1]
|
2000-07-15 19:51:35 +00:00
|
|
|
if name[-3:] == '.py':
|
|
|
|
name = name[:-3]
|
2000-03-11 03:20:42 +00:00
|
|
|
module = __import__(name)
|
|
|
|
|
|
|
|
|
|
|
|
app = RunDemoApp(name, module)
|
|
|
|
app.MainLoop()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2000-03-11 07:24:00 +00:00
|
|
|
main(sys.argv)
|
2000-03-11 03:20:42 +00:00
|
|
|
|
|
|
|
|