diff --git a/wx/lib/ticker.py b/wx/lib/ticker.py index 869e45ae..236c436a 100644 --- a/wx/lib/ticker.py +++ b/wx/lib/ticker.py @@ -13,11 +13,11 @@ """News-ticker style scrolling text control * Can scroll from right to left or left to right. - + * Speed of the ticking is controlled by two parameters: - + - Frames per Second(FPS): How many times per second the ticker updates - + - Pixels per Frame(PPF): How many pixels the text moves each update Low FPS with high PPF will result in "jumpy" text, lower PPF with higher FPS @@ -28,21 +28,21 @@ import wx #---------------------------------------------------------------------- -class Ticker(wx.PyControl): - def __init__(self, - parent, - id=-1, - text=wx.EmptyString, #text in the ticker - fgcolor = wx.BLACK, #text/foreground color - bgcolor = wx.WHITE, #background color - start=True, #if True, the ticker starts immediately - ppf=2, #pixels per frame - fps=20, #frames per second - direction="rtl", #direction of ticking, rtl or ltr - pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER, +class Ticker(wx.Control): + def __init__(self, + parent, + id=-1, + text=wx.EmptyString, #text in the ticker + fgcolor = wx.BLACK, #text/foreground color + bgcolor = wx.WHITE, #background color + start=True, #if True, the ticker starts immediately + ppf=2, #pixels per frame + fps=20, #frames per second + direction="rtl", #direction of ticking, rtl or ltr + pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER, name="Ticker" ): - wx.PyControl.__init__(self, parent, id=id, pos=pos, size=size, style=style, name=name) + wx.Control.__init__(self, parent, id=id, pos=pos, size=size, style=style, name=name) self.timer = wx.Timer(owner=self) self._extent = (-1, -1) #cache value for the GetTextExtent call self._offset = 0 @@ -53,56 +53,56 @@ class Ticker(wx.PyControl): self.SetInitialSize(size) self.SetForegroundColour(fgcolor) self.SetBackgroundColour(bgcolor) - wx.EVT_TIMER(self, -1, self.OnTick) - wx.EVT_PAINT(self, self.OnPaint) - wx.EVT_ERASE_BACKGROUND(self, self.OnErase) + self.Bind(wx.EVT_TIMER, self.OnTick) + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase) if start: self.Start() - + def Stop(self): """Stop moving the text""" self.timer.Stop() - + def Start(self): """Starts the text moving""" if not self.timer.IsRunning(): self.timer.Start(1000 / self._fps) - + def IsTicking(self): """Is the ticker ticking? ie, is the text moving?""" return self.timer.IsRunning() - + def SetFPS(self, fps): """Adjust the update speed of the ticker""" self._fps = fps self.Stop() self.Start() - + def GetFPS(self): """Update speed of the ticker""" return self._fps - + def SetPPF(self, ppf): """Set the number of pixels per frame the ticker moves - ie, how "jumpy" it is""" self._ppf = ppf - + def GetPPF(self): """Pixels per frame""" return self._ppf - + def SetFont(self, font): self._extent = (-1, -1) wx.Control.SetFont(self, font) - + def SetDirection(self, dir): """Sets the direction of the ticker: right to left(rtl) or left to right (ltr)""" if dir == "ltr" or dir == "rtl": @@ -113,23 +113,23 @@ class Ticker(wx.PyControl): else: raise TypeError - + def GetDirection(self): return self._dir - + def SetText(self, text): """Set the ticker text.""" self._text = text self._extent = (-1, -1) if not self._text: self.Refresh() #Refresh here to clear away the old text. - - + + def GetText(self): return self._text - + def UpdateExtent(self, dc): """Updates the cached text extent if needed""" if not self._text: @@ -137,8 +137,8 @@ class Ticker(wx.PyControl): return if self._extent == (-1, -1): self._extent = dc.GetTextExtent(self.GetText()) - - + + def DrawText(self, dc): """Draws the ticker text at the current offset using the provided DC""" dc.SetTextForeground(self.GetForegroundColour()) @@ -150,8 +150,8 @@ class Ticker(wx.PyControl): offx = self.GetSize()[0] - self._offset offy = (self.GetSize()[1] - self._extent[1]) / 2 #centered vertically dc.DrawText(self._text, offx, offy) - - + + def OnTick(self, evt): self._offset += self._ppf w1 = self.GetSize()[0] @@ -159,26 +159,26 @@ class Ticker(wx.PyControl): if self._offset >= w1+w2: self._offset = 0 self.Refresh() - - + + def OnPaint(self, evt): dc = wx.BufferedPaintDC(self) brush = wx.Brush(self.GetBackgroundColour()) dc.SetBackground(brush) dc.Clear() self.DrawText(dc) - - + + def OnErase(self, evt): """Noop because of double buffering""" pass - + def AcceptsFocus(self): """Non-interactive, so don't accept focus""" return False - + def DoGetBestSize(self): """Width we don't care about, height is either -1, or the character height of our text with a little extra padding @@ -193,23 +193,22 @@ class Ticker(wx.PyControl): return (100, h+5) - def ShouldInheritColours(self): + def ShouldInheritColours(self): """Don't get colours from our parent...""" return False - + #testcase/demo if __name__ == '__main__': - app = wx.PySimpleApp() + app = wx.App() f = wx.Frame(None) p = wx.Panel(f) - t = Ticker(p, text="Some sample ticker text") + t = Ticker(p, text="Some sample ticker text") #set ticker properties here if you want s = wx.BoxSizer(wx.VERTICAL) s.Add(t, flag=wx.GROW, proportion=0) p.SetSizer(s) f.Show() app.MainLoop() - - +