Files
pyfa/gui/utils/animUtils.py
2011-01-16 15:19:00 +02:00

87 lines
2.6 KiB
Python

import wx
import gui.utils.colorUtils as colorUtils
class LoadAnimation(wx.Window):
def __init__ (self, parent, id = wx.ID_ANY, label = "", pos = wx.DefaultPosition, size = wx.DefaultSize, style = 0):
wx.Window.__init__(self, parent, id, pos = pos, size = size, style = style)
self.label = label
self.animTimerId = wx.NewId()
self.animTimer = wx.Timer(self, self.animTimerId)
self.animTimerPeriod = 50
self.animCount = 0
self.animDir = 1
self.bars = 10
self.padding = 2
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_TIMER, self.OnTimer)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.animTimer.Start(self.animTimerPeriod)
def Play(self):
if self.animTimer.IsRunning():
self.animTimer.Stop()
self.animCount = 0
self.animTimer.Start(self.animTimerPeriod)
def Stop(self):
if self.animTimer.IsRunning():
self.animTimer.Stop()
def OnTimer(self, event):
self.animCount += self.animDir
if self.animCount >= self.bars:
self.animCount = self.bars - 1
self.animDir = -1
if self.animCount < 0:
self.animCount = 0
self.animDir = 1
self.Refresh()
def OnEraseBackground(self, event):
pass
def OnPaint(self, event):
rect = self.GetClientRect()
dc = wx.BufferedPaintDC(self)
windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)
dc.SetBackground(wx.Brush(windowColor))
dc.Clear()
barColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT)
shadeColor = colorUtils.GetSuitableColor(barColor, 0.75)
barWidth = (rect.width) / self.bars
barHeight = rect.height - self.padding * 2
x = self.padding
for bar in xrange(self.bars):
if bar != self.animCount:
dc.SetPen(wx.Pen(shadeColor))
dc.SetBrush(wx.Brush(shadeColor))
bh = barHeight
y = self.padding
else:
barColor = colorUtils.GetSuitableColor(barColor,float(self.animCount/2)/10)
dc.SetPen(wx.Pen(barColor))
dc.SetBrush(wx.Brush(barColor))
bh = rect.height
y = 0
dc.DrawRectangle(x, y, barWidth, bh)
x += barWidth
textColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT)
dc.SetTextForeground(textColor)
dc.DrawLabel(self.label,rect,wx.ALIGN_CENTER)