]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/Throbber.py
fixed wxPluginLibrary unloading on failture (patch #962838)
[wxWidgets.git] / wxPython / demo / Throbber.py
CommitLineData
8fa876ca
RD
1
2import wx
8fa876ca 3import wx.lib.throbber as throb
1e4a197e 4
1e4a197e
RD
5import throbImages # this was created using a modified version of img2py
6
8fa876ca
RD
7from wx.lib.throbber import __doc__ as docString
8
1e4a197e
RD
9#----------------------------------------------------------------------
10
8fa876ca 11class TestPanel(wx.Panel):
1e4a197e 12 def __init__(self, parent, log):
8fa876ca 13 wx.Panel.__init__(self, parent, -1)
1e4a197e
RD
14 self.log = log
15
16 # create the throbbers
17 self.throbbers = {
18 'plain': { 'throbber': None,
19 'text': "Plain throbber." },
20 'reverse': { 'throbber': None,
21 'text': "This throbber runs in reverse and faster." },
22 'autoreverse': { 'throbber': None,
23 'text': "This throbber switches direction." },
24 'label': { 'throbber': None,
25 'text': "With a label." },
26 'overlay': { 'throbber': None,
27 'text': "With an overlayed image." },
28 'overlay+text': { 'throbber': None,
29 'text': "With a label and an overlayed image." },
30 }
31
32 images = [throbImages.catalog[i].getBitmap()
33 for i in throbImages.index
34 if i not in ['eclouds', 'logo']]
35
8fa876ca
RD
36 self.throbbers['plain']['throbber'] = \
37 throb.Throbber(self, -1, images, size=(36, 36),frameDelay = 0.1)
38
39 self.throbbers['reverse']['throbber'] = \
40 throb.Throbber(self, -1, images, frameDelay = 0.07)
41
1e4a197e 42 self.throbbers['reverse']['throbber'].Reverse()
8fa876ca
RD
43
44 self.throbbers['autoreverse']['throbber'] = \
45 throb.Throbber(self, -1, images, frameDelay = 0.1, reverse = True)
46
1e4a197e 47 self.throbbers['autoreverse']['throbber'].sequence.append(0)
1e4a197e 48
8fa876ca
RD
49 self.throbbers['label']['throbber'] = \
50 throb.Throbber(self, -1, images, frameDelay = 0.1, label = 'Label')
51
52 self.throbbers['label']['throbber'].SetFont(wx.Font(
53 pointSize = 10, family = wx.DEFAULT, style = wx.NORMAL, weight = wx.BOLD
54 ))
55
56 self.throbbers['overlay']['throbber'] = \
57 throb.Throbber(
58 self, -1, images, frameDelay = 0.1,
59 overlay = throbImages.catalog['logo'].getBitmap()
60 )
61
62 self.throbbers['overlay+text']['throbber'] = \
63 throb.Throbber(
64 self, -1, images, frameDelay = 0.1,
65 overlay = throbImages.catalog['logo'].getBitmap(), label = "Python!"
66 )
67
68 self.throbbers['overlay+text']['throbber'].SetFont(wx.Font(
69 pointSize = 8, family = wx.DEFAULT, style = wx.NORMAL, weight = wx.BOLD
70 ))
1e4a197e
RD
71
72 # this throbber is created using a single, composite image
8fa876ca
RD
73 self.otherThrobber = throb.Throbber(
74 self, -1, throbImages.catalog['eclouds'].getBitmap(), frameDelay = 0.15,
75 frames = 12, frameWidth = 48, label = "Stop"
76 )
1e4a197e
RD
77
78
8fa876ca 79 self.otherThrobber.Bind(wx.EVT_LEFT_DOWN, self.OnClickThrobber)
1e4a197e 80
8fa876ca 81 box = wx.BoxSizer(wx.VERTICAL)
95bfd958 82 sizer = wx.GridBagSizer()
8fa876ca 83 box.Add(sizer, 1, wx.EXPAND|wx.ALL, 5)
1e4a197e
RD
84 sizer.AddGrowableCol(1)
85
95bfd958 86 sizer.Add(self.otherThrobber, (0, 2), (4, 1),flag = wx.ALIGN_CENTER_VERTICAL)
1e4a197e
RD
87
88 row = 2
8fa876ca 89
1e4a197e
RD
90 # use a list so we can keep our order
91 for t in ['plain', 'reverse', 'autoreverse', 'label', 'overlay', 'overlay+text']:
8fa876ca 92 sizer.Add(
95bfd958 93 self.throbbers[t]['throbber'], (row, 0), (1, 1),
8fa876ca
RD
94 flag = wx.ALIGN_CENTER|wx.ALL, border=2
95 )
96
97 sizer.Add(
98 wx.StaticText(self, -1, self.throbbers[t]['text']),
95bfd958 99 (row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT
8fa876ca
RD
100 )
101
1e4a197e
RD
102 row += 1
103
104 # start and stop buttons
8fa876ca 105 startButton = wx.Button(self, -1, "Start")
95bfd958 106 self.Bind(wx.EVT_BUTTON, self.OnStartAnimation, startButton)
8fa876ca
RD
107
108 stopButton = wx.Button(self, -1, "Stop")
95bfd958 109 self.Bind(wx.EVT_BUTTON, self.OnStopAnimation, stopButton)
1e4a197e 110
8fa876ca 111 buttonBox = wx.BoxSizer(wx.HORIZONTAL)
1e4a197e 112 buttonBox.AddMany([
8fa876ca
RD
113 (startButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
114 (stopButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
1e4a197e
RD
115 ])
116
95bfd958
RD
117 sizer.Add(
118 buttonBox, (len(self.throbbers) + 3, 0), (1, 3), flag = wx.ALIGN_CENTER
119 )
1e4a197e
RD
120
121 self.SetSizer(box)
122 self.SetAutoLayout(True)
123 self.Layout()
124 sizer.SetSizeHints(self)
125 sizer.Fit(self)
126
127 for t in self.throbbers.keys():
128 self.throbbers[t]['throbber'].Start()
8fa876ca 129
1e4a197e
RD
130 self.otherThrobber.Start()
131 self.otherThrobber.Reverse()
132
8fa876ca 133 self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
1e4a197e
RD
134
135 def OnDestroy(self, event):
136 self.log.write("got destroy event")
137 event.Skip()
138
139 def OnStartAnimation(self, event):
140 for t in self.throbbers.keys():
141 self.throbbers[t]['throbber'].Start()
142
143 def OnStopAnimation(self, event):
144 for t in self.throbbers.keys():
145 self.throbbers[t]['throbber'].Rest()
146
147 def OnClickThrobber(self, event):
148 if self.otherThrobber.Running():
149 self.otherThrobber.Rest()
150 self.otherThrobber.SetLabel("Start")
151 else:
152 self.otherThrobber.Start()
153 self.otherThrobber.SetLabel("Stop")
154
155 def ShutdownDemo(self):
156 self.otherThrobber.Rest()
157 for t in self.throbbers.keys():
158 self.throbbers[t]['throbber'].Rest()
159
160
161#----------------------------------------------------------------------
162
163def runTest(frame, nb, log):
8fa876ca
RD
164 if wx.Platform == "__WXMAC__":
165 wx.MessageBox("This demo currently fails on the Mac.",
1e4a197e
RD
166 "Sorry")
167 return
168 else:
169 win = TestPanel(nb, log)
170 return win
171
172#----------------------------------------------------------------------
173
174
175
176overview = """<html><body>
177<h4><center>Throbber</center></h4>
178<p>%s</p>
179</body></html>
180""" % docString
181
182
183
184if __name__ == '__main__':
185 import sys,os
186 import run
8eca4fef 187 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])