Added a custom collapsible panel class and a demo in statspanel
This commit is contained in:
125
gui/pyfatogglepanel.py
Normal file
125
gui/pyfatogglepanel.py
Normal file
@@ -0,0 +1,125 @@
|
||||
# -*- 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.bmpExpanded = self.GetNativeTreeItemBitmap("expanded")
|
||||
self.bmpCollapsed = self.GetNativeTreeItemBitmap("")
|
||||
|
||||
self.headerBmp = wx.StaticBitmap(self)
|
||||
self.headerBmp.SetBitmap( self.bmpExpanded)
|
||||
|
||||
self.mainSizer = wx.BoxSizer( wx.VERTICAL )
|
||||
|
||||
headerSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||
headerSizer.Add( self.headerBmp, 0, wx.TOP|wx.BOTTOM | wx.LEFT, 5 )
|
||||
|
||||
self.paneLabel = wx.StaticText( self, wx.ID_ANY, u"Test", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
headerSizer.Add( self.paneLabel, 1, wx.EXPAND | wx.TOP|wx.BOTTOM | wx.RIGHT, 5 )
|
||||
|
||||
|
||||
headerFont=parent.GetFont()
|
||||
headerFont.SetWeight(wx.BOLD)
|
||||
self.paneLabel.SetFont(headerFont)
|
||||
|
||||
self.mainSizer.Add( headerSizer, 0, wx.EXPAND, 5 )
|
||||
|
||||
self.contentSizer = wx.BoxSizer( wx.VERTICAL )
|
||||
self.contentPanel = wx.Panel(self)
|
||||
self.contentPanel.SetSizer(self.contentSizer)
|
||||
|
||||
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_3DLIGHT ) )
|
||||
|
||||
self.mainSizer.Add( self.contentPanel, 1, wx.EXPAND, 5)
|
||||
self.SetSizer( self.mainSizer )
|
||||
|
||||
self.paneLabel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNSHADOW ) )
|
||||
self.headerBmp.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNSHADOW ) )
|
||||
|
||||
self.Layout()
|
||||
|
||||
# Connect Events
|
||||
self.paneLabel.Bind( wx.EVT_LEFT_DCLICK, self.toggleContent )
|
||||
self.headerBmp.Bind( wx.EVT_LEFT_UP, self.toggleContent )
|
||||
self.paneLabel.Bind( wx.EVT_ENTER_WINDOW, self.enterWindow )
|
||||
self.paneLabel.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 )
|
||||
|
||||
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.paneLabel.SetLabel(label)
|
||||
|
||||
def GetNativeTreeItemBitmap(self, mode):
|
||||
|
||||
bitmap = wx.EmptyBitmap(16, 16)
|
||||
dc = wx.MemoryDC()
|
||||
dc.SelectObject(bitmap)
|
||||
dc.SetBackground(wx.TheBrushList.FindOrCreateBrush(self.GetBackgroundColour(), wx.SOLID))
|
||||
dc.Clear()
|
||||
|
||||
wx.RendererNative.Get().DrawTreeItemButton(self, dc, wx.Rect(0, 0, 16, 16), 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 self._toggle == 1:
|
||||
self.contentPanel.Hide()
|
||||
self.headerBmp.SetBitmap( self.bmpCollapsed)
|
||||
else:
|
||||
self.contentPanel.Show()
|
||||
self.headerBmp.SetBitmap( self.bmpExpanded)
|
||||
self._toggle *=-1
|
||||
self.parent.Layout()
|
||||
event.Skip()
|
||||
|
||||
def enterWindow( self, event ):
|
||||
|
||||
self.paneLabel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_3DDKSHADOW ) )
|
||||
self.headerBmp.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_3DDKSHADOW ) )
|
||||
|
||||
self.headerBmp.Refresh()
|
||||
self.paneLabel.Refresh()
|
||||
|
||||
event.Skip()
|
||||
|
||||
def leaveWindow( self, event ):
|
||||
|
||||
self.paneLabel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNSHADOW ) )
|
||||
self.headerBmp.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNSHADOW ) )
|
||||
|
||||
self.headerBmp.Refresh()
|
||||
self.paneLabel.Refresh()
|
||||
|
||||
event.Skip()
|
||||
|
||||
@@ -25,6 +25,7 @@ import controller
|
||||
from eos.types import Slot, Hardpoint
|
||||
from gui import pygauge as PG
|
||||
from util import formatAmount
|
||||
from gui.pyfatogglepanel import TogglePanel
|
||||
|
||||
class StatsPane(wx.Panel):
|
||||
def collapseChanged(self, event):
|
||||
@@ -377,7 +378,7 @@ class StatsPane(wx.Panel):
|
||||
else:
|
||||
gauge = PG.PyGauge(parent, wx.ID_ANY, 100)
|
||||
gauge.SetMinSize((self.getTextExtentW("999.9k/1.3M GJ"), 23))
|
||||
gauge.SetFractionDigits(2)
|
||||
gauge.SetSkipDigitsFlag(True)
|
||||
|
||||
setattr(self, "gauge%s%s" % (panel.capitalize(),capitalizedType), gauge)
|
||||
stats.Add(gauge, 0, wx.ALIGN_CENTER)
|
||||
@@ -460,7 +461,7 @@ class StatsPane(wx.Panel):
|
||||
lbl.SetBackgroundColour(wx.Colour(bc[0],bc[1],bc[2]))
|
||||
lbl.SetBarColour(wx.Colour(fc[0],fc[1],fc[2]))
|
||||
lbl.SetBarGradient()
|
||||
lbl.SetFractionDigits(1)
|
||||
lbl.SetSkipDigitsFlag(False)
|
||||
|
||||
setattr(self, "labelResistance%s%s" % (tankType.capitalize(), damageType.capitalize()), lbl)
|
||||
box.Add(lbl, 0, wx.ALIGN_CENTER)
|
||||
@@ -850,6 +851,41 @@ class StatsPane(wx.Panel):
|
||||
|
||||
hbox.Add(wx.StaticText(self.fullPanel, wx.ID_ANY, " m ISK"), 0, wx.ALIGN_LEFT)
|
||||
|
||||
# The custom made collapsible panel demo
|
||||
priceTPanel = TogglePanel(self.fullPanel)
|
||||
priceTPanel.SetLabel(u"Price")
|
||||
|
||||
self.sizerBase.Add(priceTPanel,0, wx.EXPAND | wx.LEFT | wx.RIGHT, 3)
|
||||
priceContentPane = priceTPanel.GetContentPane()
|
||||
|
||||
# Grid for the price stuff.
|
||||
|
||||
gridPrice = wx.GridSizer(1, 3)
|
||||
priceTPanel.AddSizer(gridPrice)
|
||||
|
||||
|
||||
for type in ("ship", "fittings", "total"):
|
||||
image = "%sPrice_big" % type if type != "ship" else "ship_big"
|
||||
box = wx.BoxSizer(wx.HORIZONTAL)
|
||||
gridPrice.Add(box)
|
||||
|
||||
box.Add(bitmapLoader.getStaticBitmap(image, priceContentPane, "icons"), 0, wx.ALIGN_CENTER)
|
||||
|
||||
vbox = wx.BoxSizer(wx.VERTICAL)
|
||||
box.Add(vbox, 1, wx.EXPAND)
|
||||
|
||||
vbox.Add(wx.StaticText(priceContentPane, wx.ID_ANY, type.capitalize()), 0, wx.ALIGN_LEFT)
|
||||
|
||||
hbox = wx.BoxSizer(wx.HORIZONTAL)
|
||||
vbox.Add(hbox)
|
||||
|
||||
lbl = wx.StaticText(priceContentPane, wx.ID_ANY, "0.00")
|
||||
setattr(self, "labelPrice%s" % type, lbl)
|
||||
hbox.Add(lbl, 0, wx.ALIGN_LEFT)
|
||||
|
||||
hbox.Add(wx.StaticText(priceContentPane, wx.ID_ANY, " m ISK"), 0, wx.ALIGN_LEFT)
|
||||
|
||||
|
||||
self.fullPanel.Fit()
|
||||
self.fullSize=self.fullPanel.GetBestSize()
|
||||
self.fullSize.SetWidth( self.fullSize.GetWidth() + 10 )
|
||||
|
||||
Reference in New Issue
Block a user