Don't reclear and repopulate the whole fitting view whenever anything

changed. Only repopulate when needed, and just refresh the columns in
all other cases
This commit is contained in:
cncfanatics
2010-09-15 10:17:40 +02:00
parent 8b03e831ea
commit 35d9a42d70
2 changed files with 32 additions and 3 deletions

View File

@@ -85,7 +85,7 @@ class Display(wx.ListCtrl):
selection = []
self.Freeze()
sel = self.GetFirstSelected()
while sel != -1:
selection.append(sel)
@@ -113,6 +113,17 @@ class Display(wx.ListCtrl):
self.Thaw()
def refresh(self, stuff):
self.Freeze()
item = -1
for id, st in enumerate(stuff):
item = self.GetNextItem(item)
for i, col in enumerate(self.activeColumns):
self.SetStringItem(item, i, col.getText(st), col.getImageId(st))
self.SetItemData(item, id)
self.Thaw()
def getColumn(self, point):
x = point[0]
total = 0

View File

@@ -42,6 +42,7 @@ class FittingView(d.Display):
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
self.Hide() #Don't show ourselves at start
self.activeFitID = None
self.ignore = False
#Gets called from the fitMultiSwitch when it decides its time
def changeFit(self, fitID):
@@ -51,14 +52,20 @@ class FittingView(d.Display):
else:
self.Show()
self.ignore = True
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
self.ignore = False
self.slotsChanged()
def appendItem(self, itemID):
fitID = self.activeFitID
if fitID != None:
cFit = controller.Fit.getInstance()
cFit.appendModule(fitID, itemID)
self.ignore = True
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
self.ignore = False
self.slotsChanged()
def removeItem(self, event):
row, _ = self.HitTest(event.Position)
@@ -67,11 +74,14 @@ class FittingView(d.Display):
trigger = cFit.removeModule(self.activeFitID, self.mods[self.GetItemData(row)].position)
if trigger:
self.ignore = True
wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID))
self.ignore = False
self.slotsChanged()
def fitChanged(self, event):
def generateMods(self):
cFit = controller.Fit.getInstance()
fit = cFit.getFit(event.fitID)
fit = cFit.getFit(self.activeFitID)
slotOrder = [Slot.SUBSYSTEM, Slot.HIGH, Slot.MED, Slot.LOW, Slot.RIG]
@@ -81,6 +91,14 @@ class FittingView(d.Display):
else:
self.mods = None
def slotsChanged(self):
self.generateMods()
self.populate(self.mods)
def fitChanged(self, event):
if self.ignore:
return
self.generateMods()
self.refresh(self.mods)
event.Skip()