]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/run.py
Aquire the GIL before raising the NotImplementedError exception
[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 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
113 def 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
129 if __name__ == "__main__":
130 main(sys.argv)
131
132