diff --git a/gui/boosterView.py b/gui/boosterView.py index a1848daca..2f56c02d5 100644 --- a/gui/boosterView.py +++ b/gui/boosterView.py @@ -50,12 +50,9 @@ class BoosterView(d.Display): def kbEvent(self,event): keycode = event.GetKeyCode() if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: - fitID = self.mainFrame.getActiveFit() - cFit = service.Fit.getInstance() row = self.GetFirstSelected() if row != -1: - cFit.removeBooster(fitID, self.GetItemData(row)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.removeBooster(self.boosters[self.GetItemData(row)]) event.Skip() @@ -71,7 +68,8 @@ class BoosterView(d.Display): sFit = service.Fit.getInstance() fit = sFit.getFit(event.fitID) - stuff = fit.boosters if fit is not None else None + self.origional = fit.boosters if fit is not None else None + self.boosters = stuff = fit.boosters[:] if fit is not None else None if event.fitID != self.lastFitId: self.lastFitId = event.fitID @@ -102,10 +100,13 @@ class BoosterView(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - fitID = self.mainFrame.getActiveFit() - cFit = service.Fit.getInstance() - cFit.removeBooster(fitID, self.GetItemData(row)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.removeBooster(self.boosters[self.GetItemData(row)]) + + def removeBooster(self, booster): + fitID = self.mainFrame.getActiveFit() + cFit = service.Fit.getInstance() + cFit.removeBooster(fitID, self.origional.index(booster)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def click(self, event): event.Skip() @@ -133,5 +134,5 @@ class BoosterView(d.Display): srcContext = "boosterItem" itemContext = "Booster" - menu = ContextMenu.getMenu((item,), (srcContext, itemContext)) + menu = ContextMenu.getMenu(self, (item,), (srcContext, itemContext)) self.PopupMenu(menu) diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 1497d7452..b8df36a70 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -1,2 +1,2 @@ -__all__ = ["moduleAmmoPicker", "itemStats", "damagePattern", "marketJump", "droneSplit", +__all__ = ["itemRemove", "moduleAmmoPicker", "itemStats", "damagePattern", "marketJump", "droneSplit", "ammoPattern", "project", "factorReload", "whProjector"] diff --git a/gui/builtinContextMenus/ammoPattern.py b/gui/builtinContextMenus/ammoPattern.py index 1a236ddac..11b9dc6dd 100644 --- a/gui/builtinContextMenus/ammoPattern.py +++ b/gui/builtinContextMenus/ammoPattern.py @@ -5,8 +5,9 @@ import wx import gui.globalEvents as GE class AmmoPattern(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py index 1cde95a54..6488ca2c3 100644 --- a/gui/builtinContextMenus/damagePattern.py +++ b/gui/builtinContextMenus/damagePattern.py @@ -6,8 +6,9 @@ import wx from gui import bitmapLoader class DamagePattern(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): return srcContext in ("resistancesViewFull",) and self.mainFrame.getActiveFit() is not None diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py index f4d2b5a44..610a4dda9 100644 --- a/gui/builtinContextMenus/droneSplit.py +++ b/gui/builtinContextMenus/droneSplit.py @@ -6,8 +6,9 @@ import service import wx class DroneSplit(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): return srcContext in ("droneItem", "projectedDrone") and selection[0].amount > 1 diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py index ca499e163..666be09cf 100644 --- a/gui/builtinContextMenus/factorReload.py +++ b/gui/builtinContextMenus/factorReload.py @@ -6,8 +6,9 @@ import wx from gui import bitmapLoader class FactorReload(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): return srcContext in ("firepowerViewFull",) and self.mainFrame.getActiveFit() is not None diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py new file mode 100644 index 000000000..6c86604b1 --- /dev/null +++ b/gui/builtinContextMenus/itemRemove.py @@ -0,0 +1,31 @@ +from gui.contextMenu import ContextMenu +import gui.mainFrame + +class ItemRemove(ContextMenu): + def __init__(self, parent): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent + + def display(self, srcContext, selection): + return srcContext in ("fittingModule", "droneItem", "implantItem", "boosterItem") + + def getText(self, itmContext, selection): + return "Remove {0}".format(itmContext if itmContext is not None else "Item") + + def activate(self, fullContext, selection, i): + srcContext = fullContext[0] + if srcContext == "fittingModule": + for module in selection: + if module is not None: self.parent.removeModule(module) + elif srcContext == "droneItem": + for drone in selection: + if drone is not None: self.parent.removeDrone(drone) + elif srcContext == "implantItem": + for implant in selection: + if implant is not None: self.parent.removeImplant(implant) + elif srcContext == "boosterItem": + for booster in selection: + if booster is not None: self.parent.removeBooster(booster) + + +ItemRemove.register() diff --git a/gui/builtinContextMenus/itemStats.py b/gui/builtinContextMenus/itemStats.py index ccd9a3f17..11ced8f89 100644 --- a/gui/builtinContextMenus/itemStats.py +++ b/gui/builtinContextMenus/itemStats.py @@ -5,8 +5,9 @@ import service import wx class ItemStats(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): return srcContext in ("marketItemGroup", "marketItemMisc", "fittingModule", "fittingCharge", "fittingShip", "baseShip", diff --git a/gui/builtinContextMenus/marketJump.py b/gui/builtinContextMenus/marketJump.py index 57576813b..ae8168aee 100644 --- a/gui/builtinContextMenus/marketJump.py +++ b/gui/builtinContextMenus/marketJump.py @@ -4,8 +4,9 @@ import gui.mainFrame import service class MarketJump(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): validContexts = ("marketItemMisc", "fittingModule", "fittingCharge", "droneItem", "implantItem", diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py index 888a41aca..33655d2c0 100644 --- a/gui/builtinContextMenus/moduleAmmoPicker.py +++ b/gui/builtinContextMenus/moduleAmmoPicker.py @@ -7,8 +7,9 @@ from eos.types import Hardpoint import gui.globalEvents as GE class ModuleAmmoPicker(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "projectedModule"): diff --git a/gui/builtinContextMenus/project.py b/gui/builtinContextMenus/project.py index 535be8063..4d0d51a00 100644 --- a/gui/builtinContextMenus/project.py +++ b/gui/builtinContextMenus/project.py @@ -5,8 +5,9 @@ import gui.globalEvents as GE import wx class Project(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None: diff --git a/gui/builtinContextMenus/whProjector.py b/gui/builtinContextMenus/whProjector.py index 02357445f..0c53032d2 100644 --- a/gui/builtinContextMenus/whProjector.py +++ b/gui/builtinContextMenus/whProjector.py @@ -5,8 +5,9 @@ import service import wx class WhProjector(ContextMenu): - def __init__(self): + def __init__(self, parent): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent def display(self, srcContext, selection): return srcContext in ("projectedDrone", "projectedModule", "projectedCharge", "projectedFit", "projectedNone") diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 23e06cf23..9349b0255 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -227,15 +227,10 @@ class FittingView(d.Display): row = self.GetFirstSelected() firstSel = row while row != -1: - cFit = service.Fit.getInstance() - populate = cFit.removeModule(self.activeFitID, self.mods[self.GetItemData(row)].position) + self.removeModule(self.mods[row]) self.Select(row,0) row = self.GetNextSelected(row) - if populate is not None: - self.Select(firstSel) - if populate: self.slotsChanged() - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID)) - + event.Skip() def fitRemoved(self, event): @@ -305,16 +300,19 @@ class FittingView(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - cFit = service.Fit.getInstance() - fit = cFit.getFit(self.activeFitID) - populate = cFit.removeModule(self.activeFitID, fit.modules.index(self.mods[self.GetItemData(row)])) - - if populate is not None: - if populate: self.slotsChanged() - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID)) + self.removeModule(self.mods[row]) else: if "wxMSW" in wx.PlatformInfo: self.click(event) + + def removeModule(self, module): + cFit = service.Fit.getInstance() + fit = cFit.getFit(self.activeFitID) + populate = cFit.removeModule(self.activeFitID, fit.modules.index(module)) + + if populate is not None: + if populate: self.slotsChanged() + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID)) def swapItems(self, x, y, itemID): mstate = wx.GetMouseState() @@ -419,7 +417,7 @@ class FittingView(d.Display): contexts.append(("fittingShip", "Ship")) - menu = ContextMenu.getMenu(selection, *contexts) + menu = ContextMenu.getMenu(self, selection, *contexts) self.PopupMenu(menu) def click(self, event): diff --git a/gui/characterEditor.py b/gui/characterEditor.py index d0102a24a..aeaeda6a8 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -304,8 +304,8 @@ class SkillTreeView (wx.Panel): srcContext = "skillItem" itemContext = "Skill" context = (srcContext, itemContext) - self.statsMenu = ContextMenu.getMenu(None, context) - self.levelChangeMenu = ContextMenu.getMenu(None, context) or wx.Menu() + self.statsMenu = ContextMenu.getMenu(self, None, context) + self.levelChangeMenu = ContextMenu.getMenu(self, None, context) or wx.Menu() self.levelChangeMenu.AppendSeparator() self.levelIds = {} diff --git a/gui/contextMenu.py b/gui/contextMenu.py index 9f0a8d7bd..ad3b7662e 100644 --- a/gui/contextMenu.py +++ b/gui/contextMenu.py @@ -26,7 +26,7 @@ class ContextMenu(object): ContextMenu.menus.append(cls) @classmethod - def getMenu(cls, selection, *fullContexts): + def getMenu(cls, parent, selection, *fullContexts): menu = wx.Menu() menu.info = {} menu.selection = selection @@ -40,7 +40,7 @@ class ContextMenu(object): except IndexError: itmContext = None for menuHandler in cls.menus: - m = menuHandler() + m = menuHandler(parent) if m.display(srcContext, selection): amount += 1 texts = m.getText(itmContext, selection) diff --git a/gui/display.py b/gui/display.py index 4f65da4f4..0cfc28854 100644 --- a/gui/display.py +++ b/gui/display.py @@ -78,7 +78,7 @@ class Display(wx.ListCtrl): """ Return a tuple indicating which (item, subItem) the given pt (client coordinates) is over. - This uses the buildin version on Windows, and poor mans replacement on other platforms. + This uses the built-in version on Windows, and poor mans replacement on other platforms. """ # The buildin version works on Windows @@ -124,7 +124,7 @@ class Display(wx.ListCtrl): bottomItem = topItem + self.GetCountPerPage() if bottomItem >= self.GetItemCount(): - bottomItem = self.GetItemCount() - 1 + bottomItem = self.GetItemCount() - 1 topRect = self.GetItemRect(topItem, wx.LIST_RECT_LABEL) bottomRect = self.GetItemRect(bottomItem, wx.LIST_RECT_BOUNDS) diff --git a/gui/droneView.py b/gui/droneView.py index c063aba42..2ca99ce62 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -107,11 +107,8 @@ class DroneView(d.Display): row = self.GetFirstSelected() firstSel = row if row != -1: - fitID = self.mainFrame.getActiveFit() - cFit = service.Fit.getInstance() drone = self.drones[self.GetItemData(row)] - cFit.removeDrone(fitID, self.original.index(drone)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.removeDrone(drone) event.Skip() @@ -197,11 +194,14 @@ class DroneView(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - fitID = self.mainFrame.getActiveFit() - cFit = service.Fit.getInstance() drone = self.drones[self.GetItemData(row)] - cFit.removeDrone(fitID, self.original.index(drone)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.removeDrone(drone) + + def removeDrone(self, drone): + fitID = self.mainFrame.getActiveFit() + cFit = service.Fit.getInstance() + cFit.removeDrone(fitID, self.original.index(drone)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def click(self, event): event.Skip() @@ -228,5 +228,5 @@ class DroneView(d.Display): sMkt = service.Market.getInstance() sourceContext = "droneItem" itemContext = sMkt.getCategoryByItem(drone.item).name - menu = ContextMenu.getMenu((drone,), (sourceContext, itemContext)) + menu = ContextMenu.getMenu(self, (drone,), (sourceContext, itemContext)) self.PopupMenu(menu) diff --git a/gui/implantView.py b/gui/implantView.py index 9b7569da2..449978993 100644 --- a/gui/implantView.py +++ b/gui/implantView.py @@ -48,12 +48,9 @@ class ImplantView(d.Display): def kbEvent(self,event): keycode = event.GetKeyCode() if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: - fitID = self.mainFrame.getActiveFit() - cFit = service.Fit.getInstance() row = self.GetFirstSelected() if row != -1: - cFit.removeImplant(fitID, self.GetItemData(row)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.removeImplant(self.implants[self.GetItemData(row)]) event.Skip() def fitChanged(self, event): @@ -100,11 +97,13 @@ class ImplantView(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - fitID = self.mainFrame.getActiveFit() - cFit = service.Fit.getInstance() - implant = self.implants[self.GetItemData(row)] - cFit.removeImplant(fitID, self.original.index(implant)) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.removeImplant(self.implants[self.GetItemData(row)]) + + def removeImplant(self, implant): + fitID = self.mainFrame.getActiveFit() + cFit = service.Fit.getInstance() + cFit.removeImplant(fitID, self.original.index(implant)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def click(self, event): event.Skip() @@ -133,5 +132,5 @@ class ImplantView(d.Display): sourceContext = "implantItem" itemContext = sMkt.getCategoryByItem(implant.item).name - menu = ContextMenu.getMenu((implant,), (sourceContext, itemContext)) + menu = ContextMenu.getMenu(self, (implant,), (sourceContext, itemContext)) self.PopupMenu(menu) diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py index ec830b462..6db7cda5e 100644 --- a/gui/marketBrowser.py +++ b/gui/marketBrowser.py @@ -397,7 +397,7 @@ class ItemView(d.Display): sourceContext = "marketItemGroup" if self.marketBrowser.searchMode is False else "marketItemMisc" itemContext = sMkt.getCategoryByItem(item).name - menu = ContextMenu.getMenu((item,), (sourceContext, itemContext)) + menu = ContextMenu.getMenu(self, (item,), (sourceContext, itemContext)) self.PopupMenu(menu) def populate(self, items): diff --git a/gui/projectedView.py b/gui/projectedView.py index 87851e396..13779d942 100644 --- a/gui/projectedView.py +++ b/gui/projectedView.py @@ -201,7 +201,7 @@ class ProjectedView(d.Display): context = (modFullContext,) else: context = (("projectedFit",),) - menu = ContextMenu.getMenu((item,), *context) + menu = ContextMenu.getMenu(self, (item,), *context) if menu is not None: self.PopupMenu(menu) elif row == -1 and event.Button == 3: @@ -209,7 +209,7 @@ class ProjectedView(d.Display): if fitID is None: return context = (("projectedNone",),) - menu = ContextMenu.getMenu([], *context) + menu = ContextMenu.getMenu(self, [], *context) if menu is not None: self.PopupMenu(menu) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 94763d5c6..b8224ab9a 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1085,7 +1085,7 @@ class ShipItem(SFItem.SFBrowserItem): pos = self.ScreenToClient(pos) contexts = [] contexts.append(("baseShip", "Ship Basic")) - menu = ContextMenu.getMenu(self.baseItem, *contexts) + menu = ContextMenu.getMenu(self, self.baseItem, *contexts) self.PopupMenu(menu, pos) def OnTimer(self, event): diff --git a/gui/statsPane.py b/gui/statsPane.py index 37331e875..2a90f4978 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -92,7 +92,7 @@ class StatsPane(wx.Panel): def contextHandler(self, contentPanel): viewName = contentPanel.viewName def handler(event): - menu = ContextMenu.getMenu(None, (viewName,)) + menu = ContextMenu.getMenu(self, None, (viewName,)) if menu is not None: contentPanel.PopupMenu(menu)