Ejemplo n.º 1
0
class GuiChangeLocalFighterAmountCommand(wx.Command):

    def __init__(self, fitID, position, amount):
        wx.Command.__init__(self, True, 'Change Local Fighter Amount')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.amount = amount

    def Do(self):
        if self.amount > 0:
            cmd = CalcChangeFighterAmountCommand(fitID=self.fitID, projected=False, position=self.position, amount=self.amount)
        else:
            cmd = CalcRemoveLocalFighterCommand(fitID=self.fitID, position=self.position)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 2
0
class GuiToggleBoosterSideEffectStateCommand(wx.Command):

    def __init__(self, fitID, position, effectID):
        wx.Command.__init__(self, True, 'Toggle Booster Side Effect State')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.effectID = effectID

    def Do(self):
        cmd = CalcToggleBoosterSideEffectStateCommand(fitID=self.fitID, position=self.position, effectID=self.effectID)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 3
0
class GuiChangeShipModeCommand(wx.Command):

    def __init__(self, fitID, itemID):
        wx.Command.__init__(self, True, 'Change Ship Mode')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.itemID = itemID

    def Do(self):
        cmd = CalcChangeShipModeCommand(fitID=self.fitID, itemID=self.itemID)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 4
0
class GuiRemoveBoostersCommand(wx.Command):

    def __init__(self, fitID, positions):
        wx.Command.__init__(self, True, 'Remove Boosters')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.positions = positions

    def Do(self):
        results = []
        for position in sorted(self.positions, reverse=True):
            cmd = CalcRemoveBoosterCommand(fitID=self.fitID, position=position)
            results.append(self.internalHistory.submit(cmd))
        success = any(results)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 5
0
class GuiToggleCommandFitStatesCommand(wx.Command):

    def __init__(self, fitID, mainCommandFitID, commandFitIDs):
        wx.Command.__init__(self, True, 'Toggle Command Fit States')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.mainCommandFitID = mainCommandFitID
        self.commandFitIDs = commandFitIDs

    def Do(self):
        cmd = CalcToggleCommandFitStatesCommand(
            fitID=self.fitID,
            mainCommandFitID=self.mainCommandFitID,
            commandFitIDs=self.commandFitIDs)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 6
0
class GuiRemoveCargosCommand(wx.Command):

    def __init__(self, fitID, itemIDs):
        wx.Command.__init__(self, True, 'Remove Cargos')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.itemIDs = itemIDs

    def Do(self):
        results = []
        for itemID in self.itemIDs:
            cmd = CalcRemoveCargoCommand(
                fitID=self.fitID,
                cargoInfo=CargoInfo(itemID=itemID, amount=math.inf))
            results.append(self.internalHistory.submit(cmd))
        success = any(results)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 7
0
class GuiAddProjectedDroneCommand(wx.Command):

    def __init__(self, fitID, itemID):
        wx.Command.__init__(self, True, 'Add Projected Drone')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.itemID = itemID

    def Do(self):
        cmd = CalcAddProjectedDroneCommand(fitID=self.fitID, droneInfo=DroneInfo(itemID=self.itemID, amount=1, amountActive=1))
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 8
0
class GuiChangeProjectedDroneAmountCommand(wx.Command):

    def __init__(self, fitID, itemID, amount):
        wx.Command.__init__(self, True, 'Change Projected Drone Amount')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.itemID = itemID
        self.amount = amount

    def Do(self):
        if self.amount > 0:
            cmd = CalcChangeProjectedDroneAmountCommand(fitID=self.fitID, itemID=self.itemID, amount=self.amount)
        else:
            cmd = CalcRemoveProjectedDroneCommand(fitID=self.fitID, itemID=self.itemID, amount=math.inf)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 9
0
class GuiChangeLocalModuleSpoolCommand(wx.Command):

    def __init__(self, fitID, position, spoolType, spoolAmount):
        wx.Command.__init__(self, True, 'Change Local Module Spool')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.spoolType = spoolType
        self.spoolAmount = spoolAmount

    def Do(self):
        cmd = CalcChangeModuleSpoolCommand(
            fitID=self.fitID,
            projected=False,
            position=self.position,
            spoolType=self.spoolType,
            spoolAmount=self.spoolAmount)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 10
