From 774ac5cf8a7ff08b70e6fad29dd665e1a083578e Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Thu, 21 Oct 2010 16:47:22 +0200 Subject: [PATCH] Add code for drone splitting, lacking a little amount selection popup atm --- gui/builtinContextMenus/__init__.py | 2 +- gui/builtinContextMenus/droneSplit.py | 24 ++++++++++++++++++++++++ gui/droneView.py | 7 ++++--- service/fit.py | 17 +++++++++++++++++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100755 gui/builtinContextMenus/droneSplit.py diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index c2b1386a3..30df7603b 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -1 +1 @@ -__all__ = ["moduleAmmoPicker", "itemStats", "damagePattern", "marketJump"] +__all__ = ["moduleAmmoPicker", "itemStats", "damagePattern", "marketJump", "droneSplit"] diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py new file mode 100755 index 000000000..df8010b56 --- /dev/null +++ b/gui/builtinContextMenus/droneSplit.py @@ -0,0 +1,24 @@ +from gui.contextMenu import ContextMenu +from gui.itemStats import ItemStatsDialog +import gui.mainFrame +import gui.fittingView +import service +import wx + +class DroneSplit(ContextMenu): + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + def display(self, context, selection): + return context in ("drone") and selection[0].amount > 1 + + def getText(self, context, selection): + return "Split stack" + + def activate(self, context, selection, i): + sFit = service.Fit.getInstance() + fitID = self.mainFrame.getActiveFit() + sFit.splitDroneStack(fitID, selection[0], 1) + wx.PostEvent(self.mainFrame, gui.fittingView.FitChanged(fitID=fitID)) + +DroneSplit.register() diff --git a/gui/droneView.py b/gui/droneView.py index 8e9517356..37446060c 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -49,9 +49,10 @@ class DroneView(d.Display): cFit = service.Fit.getInstance() fit = cFit.getFit(event.fitID) - stuff = fit.drones if fit is not None else None - self.populate(stuff) - self.refresh(stuff) + stuff = fit.drones[:] if fit is not None else None + if stuff is not None: + stuff.sort(key=lambda d: d.item.name) + self.update(stuff) event.Skip() def addItem(self, event): diff --git a/service/fit.py b/service/fit.py index 06a35d082..3c0fcc35d 100644 --- a/service/fit.py +++ b/service/fit.py @@ -206,6 +206,23 @@ class Fit(object): else: return False + def splitDroneStack(self, fitID, d, amount): + if fitID == None: + return False + + fit = eos.db.getFit(fitID) + + total = d.amount + active = d.amountActive > 0 + d.amount = amount + d.amountActive = amount if active else 0 + + newD = eos.types.Drone(d.item) + newD.amount = total - amount + newD.amountActive = newD.amount if active else 0 + fit.drones.append(newD) + eos.db.commit() + def removeDrone(self, fitID, i): fit = eos.db.getFit(fitID) d = fit.drones[i]