diff --git a/controller/fit.py b/controller/fit.py index a2c6baf42..72767ebf0 100644 --- a/controller/fit.py +++ b/controller/fit.py @@ -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 diff --git a/gui/builtinViewColumns/display.py b/gui/builtinViewColumns/display.py index 2736d749a..8e314ab90 100644 --- a/gui/builtinViewColumns/display.py +++ b/gui/builtinViewColumns/display.py @@ -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) diff --git a/gui/builtinViewColumns/droneDps.py b/gui/builtinViewColumns/droneDps.py index 3bc475d68..f684aced8 100644 --- a/gui/builtinViewColumns/droneDps.py +++ b/gui/builtinViewColumns/droneDps.py @@ -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 diff --git a/gui/builtinViewColumns/droneNameAmount.py b/gui/builtinViewColumns/droneNameAmount.py index b483faf96..516f5e156 100644 --- a/gui/builtinViewColumns/droneNameAmount.py +++ b/gui/builtinViewColumns/droneNameAmount.py @@ -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 diff --git a/gui/droneView.py b/gui/droneView.py index 0886b5f5a..47a5ff952 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -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)) diff --git a/gui/fittingView.py b/gui/fittingView.py index 01cf9186f..905948af8 100644 --- a/gui/fittingView.py +++ b/gui/fittingView.py @@ -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() diff --git a/gui/mainFrame.py b/gui/mainFrame.py index d18cda1ef..423071f46 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -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: diff --git a/gui/multiSwitch.py b/gui/multiSwitch.py index c32268e55..925ab26fb 100644 --- a/gui/multiSwitch.py +++ b/gui/multiSwitch.py @@ -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()