0
class GuiChangeLocalModuleChargesCommand(wx.Command):

    def __init__(self, fitID, positions, chargeItemID):
        wx.Command.__init__(self, True, 'Change Local Module Charges')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.positions = positions
        self.chargeItemID = chargeItemID

    def Do(self):
        cmd = CalcChangeModuleChargesCommand(fitID=self.fitID, projected=False, chargeMap={p: self.chargeItemID for p in self.positions})
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 11
0
class GuiChangeBoosterMetaCommand(wx.Command):

    def __init__(self, fitID, position, newItemID):
        wx.Command.__init__(self, True, 'Change Booster Meta')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.newItemID = newItemID

    def Do(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        booster = fit.boosters[self.position]
        if booster.itemID == self.newItemID:
            return False
        info = BoosterInfo.fromBooster(booster)
        info.itemID = self.newItemID
        cmd = CalcAddBoosterCommand(fitID=self.fitID, boosterInfo=info)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 12
0
class GuiAddImplantSetCommand(wx.Command):

    def __init__(self, fitID, itemIDs):
        wx.Command.__init__(self, True, 'Add Implant Set')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.itemIDs = itemIDs

    def Do(self):
        results = []
        for itemID in self.itemIDs:
            cmd = CalcAddImplantCommand(fitID=self.fitID, implantInfo=ImplantInfo(itemID=itemID))
            results.append(self.internalHistory.submit(cmd))
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        # Some might fail, as we already might have these implants
        return any(results)

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 13
0
class GuiAddProjectedFitCommand(wx.Command):

    def __init__(self, fitID, projectedFitID, amount):
        wx.Command.__init__(self, True, 'Add Projected Fit')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.projectedFitID = projectedFitID
        self.amount = amount

    def Do(self):
        cmd = CalcAddProjectedFitCommand(fitID=self.fitID, projectedFitID=self.projectedFitID, amount=self.amount)
        success = self.internalHistory.submit(cmd)
        sFit = Fit.getInstance()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        sFit = Fit.getInstance()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 14
0
class GuiRemoveCommandFitsCommand(wx.Command):

    def __init__(self, fitID, commandFitIDs):
        wx.Command.__init__(self, True, 'Remove Command Fits')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.commandFitIDs = commandFitIDs

    def Do(self):
        results = []
        for commandFitID in self.commandFitIDs:
            cmd = CalcRemoveCommandFitCommand(fitID=self.fitID, commandFitID=commandFitID)
            results.append(self.internalHistory.submit(cmd))
        success = any(results)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 15
0
class GuiChangeLocalModuleMutationCommand(wx.Command):

    def __init__(self, fitID, position, mutation, oldMutation=None):
        wx.Command.__init__(self, True, 'Change Local Module Mutation')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.mutation = mutation
        self.oldMutation = oldMutation

    def Do(self):
        cmd = CalcChangeLocalModuleMutationCommand(
            fitID=self.fitID,
            position=self.position,
            mutation=self.mutation,
            oldMutation=self.oldMutation)
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 16
0
class GuiRemoveProjectedItemsCommand(wx.Command):

    def __init__(self, fitID, items, amount):
        wx.Command.__init__(self, True, 'Remove Projected Items')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.amount = amount
        self.pModPositions = []
        self.pDroneItemIDs = []
        self.pFighterPositions = []
        self.pFitIDs = []
        fit = Fit.getInstance().getFit(fitID)
        for item in items:
            if isinstance(item, EosModule):
                if item in fit.projectedModules:
                    self.pModPositions.append(fit.projectedModules.index(item))
            elif isinstance(item, EosDrone):
                self.pDroneItemIDs.append(item.itemID)
            elif isinstance(item, EosFighter):
                if item in fit.projectedFighters:
                    self.pFighterPositions.append(fit.projectedFighters.index(item))
            elif isinstance(item, EosFit):
                self.pFitIDs.append(item.ID)

    def Do(self):
        results = []
        for pModPosition in sorted(self.pModPositions, reverse=True):
            cmd = CalcRemoveProjectedModuleCommand(fitID=self.fitID, position=pModPosition)
            results.append(self.internalHistory.submit(cmd))
        for pDroneItemID in self.pDroneItemIDs:
            cmd = CalcRemoveProjectedDroneCommand(fitID=self.fitID, itemID=pDroneItemID, amount=self.amount)
            results.append(self.internalHistory.submit(cmd))
        for pFighterPosition in sorted(self.pFighterPositions, reverse=True):
            cmd = CalcRemoveProjectedFighterCommand(fitID=self.fitID, position=pFighterPosition)
            results.append(self.internalHistory.submit(cmd))
        for pFitID in self.pFitIDs:
            cmd = CalcRemoveProjectedFitCommand(fitID=self.fitID, projectedFitID=pFitID, amount=self.amount)
            results.append(self.internalHistory.submit(cmd))
        success = any(results)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 17
0
class GuiFillWithClonedLocalModulesCommand(wx.Command):

    def __init__(self, fitID, position):
        wx.Command.__init__(self, True, 'Fill with Cloned Local Modules')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.savedItemID = None
        self.savedRemovedDummies = None

    def Do(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        mod = fit.modules[self.position]
        self.savedItemID = mod.itemID
        info = ModuleInfo.fromModule(mod)
        added_modules = 0
        while True:
            cmd = CalcAddLocalModuleCommand(fitID=self.fitID, newModInfo=info)
            if not self.internalHistory.submit(cmd):
                break
            added_modules += 1
        eos.db.flush()
        sFit.recalc(self.fitID)
        self.savedRemovedDummies = sFit.fill(self.fitID)
        eos.db.commit()
        success = added_modules > 0
        wx.PostEvent(
            gui.mainFrame.MainFrame.getInstance(),
            GE.FitChanged(fitID=self.fitID, action='modadd', typeID=self.savedItemID)
            if success else
            GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        restoreRemovedDummies(fit, self.savedRemovedDummies)
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(
            gui.mainFrame.MainFrame.getInstance(),
            GE.FitChanged(fitID=self.fitID, action='moddel', typeID=self.savedItemID)
            if success else
            GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 18
0
 def __init__(self, fitID, mainPosition, positions, effectID):
     wx.Command.__init__(self, True, 'Toggle Projected Fighter Ability State')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.mainPosition = mainPosition
     self.positions = positions
     self.effectID = effectID
Ejemplo n.º 19
0
 def __init__(self, fitID, position, mutaplasmid):
     wx.Command.__init__(self, True, 'Convert Local Module to Mutated')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.itemID = mutaplasmid.resultingItem.ID
     self.mutaplasmidID = mutaplasmid.ID
Ejemplo n.º 20
0
 def __init__(self, fitID, position, mutation, oldMutation=None):
     wx.Command.__init__(self, True, 'Change Local Module Mutation')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.mutation = mutation
     self.oldMutation = oldMutation
Ejemplo n.º 21
0
 def __init__(self, fitID, position):
     wx.Command.__init__(self, True, 'Fill with Cloned Local Modules')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.savedItemID = None
     self.savedRemovedDummies = None
Ejemplo n.º 22
0
 def __init__(self, fitID, mainItem, items, click):
     wx.Command.__init__(self, True, 'Change Projected Item States')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.pModPositions = []
     self.pDroneItemIDs = []
     self.pFighterPositions = []
     self.pFitIDs = []
     fit = Fit.getInstance().getFit(fitID)
     for item in items:
         if isinstance(item, EosModule):
             if item in fit.projectedModules:
                 self.pModPositions.append(fit.projectedModules.index(item))
         elif isinstance(item, EosDrone):
             self.pDroneItemIDs.append(item.itemID)
         elif isinstance(item, EosFighter):
             if item in fit.projectedFighters:
                 self.pFighterPositions.append(fit.projectedFighters.index(item))
         elif isinstance(item, EosFit):
             self.pFitIDs.append(item.ID)
     self.proposedState = None
     if click == 'right' and isinstance(mainItem, EosModule):
         self.proposedState = 'overheat'
     elif click == 'left':
         if isinstance(mainItem, EosModule):
             modProposedState = EosModule.getProposedState(mainItem, click)
             self.proposedState = 'inactive' if modProposedState == FittingModuleState.OFFLINE else 'active'
         elif isinstance(mainItem, EosDrone):
             self.proposedState = 'active' if mainItem.amountActive == 0 else 'inactive'
         elif isinstance(mainItem, EosFighter):
             self.proposedState = 'inactive' if mainItem.active else 'active'
         elif isinstance(mainItem, EosFit):
             projectionInfo = mainItem.getProjectionInfo(self.fitID)
             if projectionInfo is not None:
                 self.proposedState = 'inactive' if projectionInfo.active else 'active'
Ejemplo n.º 23
0
 def __init__(self, fitID, position, spoolType, spoolAmount):
     wx.Command.__init__(self, True, 'Change Local Module Spool')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.spoolType = spoolType
     self.spoolAmount = spoolAmount
Ejemplo n.º 24
0
 def __init__(self, fitID, positions):
     wx.Command.__init__(self, True, 'Remove Local Module')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.positions = positions
     self.savedTypeIDs = None
     self.savedRemovedDummies = None
Ejemplo n.º 25
0
class GuiConvertMutatedLocalModuleCommand(wx.Command):

    def __init__(self, fitID, position, mutaplasmid):
        wx.Command.__init__(self, True, 'Convert Local Module to Mutated')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.position = position
        self.itemID = mutaplasmid.resultingItem.ID
        self.mutaplasmidID = mutaplasmid.ID

    def Do(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        mod = fit.modules[self.position]
        if mod.isEmpty:
            return False
        if mod.isMutated:
            return False
        cmd = CalcReplaceLocalModuleCommand(
            fitID=self.fitID,
            position=self.position,
            newModInfo=ModuleInfo(
                itemID=self.itemID,
                baseItemID=mod.item.ID,
                mutaplasmidID=self.mutaplasmidID,
                mutations={},
                chargeID=mod.chargeID,
                state=mod.state,
                spoolType=mod.spoolType,
                spoolAmount=mod.spoolAmount))
        success = self.internalHistory.submit(cmd)
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 26
0
 def __init__(self, fitID, mainPosition, positions, click):
     wx.Command.__init__(self, True, 'Change Local Module States')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.mainPosition = mainPosition
     self.positions = positions
     self.click = click
     self.savedRemovedDummies = None
Ejemplo n.º 27
0
class GuiChangeLocalDroneMetasCommand(wx.Command):

    def __init__(self, fitID, positions, newItemID):
        wx.Command.__init__(self, True, 'Change Local Drone Meta')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.positions = positions
        self.newItemID = newItemID

    def Do(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        results = []
        for position in sorted(self.positions, reverse=True):
            drone = fit.drones[position]
            if drone.itemID == self.newItemID:
                continue
            info = DroneInfo.fromDrone(drone)
            info.itemID = self.newItemID
            cmdRemove = CalcRemoveLocalDroneCommand(
                fitID=self.fitID,
                position=position,
                amount=math.inf)
            cmdAdd = CalcAddLocalDroneCommand(
                fitID=self.fitID,
                droneInfo=info,
                forceNewStack=True,
                ignoreRestrictions=True)
            results.append(self.internalHistory.submitBatch(cmdRemove, cmdAdd))
        success = any(results)
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 28
0
 def __init__(self, fitID, srcPosition, dstPosition):
     wx.Command.__init__(self, True, 'Clone Local Module')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.srcPosition = srcPosition
     self.dstPosition = dstPosition
     self.savedItemID = None
     self.savedRemovedDummies = None
Ejemplo n.º 29
0
class GuiReplaceLocalModuleCommand(wx.Command):

    def __init__(self, fitID, itemID, positions):
        wx.Command.__init__(self, True, 'Replace Local Module')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.itemID = itemID
        self.positions = positions
        self.savedRemovedDummies = None

    def Do(self):
        results = []
        for position in self.positions:
            cmd = CalcReplaceLocalModuleCommand(
                fitID=self.fitID,
                position=position,
                newModInfo=ModuleInfo(itemID=self.itemID))
            results.append(self.internalHistory.submit(cmd))
        success = any(results)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        self.savedRemovedDummies = sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(
            gui.mainFrame.MainFrame.getInstance(),
            GE.FitChanged(fitID=self.fitID, action='modadd', typeID=self.itemID)
            if success else
            GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        restoreRemovedDummies(fit, self.savedRemovedDummies)
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(
            gui.mainFrame.MainFrame.getInstance(),
            GE.FitChanged(fitID=self.fitID, action='moddel', typeID=self.itemID)
            if success else
            GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 30
0
class GuiMergeLocalDroneStacksCommand(wx.Command):

    def __init__(self, fitID, srcPosition, dstPosition):
        wx.Command.__init__(self, True, 'Merge Local Drone Stacks')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.srcPosition = srcPosition
        self.dstPosition = dstPosition

    def Do(self):
        if self.srcPosition == self.dstPosition:
            return False
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        srcDrone = fit.drones[self.srcPosition]
        dstDrone = fit.drones[self.dstPosition]
        if srcDrone.itemID != dstDrone.itemID:
            return False
        srcAmount = srcDrone.amount
        commands = []
        commands.append(CalcChangeLocalDroneAmountCommand(
            fitID=self.fitID,
            position=self.dstPosition,
            amount=dstDrone.amount + srcAmount))
        commands.append(CalcRemoveLocalDroneCommand(
            fitID=self.fitID,
            position=self.srcPosition,
            amount=srcAmount))
        success = self.internalHistory.submitBatch(*commands)
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID))
        return success
Ejemplo n.º 31
0
 def __init__(self, fitID, itemID):
     wx.Command.__init__(self, True, 'Add Local Fighter')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.itemID = itemID
Ejemplo n.º 32
0
 def __init__(self, fitID, itemIDs, newItemID):
     wx.Command.__init__(self, True, 'Change Cargo Meta')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.itemIDs = itemIDs
     self.newItemID = newItemID
Ejemplo n.º 33
0
class GuiRebaseItemsCommand(wx.Command):
    def __init__(self, fitID, rebaseMap):
        wx.Command.__init__(self, True, 'Rebase Items')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.rebaseMap = rebaseMap

    def Do(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        # Here we assume that item attribs do not change and item state will not change
        for mod in fit.modules:
            if mod.itemID in self.rebaseMap:
                cmd = CalcRebaseItemCommand(fitID=self.fitID,
                                            containerName='modules',
                                            position=fit.modules.index(mod),
                                            itemID=self.rebaseMap[mod.itemID])
                self.internalHistory.submit(cmd)
            if mod.chargeID in self.rebaseMap:
                cmd = CalcChangeModuleChargesCommand(
                    fitID=self.fitID,
                    projected=False,
                    chargeMap={
                        fit.modules.index(mod): self.rebaseMap[mod.chargeID]
                    },
                    recalc=False)
                self.internalHistory.submit(cmd)
        for containerName in ('drones', 'fighters', 'implants', 'boosters'):
            container = getattr(fit, containerName)
            for obj in container:
                if obj.itemID in self.rebaseMap:
                    cmd = CalcRebaseItemCommand(
                        fitID=self.fitID,
                        containerName=containerName,
                        position=container.index(obj),
                        itemID=self.rebaseMap[obj.itemID])
                    self.internalHistory.submit(cmd)
        # Need to process cargo separately as we want to merge items when needed,
        # e.g. FN iron and CN iron into single stack of CN iron
        for cargo in fit.cargo:
            if cargo.itemID in self.rebaseMap:
                amount = cargo.amount
                cmdRemove = CalcRemoveCargoCommand(fitID=self.fitID,
                                                   cargoInfo=CargoInfo(
                                                       itemID=cargo.itemID,
                                                       amount=amount))
                cmdAdd = CalcAddCargoCommand(
                    fitID=self.fitID,
                    cargoInfo=CargoInfo(itemID=self.rebaseMap[cargo.itemID],
                                        amount=amount))
                self.internalHistory.submitBatch(cmdRemove, cmdAdd)
        eos.db.flush()
        sFit.recalc(fit)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(),
                     GE.FitChanged(fitIDs=(self.fitID, )))
        return len(self.internalHistory) > 0

    def Undo(self):
        sFit = Fit.getInstance()
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(),
                     GE.FitChanged(fitIDs=(self.fitID, )))
        return success
Ejemplo n.º 34
0
 def __init__(self, fitID, positions, amount):
     wx.Command.__init__(self, True, 'Remove Local Drones')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.positions = positions
     self.amount = amount
Ejemplo n.º 35
0
 def __init__(self, fitID, position, effectID):
     wx.Command.__init__(self, True, 'Toggle Booster Side Effect State')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.effectID = effectID
Ejemplo n.º 36
0
 def __init__(self, fitID, position, newItemID):
     wx.Command.__init__(self, True, 'Change Booster Meta')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.newItemID = newItemID
Ejemplo n.º 37
0
 def __init__(self, fitID, position1, position2):
     wx.Command.__init__(self, True, 'Swap Local Modules')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position1 = position1
     self.position2 = position2
Ejemplo n.º 38
0
 def __init__(self, fitID, positions, newItemID):
     wx.Command.__init__(self, True, 'Change Projected Module Metas')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.positions = positions
     self.newItemID = newItemID
Ejemplo n.º 39
0
 def __init__(self, fitID, rebaseMap):
     wx.Command.__init__(self, True, 'Rebase Items')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.rebaseMap = rebaseMap
Ejemplo n.º 40
0
 def __init__(self, fitID, fighters):
     wx.Command.__init__(self, True, 'Import Local Fighters')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.fighters = [(i, a) for i, a, m in fighters]
Ejemplo n.º 41
0
 def __init__(self, fitID, source):
     wx.Command.__init__(self, True, 'Change Implant Location')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.source = source
Ejemplo n.º 42
0
 def __init__(self, fitID, positions):
     wx.Command.__init__(self, True, 'Remove Boosters')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.positions = positions
Ejemplo n.º 43
0
 def __init__(self, fitID, position):
     wx.Command.__init__(self, True, 'Fill with Cloned Local Modules')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.savedItemID = None
Ejemplo n.º 44
0
 def __init__(self, fitID, position):
     wx.Command.__init__(self, True, 'Revert Local Drone from Mutated')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
Ejemplo n.º 45
0
 def __init__(self, fitID, positions, chargeItemID):
     wx.Command.__init__(self, True, 'Change Projected Module Charges')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.positions = positions
     self.chargeItemID = chargeItemID
Ejemplo n.º 46
0
 def __init__(self, fitID, itemID, amount):
     wx.Command.__init__(self, True, 'Add Cargo')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.itemID = itemID
     self.amount = amount
Ejemplo n.º 47
0
 def __init__(self, fitID, position, amount):
     wx.Command.__init__(self, True, 'Change Local Fighter Amount')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.amount = amount
Ejemplo n.º 48
0
 def __init__(self, fitID, itemIDs):
     wx.Command.__init__(self, True, 'Add Implant Set')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.itemIDs = itemIDs
Ejemplo n.º 49
0
class GuiChangeLocalModuleMetasCommand(wx.Command):
    def __init__(self, fitID, positions, newItemID):
        wx.Command.__init__(self, True, 'Change Local Module Metas')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.positions = positions
        self.newItemID = newItemID
        self.relacedItemIDs = None
        self.savedRemovedDummies = None

    def Do(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        commands = []
        self.replacedItemIDs = set()
        for position in self.positions:
            module = fit.modules[position]
            if module.isEmpty:
                continue
            if module.itemID == self.newItemID:
                continue
            self.replacedItemIDs.add(module.itemID)
            info = ModuleInfo.fromModule(module)
            info.itemID = self.newItemID
            cmd = CalcReplaceLocalModuleCommand(fitID=self.fitID,
                                                position=position,
                                                newModInfo=info,
                                                unloadInvalidCharges=True)
            commands.append(cmd)
        if not commands:
            return False
        success = self.internalHistory.submitBatch(*commands)
        if commands[-1].needsGuiRecalc:
            eos.db.flush()
            sFit.recalc(self.fitID)
        self.savedRemovedDummies = sFit.fill(self.fitID)
        eos.db.commit()
        events = []
        if success and self.replacedItemIDs:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='moddel',
                              typeID=self.replacedItemIDs))
        if success:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='modadd',
                              typeID=self.newItemID))
        if not events:
            events.append(GE.FitChanged(fitIDs=(self.fitID, )))
        for event in events:
            wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), event)
        return success

    def Undo(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        restoreRemovedDummies(fit, self.savedRemovedDummies)
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        events = []
        if success:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='moddel',
                              typeID=self.newItemID))
        if success and self.replacedItemIDs:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='modadd',
                              typeID=self.replacedItemIDs))
        if not events:
            events.append(GE.FitChanged(fitIDs=(self.fitID, )))
        for event in events:
            wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), event)
        return success
