First iteration of the drone view, as well as a bunch of other related changes
This commit is contained in:
@@ -78,7 +78,7 @@ class Fit(object):
|
|||||||
def appendModule(self, fitID, itemID):
|
def appendModule(self, fitID, itemID):
|
||||||
fit = eos.db.getFit(fitID)
|
fit = eos.db.getFit(fitID)
|
||||||
item = eos.db.getItem(itemID, eager=("attributes", "group.category"))
|
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)
|
m = eos.types.Module(item)
|
||||||
if m.isValidState(State.ACTIVE):
|
if m.isValidState(State.ACTIVE):
|
||||||
m.state = State.ACTIVE
|
m.state = State.ACTIVE
|
||||||
@@ -86,9 +86,9 @@ class Fit(object):
|
|||||||
if m.fits(fit):
|
if m.fits(fit):
|
||||||
fit.modules.append(m)
|
fit.modules.append(m)
|
||||||
|
|
||||||
eos.db.saveddata_session.flush()
|
eos.db.saveddata_session.flush()
|
||||||
fit.clear()
|
fit.clear()
|
||||||
fit.calculateModifiedAttributes()
|
fit.calculateModifiedAttributes()
|
||||||
return fit
|
return fit
|
||||||
|
|
||||||
def removeModule(self, fitID, position):
|
def removeModule(self, fitID, position):
|
||||||
@@ -98,3 +98,23 @@ class Fit(object):
|
|||||||
fit.clear()
|
fit.clear()
|
||||||
fit.calculateModifiedAttributes()
|
fit.calculateModifiedAttributes()
|
||||||
return fit
|
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
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
import wx
|
import wx
|
||||||
import gui.mainFrame
|
import gui.mainFrame
|
||||||
from gui.builtinViewColumns import *
|
from gui.builtinViewColumns import *
|
||||||
|
import sys
|
||||||
|
|
||||||
class Display(wx.ListCtrl):
|
class Display(wx.ListCtrl):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
@@ -72,3 +73,30 @@ class Display(wx.ListCtrl):
|
|||||||
def clearItemImages(self):
|
def clearItemImages(self):
|
||||||
for i in xrange(self.imageList.ImageCount - 1, self.imageListBase, -1):
|
for i in xrange(self.imageList.ImageCount - 1, self.imageListBase, -1):
|
||||||
self.imageList.Remove(i)
|
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)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class DroneDps(ViewColumn):
|
|||||||
self.imageId = fittingView.imageList.Add(bitmap)
|
self.imageId = fittingView.imageList.Add(bitmap)
|
||||||
|
|
||||||
def getText(self, stuff):
|
def getText(self, stuff):
|
||||||
return stuff.item.name
|
return "%.1f" % stuff.dps
|
||||||
|
|
||||||
def getImageId(self, mod):
|
def getImageId(self, mod):
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class DroneNameAmount(ViewColumn):
|
|||||||
self.columnText = "Name"
|
self.columnText = "Name"
|
||||||
|
|
||||||
def getText(self, drone):
|
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):
|
def getImageId(self, mod):
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
@@ -19,8 +19,10 @@
|
|||||||
|
|
||||||
import wx
|
import wx
|
||||||
|
|
||||||
|
import controller
|
||||||
import gui.mainFrame
|
import gui.mainFrame
|
||||||
import gui.fittingView as fv
|
import gui.fittingView as fv
|
||||||
|
import gui.marketBrowser as mb
|
||||||
import gui.builtinViewColumns.display as d
|
import gui.builtinViewColumns.display as d
|
||||||
|
|
||||||
class DroneView(d.Display):
|
class DroneView(d.Display):
|
||||||
@@ -33,6 +35,27 @@ class DroneView(d.Display):
|
|||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
d.Display.__init__(self, parent)
|
d.Display.__init__(self, parent)
|
||||||
self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged)
|
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):
|
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))
|
||||||
|
|||||||
@@ -66,42 +66,20 @@ class FittingView(d.Display):
|
|||||||
cFit = controller.Fit.getInstance()
|
cFit = controller.Fit.getInstance()
|
||||||
cFit.removeModule(self.activeFitID, self.mods[self.GetItemData(row)].position)
|
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):
|
def fitChanged(self, event):
|
||||||
self.Hide()
|
|
||||||
cFit = controller.Fit.getInstance()
|
cFit = controller.Fit.getInstance()
|
||||||
fit = cFit.getFit(event.fitID)
|
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]
|
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:
|
if fit is not None:
|
||||||
for modid, mod in enumerate(self.mods):
|
self.mods = fit.modules[:]
|
||||||
index = self.InsertStringItem(sys.maxint, "")
|
self.mods.sort(key=lambda mod: (slotOrder.index(mod.slot), mod.position))
|
||||||
for i, col in enumerate(self.activeColumns):
|
else:
|
||||||
self.SetStringItem(index, i, col.getText(mod), col.getImageId(mod))
|
self.mods = None
|
||||||
self.SetItemData(index, modid)
|
|
||||||
|
|
||||||
|
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()
|
event.Skip()
|
||||||
|
|||||||
@@ -91,6 +91,11 @@ class MainFrame(wx.Frame):
|
|||||||
#Show ourselves
|
#Show ourselves
|
||||||
self.Show()
|
self.Show()
|
||||||
|
|
||||||
|
def getActiveFit(self):
|
||||||
|
sel = self.fitMultiSwitch.GetSelection()
|
||||||
|
view = self.fitMultiSwitch.GetPage(sel).view
|
||||||
|
return view.activeFitID
|
||||||
|
|
||||||
def mouseHit(self, event):
|
def mouseHit(self, event):
|
||||||
tab, _ = self.notebookBrowsers.HitTest(event.Position)
|
tab, _ = self.notebookBrowsers.HitTest(event.Position)
|
||||||
if tab != -1:
|
if tab != -1:
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ class MultiSwitch(wx.Notebook):
|
|||||||
self.SetPageImage(tab, self.imageList.Add(bitmap))
|
self.SetPageImage(tab, self.imageList.Add(bitmap))
|
||||||
|
|
||||||
def pageChanged(self, event):
|
def pageChanged(self, event):
|
||||||
print "p"
|
|
||||||
selection = event.Selection
|
selection = event.Selection
|
||||||
page = self.GetPage(selection)
|
page = self.GetPage(selection)
|
||||||
if hasattr(page, "type") and page.type == "fit":
|
if hasattr(page, "type") and page.type == "fit":
|
||||||
@@ -123,6 +122,8 @@ class MultiSwitch(wx.Notebook):
|
|||||||
self.setTabTitle(selected, fitID)
|
self.setTabTitle(selected, fitID)
|
||||||
view.changeFit(fitID)
|
view.changeFit(fitID)
|
||||||
|
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
def processRename(self, event):
|
def processRename(self, event):
|
||||||
fitID = event.fitID
|
fitID = event.fitID
|
||||||
# Loop through every tab and check if they're our culprit, if so, change tab name
|
# 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:
|
if view.activeFitID == fitID:
|
||||||
self.setTabTitle(i, fitID)
|
self.setTabTitle(i, fitID)
|
||||||
|
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
def processRemove(self, event):
|
def processRemove(self, event):
|
||||||
fitID = event.fitID
|
fitID = event.fitID
|
||||||
for i in xrange(self.GetPageCount() - 2, -1, -1):
|
for i in xrange(self.GetPageCount() - 2, -1, -1):
|
||||||
@@ -147,8 +150,12 @@ class MultiSwitch(wx.Notebook):
|
|||||||
if self.GetSelection() == self.GetPageCount() - 1:
|
if self.GetSelection() == self.GetPageCount() - 1:
|
||||||
self.SetSelection(self.GetPageCount() - 2)
|
self.SetSelection(self.GetPageCount() - 2)
|
||||||
|
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
def itemSelected(self, event):
|
def itemSelected(self, event):
|
||||||
selected = self.GetSelection()
|
selected = self.GetSelection()
|
||||||
page = self.GetPage(selected)
|
page = self.GetPage(selected)
|
||||||
if page.type == "fit":
|
if page.type == "fit":
|
||||||
page.view.appendItem(event.itemID)
|
page.view.appendItem(event.itemID)
|
||||||
|
|
||||||
|
event.Skip()
|
||||||
|
|||||||
Reference in New Issue
Block a user