Merge branch 'master' of evefit.org:pyfa
This commit is contained in:
@@ -32,6 +32,9 @@ class BoosterView(d.Display):
|
|||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL | wx.BORDER_NONE)
|
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(GE.FIT_CHANGED, self.fitChanged)
|
||||||
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
||||||
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
||||||
@@ -42,10 +45,29 @@ class BoosterView(d.Display):
|
|||||||
self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu)
|
self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu)
|
||||||
|
|
||||||
def fitChanged(self, event):
|
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()
|
cFit = service.Fit.getInstance()
|
||||||
fit = cFit.getFit(event.fitID)
|
fit = cFit.getFit(event.fitID)
|
||||||
|
|
||||||
stuff = fit.boosters if fit is not None else None
|
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.populate(stuff)
|
||||||
self.refresh(stuff)
|
self.refresh(stuff)
|
||||||
event.Skip()
|
event.Skip()
|
||||||
@@ -63,10 +85,12 @@ class BoosterView(d.Display):
|
|||||||
def removeItem(self, event):
|
def removeItem(self, event):
|
||||||
row, _ = self.HitTest(event.Position)
|
row, _ = self.HitTest(event.Position)
|
||||||
if row != -1:
|
if row != -1:
|
||||||
fitID = self.mainFrame.getActiveFit()
|
col = self.getColumn(event.Position)
|
||||||
cFit = service.Fit.getInstance()
|
if col != self.getColIndex(State):
|
||||||
cFit.removeBooster(fitID, self.GetItemData(row))
|
fitID = self.mainFrame.getActiveFit()
|
||||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
cFit = service.Fit.getInstance()
|
||||||
|
cFit.removeBooster(fitID, self.GetItemData(row))
|
||||||
|
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
||||||
|
|
||||||
def click(self, event):
|
def click(self, event):
|
||||||
event.Skip()
|
event.Skip()
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import gui.mainFrame
|
|||||||
from gui.viewColumn import ViewColumn
|
from gui.viewColumn import ViewColumn
|
||||||
from gui.cachingImageList import CachingImageList
|
from gui.cachingImageList import CachingImageList
|
||||||
|
|
||||||
|
|
||||||
class Display(wx.ListCtrl):
|
class Display(wx.ListCtrl):
|
||||||
def __init__(self, parent, size = wx.DefaultSize, style = 0):
|
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_END_DRAG, self.resizeChecker)
|
||||||
self.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.resizeSkip)
|
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()
|
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
@@ -68,6 +70,42 @@ class Display(wx.ListCtrl):
|
|||||||
|
|
||||||
self.imageListBase = self.imageList.ImageCount
|
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):
|
def addColumn(self, i, col):
|
||||||
self.activeColumns.append(col)
|
self.activeColumns.append(col)
|
||||||
info = wx.ListItem()
|
info = wx.ListItem()
|
||||||
@@ -114,23 +152,47 @@ class Display(wx.ListCtrl):
|
|||||||
self.SetColumnWidth(column,self.columnsMinWidth[column])
|
self.SetColumnWidth(column,self.columnsMinWidth[column])
|
||||||
colItem.resized = True
|
colItem.resized = True
|
||||||
|
|
||||||
def populate(self, stuff):
|
def getLastItem( self, state = wx.LIST_STATE_DONTCARE):
|
||||||
selection = []
|
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()
|
sel = self.GetFirstSelected()
|
||||||
while sel != -1:
|
while sel != -1:
|
||||||
selection.append(sel)
|
self.SetItemState(sel, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
|
||||||
sel = self.GetNextSelected(sel)
|
sel = self.GetNextSelected(sel)
|
||||||
|
|
||||||
self.DeleteAllItems()
|
def populate(self, stuff):
|
||||||
|
|
||||||
if stuff is not None:
|
if stuff is not None:
|
||||||
for id, st in enumerate(stuff):
|
listItemCount = self.GetItemCount()
|
||||||
index = self.InsertStringItem(sys.maxint, "")
|
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):
|
def refresh(self, stuff):
|
||||||
if stuff == None:
|
if stuff == None:
|
||||||
@@ -170,7 +232,6 @@ class Display(wx.ListCtrl):
|
|||||||
|
|
||||||
self.SetItemData(item, id)
|
self.SetItemData(item, id)
|
||||||
|
|
||||||
|
|
||||||
# self.Freeze()
|
# self.Freeze()
|
||||||
if 'wxMSW' in wx.PlatformInfo:
|
if 'wxMSW' in wx.PlatformInfo:
|
||||||
for i,col in enumerate(self.activeColumns):
|
for i,col in enumerate(self.activeColumns):
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ class DroneView(d.Display):
|
|||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL | wx.BORDER_NONE)
|
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(GE.FIT_CHANGED, self.fitChanged)
|
||||||
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
||||||
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
||||||
@@ -98,14 +101,34 @@ class DroneView(d.Display):
|
|||||||
drone.item.name)
|
drone.item.name)
|
||||||
|
|
||||||
def fitChanged(self, event):
|
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()
|
cFit = service.Fit.getInstance()
|
||||||
fit = cFit.getFit(event.fitID)
|
fit = cFit.getFit(event.fitID)
|
||||||
|
|
||||||
self.original = fit.drones if fit is not None else None
|
self.original = fit.drones if fit is not None else None
|
||||||
self.drones = stuff = 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:
|
if stuff is not None:
|
||||||
stuff.sort(key=self.droneKey)
|
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)
|
self.update(stuff)
|
||||||
event.Skip()
|
event.Skip()
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ class ImplantView(d.Display):
|
|||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL | wx.BORDER_NONE)
|
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(GE.FIT_CHANGED, self.fitChanged)
|
||||||
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
|
||||||
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
|
||||||
@@ -53,12 +56,30 @@ class ImplantView(d.Display):
|
|||||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
||||||
|
|
||||||
def fitChanged(self, event):
|
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()
|
cFit = service.Fit.getInstance()
|
||||||
fit = cFit.getFit(event.fitID)
|
fit = cFit.getFit(event.fitID)
|
||||||
|
|
||||||
self.original = fit.implants if fit is not None else None
|
self.original = fit.implants if fit is not None else None
|
||||||
self.implants = stuff = 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 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.populate(stuff)
|
||||||
self.refresh(stuff)
|
self.refresh(stuff)
|
||||||
event.Skip()
|
event.Skip()
|
||||||
@@ -76,11 +97,13 @@ class ImplantView(d.Display):
|
|||||||
def removeItem(self, event):
|
def removeItem(self, event):
|
||||||
row, _ = self.HitTest(event.Position)
|
row, _ = self.HitTest(event.Position)
|
||||||
if row != -1:
|
if row != -1:
|
||||||
fitID = self.mainFrame.getActiveFit()
|
col = self.getColumn(event.Position)
|
||||||
cFit = service.Fit.getInstance()
|
if col != self.getColIndex(State):
|
||||||
implant = self.implants[self.GetItemData(row)]
|
fitID = self.mainFrame.getActiveFit()
|
||||||
cFit.removeImplant(fitID, self.original.index(implant))
|
cFit = service.Fit.getInstance()
|
||||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
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):
|
def click(self, event):
|
||||||
event.Skip()
|
event.Skip()
|
||||||
|
|||||||
@@ -332,6 +332,7 @@ class ItemView(d.Display):
|
|||||||
return (item.metaGroup.parent.name, item.metaGroup.ID , item.name)
|
return (item.metaGroup.parent.name, item.metaGroup.ID , item.name)
|
||||||
|
|
||||||
def populate(self, stuff):
|
def populate(self, stuff):
|
||||||
|
self.deselectItems()
|
||||||
stuff.sort(key=self.itemSort)
|
stuff.sort(key=self.itemSort)
|
||||||
self.active = stuff
|
self.active = stuff
|
||||||
d.Display.populate(self, stuff)
|
d.Display.populate(self, stuff)
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ class ProjectedView(d.Display):
|
|||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
d.Display.__init__(self, parent, style = wx.LC_SINGLE_SEL | wx.BORDER_NONE)
|
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(GE.FIT_CHANGED, self.fitChanged)
|
||||||
self.Bind(wx.EVT_LEFT_DOWN, self.click)
|
self.Bind(wx.EVT_LEFT_DOWN, self.click)
|
||||||
self.Bind(wx.EVT_RIGHT_DOWN, self.click)
|
self.Bind(wx.EVT_RIGHT_DOWN, self.click)
|
||||||
@@ -108,6 +111,13 @@ class ProjectedView(d.Display):
|
|||||||
return fit.name
|
return fit.name
|
||||||
|
|
||||||
def fitChanged(self, event):
|
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()
|
cFit = service.Fit.getInstance()
|
||||||
fit = cFit.getFit(event.fitID)
|
fit = cFit.getFit(event.fitID)
|
||||||
stuff = []
|
stuff = []
|
||||||
@@ -124,6 +134,15 @@ class ProjectedView(d.Display):
|
|||||||
stuff.extend(self.drones)
|
stuff.extend(self.drones)
|
||||||
stuff.extend(self.fits)
|
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)
|
self.update(stuff)
|
||||||
|
|
||||||
def get(self, row):
|
def get(self, row):
|
||||||
|
|||||||
Reference in New Issue
Block a user