3 import  wx
.lib
.throbber 
as  throb
 
   5 import throbImages 
# this was created using a modified version of img2py 
   7 from wx
.lib
.throbber 
import __doc__ 
as docString
 
   9 #---------------------------------------------------------------------- 
  11 class TestPanel(wx
.Panel
): 
  12     def __init__(self
, parent
, log
): 
  13         wx
.Panel
.__init
__(self
, parent
, -1) 
  16         # create the 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." }, 
  32         images 
= [throbImages
.catalog
[i
].getBitmap() 
  33                   for i 
in throbImages
.index
 
  34                   if i 
not in ['eclouds', 'logo']] 
  36         self
.throbbers
['plain']['throbber'] = \
 
  37             throb
.Throbber(self
, -1, images
, size
=(36, 36),frameDelay 
= 0.1) 
  39         self
.throbbers
['reverse']['throbber'] = \
 
  40             throb
.Throbber(self
, -1, images
, frameDelay 
= 0.07) 
  42         self
.throbbers
['reverse']['throbber'].Reverse() 
  44         self
.throbbers
['autoreverse']['throbber'] = \
 
  45             throb
.Throbber(self
, -1, images
, frameDelay 
= 0.1, reverse 
= True) 
  47         self
.throbbers
['autoreverse']['throbber'].sequence
.append(0) 
  49         self
.throbbers
['label']['throbber'] = \
 
  50             throb
.Throbber(self
, -1, images
, frameDelay 
= 0.1, label 
= 'Label') 
  52         self
