2000-07-15 15:51:35 -04:00
|
|
|
#!/usr/bin/env python
|
2000-03-10 22:20:42 -05: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 19:13:10 -04:00
|
|
|
import wx # This module uses the new wx namespace
|
2003-12-02 22:26:20 -05:00
|
|
|
import sys, os
|
|
|
|
|
|
|
|
# stuff for debugging
|
2003-07-31 15:21:05 -04:00
|
|
|
print "wx.VERSION_STRING = ", wx.VERSION_STRING
|
2003-12-02 22:26:20 -05:00
|
|
|
print "pid:", os.getpid()
|
|
|
|
##raw_input("Press a key...")
|
2000-03-10 22:20:42 -05:00
|
|
|
|
2003-11-12 16:34:20 -05:00
|
|
|
assertMode = wx.PYAPP_ASSERT_DIALOG
|
|
|
|
##assertMode = wx.PYAPP_ASSERT_EXCEPTION
|
|
|
|
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class Log:
|
|
|
|
def WriteText(self, text):
|
2003-03-25 01:35:27 -05:00
|
|
|
if text[-1:] == '\n':
|
|
|
|
text = text[:-1]
|
2003-07-02 19:13:10 -04:00
|
|
|
wx.LogMessage(text)
|
2000-03-10 22:20:42 -05:00
|
|
|
write = WriteText
|
|
|
|
|
|
|
|
|
2003-07-02 19:13:10 -04:00
|
|
|
class RunDemoApp(wx.App):
|
2000-03-10 22:20:42 -05:00
|
|
|
def __init__(self, name, module):
|
|
|
|
self.name = name
|
|
|
|
self.demoModule = module
|
2003-07-02 19:13:10 -04:00
|
|
|
wx.App.__init__(self, 0)
|
2002-05-15 01:05:02 -04:00
|
|
|
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
def OnInit(self):
|
2003-07-02 19:13:10 -04:00
|
|
|
wx.InitAllImageHandlers()
|
|
|
|
wx.Log_SetActiveTarget(wx.LogStderr())
|
2003-03-25 01:35:27 -05:00
|
|
|
|
2003-11-12 16:34:20 -05:00
|
|
|
self.SetAssertMode(assertMode)
|
2003-07-02 19:13:10 -04:00
|
|
|
|
2003-11-22 17:57:49 -05:00
|
|
|
frame = wx.Frame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(200,100),
|
2003-07-02 19:13:10 -04:00
|
|
|
style=wx.NO_FULL_REPAINT_ON_RESIZE|wx.DEFAULT_FRAME_STYLE)
|
2000-03-10 22:20:42 -05:00
|
|
|
frame.CreateStatusBar()
|
2003-07-02 19:13:10 -04:00
|
|
|
menuBar = wx.MenuBar()
|
|
|
|
menu = wx.Menu()
|
2001-10-17 01:29:57 -04:00
|
|
|
menu.Append(101, "E&xit\tAlt-X", "Exit demo")
|
2003-07-02 19:13:10 -04:00
|
|
|
wx.EVT_MENU(self, 101, self.OnButton)
|
2001-10-17 01:29:57 -04:00
|
|
|
menuBar.Append(menu, "&File")
|
|
|
|
frame.SetMenuBar(menuBar)
|
2003-03-25 01:35:27 -05:00
|
|
|
frame.Show(True)
|
2003-07-02 19:13:10 -04:00
|
|
|
wx.EVT_CLOSE(frame, self.OnCloseFrame)
|
2003-03-25 01:35:27 -05:00
|
|
|
|
2000-03-10 22:20:42 -05: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 15:51:35 -04:00
|
|
|
frame.SetSize((640, 480))
|
|
|
|
win.SetFocus()
|
2003-03-25 01:35:27 -05:00
|
|
|
self.window = win
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
else:
|
|
|
|
# otherwise the demo made its own frame, so just put a
|
|
|
|
# button in this one
|
|
|
|
if hasattr(frame, 'otherWin'):
|
2003-11-12 16:34:20 -05: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 19:13:10 -04:00
|
|
|
wx.EVT_BUTTON(frame, b.GetId(), self.OnButton)
|
2000-03-10 22:20:42 -05:00
|
|
|
else:
|
|
|
|
# It was probably a dialog or something that is already
|
|
|
|
# gone, so we're done.
|
|
|
|
frame.Destroy()
|
2003-03-25 01:35:27 -05:00
|
|
|
return True
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
self.SetTopWindow(frame)
|
|
|
|
self.frame = frame
|
2003-07-02 19:13:10 -04:00
|
|
|
#wx.Log_SetActiveTarget(wx.LogStderr())
|
|
|
|
#wx.Log_SetTraceMask(wx.TraceMessages)
|
2003-03-25 01:35:27 -05:00
|
|
|
return True
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
|
|
|
|
def OnButton(self, evt):
|
2003-03-25 01:35:27 -05: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-10 22:20:42 -05:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
2000-03-11 02:24:00 -05:00
|
|
|
def main(argv):
|
2002-08-16 15:44:51 -04:00
|
|
|
if len(argv) < 2:
|
2000-03-10 22:20:42 -05:00
|
|
|
print "Please specify a demo module name on the command-line"
|
|
|
|
raise SystemExit
|
|
|
|
|
2000-03-11 02:24:00 -05:00
|
|
|
name = argv[1]
|
2000-07-15 15:51:35 -04:00
|
|
|
if name[-3:] == '.py':
|
|
|
|
name = name[:-3]
|
2000-03-10 22:20:42 -05:00
|
|
|
module = __import__(name)
|
|
|
|
|
|
|
|
|
|
|
|
app = RunDemoApp(name, module)
|
|
|
|
app.MainLoop()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2000-03-11 02:24:00 -05:00
|
|
|
main(sys.argv)
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
|