Files
pyfa/gui/pyfatogglepanel.py
2010-09-05 23:44:42 +03:00

225 lines
7.4 KiB
Python

# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version May 4 2010)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################
import wx
from gui import bitmapLoader
###########################################################################
## Class TogglePanel
###########################################################################
class TogglePanel ( wx.Panel ):
def __init__( self, parent ):
wx.Panel.__init__ ( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( -1,-1 ), style = wx.TAB_TRAVERSAL )
self._toggle = 1
self.parent = parent
self.bkColour = self.GetBackgroundColour()
self.mainSizer = wx.BoxSizer( wx.VERTICAL )
self.SetSizer( self.mainSizer )
self.headerPanel = wx.Panel(self)
self.headerPanel.SetBackgroundColour( self.bkColour)
self.mainSizer.Add(self.headerPanel,0,wx.EXPAND,5)
# self.bmpExpanded = self.GetNativeTreeItemBitmap("expanded")
# self.bmpCollapsed = self.GetNativeTreeItemBitmap("")
self.bmpExpanded = bitmapLoader.getBitmap("down-arrow2","icons")
self.bmpCollapsed = bitmapLoader.getBitmap("up-arrow2","icons")
sysTextColour = wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT )
img = self.bmpExpanded.ConvertToImage()
img.Replace(0, 0, 0, sysTextColour[0], sysTextColour[1], sysTextColour[2])
self.bmpExpanded = wx.BitmapFromImage(img)
img = self.bmpCollapsed.ConvertToImage()
img.Replace(0, 0, 0, sysTextColour[0], sysTextColour[1], sysTextColour[2])
self.bmpCollapsed = wx.BitmapFromImage(img)
self.headerBmp = wx.StaticBitmap(self.headerPanel )
self.headerBmp.SetBitmap( self.bmpExpanded)
headerSizer = wx.BoxSizer( wx.HORIZONTAL )
self.headerPanel.SetSizer( headerSizer)
hbmpSizer = wx.BoxSizer( wx.VERTICAL )
hlblSizer = wx.BoxSizer( wx.VERTICAL )
hbmpSizer.Add( self.headerBmp, 0,0, 5 )
self.headerLabel = wx.StaticText( self.headerPanel, wx.ID_ANY, u"Test", wx.DefaultPosition, wx.DefaultSize, 0 )
hlblSizer.Add( self.headerLabel, 1, wx.EXPAND , 5 )
headerSizer.Add( hbmpSizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5 )
headerSizer.Add( hlblSizer, 0, wx.ALIGN_CENTER_VERTICAL, 5 )
headerFont=parent.GetFont()
headerFont.SetWeight(wx.BOLD)
self.headerLabel.SetFont(headerFont)
self.contentSizer = wx.BoxSizer( wx.VERTICAL )
self.contentPanel = wx.Panel(self)
self.contentPanel.SetSizer(self.contentSizer)
self.SetBackgroundColour( self.bkColour )
self.mainSizer.Add( self.contentPanel, 1, wx.EXPAND, 5)
self.Layout()
self._timerId = wx.NewId()
self._timer = None
self._animStep = 0
self._period = 15
self._animDuration = 250
self._animValue = 0
self.contentPanelMaxSize = 0
self.currentSize = 0
self.targetSize = 0
# Connect Events
self.headerLabel.Bind( wx.EVT_LEFT_UP, self.toggleContent )
self.headerBmp.Bind( wx.EVT_LEFT_UP, self.toggleContent )
self.headerPanel.Bind( wx.EVT_LEFT_UP, self.toggleContent )
self.headerLabel.Bind( wx.EVT_ENTER_WINDOW, self.enterWindow )
self.headerLabel.Bind( wx.EVT_LEAVE_WINDOW, self.leaveWindow )
self.headerBmp.Bind( wx.EVT_ENTER_WINDOW, self.enterWindow )
self.headerBmp.Bind( wx.EVT_LEAVE_WINDOW, self.leaveWindow )
self.headerPanel.Bind( wx.EVT_ENTER_WINDOW, self.enterWindow )
self.headerPanel.Bind( wx.EVT_LEAVE_WINDOW, self.leaveWindow )
self.Bind(wx.EVT_TIMER, self.OnTimer)
def __del__( self ):
pass
def AddSizer(self, sizer):
self.contentSizer.Add(sizer, 1, wx.EXPAND, 5)
self.Fit()
def GetContentPane(self):
return self.contentPanel
def SetLabel(self, label):
self.headerLabel.SetLabel(label)
def GetNativeTreeItemBitmap(self, mode):
bitmap = wx.EmptyBitmap(24, 24)
dc = wx.MemoryDC()
dc.SelectObject(bitmap)
dc.SetBackground(wx.TheBrushList.FindOrCreateBrush(self.parent.GetBackgroundColour(), wx.SOLID))
dc.Clear()
wx.RendererNative.Get().DrawTreeItemButton(self, dc, wx.Rect(0, 0, 24, 24), wx.CONTROL_EXPANDED if mode == "expanded" else 0)
dc.Destroy()
return bitmap
# Virtual event handlers, overide them in your derived class
def toggleContent( self, event ):
if not self._timer:
self._timer = wx.Timer(self, self._timerId)
if self._timer.IsRunning():
return
if self._toggle == 1:
# self.contentPanel.Hide()
self.headerBmp.SetBitmap( self.bmpCollapsed)
if self._timer.IsRunning() == False:
self.contentPanelMaxSize = self.contentPanel.GetSize().GetHeight()
self.currentSize = self.contentPanelMaxSize
self.targetSize = 0
else:
# self.contentPanel.Show()
self.headerBmp.SetBitmap( self.bmpExpanded)
self.currentSize = 0
self.targetSize = self.contentPanelMaxSize
self._toggle *=-1
self._animStep = 0
self._timer.Start(self._period)
self.parent.Layout()
event.Skip()
def enterWindow( self, event ):
self.headerPanel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHT ) )
self.headerPanel.Refresh()
event.Skip()
def leaveWindow( self, event ):
self.headerPanel.SetBackgroundColour( self.bkColour )
self.headerPanel.Refresh()
event.Skip()
def OUT_QUAD (self, t, b, c, d):
t=float(t)
b=float(b)
c=float(c)
d=float(d)
t/=d
return -c *(t)*(t-2) + b
def OnTimer( self, event ):
oldValue = self.currentSize
value = self.targetSize
if oldValue < value:
direction = 1
start = 0
end = value-oldValue
else:
direction = -1
start = 0
end = oldValue - value
step=self.OUT_QUAD(self._animStep, start, end, self._animDuration)
self._animStep += self._period
if self._timerId == event.GetId():
stop_timer = False
if self._animStep > self._animDuration:
stop_timer = True
if direction == 1:
if (oldValue+step) < value:
self._animValue = oldValue+step
else:
stop_timer = True
else:
if (oldValue-step) > value:
self._animValue = oldValue-step
else:
stop_timer = True
if stop_timer:
self._timer.Stop()
self.contentPanel.SetMinSize(wx.Size(-1, round(self._animValue)))
# self.contentPanel.Layout()
self.parent.Layout()
# self.parent.Fit()