.throbbers
['label']['throbber'].SetFont(wx
.Font( 
  53             pointSize 
= 10, family 
= wx
.DEFAULT
, style 
= wx
.NORMAL
, weight 
= wx
.BOLD
 
  56         self
.throbbers
['overlay']['throbber'] = \
 
  58                 self
, -1, images
, frameDelay 
= 0.1,  
  59                 overlay 
= throbImages
.catalog
['logo'].getBitmap() 
  62         self
.throbbers
['overlay+text']['throbber'] = \
 
  64                 self
, -1, images
, frameDelay 
= 0.1,  
  65                 overlay 
= throbImages
.catalog
['logo'].getBitmap(), label 
= "Python!" 
  68         self
.throbbers
['overlay+text']['throbber'].SetFont(wx
.Font( 
  69             pointSize 
= 8, family 
= wx
.DEFAULT
, style 
= wx
.NORMAL
, weight 
= wx
.BOLD
 
  72         self
.customThrobber 
= \
 
  73             throb
.Throbber(self
, -1, images
, size
=(36, 36), 
  76                            sequence 
= [ 1, 5, 2, 7, 3, 6, 4, 4, 4, 4, 7, 2, 2, 0 ] 
  79         box 
= wx
.BoxSizer(wx
.VERTICAL
) 
  80         sizer 
= wx
.GridBagSizer() 
  81         box
.Add(sizer
, 1, wx
.EXPAND|wx
.ALL
, 5) 
  82         sizer
.AddGrowableCol(1) 
  86         # use a list so we can keep our order 
  87         for t 
in ['plain', 'reverse', 'autoreverse', 'label', 'overlay', 'overlay+text']: 
  89                 self
.throbbers
[t
]['throbber'], (row
, 0), (1, 1),  
  90                 flag 
= wx
.ALIGN_CENTER|wx
.ALL
, border
=2 
  94                 wx
.StaticText(self
, -1, self
.throbbers
[t
]['text']),  
  95                 (row
, 1), flag 
= wx
.ALIGN_CENTER_VERTICAL | wx
.ALIGN_LEFT
 
 100         # Add custom throbber to sizer. 
 103             self
.customThrobber
, (row
, 0), (1, 1),  
 104             flag 
= wx
.ALIGN_CENTER|wx
.ALL
, border
=2 
 108             wx
.StaticText(self
, -1, 'with custom & manual sequences'),  
 109             (row
, 1), flag 
= wx
.ALIGN_CENTER_VERTICAL | wx
.ALIGN_LEFT
 
 112         # start and stop buttons 
 113         startButton 
= wx
.Button(self
, -1, "Start") 
 114         self
.Bind(wx
.EVT_BUTTON
, self
.OnStartAnimation
, startButton
) 
 116         stopButton 
= wx
.Button(self
, -1, "Stop") 
 117         self
.Bind(wx
.EVT_BUTTON
, self
.OnStopAnimation
, stopButton
) 
 119         buttonBox 
= wx
.BoxSizer(wx
.HORIZONTAL
) 
 121             (startButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 122             (stopButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 126             buttonBox
, (len(self
.throbbers
) + 2, 0), (1, 3), flag 
= wx
.ALIGN_CENTER
 
 129         # Buttoms for the custom throbber. 
 130         nextButton 
= wx
.Button(self
, -1, "Next") 
 131         self
.Bind(wx
.EVT_BUTTON
, self
.OnNext
, nextButton
) 
 133         prevButton 
= wx
.Button(self
, -1, "Previous") 
 134         self
.Bind(wx
.EVT_BUTTON
, self
.OnPrevious
, prevButton
) 
 136         incButton 
= wx
.Button(self
, -1, "Increment") 
 137         self
.Bind(wx
.EVT_BUTTON
, self
.OnIncrement
, incButton
) 
 139         decButton 
= wx
.Button(self
, -1, "Decrement") 
 140         self
.Bind(wx
.EVT_BUTTON
, self
.OnDecrement
, decButton
) 
 142         revButton 
= wx
.Button(self
, -1, "Reverse") 
 143         self
.Bind(wx
.EVT_BUTTON
, self
.OnReverse
, revButton
) 
 145         restButton 
= wx
.Button(self
, -1, "Rest") 
 146         self
.Bind(wx
.EVT_BUTTON
, self
.OnRest
, restButton
) 
 148         startButton 
= wx
.Button(self
, -1, "Start") 
 149         self
.Bind(wx
.EVT_BUTTON
, self
.OnStart
, startButton
) 
 151         stopButton 
= wx
.Button(self
, -1, "Stop") 
 152         self
.Bind(wx
.EVT_BUTTON
, self
.OnStop
, stopButton
) 
 154         customBox1 
= wx
.BoxSizer(wx
.HORIZONTAL
) 
 156             (nextButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 157             (prevButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 158             (incButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 159             (decButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 160             (revButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 163         customBox2 
= wx
.BoxSizer(wx
.HORIZONTAL
) 
 165             (restButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 166             (startButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 167             (stopButton
, 0, wx
.ALIGN_CENTER_HORIZONTAL | wx
.ALL
, 5), 
 170         sizer
.Add( customBox1
, (len(self
.throbbers
) + 5, 0), (1, 3), flag 
= wx
.ALIGN_CENTER 
) 
 171         sizer
.Add( customBox2
, (len(self
.throbbers
) + 6, 0), (1, 3), flag 
= wx
.ALIGN_CENTER 
) 
 175         self
.SetAutoLayout(True) 
 177         sizer
.SetSizeHints(self
) 
 180         for t 
in self
.throbbers
.keys(): 
 181             self
.throbbers
[t
]['throbber'].Start() 
 183         self
.Bind(wx
.EVT_WINDOW_DESTROY
, self
.OnDestroy
) 
 185     def OnDestroy(self
, event
): 
 186         self
.log
.write("got destroy event") 
 189     def OnStartAnimation(self
, event
): 
 190         for t 
in self
.throbbers
.keys(): 
 191             self
.throbbers
[t
]['throbber'].Start() 
 193     def OnStopAnimation(self
, event
): 
 194         for t 
in self
.throbbers
.keys(): 
 195             self
.throbbers
[t
]['throbber'].Rest() 
 197     def OnNext(self
, event
): 
 198         self
.customThrobber
.Next() 
 200     def OnPrevious(self
, event
): 
 201         self
.customThrobber
.Previous() 
 203     def OnIncrement(self
, event
): 
 204         self
.customThrobber
.Increment() 
 206     def OnDecrement(self
, event
): 
 207         self
.customThrobber
.Decrement() 
 209     def OnReverse(self
, event
): 
 210         self
.customThrobber
.Reverse() 
 212     def OnRest(self
, event
): 
 213         self
.customThrobber
.Rest() 
 215     def OnStart(self
, event
): 
 216         self
.customThrobber
.Start() 
 218     def OnStop(self
, event
): 
 219         self
.customThrobber
.Stop() 
 221     def ShutdownDemo(self
): 
 222         for t 
in self
.throbbers
.keys(): 
 223             self
.throbbers
[t
]['throbber'].Rest() 
 226 #---------------------------------------------------------------------- 
 228 def runTest(frame
, nb
, log
): 
 229     win 
= TestPanel(nb
, log
) 
 232 #---------------------------------------------------------------------- 
 236 overview 
= """<html><body> 
 237 <h4><center>Throbber</center></h4> 
 244 if __name__ 
== '__main__': 
 247     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])