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.
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
2002-01-05 23:45:33 +00:00
|
|
|
import sys, os
|
2000-03-11 03:20:42 +00:00
|
|
|
from wxPython.wx import *
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class Log:
|
|
|
|
def WriteText(self, text):
|
|
|
|
sys.stdout.write(text)
|
|
|
|
write = WriteText
|
|
|
|
|
|
|
|
|
|
|
|
class RunDemoApp(wxApp):
|
|
|
|
def __init__(self, name, module):
|
|
|
|
self.name = name
|
|
|
|
self.demoModule = module
|
|
|
|
wxApp.__init__(self, 0)
|
|
|
|
|
|
|
|
def OnInit(self):
|
|
|
|
wxInitAllImageHandlers()
|
2000-07-15 19:51:35 +00:00
|
|
|
frame = wxFrame(None, -1, "RunDemo: " + self.name, size=(0,0),
|
|
|
|
style=wxNO_FULL_REPAINT_ON_RESIZE|wxDEFAULT_FRAME_STYLE)
|
2000-03-11 03:20:42 +00:00
|
|
|
frame.CreateStatusBar()
|
2001-10-17 05:29:57 +00:00
|
|
|
menuBar = wxMenuBar()
|
|
|
|
menu = wxMenu()
|
|
|
|
menu.Append(101, "E&xit\tAlt-X", "Exit demo")
|
|
|
|
EVT_MENU(self, 101, self.OnButton)
|
|
|
|
menuBar.Append(menu, "&File")
|
|
|
|
frame.SetMenuBar(menuBar)
|
2000-03-11 03:20:42 +00:00
|
|
|
frame.Show(true)
|
|
|
|
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()
|
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'):
|
2002-01-05 23:45:33 +00:00
|
|
|
b = wxButton(frame, -1, " Exit ")
|
2000-03-11 03:20:42 +00:00
|
|
|
frame.SetSize((200, 100))
|
2002-01-05 23:45:33 +00:00
|
|
|
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()
|
|
|
|
return true
|
|
|
|
|
|
|
|
self.SetTopWindow(frame)
|
|
|
|
self.frame = frame
|
|
|
|
return true
|
|
|
|
|
|
|
|
|
|
|
|
def OnButton(self, evt):
|
|
|
|
self.frame.Close(true)
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
2000-03-11 07:24:00 +00:00
|
|
|
def main(argv):
|
|
|
|
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
|
|
|
|
|
|
|
|