First iteration of the drone view, as well as a bunch of other related changes

This commit is contained in:
cncfanatics
2010-09-04 23:25:02 +02:00
parent 53b89496d8
commit 48293cdf8b
8 changed files with 97 additions and 36 deletions

View File

@@ -78,7 +78,7 @@ class Fit(object):
def appendModule(self, fitID, itemID):
fit = eos.db.getFit(fitID)
item = eos.db.getItem(itemID, eager=("attributes", "group.category"))
if item.group.category.name == "Module":
if item.category.name == "Module":
m = eos.types.Module(item)
if m.isValidState(State.ACTIVE):
m.state = State.ACTIVE
@@ -86,9 +86,9 @@ class Fit(object):
if m.fits(fit):
fit.modules.append(m)
eos.db.saveddata_session.flush()
fit.clear()
fit.calculateModifiedAttributes()
eos.db.saveddata_session.flush()
fit.clear()
fit.calculateModifiedAttributes()
return fit
def removeModule(self, fitID, position):
@@ -98,3 +98,23 @@ class Fit(object):
fit.clear()
fit.calculateModifiedAttributes()
return fit
def addDrone(self, fitID, itemID):
fit = eos.db.getFit(fitID)
item = eos.db.getItem(itemID, eager=("attributes", "group.category"))
if item.category.name == "Drone":
fit.drones.appendItem(item)
fit.clear()
fit.calculateModifiedAttributes()
return fit
def removeDrone(self, fitID, i):
fit = eos.db.getFit(fitID)
fit.drones.removeItem(fit.drones[i].item, 1)
eos.db.saveddata_session.flush()
fit.clear()
fit.calculateModifiedAttributes()
return fit

View File

@@ -20,6 +20,7 @@
import wx
import gui.mainFrame
from gui.builtinViewColumns import *
import sys
class Display(wx.ListCtrl):
def __init__(self, parent):
@@ -72,3 +73,30 @@ class Display(wx.ListCtrl):
def clearItemImages(self):
for i in xrange(self.imageList.ImageCount - 1, self.imageListBase, -1):
self.imageList.Remove(i)
def populate(self, stuff):
selection = []
sel = self.GetFirstSelected()
while sel != -1:
selection.append(sel)
sel = self.GetNextSelected(sel)
self.DeleteAllItems()
self.clearItemImages()
if stuff is not None:
for id, st in enumerate(stuff):
index = self.InsertStringItem(sys.maxint, "")
for i, col in enumerate(self.activeColumns):
self.SetStringItem(index, i, col.getText(st), col.getImageId(st))
self.SetItemData(index, id)
for i, col in enumerate(self.activeColumns):
if not col.resized:
self.SetColumnWidth(i, wx.LIST_AUTOSIZE)
if self.GetColumnWidth(i) < 40:
self.SetColumnWidth(i, 40)
for sel in selection:
self.Select(sel)

View File

@@ -31,7 +31,7 @@ class DroneDps(ViewColumn):
self.imageId = fittingView.imageList.Add(bitmap)
def getText(self, stuff):
return stuff.item.name
return "%.1f" % stuff.dps
def getImageId(self, mod):
return -1

View File

@@ -29,7 +29,7 @@ class DroneNameAmount(ViewColumn):
self.columnText = "Name"
def getText(self, drone):
return "%dX %s (%d Active)" % (drone.amount, stuff.item.name, drone.amountActive)
return "%dx %s (%d Active)" % (drone.amount, drone.item.name, drone.amountActive)
def getImageId(self, mod):
return -1

View File

@@ -19,8 +19,10 @@
import wx
import controller
import gui.mainFrame
import gui.fittingView as fv
import gui.marketBrowser as mb
import gui.builtinViewColumns.display as d
class DroneView(d.Display):
@@ -33,6 +35,27 @@ class DroneView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent)
self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem)
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
def fitChanged(self, event):
pass
cFit = controller.Fit.getInstance()
fit = cFit.getFit(event.fitID)
self.populate(fit.drones)
def addItem(self, event):
cFit = controller.Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
cFit.addDrone(fitID, event.itemID)
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID))
event.Skip()
def removeItem(self, event):
row, _ = self.HitTest(event.Position)
if row != -1:
fitID = self.mainFrame.getActiveFit()
cFit = controller.Fit.getInstance()
cFit.removeDrone(fitID, self.GetItemData(row))
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID))

View File

@@ -66,42 +66,20 @@ class FittingView(d.Display):
cFit = controller.Fit.getInstance()
cFit.removeModule(self.activeFitID, self.mods[self.GetItemData(row)].position)
wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID))
wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID))
def fitChanged(self, event):
self.Hide()
cFit = controller.Fit.getInstance()
fit = cFit.getFit(event.fitID)
selection = []
sel = self.GetFirstSelected()
while sel != -1:
selection.append(sel)
sel = self.GetNextSelected(sel)
self.DeleteAllItems()
self.clearItemImages()
slotOrder = [Slot.SUBSYSTEM, Slot.HIGH, Slot.MED, Slot.LOW, Slot.RIG]
self.mods = fit.modules[:]
self.mods.sort(key=lambda mod: (slotOrder.index(mod.slot), mod.position))
if fit is not None:
for modid, mod in enumerate(self.mods):
index = self.InsertStringItem(sys.maxint, "")
for i, col in enumerate(self.activeColumns):
self.SetStringItem(index, i, col.getText(mod), col.getImageId(mod))
self.SetItemData(index, modid)
self.mods = fit.modules[:]
self.mods.sort(key=lambda mod: (slotOrder.index(mod.slot), mod.position))
else:
self.mods = None
self.populate(self.mods)
for i, col in enumerate(self.activeColumns):
if not col.resized:
self.SetColumnWidth(i, wx.LIST_AUTOSIZE)
if self.GetColumnWidth(i) < 40:
self.SetColumnWidth(i, 40)
for sel in selection:
self.Select(sel)
self.Show()
event.Skip()

View File

@@ -91,6 +91,11 @@ class MainFrame(wx.Frame):
#Show ourselves
self.Show()
def getActiveFit(self):
sel = self.fitMultiSwitch.GetSelection()
view = self.fitMultiSwitch.GetPage(sel).view
return view.activeFitID
def mouseHit(self, event):
tab, _ = self.notebookBrowsers.HitTest(event.Position)
if tab != -1:

View File

@@ -106,7 +106,6 @@ class MultiSwitch(wx.Notebook):
self.SetPageImage(tab, self.imageList.Add(bitmap))
def pageChanged(self, event):
print "p"
selection = event.Selection
page = self.GetPage(selection)
if hasattr(page, "type") and page.type == "fit":
@@ -123,6 +122,8 @@ class MultiSwitch(wx.Notebook):
self.setTabTitle(selected, fitID)
view.changeFit(fitID)
event.Skip()
def processRename(self, event):
fitID = event.fitID
# Loop through every tab and check if they're our culprit, if so, change tab name
@@ -133,6 +134,8 @@ class MultiSwitch(wx.Notebook):
if view.activeFitID == fitID:
self.setTabTitle(i, fitID)
event.Skip()
def processRemove(self, event):
fitID = event.fitID
for i in xrange(self.GetPageCount() - 2, -1, -1):
@@ -147,8 +150,12 @@ class MultiSwitch(wx.Notebook):
if self.GetSelection() == self.GetPageCount() - 1:
self.SetSelection(self.GetPageCount() - 2)
event.Skip()
def itemSelected(self, event):
selected = self.GetSelection()
page = self.GetPage(selected)
if page.type == "fit":
page.view.appendItem(event.itemID)
event.Skip()