Ejemplo n.º 50
0
class GuiChangeProjectedItemsProjectionRangeCommand(wx.Command):
    def __init__(self, fitID, items, projectionRange):
        wx.Command.__init__(self, True,
                            'Change Projected Items Projection Range')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.projectionRange = projectionRange
        self.pModPositions = []
        self.pDroneItemIDs = []
        self.pFighterPositions = []
        self.pFitIDs = []
        fit = Fit.getInstance().getFit(fitID)
        for item in items:
            if isinstance(item, EosModule):
                if item in fit.projectedModules and not getattr(
                        item, 'isExclusiveSystemEffect', False):
                    self.pModPositions.append(fit.projectedModules.index(item))
            elif isinstance(item, EosDrone):
                self.pDroneItemIDs.append(item.itemID)
            elif isinstance(item, EosFighter):
                if item in fit.projectedFighters:
                    self.pFighterPositions.append(
                        fit.projectedFighters.index(item))
            elif isinstance(item, EosFit):
                self.pFitIDs.append(item.ID)

    def Do(self):
        results = []
        needRecalc = True
        for pModPosition in self.pModPositions:
            cmd = CalcChangeProjectedModuleProjectionRangeCommand(
                fitID=self.fitID,
                position=pModPosition,
                projectionRange=self.projectionRange)
            results.append(self.internalHistory.submit(cmd))
            needRecalc = cmd.needsGuiRecalc
        for pDroneItemID in self.pDroneItemIDs:
            cmd = CalcChangeProjectedDroneProjectionRangeCommand(
                fitID=self.fitID,
                itemID=pDroneItemID,
                projectionRange=self.projectionRange)
            results.append(self.internalHistory.submit(cmd))
            needRecalc = True
        for pFighterPosition in self.pFighterPositions:
            cmd = CalcChangeProjectedFighterProjectionRangeCommand(
                fitID=self.fitID,
                position=pFighterPosition,
                projectionRange=self.projectionRange)
            results.append(self.internalHistory.submit(cmd))
            needRecalc = True
        for pFitID in self.pFitIDs:
            cmd = CalcChangeProjectedFitProjectionRangeCommand(
                fitID=self.fitID,
                projectedFitID=pFitID,
                projectionRange=self.projectionRange)
            results.append(self.internalHistory.submit(cmd))
            needRecalc = cmd.needsGuiRecalc
        success = any(results)
        sFit = Fit.getInstance()
        if needRecalc:
            eos.db.flush()
            sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(),
                     GE.FitChanged(fitIDs=(self.fitID, )))
        return success

    def Undo(self):
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        wx.PostEvent(gui.mainFrame.MainFrame.getInstance(),
                     GE.FitChanged(fitIDs=(self.fitID, )))
        return success
