]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/Throbber.py
Merged wxPython 2.4.x to the 2.5 branch (Finally!!!)
[wxWidgets.git] / wxPython / demo / Throbber.py
diff --git a/wxPython/demo/Throbber.py b/wxPython/demo/Throbber.py
new file mode 100644 (file)
index 0000000..2aadab2
--- /dev/null
@@ -0,0 +1,180 @@
+#
+# 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])])