]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/run.py
Docstring tweaks, fixed typo, etc.
[wxWidgets.git] / wxPython / demo / run.py
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 """
15 This program will load and run one of the individual demos in this
16 directory within its own frame window. Just specify the module name
17 on the command line.
18 """
19
20 import wx # This module uses the new wx namespace
21 import sys, os
22
23 # stuff for debugging
24 print "wx.VERSION_STRING = ", wx.VERSION_STRING
25 print "pid:", os.getpid()
26 ##raw_input("Press a key...")
27
28 assertMode = wx.PYAPP_ASSERT_DIALOG
29 ##assertMode = wx.PYAPP_ASSERT_EXCEPTION
30
31
32 #----------------------------------------------------------------------------
33
34 class Log:
35 def WriteText(self, text):
36 if text[-1:] == '\n':
37 text = text[:-1]
38 wx.LogMessage(text)
39 write = WriteText
40
41
42 class 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
59 menuBar = wx.MenuBar()
60 menu = wx.Menu()
61 item = menu.Append(-1, "E&xit\tAlt-X", "Exit demo")
62 self.Bind(wx.EVT_MENU, self.OnButton, item)
63 menuBar.Append(menu, "&File")
64
65 frame.SetMenuBar(menuBar)
66 frame.Show(True)
67 frame.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
68
69 win = self.demoModule.runTest(frame, frame, Log())
70
71 # a window will be returned if the demo does not create
72 # its own top-level window
73 if win:
74 # so set the frame to a good size for showing stuff
75 frame.SetSize((640, 480))
76 win.SetFocus()
77 self.window = win
78
79 else:
80 # otherwise the demo made its own frame, so just put a
81 # button in this one
82 if hasattr(frame, 'otherWin'):
83 p = wx.Panel(frame, -1)
84 b = wx.Button(p, -1, " Exit ", (10,10))
85 p.Fit()
86 frame.SetClientSize(p.GetSize())
87 #frame.SetSize((200, 100))
88 frame.Bind(wx.EVT_BUTTON, self.OnButton, b)
89 else:
90 # It was probably a dialog or something that is already
91 # gone, so we're done.
92 frame.Destroy()
93 return True
94
95 self.SetTopWindow(frame)
96 self.frame = frame
97 #wx.Log_SetActiveTarget(wx.LogStderr())
98 #wx.Log_SetTraceMask(wx.TraceMessages)
99 return True
100
101
102 def OnButton(self, evt):
103 self.frame.Close(True)
104
105
106 def OnCloseFrame(self, evt):
107 if hasattr(self, "window") and hasattr(self.window, "ShutdownDemo"):
108 self.window.ShutdownDemo()
109 evt.Skip()
110
111
112 #----------------------------------------------------------------------------
113
114
115 def main(argv):
116 if len(argv) < 2:
117 print "Please specify a demo module name on the command-line"
118 raise SystemExit
119
120 name, ext = os.path.splitext(argv[1])
121 module = __import__(name)
122
123
124 app = RunDemoApp(name, module)
125 app.MainLoop()
126
127
128
129 if __name__ == "__main__":
130 main(sys.argv)
131
132