true/false or TRUE/FALSE to prepare for the new boolean type and constants being added to Python. Added code to wx.py to test for the existence of the new constants and to create suitable values if not present. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@19335 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
181 lines
7.4 KiB
Python
181 lines
7.4 KiB
Python
#
|
|
# Throbber.py - Cliff Wells <clifford.wells@attbi.com>
|
|
#
|
|
|
|
from wxPython.wx import *
|
|
from wxPython.lib.rcsizer import RowColSizer
|
|
from wxPython.lib.throbber import Throbber, __doc__ as docString
|
|
import throbImages # this was created using a modified version of img2py
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
class TestPanel(wxPanel):
|
|
def __init__(self, parent, log):
|
|
wxPanel.__init__(self, parent, -1)
|
|
self.log = log
|
|
|
|
# create the throbbers
|
|
self.throbbers = {
|
|
'plain': { 'throbber': None,
|
|
'text': "Plain throbber." },
|
|
'reverse': { 'throbber': None,
|
|
'text': "This throbber runs in reverse and faster." },
|
|
'autoreverse': { 'throbber': None,
|
|
'text': "This throbber switches direction." },
|
|
'label': { 'throbber': None,
|
|
'text': "With a label." },
|
|
'overlay': { 'throbber': None,
|
|
'text': "With an overlayed image." },
|
|
'overlay+text': { 'throbber': None,
|
|
'text': "With a label and an overlayed image." },
|
|
}
|
|
|
|
images = [throbImages.catalog[i].getBitmap()
|
|
for i in throbImages.index
|
|
if i not in ['eclouds', 'logo']]
|
|
|
|
self.throbbers['plain']['throbber'] = Throbber(self, -1,
|
|
images, size=(36, 36),
|
|
frameDelay = 0.1)
|
|
self.throbbers['reverse']['throbber'] = Throbber(self, -1, images, #size=(36, 36),
|
|
frameDelay = 0.07)
|
|
self.throbbers['reverse']['throbber'].Reverse()
|
|
self.throbbers['autoreverse']['throbber'] = Throbber(self, -1,
|
|
images, #size=(36, 36),
|
|
frameDelay = 0.1,
|
|
reverse = True)
|
|
self.throbbers['autoreverse']['throbber'].sequence.append(0)
|
|
self.throbbers['label']['throbber'] = Throbber(self, -1,
|
|
images, #size=(36, 36),
|
|
frameDelay = 0.1,
|
|
label = 'Label')
|
|
self.throbbers['label']['throbber'].SetFont(wxFont(pointSize = 10,
|
|
family = wxDEFAULT,
|
|
style = wxNORMAL,
|
|
weight = wxBOLD))
|
|
self.throbbers['overlay']['throbber'] = Throbber(self, -1,
|
|
images, #size=(36, 36),
|
|
frameDelay = 0.1,
|
|
overlay = throbImages.catalog['logo'].getBitmap())
|
|
self.throbbers['overlay+text']['throbber'] = Throbber(self, -1,
|
|
images, #size=(36, 36),
|
|
frameDelay = 0.1,
|
|
overlay = throbImages.catalog['logo'].getBitmap(),
|
|
label = "Python!")
|
|
self.throbbers['overlay+text']['throbber'].SetFont(wxFont(pointSize = 8,
|
|
family = wxDEFAULT,
|
|
style = wxNORMAL,
|
|
weight = wxBOLD))
|
|
|
|
|
|
# this throbber is created using a single, composite image
|
|
self.otherThrobber = Throbber(self, -1,
|
|
throbImages.catalog['eclouds'].getBitmap(), #size=(48, 48),
|
|
frameDelay = 0.15,
|
|
frames = 12,
|
|
frameWidth = 48,
|
|
label = "Stop")
|
|
|
|
|
|
EVT_LEFT_DOWN(self.otherThrobber, self.OnClickThrobber)
|
|
|
|
box = wxBoxSizer(wxVERTICAL)
|
|
sizer = RowColSizer()
|
|
box.Add(sizer, 1, wxEXPAND|wxALL, 5)
|
|
sizer.AddGrowableCol(1)
|
|
|
|
sizer.Add(self.otherThrobber, row = 0, col = 2, rowspan = 4, flag = wxALIGN_CENTER_VERTICAL)
|
|
|
|
row = 2
|
|
# use a list so we can keep our order
|
|
for t in ['plain', 'reverse', 'autoreverse', 'label', 'overlay', 'overlay+text']:
|
|
sizer.Add(self.throbbers[t]['throbber'], row = row, col = 0, flag = wxALIGN_CENTER|wxALL, border=2)
|
|
sizer.Add(wxStaticText(self, -1, self.throbbers[t]['text']), row = row, col = 1,
|
|
flag = wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT)
|
|
row += 1
|
|
|
|
# start and stop buttons
|
|
startButton = wxButton(self, -1, "Start")
|
|
EVT_BUTTON(self, startButton.GetId(), self.OnStartAnimation)
|
|
stopButton = wxButton(self, -1, "Stop")
|
|
EVT_BUTTON(self, stopButton.GetId(), self.OnStopAnimation)
|
|
|
|
buttonBox = wxBoxSizer(wxHORIZONTAL)
|
|
buttonBox.AddMany([
|
|
(startButton, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5),
|
|
(stopButton, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5),
|
|
])
|
|
|
|
sizer.Add(buttonBox,
|
|
row = len(self.throbbers) + 3,
|
|
col = 0,
|
|
colspan = 3,
|
|
flag = wxALIGN_CENTER)
|
|
|
|
self.SetSizer(box)
|
|
self.SetAutoLayout(True)
|
|
self.Layout()
|
|
sizer.SetSizeHints(self)
|
|
sizer.Fit(self)
|
|
|
|
for t in self.throbbers.keys():
|
|
self.throbbers[t]['throbber'].Start()
|
|
self.otherThrobber.Start()
|
|
self.otherThrobber.Reverse()
|
|
|
|
EVT_WINDOW_DESTROY(self, self.OnDestroy)
|
|
|
|
def OnDestroy(self, event):
|
|
self.log.write("got destroy event")
|
|
event.Skip()
|
|
|
|
def OnStartAnimation(self, event):
|
|
for t in self.throbbers.keys():
|
|
self.throbbers[t]['throbber'].Start()
|
|
|
|
def OnStopAnimation(self, event):
|
|
for t in self.throbbers.keys():
|
|
self.throbbers[t]['throbber'].Rest()
|
|
|
|
def OnClickThrobber(self, event):
|
|
if self.otherThrobber.Running():
|
|
self.otherThrobber.Rest()
|
|
self.otherThrobber.SetLabel("Start")
|
|
else:
|
|
self.otherThrobber.Start()
|
|
self.otherThrobber.SetLabel("Stop")
|
|
|
|
def ShutdownDemo(self):
|
|
self.otherThrobber.Rest()
|
|
for t in self.throbbers.keys():
|
|
self.throbbers[t]['throbber'].Rest()
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
def runTest(frame, nb, log):
|
|
if wxPlatform == "__WXMAC__":
|
|
wxMessageBox("This demo currently fails on the Mac.",
|
|
"Sorry")
|
|
return
|
|
else:
|
|
win = TestPanel(nb, log)
|
|
return win
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
overview = """<html><body>
|
|
<h4><center>Throbber</center></h4>
|
|
<p>%s</p>
|
|
</body></html>
|
|
""" % docString
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys,os
|
|
import run
|
|
run.main(['', os.path.basename(sys.argv[0])])
|