]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/run.py
Stop the timer when the demo is shutdown
[wxWidgets.git] / wxPython / demo / run.py
CommitLineData
f6bcfd97 1#!/usr/bin/env python
4c9993c3
RD
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
1fded56b 20import wx # This module uses the new wx namespace
c38400d0
RD
21import sys, os
22
23# stuff for debugging
8dc6dcde 24print "wx.VERSION_STRING = ", wx.VERSION_STRING
c38400d0
RD
25print "pid:", os.getpid()
26##raw_input("Press a key...")
4c9993c3 27
d14a1e28
RD
28assertMode = wx.PYAPP_ASSERT_DIALOG
29##assertMode = wx.PYAPP_ASSERT_EXCEPTION
30
4c9993c3
RD
31
32#----------------------------------------------------------------------------
33
34class Log:
35 def WriteText(self, text):
1e4a197e
RD
36 if text[-1:] == '\n':
37 text = text[:-1]
1fded56b 38 wx.LogMessage(text)
4c9993c3
RD
39 write = WriteText
40
41
1fded56b 42class RunDemoApp(wx.App):
4c9993c3
RD
43 def __init__(self, name, module):
44 self.name = name
45 self.demoModule = module
1fded56b 46 wx.App.__init__(self, 0)
0af45411 47
4c9993c3
RD
48
49 def OnInit(self):
1fded56b
RD
50 wx.InitAllImageHandlers()
51 wx.Log_SetActiveTarget(wx.LogStderr())
1e4a197e 52
d14a1e28 53 self.SetAssertMode(assertMode)
1fded56b 54
fd3f2efe 55 frame = wx.Frame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(200,100),
1fded56b 56 style=wx.NO_FULL_REPAINT_ON_RESIZE|wx.DEFAULT_FRAME_STYLE)
4c9993c3 57 frame.CreateStatusBar()
1fded56b
RD
58 menuBar = wx.MenuBar()
59 menu = wx.Menu()
8082483b 60 menu.Append(101, "E&xit\tAlt-X", "Exit demo")
1fded56b 61 wx.EVT_MENU(self, 101, self.OnButton)
8082483b
RD
62 menuBar.Append(menu, "&File")
63 frame.SetMenuBar(menuBar)
1e4a197e 64 frame.Show(True)
1fded56b 65 wx.EVT_CLOSE(frame, self.OnCloseFrame)
1e4a197e 66
4c9993c3
RD
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
f6bcfd97
BP
73 frame.SetSize((640, 480))
74 win.SetFocus()
1e4a197e 75 self.window = win
4c9993c3
RD
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'):
d14a1e28
RD
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))
1fded56b 86 wx.EVT_BUTTON(frame, b.GetId(), self.OnButton)
4c9993c3
RD
87 else:
88 # It was probably a dialog or something that is already
89 # gone, so we're done.
90 frame.Destroy()
1e4a197e 91 return True
4c9993c3
RD
92
93 self.SetTopWindow(frame)
94 self.frame = frame
1fded56b
RD
95 #wx.Log_SetActiveTarget(wx.LogStderr())
96 #wx.Log_SetTraceMask(wx.TraceMessages)
1e4a197e 97 return True
4c9993c3
RD
98
99
100 def OnButton(self, evt):
1e4a197e
RD
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
4c9993c3
RD
109
110#----------------------------------------------------------------------------
111
112
7ff49f0c 113def main(argv):
3979290c 114 if len(argv) < 2:
4c9993c3
RD
115 print "Please specify a demo module name on the command-line"
116 raise SystemExit
117
7ff49f0c 118 name = argv[1]
f6bcfd97
BP
119 if name[-3:] == '.py':
120 name = name[:-3]
4c9993c3
RD
121 module = __import__(name)
122
123
124 app = RunDemoApp(name, module)
125 app.MainLoop()
126
127
128
129if __name__ == "__main__":
7ff49f0c 130 main(sys.argv)
4c9993c3
RD
131
132