171 lines
7.2 KiB
Python
171 lines
7.2 KiB
Python
import math
|
|
|
|
import wx
|
|
|
|
import gui.fitCommands as cmd
|
|
import gui.mainFrame
|
|
from eos.saveddata.drone import Drone as EosDrone
|
|
from eos.saveddata.fighter import Fighter as EosFighter
|
|
from eos.saveddata.fit import Fit as EosFit
|
|
from eos.saveddata.module import Module as EosModule
|
|
from gui.contextMenu import ContextMenuCombined
|
|
from gui.fitCommands.helpers import getSimilarFighters, getSimilarModPositions
|
|
from service.fit import Fit
|
|
|
|
_t = wx.GetTranslation
|
|
|
|
|
|
class RemoveItem(ContextMenuCombined):
|
|
|
|
def __init__(self):
|
|
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
|
|
|
def display(self, callingWindow, srcContext, mainItem, selection):
|
|
if srcContext not in (
|
|
"fittingModule", "droneItem",
|
|
"implantItem", "boosterItem",
|
|
"projectedModule", "cargoItem",
|
|
"projectedFit", "projectedDrone",
|
|
"fighterItem", "projectedFighter",
|
|
"commandFit", "graphFitList",
|
|
"graphTgtList"
|
|
):
|
|
return False
|
|
|
|
if mainItem is None or getattr(mainItem, "isEmpty", False):
|
|
return False
|
|
|
|
self.srcContext = srcContext
|
|
return True
|
|
|
|
def getText(self, callingWindow, itmContext, mainItem, selection):
|
|
return _t('Remove {item}{stack}').format(
|
|
item=itmContext if itmContext is not None else _t('Item'),
|
|
stack=_t(' Stack') if self.srcContext in ('droneItem', 'projectedDrone', 'cargoItem', 'projectedFit') else '')
|
|
|
|
def activate(self, callingWindow, 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,
|
|
'graphFitList': self.__handleGraphItem,
|
|
'graphTgtList': self.__handleGraphItem
|
|
}
|
|
srcContext = fullContext[0]
|
|
handler = handlerMap.get(srcContext)
|
|
if handler is None:
|
|
return
|
|
handler(callingWindow, mainItem, selection)
|
|
|
|
def __handleModule(self, callingWindow, mainItem, selection):
|
|
fitID = self.mainFrame.getActiveFit()
|
|
fit = Fit.getInstance().getFit(fitID)
|
|
if wx.GetMouseState().GetModifiers() in (wx.MOD_ALT, wx.MOD_CONTROL):
|
|
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, callingWindow, 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, callingWindow, mainItem, selection):
|
|
fitID = self.mainFrame.getActiveFit()
|
|
fit = Fit.getInstance().getFit(fitID)
|
|
if wx.GetMouseState().GetModifiers() in (wx.MOD_ALT, wx.MOD_CONTROL):
|
|
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, callingWindow, 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, callingWindow, 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, callingWindow, 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, callingWindow, mainItem, selection):
|
|
fitID = self.mainFrame.getActiveFit()
|
|
if isinstance(mainItem, EosFit):
|
|
self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand(
|
|
fitID=fitID, items=selection, amount=math.inf))
|
|
elif isinstance(mainItem, EosModule):
|
|
if wx.GetMouseState().GetModifiers() in (wx.MOD_ALT, wx.MOD_CONTROL):
|
|
fit = Fit.getInstance().getFit(fitID)
|
|
positions = getSimilarModPositions(fit.projectedModules, mainItem)
|
|
items = [fit.projectedModules[p] for p in positions]
|
|
else:
|
|
items = selection
|
|
self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand(
|
|
fitID=fitID, items=items, amount=math.inf))
|
|
elif isinstance(mainItem, EosDrone):
|
|
self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand(
|
|
fitID=fitID, items=selection, amount=math.inf))
|
|
elif isinstance(mainItem, EosFighter):
|
|
if wx.GetMouseState().GetModifiers() in (wx.MOD_ALT, wx.MOD_CONTROL):
|
|
fit = Fit.getInstance().getFit(fitID)
|
|
items = getSimilarFighters(fit.projectedFighters, mainItem)
|
|
else:
|
|
items = selection
|
|
self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand(
|
|
fitID=fitID, items=items, amount=math.inf))
|
|
else:
|
|
self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand(
|
|
fitID=fitID, items=selection, amount=math.inf))
|
|
|
|
def __handleCommandFit(self, callingWindow, mainItem, selection):
|
|
fitID = self.mainFrame.getActiveFit()
|
|
commandFitIDs = [cf.ID for cf in selection]
|
|
self.mainFrame.command.Submit(cmd.GuiRemoveCommandFitsCommand(
|
|
fitID=fitID, commandFitIDs=commandFitIDs))
|
|
|
|
def __handleGraphItem(self, callingWindow, mainItem, selection):
|
|
callingWindow.removeWrappers(selection)
|
|
|
|
|
|
RemoveItem.register()
|