From c4f7fded7f26acf4d6d8ba8e0c61b86c9d2e0960 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 5 Sep 2010 19:08:10 +0300 Subject: [PATCH] Added a custom collapsible panel class and a demo in statspanel --- gui/pyfatogglepanel.py | 125 +++++++++++++++++++++++++++++++++++++++++ gui/statsPane.py | 40 ++++++++++++- 2 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 gui/pyfatogglepanel.py diff --git a/gui/pyfatogglepanel.py b/gui/pyfatogglepanel.py new file mode 100644 index 000000000..d4bc9dd0f --- /dev/null +++ b/gui/pyfatogglepanel.py @@ -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() + diff --git a/gui/statsPane.py b/gui/statsPane.py index 18e55c9b4..ef1a835ad 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -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 )