import math import wx import gui.fitCommands as cmd import gui.mainFrame from gui.contextMenu import ContextMenuCombined from gui.fitCommands.helpers import getSimilarModPositions, getSimilarFighters from service.fit import Fit from service.settings import ContextMenuSettings class RemoveItem(ContextMenuCombined): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, mainItem, selection): if srcContext not in ( "fittingModule", "droneItem", "implantItem", "boosterItem", "projectedModule", "cargoItem", "projectedFit", "projectedDrone", "fighterItem", "projectedFighter", "commandFit" ): return False if mainItem is None or getattr(mainItem, "isEmpty", False): return False return True def getText(self, itmContext, mainItem, selection): return 'Remove {}{}'.format( itmContext if itmContext is not None else 'Item', ' Stack' if itmContext in ('Drone', 'Fit') else '') def activate(self, fullContext, mainItem, selection, i): handlerMap = { 'fittingModule': self.__handleModule, 'droneItem': self.__handleDrone, 'fighterItem': self.__handleFighter, 'implantItem': self.__handleImplant, 'boosterItem': self.__handleBooster, 'cargoItem': self.__handleCargo, 'projectedFit': self.__handleProjectedItem, 'projectedModule': self.__handleProjectedItem, 'projectedDrone': self.__handleProjectedItem, 'projectedFighter': self.__handleProjectedItem, 'commandFit': self.__handleCommandFit} srcContext = fullContext[0] handler = handlerMap.get(srcContext) if handler is None: return handler(mainItem, selection) def __handleModule(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) if wx.GetMouseState().GetModifiers() == wx.MOD_ALT: positions = getSimilarModPositions(fit.modules, mainItem) else: positions = [] for mod in selection: if mod in fit.modules: positions.append(fit.modules.index(mod)) self.mainFrame.command.Submit(cmd.GuiRemoveLocalModuleCommand( fitID=fitID, positions=positions)) def __handleDrone(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) positions = [] for drone in selection: if drone in fit.drones: positions.append(fit.drones.index(drone)) self.mainFrame.command.Submit(cmd.GuiRemoveLocalDronesCommand( fitID=fitID, positions=positions, amount=math.inf)) def __handleFighter(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) if wx.GetMouseState().GetModifiers() == wx.MOD_ALT: fighters = getSimilarFighters(fit.fighters, mainItem) else: fighters = selection positions = [] for fighter in fighters: if fighter in fit.fighters: positions.append(fit.fighters.index(fighter)) self.mainFrame.command.Submit(cmd.GuiRemoveLocalFightersCommand( fitID=fitID, positions=positions)) def __handleImplant(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) positions = [] for implant in selection: if implant in fit.implants: positions.append(fit.implants.index(implant)) self.mainFrame.command.Submit(cmd.GuiRemoveImplantsCommand( fitID=fitID, positions=positions)) def __handleBooster(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) positions = [] for booster in selection: if booster in fit.boosters: positions.append(fit.boosters.index(booster)) self.mainFrame.command.Submit(cmd.GuiRemoveBoostersCommand( fitID=fitID, positions=positions)) def __handleCargo(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() itemIDs = [c.itemID for c in selection] self.mainFrame.command.Submit(cmd.GuiRemoveCargosCommand( fitID=fitID, itemIDs=itemIDs)) def __handleProjectedItem(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand( fitID=fitID, items=selection, amount=math.inf)) def __handleCommandFit(self, mainItem, selection): fitID = self.mainFrame.getActiveFit() commandFitIDs = [cf.ID for cf in selection] self.mainFrame.command.Submit(cmd.GuiRemoveCommandFitsCommand( fitID=fitID, commandFitIDs=commandFitIDs)) RemoveItem.register()