]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/demo/run.py
Stop the timer when the demo is shutdown
[wxWidgets.git] / wxPython / demo / run.py
... / ...
CommitLineData
1#!/usr/bin/env python
2#----------------------------------------------------------------------------
3# Name: run.py
4# Purpose: Simple framework for running individual demos
5#
6# Author: Robin Dunn
7#
8# Created: 6-March-2000
9# RCS-ID: $Id$
10# Copyright: (c) 2000 by Total Control Software
11# Licence: wxWindows license
12#----------------------------------------------------------------------------
13
14"""
15This program will load and run one of the individual demos in this
16directory within its own frame window. Just specify the module name
17on the command line.
18"""
19
20import wx # This module uses the new wx namespace
21import sys, os
22
23# stuff for debugging
24print "wx.VERSION_STRING = ", wx.VERSION_STRING
25print "pid:", os.getpid()
26##raw_input("Press a key...")
27
28assertMode = wx.PYAPP_ASSERT_DIALOG
29##assertMode = wx.PYAPP_ASSERT_EXCEPTION
30
31
32#----------------------------------------------------------------------------
33
34class Log:
35 def WriteText(self, text):
36 if text[-1:] == '\n':
37 text = text[:-1]
38 wx.LogMessage(text)
39 write = WriteText
40
41
42class RunDemoApp(wx.App):
43 def __init__(self, name, module):
44 self.name = name
45 self.demoModule = module
46 wx.App.__init__(self, 0)
47
48
49 def OnInit(self):
50 wx.InitAllImageHandlers()
51 wx.Log_SetActiveTarget(wx.LogStderr())
52
53 self.SetAssertMode(assertMode)
54
55 frame = wx.Frame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(200,100),
56 style=wx.NO_FULL_REPAINT_ON_RESIZE|wx.DEFAULT_FRAME_STYLE)
57 frame.CreateStatusBar()
58 menuBar = wx.MenuBar()
59 menu = wx.Menu()
60 menu.Append(101, "E&xit\tAlt-X", "Exit demo")
61 wx.EVT_MENU(self, 101, self.OnButton)
62 menuBar.Append(menu, "&File")
63 frame.SetMenuBar(menuBar)
64 frame.Show(True)
65 wx.EVT_CLOSE(frame, self.OnCloseFrame)
66
67 win = self.demoModule.runTest(frame, frame, Log())
68
69 # a window will be returned if the demo does not create
70 # its own top-level window
71 if win:
72 # so set the frame to a good size for showing stuff
73 frame.SetSize((640, 480))
74 win.SetFocus()
75 self.window = win
76
77 else:
78 # otherwise the demo made its own frame, so just put a
79 # button in this one
80 if hasattr(frame, 'otherWin'):
81 p = wx.Panel(frame, -1)
82 b = wx.Button(p, -1, " Exit ", (10,10))
83 p.Fit()
84 frame.SetClientSize(p.GetSize())
85 #frame.SetSize((200, 100))
86 wx.EVT_BUTTON(frame, b.GetId(), self.OnButton)
87 else:
88 # It was probably a dialog or something that is already
89 # gone, so we're done.
90 frame.Destroy()
91 return True
92
93 self.SetTopWindow(frame)
94 self.frame = frame
95 #wx.Log_SetActiveTarget(wx.LogStderr())
96 #wx.Log_SetTraceMask(wx.TraceMessages)
97 return True
98
99
100 def OnButton(self, evt):
101 self.frame.Close(True)
102
103
104 def OnCloseFrame(self, evt):
105 if hasattr(self, "window") and hasattr(self.window, "ShutdownDemo"):
106 self.window.ShutdownDemo()
107 evt.Skip()
108
109
110#----------------------------------------------------------------------------
111
112
113def main(argv):
114 if len(argv) < 2:
115 print "Please specify a demo module name on the command-line"
116 raise SystemExit
117
118 name = argv[1]
119 if name[-3:] == '.py':
120 name = name[:-3]
121 module = __import__(name)
122
123
124 app = RunDemoApp(name, module)
125 app.MainLoop()
126
127
128
129if __name__ == "__main__":
130 main(sys.argv)
131
132