]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/run.py
Some little demo tweaks
[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 25print "pid:", os.getpid()
74a57fcd 26##raw_input("Press Enter...")
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):
8eca4fef 43 def __init__(self, name, module, useShell):
4c9993c3
RD
44 self.name = name
45 self.demoModule = module
8eca4fef 46 self.useShell = useShell
4287ca9e 47 wx.App.__init__(self, redirect=False)
0af45411 48
4c9993c3
RD
49
50 def OnInit(self):
1fded56b 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),
e478ff9e 56 style=wx.DEFAULT_FRAME_STYLE)
4c9993c3 57 frame.CreateStatusBar()
7f8f0b88 58
1fded56b
RD
59 menuBar = wx.MenuBar()
60 menu = wx.Menu()
7f8f0b88
RD
61 item = menu.Append(-1, "E&xit\tAlt-X", "Exit demo")
62 self.Bind(wx.EVT_MENU, self.OnButton, item)
8082483b 63 menuBar.Append(menu, "&File")
7f8f0b88 64
8eca4fef 65 ns = {}
31e36465 66 ns['wx'] = wx
8eca4fef
RD
67 ns['app'] = self
68 ns['module'] = self.demoModule
69 ns['frame'] = frame
70
8082483b 71 frame.SetMenuBar(menuBar)
1e4a197e 72 frame.Show(True)
7f8f0b88 73 frame.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
1e4a197e 74
4c9993c3
RD
75 win = self.demoModule.runTest(frame, frame, Log())
76
77 # a window will be returned if the demo does not create
78 # its own top-level window
79 if win:
80 # so set the frame to a good size for showing stuff
f6bcfd97
BP
81 frame.SetSize((640, 480))
82 win.SetFocus()
1e4a197e 83 self.window = win
8eca4fef
RD
84 ns['win'] = win
85 frect = frame.GetRect()
4c9993c3
RD
86
87 else:
88 # otherwise the demo made its own frame, so just put a
89 # button in this one
90 if hasattr(frame, 'otherWin'):
8eca4fef
RD
91 ns['win'] = frame.otherWin
92 frect = frame.otherWin.GetRect()
d14a1e28
RD
93 p = wx.Panel(frame, -1)
94 b = wx.Button(p, -1, " Exit ", (10,10))
d6b5679f 95 wx.CallAfter(frame.SetClientSize, (200, 100))
7f8f0b88 96 frame.Bind(wx.EVT_BUTTON, self.OnButton, b)
4c9993c3
RD
97 else:
98 # It was probably a dialog or something that is already
99 # gone, so we're done.
100 frame.Destroy()
1e4a197e 101 return True
4c9993c3
RD
102
103 self.SetTopWindow(frame)
104 self.frame = frame
1fded56b
RD
105 #wx.Log_SetActiveTarget(wx.LogStderr())
106 #wx.Log_SetTraceMask(wx.TraceMessages)
8eca4fef
RD
107
108 if self.useShell:
109 # Make a PyShell window, and position it below our test window
110 from wx import py
111 shell = py.shell.ShellFrame(None, locals=ns)
112 frect.OffsetXY(0, frect.height)
113 frect.height = 400
114 shell.SetRect(frect)
115 shell.Show()
116
117 # Hook the close event of the test window so that we close
118 # the shell at the same time
119 def CloseShell(evt):
71ed12a0
RD
120 if shell:
121 shell.Close()
8eca4fef
RD
122 evt.Skip()
123 frame.Bind(wx.EVT_CLOSE, CloseShell)
124
1e4a197e 125 return True
4c9993c3
RD
126
127
128 def OnButton(self, evt):
1e4a197e
RD
129 self.frame.Close(True)
130
131
132 def OnCloseFrame(self, evt):
133 if hasattr(self, "window") and hasattr(self.window, "ShutdownDemo"):
134 self.window.ShutdownDemo()
135 evt.Skip()
136
4c9993c3
RD
137
138#----------------------------------------------------------------------------
139
140
7ff49f0c 141def main(argv):
8eca4fef
RD
142 useShell = False
143 for x in range(len(sys.argv)):
144 if sys.argv[x] in ['--shell', '-shell', '-s']:
145 useShell = True
146 del sys.argv[x]
147 break
148
3979290c 149 if len(argv) < 2:
4c9993c3
RD
150 print "Please specify a demo module name on the command-line"
151 raise SystemExit
152
887dfc14 153 name, ext = os.path.splitext(argv[1])
4c9993c3
RD
154 module = __import__(name)
155
156
8eca4fef 157 app = RunDemoApp(name, module, useShell)
4c9993c3
RD
158 app.MainLoop()
159
160
161
162if __name__ == "__main__":
7ff49f0c 163 main(sys.argv)
4c9993c3
RD
164
165