diff --git a/gui/builtinContextMenus/marketJump.py b/gui/builtinContextMenus/marketJump.py index a5d5e8eeb..ee8a635e3 100644 --- a/gui/builtinContextMenus/marketJump.py +++ b/gui/builtinContextMenus/marketJump.py @@ -19,7 +19,7 @@ class MarketJump(ContextMenu): "projectedModule", "projectedDrone", "projectedCharge", "cargoItem", "implantItemChar", "fighterItem", - "projectedDrone") + "projectedFighter") if srcContext not in validContexts or selection is None or len(selection) < 1: return False diff --git a/gui/fitCommands/calc/fitAddProjectedFighter.py b/gui/fitCommands/calc/fitAddProjectedFighter.py index 17d50e14b..6f0a824ba 100644 --- a/gui/fitCommands/calc/fitAddProjectedFighter.py +++ b/gui/fitCommands/calc/fitAddProjectedFighter.py @@ -1,7 +1,12 @@ import wx -import eos.db from logbook import Logger + +import eos.db from eos.saveddata.fighter import Fighter +from service.fit import Fit +from service.market import Market + + pyfalog = Logger(__name__) @@ -9,16 +14,18 @@ class FitAddProjectedFighterCommand(wx.Command): """" from sFit.project """ - def __init__(self, fitID, itemID): + def __init__(self, fitID, itemID, state, abilities): wx.Command.__init__(self, True) self.fitID = fitID - self.itemID = itemID - self.new_index = None + self.newItemID = itemID + self.newState = state + self.newAbilities = abilities + self.newIndex = None def Do(self): - pyfalog.debug("Projecting fit ({0}) onto: {1}", self.fitID, self.itemID) - fit = eos.db.getFit(self.fitID) - item = eos.db.getItem(self.itemID, eager=("attributes", "group.category")) + pyfalog.debug("Projecting fit ({0}) onto: {1}", self.fitID, self.newItemID) + fit = Fit.getInstance().getFit(self.fitID) + item = Market.getInstance().getItem(self.newItemID, eager=("attributes", "group.category")) try: fighter = Fighter(item) @@ -27,14 +34,22 @@ class FitAddProjectedFighterCommand(wx.Command): fit.projectedFighters.append(fighter) # sometimes fighters aren't added because they aren't valid projectionable ones. todo: move that logic into here - if fighter in fit.projectedFighters: - eos.db.commit() - self.new_index = fit.projectedFighters.index(fighter) - return True - return False + if fighter not in fit.projectedFighters: + return False + + if self.newState is not None: + fighter.active = self.newState + + if self.newAbilities is not None: + for ability in fighter.abilities: + ability.active = self.newAbilities.get(ability.effectID, ability.active) + + eos.db.commit() + self.newIndex = fit.projectedFighters.index(fighter) + return True def Undo(self): from gui.fitCommands.calc.fitRemoveProjectedFighter import FitRemoveProjectedFighterCommand # avoids circular import - cmd = FitRemoveProjectedFighterCommand(self.fitID, self.new_index) + cmd = FitRemoveProjectedFighterCommand(self.fitID, self.newIndex) cmd.Do() return True diff --git a/gui/fitCommands/calc/fitRemoveFighter.py b/gui/fitCommands/calc/fitRemoveFighter.py index 54381f29a..397ad7428 100644 --- a/gui/fitCommands/calc/fitRemoveFighter.py +++ b/gui/fitCommands/calc/fitRemoveFighter.py @@ -2,6 +2,8 @@ import wx from logbook import Logger import eos.db +from service.fit import Fit + pyfalog = Logger(__name__) @@ -24,7 +26,7 @@ class FitRemoveFighterCommand(wx.Command): def Do(self): fitID = self.fitID - fit = eos.db.getFit(fitID) + fit = Fit.getInstance().getFit(fitID) fighter = fit.fighters[self.position] self.savedItemID = fighter.itemID self.savedAmount = fighter.amount diff --git a/gui/fitCommands/calc/fitRemoveProjectedFighter.py b/gui/fitCommands/calc/fitRemoveProjectedFighter.py index d3550b43e..a2fa32d27 100644 --- a/gui/fitCommands/calc/fitRemoveProjectedFighter.py +++ b/gui/fitCommands/calc/fitRemoveProjectedFighter.py @@ -14,21 +14,29 @@ class FitRemoveProjectedFighterCommand(wx.Command): wx.Command.__init__(self, True) self.fitID = fitID self.position = position - self.removed_item = None + self.savedItemID = None + self.savedAmount = None + self.savedStatus = None + self.savedAbilities = None def Do(self): pyfalog.debug("Removing ({0}) onto: {1}", self.fitID, self.position) fit = eos.db.getFit(self.fitID) - fighter = fit.projectedFighters[self.position] + self.savedItemID = fighter.itemID + self.savedAmount = fighter.amount + self.savedStatus = fighter.active + self.savedAbilities = {fa.effectID: fa.active for fa in fighter.abilities} fit.projectedFighters.remove(fighter) - self.removed_item = fighter.itemID - eos.db.commit() return True def Undo(self): from gui.fitCommands.calc.fitAddProjectedFighter import FitAddProjectedFighterCommand - cmd = FitAddProjectedFighterCommand(self.fitID, self.removed_item) + cmd = FitAddProjectedFighterCommand( + fitID=self.fitID, + itemID=self.savedItemID, + state=self.savedStatus, + abilities=self.savedAbilities) cmd.Do() return True diff --git a/gui/fitCommands/guiAddProjected.py b/gui/fitCommands/guiAddProjected.py index 452aef922..769d1cd71 100644 --- a/gui/fitCommands/guiAddProjected.py +++ b/gui/fitCommands/guiAddProjected.py @@ -33,7 +33,7 @@ class GuiAddProjectedCommand(wx.Command): if item.category.name == "Drone": result = self.internal_history.Submit(FitAddProjectedDroneCommand(self.fitID, self.id)) elif item.category.name == "Fighter": - result = self.internal_history.Submit(FitAddProjectedFighterCommand(self.fitID, self.id)) + result = self.internal_history.Submit(FitAddProjectedFighterCommand(self.fitID, self.id, None, None)) else: result = self.internal_history.Submit(FitAddProjectedModuleCommand(self.fitID, self.id, None, None, None, None, None, None)) elif self.type == 'fit':