~ubuntu-dev/wxwidgets2.6/upstream-debian

« back to all changes in this revision

Viewing changes to wxPython/demo/run.py

  • Committer: Daniel T Chen
  • Date: 2006-06-26 10:15:11 UTC
  • Revision ID: crimsun@ubuntu.com-20060626101511-a4436cec4c6d9b35
ImportĀ DebianĀ 2.6.3.2.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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: run.py,v 1.29.2.1 2006/01/26 00:33:39 RD Exp $
 
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 = %s (%s)" % (wx.VERSION_STRING, wx.USE_UNICODE and 'unicode' or 'ansi')
 
25
print "pid:", os.getpid()
 
26
##raw_input("Press Enter...")
 
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, useShell):
 
44
        self.name = name
 
45
        self.demoModule = module
 
46
        self.useShell = useShell
 
47
        wx.App.__init__(self, redirect=False)
 
48
 
 
49
 
 
50
    def OnInit(self):
 
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.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.OnExitApp, item)
 
63
        menuBar.Append(menu, "&File")
 
64
 
 
65
        ns = {}
 
66
        ns['wx'] = wx
 
67
        ns['app'] = self
 
68
        ns['module'] = self.demoModule
 
69
        ns['frame'] = frame
 
70
        
 
71
        frame.SetMenuBar(menuBar)
 
72
        frame.Show(True)
 
73
        frame.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
 
74
 
 
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
 
81
            frame.SetSize((640, 480))
 
82
            win.SetFocus()
 
83
            self.window = win
 
84
            ns['win'] = win
 
85
            frect = frame.GetRect()
 
86
 
 
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
 
 
98
        if self.useShell:
 
99
            # Make a PyShell window, and position it below our test window
 
100
            from wx import py
 
101
            shell = py.shell.ShellFrame(None, locals=ns)
 
102
            frect.OffsetXY(0, frect.height)
 
103
            frect.height = 400
 
104
            shell.SetRect(frect)
 
105
            shell.Show()
 
106
 
 
107
            # Hook the close event of the test window so that we close
 
108
            # the shell at the same time
 
109
            def CloseShell(evt):
 
110
                if shell:
 
111
                    shell.Close()
 
112
                evt.Skip()
 
113
            frame.Bind(wx.EVT_CLOSE, CloseShell)
 
114
                    
 
115
        return True
 
116
 
 
117
 
 
118
    def OnExitApp(self, evt):
 
119
        self.frame.Close(True)
 
120
 
 
121
 
 
122
    def OnCloseFrame(self, evt):
 
123
        if hasattr(self, "window") and hasattr(self.window, "ShutdownDemo"):
 
124
            self.window.ShutdownDemo()
 
125
        evt.Skip()
 
126
 
 
127
 
 
128
#----------------------------------------------------------------------------
 
129
 
 
130
 
 
131
def main(argv):
 
132
    useShell = False
 
133
    for x in range(len(sys.argv)):
 
134
        if sys.argv[x] in ['--shell', '-shell', '-s']:
 
135
            useShell = True
 
136
            del sys.argv[x]
 
137
            break
 
138
            
 
139
    if len(argv) < 2:
 
140
        print "Please specify a demo module name on the command-line"
 
141
        raise SystemExit
 
142
 
 
143
    name, ext  = os.path.splitext(argv[1])
 
144
    module = __import__(name)
 
145
 
 
146
 
 
147
    app = RunDemoApp(name, module, useShell)
 
148
    app.MainLoop()
 
149
 
 
150
 
 
151
 
 
152
if __name__ == "__main__":
 
153
    main(sys.argv)
 
154
 
 
155