Ejemplo n.º 51
0
 def __init__(self, fitID, commandFitIDs):
     wx.Command.__init__(self, True, 'Remove Command Fits')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.commandFitIDs = commandFitIDs
Ejemplo n.º 52
0
 def __init__(self, fitID, mainPosition, positions):
     wx.Command.__init__(self, True, 'Toggle Implant States')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.mainPosition = mainPosition
     self.positions = positions
Ejemplo n.º 53
0
class GuiLocalModuleToCargoCommand(wx.Command):
    def __init__(self, fitID, modPosition, cargoItemID, copy):
        wx.Command.__init__(self, True, 'Local Module to Cargo')
        self.internalHistory = InternalCommandHistory()
        self.fitID = fitID
        self.srcModPosition = modPosition
        self.dstCargoItemID = cargoItemID
        self.copy = copy
        self.removedModItemID = None
        self.addedModItemID = None
        self.savedRemovedDummies = None

    def Do(self):
        fit = Fit.getInstance().getFit(self.fitID)
        srcMod = fit.modules[self.srcModPosition]
        if srcMod.isEmpty:
            return False
        srcModItemID = srcMod.itemID
        dstCargo = next(
            (c for c in fit.cargo if c.itemID == self.dstCargoItemID), None)
        success = False
        # Attempt to swap if we're moving our module onto a module in the cargo hold
        if not self.copy and dstCargo is not None and dstCargo.item.isModule:
            if srcModItemID == self.dstCargoItemID:
                return False
            srcModSlot = srcMod.slot
            newModInfo = ModuleInfo.fromModule(srcMod, unmutate=True)
            newModInfo.itemID = self.dstCargoItemID
            srcModChargeItemID = srcMod.chargeID
            srcModChargeAmount = srcMod.numCharges
            commands = []
            commands.append(
                CalcRemoveCargoCommand(fitID=self.fitID,
                                       cargoInfo=CargoInfo(
                                           itemID=self.dstCargoItemID,
                                           amount=1)))
            commands.append(
                CalcAddCargoCommand(
                    fitID=self.fitID,
                    # We cannot put mutated items to cargo, so use unmutated item ID
                    cargoInfo=CargoInfo(itemID=ModuleInfo.fromModule(
                        srcMod, unmutate=True).itemID,
                                        amount=1)))
            cmdReplace = CalcReplaceLocalModuleCommand(
                fitID=self.fitID,
                position=self.srcModPosition,
                newModInfo=newModInfo,
                unloadInvalidCharges=True)
            commands.append(cmdReplace)
            # Submit batch now because we need to have updated info on fit to keep going
            success = self.internalHistory.submitBatch(*commands)
            if success:
                newMod = fit.modules[self.srcModPosition]
                # Process charge changes if module is moved to proper slot
                if newMod.slot == srcModSlot:
                    # If we had to unload charge, add it to cargo
                    if cmdReplace.unloadedCharge and srcModChargeItemID is not None:
                        cmdAddCargoCharge = CalcAddCargoCommand(
                            fitID=self.fitID,
                            cargoInfo=CargoInfo(itemID=srcModChargeItemID,
                                                amount=srcModChargeAmount))
                        success = self.internalHistory.submit(
                            cmdAddCargoCharge)
                    # If we did not unload charge and there still was a charge, see if amount differs and process it
                    elif not cmdReplace.unloadedCharge and srcModChargeItemID is not None:
                        # How many extra charges do we need to take from cargo
                        extraChargeAmount = newMod.numCharges - srcModChargeAmount
                        if extraChargeAmount > 0:
                            cmdRemoveCargoExtraCharge = CalcRemoveCargoCommand(
                                fitID=self.fitID,
                                cargoInfo=CargoInfo(itemID=srcModChargeItemID,
                                                    amount=extraChargeAmount))
                            # Do not check if operation was successful or not, we're okay if we have no such
                            # charges in cargo
                            self.internalHistory.submit(
                                cmdRemoveCargoExtraCharge)
                        elif extraChargeAmount < 0:
                            cmdAddCargoExtraCharge = CalcAddCargoCommand(
                                fitID=self.fitID,
                                cargoInfo=CargoInfo(
                                    itemID=srcModChargeItemID,
                                    amount=abs(extraChargeAmount)))
                            success = self.internalHistory.submit(
                                cmdAddCargoExtraCharge)
                    if success:
                        # Store info to properly send events later
                        self.removedModItemID = srcModItemID
                        self.addedModItemID = self.dstCargoItemID
                # If drag happened to module which cannot be fit into current slot - consider it as failure
                else:
                    success = False
                # And in case of any failures, cancel everything to try to do move instead
                if not success:
                    self.internalHistory.undoAll()
        # Just dump module and its charges into cargo when copying or moving to cargo
        if not success:
            commands = []
            commands.append(
                CalcAddCargoCommand(fitID=self.fitID,
                                    cargoInfo=CargoInfo(
                                        itemID=ModuleInfo.fromModule(
                                            srcMod, unmutate=True).itemID,
                                        amount=1)))
            if srcMod.chargeID is not None:
                commands.append(
                    CalcAddCargoCommand(fitID=self.fitID,
                                        cargoInfo=CargoInfo(
                                            itemID=srcMod.chargeID,
                                            amount=srcMod.numCharges)))
            if not self.copy:
                commands.append(
                    CalcRemoveLocalModulesCommand(
                        fitID=self.fitID, positions=[self.srcModPosition]))
            success = self.internalHistory.submitBatch(*commands)
        eos.db.flush()
        sFit = Fit.getInstance()
        sFit.recalc(self.fitID)
        self.savedRemovedDummies = sFit.fill(self.fitID)
        eos.db.commit()
        events = []
        if self.removedModItemID is not None:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='moddel',
                              typeID=self.removedModItemID))
        if self.addedModItemID is not None:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='modadd',
                              typeID=self.addedModItemID))
        if not events:
            events.append(GE.FitChanged(fitIDs=(self.fitID, )))
        for event in events:
            wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), event)
        return success

    def Undo(self):
        sFit = Fit.getInstance()
        fit = sFit.getFit(self.fitID)
        restoreRemovedDummies(fit, self.savedRemovedDummies)
        success = self.internalHistory.undoAll()
        eos.db.flush()
        sFit.recalc(self.fitID)
        sFit.fill(self.fitID)
        eos.db.commit()
        events = []
        if self.addedModItemID is not None:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='moddel',
                              typeID=self.addedModItemID))
        if self.removedModItemID is not None:
            events.append(
                GE.FitChanged(fitIDs=(self.fitID, ),
                              action='modadd',
                              typeID=self.removedModItemID))
        if not events:
            events.append(GE.FitChanged(fitIDs=(self.fitID, )))
        for event in events:
            wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), event)
        return success
