From b1d7e8f365d8132d43587c98c3ccfb3d0944ae55 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 5 Sep 2010 23:40:10 +0300 Subject: [PATCH] TogglePanel: EYECANDY stuff added --- gui/pyfatogglepanel.py | 311 +++++++++++++++++++++++++---------------- gui/statsPane.py | 69 ++++----- 2 files changed, 228 insertions(+), 152 deletions(-) diff --git a/gui/pyfatogglepanel.py b/gui/pyfatogglepanel.py index 3f96e2ec3..51ce11b0f 100644 --- a/gui/pyfatogglepanel.py +++ b/gui/pyfatogglepanel.py @@ -15,135 +15,210 @@ from gui import bitmapLoader 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 ) + 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 = parent.GetBackgroundColour() - self.mainSizer = wx.BoxSizer( wx.VERTICAL ) - self.SetSizer( self.mainSizer ) + 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.headerPanel = wx.Panel(self) + self.headerPanel.SetBackgroundColour( self.bkColour) - self.mainSizer.Add(self.headerPanel,0,wx.EXPAND,5) + self.mainSizer.Add(self.headerPanel,0,wx.EXPAND,5) - + # self.bmpExpanded = self.GetNativeTreeItemBitmap("expanded") # self.bmpCollapsed = self.GetNativeTreeItemBitmap("") - self.bmpExpanded = bitmapLoader.getBitmap("up-arrow2","icons") - self.bmpCollapsed = bitmapLoader.getBitmap("down-arrow2","icons") + self.bmpExpanded = bitmapLoader.getBitmap("up-arrow2","icons") + self.bmpCollapsed = bitmapLoader.getBitmap("down-arrow2","icons") - sysTextColour = wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT ) + 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() - - # 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 ) - - def __del__( self ): - pass - - def AddSizer(self, sizer): - self.contentSizer.Add(sizer, 1, wx.EXPAND, 5) - self.Fit() - - def GetContentPane(self): - return self.contentPanel + img = self.bmpExpanded.ConvertToImage() + img.Replace(0, 0, 0, sysTextColour[0], sysTextColour[1], sysTextColour[2]) + self.bmpExpanded = wx.BitmapFromImage(img) - 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() + 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 ) - wx.RendererNative.Get().DrawTreeItemButton(self, dc, wx.Rect(0, 0, 24, 24), wx.CONTROL_EXPANDED if mode == "expanded" else 0) + headerSizer.Add( hbmpSizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5 ) + headerSizer.Add( hlblSizer, 0, wx.ALIGN_CENTER_VERTICAL, 5 ) - 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) + 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: - self.contentPanel.Show() - self.headerBmp.SetBitmap( self.bmpExpanded) - self._toggle *=-1 - self.parent.Layout() - event.Skip() - - def enterWindow( self, event ): + 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() - self.headerPanel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHT ) ) - self.headerPanel.Refresh() - pass - event.Skip() - - def leaveWindow( self, event ): - - self.headerPanel.SetBackgroundColour( self.bkColour ) - self.headerPanel.Refresh() - - pass - event.Skip() - diff --git a/gui/statsPane.py b/gui/statsPane.py index 427e55057..6bad2e30a 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -816,40 +816,6 @@ class StatsPane(wx.Panel): box.Add(wx.StaticText(self.miniPanel, wx.ID_ANY, " m ISK"), 0, wx.ALIGN_CENTER) - # Price - sizerHeaderPrice = wx.BoxSizer(wx.HORIZONTAL) - self.sizerBase.Add(sizerHeaderPrice, 0, wx.EXPAND | wx.LEFT, 3) - - labelPrice = wx.StaticText(self.fullPanel, wx.ID_ANY, "Price") - labelPrice.SetFont(boldFont) - sizerHeaderPrice.Add(labelPrice, 0, wx.ALIGN_CENTER) - - sizerHeaderPrice.Add(wx.StaticLine(self.fullPanel, wx.ID_ANY), 1, wx.ALIGN_CENTER) - - # Grid for the price stuff. - gridPrice = wx.GridSizer(1, 3) - self.sizerBase.Add(gridPrice, 0, wx.EXPAND | wx.LEFT, 3) - - 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, self.fullPanel, "icons"), 0, wx.ALIGN_CENTER) - - vbox = wx.BoxSizer(wx.VERTICAL) - box.Add(vbox, 1, wx.EXPAND) - - vbox.Add(wx.StaticText(self.fullPanel, wx.ID_ANY, type.capitalize()), 0, wx.ALIGN_LEFT) - - hbox = wx.BoxSizer(wx.HORIZONTAL) - vbox.Add(hbox) - - lbl = wx.StaticText(self.fullPanel, wx.ID_ANY, "0.00") - setattr(self, "labelPrice%s" % type, lbl) - hbox.Add(lbl, 0, wx.ALIGN_LEFT) - - 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) @@ -885,6 +851,41 @@ class StatsPane(wx.Panel): hbox.Add(wx.StaticText(priceContentPane, wx.ID_ANY, " m ISK"), 0, wx.ALIGN_LEFT) + # Price + sizerHeaderPrice = wx.BoxSizer(wx.HORIZONTAL) + self.sizerBase.Add(sizerHeaderPrice, 0, wx.EXPAND | wx.LEFT, 3) + + labelPrice = wx.StaticText(self.fullPanel, wx.ID_ANY, "Price") + labelPrice.SetFont(boldFont) + sizerHeaderPrice.Add(labelPrice, 0, wx.ALIGN_CENTER) + + sizerHeaderPrice.Add(wx.StaticLine(self.fullPanel, wx.ID_ANY), 1, wx.ALIGN_CENTER) + + # Grid for the price stuff. + gridPrice = wx.GridSizer(1, 3) + self.sizerBase.Add(gridPrice, 0, wx.EXPAND | wx.LEFT, 3) + + 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, self.fullPanel, "icons"), 0, wx.ALIGN_CENTER) + + vbox = wx.BoxSizer(wx.VERTICAL) + box.Add(vbox, 1, wx.EXPAND) + + vbox.Add(wx.StaticText(self.fullPanel, wx.ID_ANY, type.capitalize()), 0, wx.ALIGN_LEFT) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + vbox.Add(hbox) + + lbl = wx.StaticText(self.fullPanel, wx.ID_ANY, "0.00") + setattr(self, "labelPrice%s" % type, lbl) + hbox.Add(lbl, 0, wx.ALIGN_LEFT) + + hbox.Add(wx.StaticText(self.fullPanel, wx.ID_ANY, " m ISK"), 0, wx.ALIGN_LEFT) + self.fullPanel.Fit() self.fullSize=self.fullPanel.GetBestSize()