Fixed a bug in multiswitch (or oversight) that was affecting the animation in resources's pygauges when a new tab is created (double notebook page changed event, skip the first, post fitchanged event at the second event) / various improvements in pygauges and resources pane

This commit is contained in:
HomeWorld
2010-10-10 03:32:45 +03:00
parent bc3f89f26a
commit 25cd1c6cde
3 changed files with 49 additions and 12 deletions

View File

@@ -116,7 +116,7 @@ class ResourcesViewFull(StatsView):
# Gauges modif. - Darriele
gauge = PG.PyGauge(parent, wx.ID_ANY, 1)
gauge.SetRange(1,True)
gauge.SetValueRange(0, 0)
gauge.SetMinSize((self.getTextExtentW("1.999M/1.99M MW"), 23))
gauge.SetFractionDigits(2)
@@ -165,17 +165,16 @@ class ResourcesViewFull(StatsView):
gauge = getattr(self, "gauge%s%s" % (panel, capitalizedType))
resUsed = getattr(fit,"%sUsed" % resourceType)
if resMax[i]() > 0:
gauge.SetRange(resMax[i]())
gauge.SetValue(resUsed)
gauge.SetValueRange(resUsed, resMax[i]())
i+=1
else:
capitalizedType = resourceType[0].capitalize() + resourceType[1:]
gauge = getattr(self, "gauge%s%s" % (panel, capitalizedType))
gauge.SetRange(0.01,True)
gauge.SetValue(0)
gauge.SetValueRange(0, 0)
i+=1
self.panel.Layout()

View File

@@ -45,6 +45,7 @@ class MultiSwitch(wx.Notebook):
self.SetImageList(self.imageList)
self.removal = False
self.countEvt = 1
def getActiveFit(self):
return self.GetCurrentPage().view.activeFitID
@@ -105,7 +106,9 @@ class MultiSwitch(wx.Notebook):
def checkAdd(self, event):
if event.Selection == self.GetPageCount() - 1:
self.AddTab()
#Veto to prevent the + tab from being selected
event.Veto()
@@ -129,13 +132,20 @@ class MultiSwitch(wx.Notebook):
selection = self.AddTab()
else:
selection = event.Selection
self.countEvt = 0
page = self.GetPage(selection)
if hasattr(page, "type") and page.type == "fit":
fitID = page.view.activeFitID
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID))
else:
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=None))
if self.countEvt == 0:
if hasattr(page, "type") and page.type == "fit":
fitID = page.view.activeFitID
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID))
else:
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=None))
self.countEvt -= 1
if self.countEvt < 0:
self.countEvt = 1
event.Skip()

View File

@@ -52,7 +52,7 @@ class PyGauge(wx.PyWindow):
self._oldValue = 0
self._animDuration = 400
self._animDuration = 600
self._animStep = 0
self._period = 25
self._animValue = 0
@@ -180,6 +180,7 @@ class PyGauge(wx.PyWindow):
self._oldPercentage = self._percentage
self._percentage = 0
self._value = 0
self.Animate()
@@ -207,6 +208,33 @@ class PyGauge(wx.PyWindow):
self._tooltip.SetTip("%.2f/%.2f" % (self._value, self._range))
def SetValueRange(self, value, range, reinit = False):
range = float(range)
if range <= 0:
self._range = 0.01
else:
self._range = range
value = float(value)
self._value = value
if value < 0:
self._value = float(0)
if reinit is False:
self._oldPercentage = self._percentage
self._percentage = (self._value/self._range) * 100
else:
self._oldPercentage = self._percentage
self._percentage = 0
self.Animate()
self._tooltip.SetTip("%.2f/%.2f" % (self._value, self._range if self._range >0.01 else 0))
def OnEraseBackground(self, event):
"""
Handles the ``wx.EVT_ERASE_BACKGROUND`` event for L{PyGauge}.