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.
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
2002-01-05 18:45:33 -05:00
|
|
|
import sys, os
|
2000-03-10 22:20:42 -05:00
|
|
|
from wxPython.wx import *
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class Log:
|
|
|
|
def WriteText(self, text):
|
2003-03-25 01:35:27 -05:00
|
|
|
if text[-1:] == '\n':
|
|
|
|
text = text[:-1]
|
|
|
|
wxLogMessage(text)
|
2000-03-10 22:20:42 -05:00
|
|
|
write = WriteText
|
|
|
|
|
|
|
|
|
|
|
|
class RunDemoApp(wxApp):
|
|
|
|
def __init__(self, name, module):
|
|
|
|
self.name = name
|
|
|
|
self.demoModule = module
|
2002-08-13 19:59:08 -04:00
|
|
|
wxApp.__init__(self, 0) ##wxPlatform == "__WXMAC__")
|
2002-05-15 01:05:02 -04:00
|
|
|
|
2000-03-10 22:20:42 -05:00
|
|
|
|
|
|
|
def OnInit(self):
|
|
|
|
wxInitAllImageHandlers()
|
2003-03-25 01:35:27 -05:00
|
|
|
wxLog_SetActiveTarget(wxLogStderr())
|
|
|
|
|
|
|
|
frame = wxFrame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(0,0),
|
2000-07-15 15:51:35 -04:00
|
|
|
style=wxNO_FULL_REPAINT_ON_RESIZE|wxDEFAULT_FRAME_STYLE)
|
2000-03-10 22:20:42 -05:00
|
|
|
frame.CreateStatusBar()
|
2001-10-17 01:29:57 -04: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)
|
2003-03-25 01:35:27 -05:00
|
|
|
frame.Show(True)
|
|
|
|
EVT_CLOSE(frame, self.OnCloseFrame)
|
|
|
|
|
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'):
|
2002-01-05 18:45:33 -05:00
|
|
|
b = wxButton(frame, -1, " Exit ")
|
2000-03-10 22:20:42 -05:00
|
|
|
frame.SetSize((200, 100))
|
2002-01-05 18:45:33 -05:00
|
|
|
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
|
2002-06-26 16:08:30 -04:00
|
|
|
#wxLog_SetActiveTarget(wxLogStderr())
|
|
|
|
#wxLog_SetTraceMask(wxTraceMessages)
|
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
|
|
|
|
|
|
|
|