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
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, commit=False) results.append(self.internalHistory.submit(cmd)) for pDroneItemID in self.pDroneItemIDs: cmd = CalcRemoveProjectedDroneCommand(fitID=self.fitID, itemID=pDroneItemID, amount=self.amount, commit=False) results.append(self.internalHistory.submit(cmd)) for pFighterPosition in sorted(self.pFighterPositions, reverse=True): cmd = CalcRemoveProjectedFighterCommand(fitID=self.fitID, position=pFighterPosition, commit=False) results.append(self.internalHistory.submit(cmd)) for pFitID in self.pFitIDs: cmd = CalcRemoveProjectedFitCommand(fitID=self.fitID, projectedFitID=pFitID, amount=self.amount, commit=False) results.append(self.internalHistory.submit(cmd)) success = any(results) eos.db.commit() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() eos.db.commit() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
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
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
class GuiChangeFitSystemSecurityCommand(wx.Command): def __init__(self, fitID, secStatus): wx.Command.__init__(self, True, 'Change Fit System Security') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.secStatus = secStatus def Do(self): cmd = CalcChangeFitSystemSecurityCommand(fitID=self.fitID, secStatus=self.secStatus) success = self.internalHistory.submit(cmd) eos.db.flush() sFit = Fit.getInstance() sFit.recalc(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) eos.db.commit() wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitIDs=(self.fitID, ))) return success
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
class GuiAddLocalModuleCommand(wx.Command): def __init__(self, fitID, itemID): wx.Command.__init__(self, True, 'Add Local Module') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.itemID = itemID self.savedRemovedDummies = None def Do(self): cmd = CalcAddLocalModuleCommand( fitID=self.fitID, newModInfo=ModuleInfo(itemID=self.itemID)) success = self.internalHistory.submit(cmd) sFit = Fit.getInstance() sFit.recalc(self.fitID) self.savedRemovedDummies = sFit.fill(self.fitID) 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() sFit.recalc(self.fitID) sFit.fill(self.fitID) 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
class GuiChangeImplantMetaCommand(wx.Command): def __init__(self, fitID, position, newItemID): wx.Command.__init__(self, True, 'Change Implant Meta') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.position = position self.newItemID = newItemID def Do(self): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) implant = fit.implants[self.position] if implant.itemID == self.newItemID: return False info = ImplantInfo.fromImplant(implant) info.itemID = self.newItemID cmd = CalcAddImplantCommand(fitID=self.fitID, implantInfo=info) success = self.internalHistory.submit(cmd) sFit.recalc(fit) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiRemoveImplantsCommand(wx.Command): def __init__(self, fitID, positions): wx.Command.__init__(self, True, 'Remove Implants') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.positions = positions def Do(self): results = [] for position in sorted(self.positions, reverse=True): cmd = CalcRemoveImplantCommand(fitID=self.fitID, position=position, commit=False) results.append(self.internalHistory.submit(cmd)) success = any(results) eos.db.commit() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() eos.db.commit() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
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
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
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(fitIDs=(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(fitIDs=(self.fitID, ))) return success
class GuiChangeProjectedFitAmountCommand(wx.Command): def __init__(self, fitID, projectedFitID, amount): wx.Command.__init__(self, True, 'Change Projected Fit Amount') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.projectedFitID = projectedFitID self.amount = amount def Do(self): if self.amount > 0: cmd = CalcChangeProjectedFitAmountCommand(fitID=self.fitID, projectedFitID=self.projectedFitID, amount=self.amount) else: cmd = CalcRemoveProjectedFitCommand(fitID=self.fitID, projectedFitID=self.projectedFitID, amount=math.inf) success = self.internalHistory.submit(cmd) sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiToggleLocalFighterAbilityStateCommand(wx.Command): def __init__(self, fitID, mainPosition, positions, effectID): wx.Command.__init__(self, True, 'Toggle Local Fighter Ability State') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.mainPosition = mainPosition self.positions = positions self.effectID = effectID def Do(self): cmd = CalcToggleFighterAbilityStatesCommand( fitID=self.fitID, projected=False, mainPosition=self.mainPosition, positions=self.positions, effectID=self.effectID) success = self.internalHistory.submit(cmd) Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiChangeProjectedModuleSpoolCommand(wx.Command): def __init__(self, fitID, position, spoolType, spoolAmount): wx.Command.__init__(self, True, 'Change Projected 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=True, position=self.position, spoolType=self.spoolType, spoolAmount=self.spoolAmount) success = self.internalHistory.submit(cmd) Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiAddProjectedModuleCommand(wx.Command): def __init__(self, fitID, itemID): wx.Command.__init__(self, True, 'Add Projected Module') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.itemID = itemID def Do(self): cmd = CalcAddProjectedModuleCommand( fitID=self.fitID, modInfo=ModuleInfo(itemID=self.itemID)) success = self.internalHistory.submit(cmd) sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiChangeLocalDroneAmountCommand(wx.Command): def __init__(self, fitID, position, amount): wx.Command.__init__(self, True, 'Change Local Drone Amount') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.position = position self.amount = amount def Do(self): if self.amount > 0: cmd = CalcChangeLocalDroneAmountCommand(fitID=self.fitID, position=self.position, amount=self.amount) else: cmd = CalcRemoveLocalDroneCommand(fitID=self.fitID, position=self.position, 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(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
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
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
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
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
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): result = [] for itemID in self.itemIDs: cmd = CalcRemoveCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=itemID, amount=math.inf), commit=False) result.append(self.internalHistory.submit(cmd)) success = any(result) 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
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
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
class GuiCloneLocalDroneCommand(wx.Command): def __init__(self, fitID, position): wx.Command.__init__(self, True, 'Clone Local Drone') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.position = position def Do(self): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) try: drone = fit.drones[self.position] except IndexError: return False info = DroneInfo.fromDrone(drone) cmd = CalcAddLocalDroneCommand(fitID=self.fitID, droneInfo=info, forceNewStack=True) success = self.internalHistory.submit(cmd) sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiAddCommandFitsCommand(wx.Command): def __init__(self, fitID, commandFitIDs): wx.Command.__init__(self, True, 'Add Command Fits') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.commandFitIDs = commandFitIDs def Do(self): results = [] for commandFitID in self.commandFitIDs: cmd = CalcAddCommandCommand(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(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
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
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
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
class GuiAddLocalFighterCommand(wx.Command): def __init__(self, fitID, itemID): wx.Command.__init__(self, True, 'Add Local Fighter') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.itemID = itemID def Do(self): cmd = CalcAddLocalFighterCommand( fitID=self.fitID, fighterInfo=FighterInfo(itemID=self.itemID)) success = self.internalHistory.submit(cmd) Market.getInstance().storeRecentlyUsed(self.itemID) 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 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
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) sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiAddLocalDroneCommand(wx.Command): def __init__(self, fitID, itemID, amount): wx.Command.__init__(self, True, 'Add Local Drone') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.itemID = itemID self.amount = amount def Do(self): cmd = CalcAddLocalDroneCommand(fitID=self.fitID, droneInfo=DroneInfo(itemID=self.itemID, amount=self.amount, amountActive=0)) success = self.internalHistory.submit(cmd) Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiImportLocalMutatedModuleCommand(wx.Command): def __init__(self, fitID, baseItem, mutaplasmid, mutations): wx.Command.__init__(self, True, 'Import Local Mutated Module') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.newModInfo = ModuleInfo( itemID=mutaplasmid.resultingItem.ID, baseItemID=baseItem.ID, mutaplasmidID=mutaplasmid.ID, mutations=mutations) self.savedRemovedDummies = None def Do(self): cmd = CalcAddLocalModuleCommand(fitID=self.fitID, newModInfo=self.newModInfo) success = self.internalHistory.submit(cmd) sFit = Fit.getInstance() sFit.recalc(self.fitID) self.savedRemovedDummies = sFit.fill(self.fitID) wx.PostEvent( gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID, action='modadd', typeID=self.newModInfo.itemID)) return success def Undo(self): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) restoreRemovedDummies(fit, self.savedRemovedDummies) success = self.internalHistory.undoAll() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent( gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID, action='moddel', typeID=self.newModInfo.itemID)) return success
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
class GuiChangeLocalModuleChargesCommand(wx.Command): def __init__(self, fitID, modules, chargeItemID): wx.Command.__init__(self, True, 'Change Local Module Charges') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.positions = [mod.modPosition for mod in modules] 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) Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
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
class GuiChangeCargoAmountCommand(wx.Command): def __init__(self, fitID, itemID, amount): wx.Command.__init__(self, True, 'Change Cargo Amount') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.itemID = itemID self.amount = amount def Do(self): if self.amount > 0: cmd = CalcChangeCargoAmountCommand(fitID=self.fitID, cargoInfo=CargoInfo( itemID=self.itemID, amount=self.amount)) else: cmd = CalcRemoveCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo( itemID=self.itemID, amount=math.inf)) success = self.internalHistory.submit(cmd) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
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
class GuiRemoveLocalFightersCommand(wx.Command): def __init__(self, fitID, positions): wx.Command.__init__(self, True, 'Remove Local Fighters') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.positions = positions def Do(self): sMkt = Market.getInstance() results = [] for position in sorted(self.positions, reverse=True): cmd = CalcRemoveLocalFighterCommand(fitID=self.fitID, position=position) results.append(self.internalHistory.submit(cmd)) sMkt.storeRecentlyUsed(cmd.savedFighterInfo.itemID) 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(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
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) sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
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) Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() Fit.getInstance().recalc(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
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) sFit = Fit.getInstance() if cmd.needsGuiRecalc: 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
class GuiToggleLocalFighterStatesCommand(wx.Command): def __init__(self, fitID, mainPosition, positions): wx.Command.__init__(self, True, 'Toggle Local Fighter States') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.mainPosition = mainPosition self.positions = positions def Do(self): cmd = CalcToggleLocalFighterStatesCommand( fitID=self.fitID, mainPosition=self.mainPosition, positions=self.positions) success = self.internalHistory.submit(cmd) sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() sFit = Fit.getInstance() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiSwapLocalModulesCommand(wx.Command): 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 def Do(self): if self.position1 == self.position2: return False cmd = CalcSwapLocalModuleCommand(fitID=self.fitID, position1=self.position1, position2=self.position2) success = self.internalHistory.submit(cmd) 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
class GuiChangeLocalModuleStatesCommand(wx.Command): 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 def Do(self): cmd = CalcChangeLocalModuleStatesCommand( fitID=self.fitID, mainPosition=self.mainPosition, positions=self.positions, click=self.click) success = self.internalHistory.submit(cmd) sFit = Fit.getInstance() sFit.recalc(self.fitID) self.savedRemovedDummies = sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), 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() sFit.recalc(self.fitID) sFit.fill(self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitID=self.fitID)) return success
class GuiAddImplantCommand(wx.Command): def __init__(self, fitID, itemID): wx.Command.__init__(self, True, 'Add Implant') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.itemID = itemID def Do(self): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) if fit.implantSource != ImplantLocation.FIT: cmd = CalcChangeImplantLocationCommand(fitID=self.fitID, source=ImplantLocation.FIT) successSource = self.internalHistory.submit(cmd) else: successSource = False cmd = CalcAddImplantCommand(fitID=self.fitID, implantInfo=ImplantInfo(itemID=self.itemID)) successImplant = self.internalHistory.submit(cmd) # Acceptable behavior when we already have passed implant and just switch source, or # when we have source and add implant, but not if we do not change anything success = successSource or successImplant 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
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
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
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
class GuiCloneLocalModuleCommand(wx.Command): 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 def Do(self): if self.srcPosition == self.dstPosition: return False sFit = Fit.getInstance() cmd = CalcCloneLocalModuleCommand(fitID=self.fitID, srcPosition=self.srcPosition, dstPosition=self.dstPosition) success = self.internalHistory.submit(cmd) eos.db.flush() fit = sFit.getFit(self.fitID) sFit.recalc(self.fitID) self.savedRemovedDummies = sFit.fill(self.fitID) eos.db.commit() self.savedItemID = fit.modules[self.srcPosition].itemID if success and self.savedItemID is not None: event = GE.FitChanged(fitID=self.fitID, action='modadd', typeID=self.savedItemID) else: event = GE.FitChanged(fitID=self.fitID) 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() if success and self.savedItemID is not None: event = GE.FitChanged(fitID=self.fitID, action='moddel', typeID=self.savedItemID) else: event = GE.FitChanged(fitID=self.fitID) wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), event) return success
class GuiRemoveLocalModuleCommand(wx.Command): 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 def Do(self): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) self.savedTypeIDs = {m.itemID for m in fit.modules if not m.isEmpty} cmd = CalcRemoveLocalModulesCommand(fitID=self.fitID, positions=self.positions) success = self.internalHistory.submit(cmd) eos.db.flush() 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='moddel', typeID=self.savedTypeIDs) if success and self.savedTypeIDs 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='modadd', typeID=self.savedTypeIDs) if success and self.savedTypeIDs else GE.FitChanged(fitID=self.fitID)) return success
class GuiRenameFitCommand(wx.Command): def __init__(self, fitID, name): wx.Command.__init__(self, True, 'Rename Fit') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.name = name def Do(self): cmd = CalcFitRenameCommand(fitID=self.fitID, name=self.name) success = self.internalHistory.submit(cmd) eos.db.commit() wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), FitRenamed(fitID=self.fitID)) return success def Undo(self): success = self.internalHistory.undoAll() eos.db.commit() wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), FitRenamed(fitID=self.fitID)) return success
class GuiAddCargoCommand(wx.Command): 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 def Do(self): cmd = CalcAddCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=self.itemID, amount=self.amount)) success = self.internalHistory.submit(cmd) 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
class GuiToggleFittingRestrictionsCommand(wx.Command): def __init__(self, fitID): wx.Command.__init__(self, True, 'Toggle Fitting Restrictions') self.internalHistory = InternalCommandHistory() self.fitID = fitID def Do(self): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) fit.ignoreRestrictions = not fit.ignoreRestrictions success = True if not fit.ignoreRestrictions: results = [] for position, mod in sorted(enumerate(fit.modules), key=lambda i: i[0], reverse=True): if not mod.isEmpty and not mod.fits(fit, hardpointLimit=False): cmd = CalcRemoveLocalModulesCommand(fitID=self.fitID, positions=[position]) results.append(self.internalHistory.submit(cmd)) if len(results) > 0: 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): sFit = Fit.getInstance() fit = sFit.getFit(self.fitID) fit.ignoreRestrictions = not fit.ignoreRestrictions 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)) return success
class GuiImportLocalMutatedModuleCommand(wx.Command): def __init__(self, fitID, baseItem, mutaplasmid, mutations): wx.Command.__init__(self, True, 'Import Local Mutated Module') self.internalHistory = InternalCommandHistory() self.fitID = fitID self.newModInfo = ModuleInfo( itemID=mutaplasmid.resultingItem.ID, baseItemID=baseItem.ID, mutaplasmidID=mutaplasmid.ID, mutations=mutations) self.savedRemovedDummies = None def Do(self): cmd = CalcAddLocalModuleCommand(fitID=self.fitID, newModInfo=self.newModInfo) success = self.internalHistory.submit(cmd) 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.newModInfo.itemID)) 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.newModInfo.itemID)) return success
class GuiSwapLocalModulesCommand(wx.Command): 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 def Do(self): if self.position1 == self.position2: return False cmd = CalcSwapLocalModuleCommand(fitID=self.fitID, position1=self.position1, position2=self.position2) success = self.internalHistory.submit(cmd) 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
class GuiChangeLocalModuleStatesCommand(wx.Command): 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 def Do(self): cmd = CalcChangeLocalModuleStatesCommand( fitID=self.fitID, mainPosition=self.mainPosition, positions=self.positions, click=self.click) success = self.internalHistory.submit(cmd) 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)) 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)) return success
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) 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]}) 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(fitID=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(fitID=self.fitID)) return success
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) 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(fitID=self.fitID, action='moddel', typeID=self.removedModItemID)) if self.addedModItemID is not None: events.append(GE.FitChanged(fitID=self.fitID, action='modadd', typeID=self.addedModItemID)) if not events: events.append(GE.FitChanged(fitID=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(fitID=self.fitID, action='moddel', typeID=self.addedModItemID)) if self.removedModItemID is not None: events.append(GE.FitChanged(fitID=self.fitID, action='modadd', typeID=self.removedModItemID)) if not events: events.append(GE.FitChanged(fitID=self.fitID)) for event in events: wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), event) return success