Ejemplo n.º 54
0
 def __init__(self, fitID, position, amount):
     wx.Command.__init__(self, True, 'Split Local Drone Stack')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.position = position
     self.amount = amount
Ejemplo n.º 55
0
 def __init__(self, fitID, positions, newItemID):
     wx.Command.__init__(self, True, 'Change Local Fighter Metas')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.positions = positions
     self.newItemID = newItemID
Ejemplo n.º 56
0
 def __init__(self, fitID, itemID):
     wx.Command.__init__(self, True, 'Fill with New Local Modules')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.itemID = itemID
Ejemplo n.º 57
0
 def __init__(self, fitID, srcPosition, dstPosition):
     wx.Command.__init__(self, True, 'Merge Local Drone Stacks')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.srcPosition = srcPosition
     self.dstPosition = dstPosition
Ejemplo n.º 58
0
 def __init__(self, fitID, projectedFitID, amount):
     wx.Command.__init__(self, True, 'Add Projected Fit')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.projectedFitID = projectedFitID
     self.amount = amount
Ejemplo n.º 59
0
 def __init__(self, fitID, itemID):
     wx.Command.__init__(self, True, 'Add Projected Module')
     self.internalHistory = InternalCommandHistory()
     self.fitID = fitID
     self.itemID = itemID