Merge branch 'master' of evefit.org:pyfa

This commit is contained in:
Corollax
2010-12-11 15:42:21 -06:00
6 changed files with 170 additions and 19 deletions

View File

@@ -32,6 +32,9 @@ class BoosterView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL | wx.BORDER_NONE)
self.lastFitId = None
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
@@ -42,10 +45,29 @@ class BoosterView(d.Display):
self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu)
def fitChanged(self, event):
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
cFit = service.Fit.getInstance()
fit = cFit.getFit(event.fitID)
stuff = fit.boosters if fit is not None else None
if event.fitID != self.lastFitId:
self.lastFitId = event.fitID
item = self.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_DONTCARE)
if item != -1:
self.EnsureVisible(item)
self.deselectItems()
self.populate(stuff)
self.refresh(stuff)
event.Skip()
@@ -63,10 +85,12 @@ class BoosterView(d.Display):
def removeItem(self, event):
row, _ = self.HitTest(event.Position)
if row != -1:
fitID = self.mainFrame.getActiveFit()
cFit = service.Fit.getInstance()
cFit.removeBooster(fitID, self.GetItemData(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
col = self.getColumn(event.Position)
if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
cFit = service.Fit.getInstance()
cFit.removeBooster(fitID, self.GetItemData(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def click(self, event):
event.Skip()

View File

@@ -24,7 +24,6 @@ import gui.mainFrame
from gui.viewColumn import ViewColumn
from gui.cachingImageList import CachingImageList
class Display(wx.ListCtrl):
def __init__(self, parent, size = wx.DefaultSize, style = 0):
@@ -36,6 +35,9 @@ class Display(wx.ListCtrl):
self.Bind(wx.EVT_LIST_COL_END_DRAG, self.resizeChecker)
self.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.resizeSkip)
if "wxMSW" in wx.PlatformInfo:
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBk)
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
i = 0
@@ -68,6 +70,42 @@ class Display(wx.ListCtrl):
self.imageListBase = self.imageList.ImageCount
def OnEraseBk(self,event):
if self.GetItemCount() >0:
width, height = self.GetClientSize()
dc = event.GetDC()
dc.DestroyClippingRegion()
dc.SetClippingRegion(0, 0, width, height)
x,y,w,h = dc.GetClippingBox()
topItem = self.GetTopItem()
bottomItem = topItem + self.GetCountPerPage()
if bottomItem >= self.GetItemCount():
bottomItem = self.GetItemCount() - 1
topRect = self.GetItemRect(topItem, wx.LIST_RECT_LABEL)
bottomRect = self.GetItemRect(bottomItem, wx.LIST_RECT_BOUNDS)
items_rect = wx.Rect(topRect.left, 0, bottomRect.right - topRect.left, bottomRect.bottom )
updateRegion = wx.Region(x,y,w,h)
updateRegion.SubtractRect(items_rect)
dc.DestroyClippingRegion()
dc.SetClippingRegionAsRegion(updateRegion)
dc.SetBackground(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
dc.Clear()
dc.DestroyClippingRegion()
else:
event.Skip()
def addColumn(self, i, col):
self.activeColumns.append(col)
info = wx.ListItem()
@@ -114,23 +152,47 @@ class Display(wx.ListCtrl):
self.SetColumnWidth(column,self.columnsMinWidth[column])
colItem.resized = True
def populate(self, stuff):
selection = []
def getLastItem( self, state = wx.LIST_STATE_DONTCARE):
lastFound = -1
while True:
index = self.GetNextItem(
lastFound,
wx.LIST_NEXT_ALL,
state,
)
if index == -1:
break
else:
lastFound = index
return lastFound
def deselectItems(self):
sel = self.GetFirstSelected()
while sel != -1:
selection.append(sel)
self.SetItemState(sel, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
sel = self.GetNextSelected(sel)
self.DeleteAllItems()
def populate(self, stuff):
if stuff is not None:
for id, st in enumerate(stuff):
index = self.InsertStringItem(sys.maxint, "")
listItemCount = self.GetItemCount()
stuffItemCount = len(stuff)
if listItemCount < stuffItemCount:
for i in xrange(stuffItemCount - listItemCount):
index = self.InsertStringItem(sys.maxint, "")
if listItemCount > stuffItemCount:
if listItemCount - stuffItemCount > 20 and stuffItemCount < 20:
self.DeleteAllItems()
for i in xrange(stuffItemCount):
index = self.InsertStringItem(sys.maxint, "")
else:
for i in xrange(listItemCount - stuffItemCount):
self.DeleteItem(self.getLastItem())
self.Refresh()
for sel in selection:
self.Select(sel)
def refresh(self, stuff):
if stuff == None:
@@ -170,7 +232,6 @@ class Display(wx.ListCtrl):
self.SetItemData(item, id)
# self.Freeze()
if 'wxMSW' in wx.PlatformInfo:
for i,col in enumerate(self.activeColumns):

View File

@@ -50,6 +50,9 @@ class DroneView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL | wx.BORDER_NONE)
self.lastFitId = None
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
@@ -98,14 +101,34 @@ class DroneView(d.Display):
drone.item.name)
def fitChanged(self, event):
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
cFit = service.Fit.getInstance()
fit = cFit.getFit(event.fitID)
self.original = fit.drones if fit is not None else None
self.drones = stuff = fit.drones[:] if fit is not None else None
if stuff is not None:
stuff.sort(key=self.droneKey)
if event.fitID != self.lastFitId:
self.lastFitId = event.fitID
item = self.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_DONTCARE)
if item != -1:
self.EnsureVisible(item)
self.deselectItems()
self.update(stuff)
event.Skip()

View File

@@ -31,6 +31,9 @@ class ImplantView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL | wx.BORDER_NONE)
self.lastFitId = None
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
@@ -53,12 +56,30 @@ class ImplantView(d.Display):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def fitChanged(self, event):
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
cFit = service.Fit.getInstance()
fit = cFit.getFit(event.fitID)
self.original = fit.implants if fit is not None else None
self.implants = stuff = fit.implants if fit is not None else None
if stuff is not None: stuff.sort(key=lambda implant: implant.slot)
if event.fitID != self.lastFitId:
self.lastFitId = event.fitID
item = self.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_DONTCARE)
if item != -1:
self.EnsureVisible(item)
self.deselectItems()
self.populate(stuff)
self.refresh(stuff)
event.Skip()
@@ -76,11 +97,13 @@ class ImplantView(d.Display):
def removeItem(self, event):
row, _ = self.HitTest(event.Position)
if row != -1:
fitID = self.mainFrame.getActiveFit()
cFit = service.Fit.getInstance()
implant = self.implants[self.GetItemData(row)]
cFit.removeImplant(fitID, self.original.index(implant))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
col = self.getColumn(event.Position)
if col != self.getColIndex(State):
fitID = self.mainFrame.getActiveFit()
cFit = service.Fit.getInstance()
implant = self.implants[self.GetItemData(row)]
cFit.removeImplant(fitID, self.original.index(implant))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def click(self, event):
event.Skip()

View File

@@ -332,6 +332,7 @@ class ItemView(d.Display):
return (item.metaGroup.parent.name, item.metaGroup.ID , item.name)
def populate(self, stuff):
self.deselectItems()
stuff.sort(key=self.itemSort)
self.active = stuff
d.Display.populate(self, stuff)

View File

@@ -49,6 +49,9 @@ class ProjectedView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent, style = wx.LC_SINGLE_SEL | wx.BORDER_NONE)
self.lastFitId = None
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.Bind(wx.EVT_LEFT_DOWN, self.click)
self.Bind(wx.EVT_RIGHT_DOWN, self.click)
@@ -108,6 +111,13 @@ class ProjectedView(d.Display):
return fit.name
def fitChanged(self, event):
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
self.lastFitId = None
event.Skip()
return
cFit = service.Fit.getInstance()
fit = cFit.getFit(event.fitID)
stuff = []
@@ -124,6 +134,15 @@ class ProjectedView(d.Display):
stuff.extend(self.drones)
stuff.extend(self.fits)
if event.fitID != self.lastFitId:
self.lastFitId = event.fitID
item = self.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_DONTCARE)
if item != -1:
self.EnsureVisible(item)
self.deselectItems()
self.update(stuff)
def get(self, row):