From 00953c182891d5a2bee98dd1f50f8c4f6a87deed Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Sun, 5 Sep 2010 11:05:28 +0200 Subject: [PATCH] Finish working on the + & - buttons for drones, they now correctly activate & deactivate drones \o/ --- controller/fit.py | 26 +++++++++++++++++++++++++- gui/builtinViewColumns/display.py | 15 +++++++++++++++ gui/droneView.py | 23 +++++++++++++++++++---- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/controller/fit.py b/controller/fit.py index 72767ebf0..b1363c590 100644 --- a/controller/fit.py +++ b/controller/fit.py @@ -100,6 +100,9 @@ class Fit(object): return fit def addDrone(self, fitID, itemID): + if fitID == None: + return + fit = eos.db.getFit(fitID) item = eos.db.getItem(itemID, eager=("attributes", "group.category")) if item.category.name == "Drone": @@ -109,7 +112,6 @@ class Fit(object): fit.calculateModifiedAttributes() return fit - def removeDrone(self, fitID, i): fit = eos.db.getFit(fitID) fit.drones.removeItem(fit.drones[i].item, 1) @@ -118,3 +120,25 @@ class Fit(object): fit.clear() fit.calculateModifiedAttributes() return fit + + def activateDrone(self, fitID, i): + fit = eos.db.getFit(fitID) + d = fit.drones[i] + if d.amountActive < d.amount: + d.amountActive += 1 + + eos.db.saveddata_session.flush() + fit.clear() + fit.calculateModifiedAttributes() + return fit + + def deactivateDrone(self, fitID, i): + fit = eos.db.getFit(fitID) + d = fit.drones[i] + if d.amountActive > 0: + d.amountActive -= 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 b650c4ae4..1cb942808 100644 --- a/gui/builtinViewColumns/display.py +++ b/gui/builtinViewColumns/display.py @@ -64,6 +64,13 @@ class Display(wx.ListCtrl): col.resized = False self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER if col.size is wx.LIST_AUTOSIZE else col.size) + def getColIndex(self, colClass): + for i, col in enumerate(self.activeColumns): + if col.__class__ == colClass: + return i + + return None + def resizeChecker(self, event): if self.activeColumns[event.Column].resizable is False: event.Veto() @@ -100,3 +107,11 @@ class Display(wx.ListCtrl): for sel in selection: self.Select(sel) + + def getColumn(self, point): + x = point[0] + total = 0 + for col in xrange(self.GetColumnCount()): + total += self.GetColumnWidth(col) + if total >= x: + return col diff --git a/gui/droneView.py b/gui/droneView.py index e726aa034..0ad7dc534 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -42,6 +42,7 @@ class DroneView(d.Display): self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) + self.Bind(wx.EVT_LEFT_DOWN, self.click) def fitChanged(self, event): cFit = controller.Fit.getInstance() @@ -59,11 +60,25 @@ class DroneView(d.Display): 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)) + col = self.getColumn(event.Position) + if col not in (self.getColIndex(DroneMore), self.getColIndex(DroneLess)): + fitID = self.mainFrame.getActiveFit() + cFit = controller.Fit.getInstance() + cFit.removeDrone(fitID, self.GetItemData(row)) + wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + def click(self, event): + row, _ = self.HitTest(event.Position) + if row != -1: + col = self.getColumn(event.Position) + cFit = controller.Fit.getInstance() + fitID = self.mainFrame.getActiveFit() + if col == self.getColIndex(DroneMore): + cFit.activateDrone(fitID, row) + wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + elif col == self.getColIndex(DroneLess): + cFit.deactivateDrone(fitID, row) + wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) class DroneMore(ViewColumn): name = "Activate Drone"