diff --git a/gui/builtinContextMenus/boosterSideEffects.py b/gui/builtinContextMenus/boosterSideEffects.py index bd33170c6..3878cc323 100644 --- a/gui/builtinContextMenus/boosterSideEffects.py +++ b/gui/builtinContextMenus/boosterSideEffects.py @@ -2,7 +2,6 @@ import wx import gui.mainFrame -import gui.globalEvents as GE from gui import fitCommands as cmd from gui.contextMenu import ContextMenu from service.fit import Fit diff --git a/gui/builtinContextMenus/fighterAbilities.py b/gui/builtinContextMenus/fighterAbilities.py index 76eab5c1e..4fec769a0 100644 --- a/gui/builtinContextMenus/fighterAbilities.py +++ b/gui/builtinContextMenus/fighterAbilities.py @@ -1,8 +1,11 @@ # noinspection PyPackageRequirements import wx -from gui.contextMenu import ContextMenu -import gui.mainFrame + + import gui.globalEvents as GE +import gui.mainFrame +from gui.contextMenu import ContextMenu +from gui import fitCommands as cmd from service.fit import Fit from service.settings import ContextMenuSettings @@ -55,10 +58,10 @@ class FighterAbility(ContextMenu): event.Skip() return - sFit = Fit.getInstance() fitID = self.mainFrame.getActiveFit() - sFit.toggleFighterAbility(fitID, ability) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + fit = Fit.getInstance().getFit(fitID) + index = fit.fighters.index(self.fighter) + self.mainFrame.command.Submit(cmd.GuiToggleFighterAbilityCommand(fitID, index, ability.effectID)) FighterAbility.register() diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index 8761a2ed2..f29fc3f97 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -41,3 +41,4 @@ from .guiMutaConvert import GuiMutaConvertCommand from .guiMutaRevert import GuiMutaRevertCommand from .guiToggleProjected import GuiToggleProjectedCommand from .guiToggleBoosterSideEffect import GuiToggleBoosterSideEffectCommand +from .guiToggleFighterAbility import GuiToggleFighterAbilityCommand diff --git a/gui/fitCommands/calc/fitToggleBoosterSideEffect.py b/gui/fitCommands/calc/fitToggleBoosterSideEffect.py index dae1b54e6..38622e4db 100644 --- a/gui/fitCommands/calc/fitToggleBoosterSideEffect.py +++ b/gui/fitCommands/calc/fitToggleBoosterSideEffect.py @@ -2,6 +2,7 @@ import wx from logbook import Logger import eos.db +from service.fit import Fit pyfalog = Logger(__name__) @@ -17,7 +18,7 @@ class FitToggleBoosterSideEffectCommand(wx.Command): def Do(self): pyfalog.debug("Toggling booster side-effect for fit ID: {0}", self.fitID) - fit = eos.db.getFit(self.fitID) + fit = Fit.getInstance().getFit(self.fitID) booster = fit.boosters[self.position] for se in booster.sideEffects: if se.effectID == self.effectID: diff --git a/gui/fitCommands/calc/fitToggleFighterAbility.py b/gui/fitCommands/calc/fitToggleFighterAbility.py new file mode 100644 index 000000000..941fce310 --- /dev/null +++ b/gui/fitCommands/calc/fitToggleFighterAbility.py @@ -0,0 +1,36 @@ +import wx +from logbook import Logger + +import eos.db +from service.fit import Fit + + +pyfalog = Logger(__name__) + + +class FitToggleFighterAbilityCommand(wx.Command): + + def __init__(self, fitID, position, effectID): + wx.Command.__init__(self, True, "Toggle Fighter Ability") + self.fitID = fitID + self.position = position + self.effectID = effectID + + def Do(self): + pyfalog.debug("Toggling fighter ability for fit ID: {0}", self.fitID) + fit = Fit.getInstance().getFit(self.fitID) + fighter = fit.fighters[self.position] + for fa in fighter.abilities: + if fa.effectID == self.effectID: + ability = fa + break + else: + return False + + ability.active = not ability.active + eos.db.commit() + return True + + def Undo(self): + cmd = FitToggleFighterAbilityCommand(self.fitID, self.position, self.effectID) + return cmd.Do() diff --git a/gui/fitCommands/guiToggleFighterAbility.py b/gui/fitCommands/guiToggleFighterAbility.py new file mode 100644 index 000000000..07559959d --- /dev/null +++ b/gui/fitCommands/guiToggleFighterAbility.py @@ -0,0 +1,31 @@ +import wx +from service.fit import Fit + +import gui.mainFrame +from gui import globalEvents as GE +from .calc.fitToggleFighterAbility import FitToggleFighterAbilityCommand + + +class GuiToggleFighterAbilityCommand(wx.Command): + + def __init__(self, fitID, position, effectID): + wx.Command.__init__(self, True, "") + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.internal_history = wx.CommandProcessor() + self.fitID = fitID + self.position = position + self.effectID = effectID + + def Do(self): + if self.internal_history.Submit(FitToggleFighterAbilityCommand(self.fitID, self.position, self.effectID)): + Fit.getInstance().recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True + return False + + def Undo(self): + for _ in self.internal_history.Commands: + self.internal_history.Undo() + Fit.getInstance().recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True diff --git a/service/fit.py b/service/fit.py index ca3c489fc..0bd63c8b2 100644 --- a/service/fit.py +++ b/service/fit.py @@ -389,13 +389,6 @@ class Fit(FitDeprecated): self.recalc(fit) return True - def toggleFighterAbility(self, fitID, ability): - pyfalog.debug("Toggling fighter ability for fit ID: {0}", fitID) - fit = eos.db.getFit(fitID) - ability.active = not ability.active - eos.db.commit() - self.recalc(fit) - def changeChar(self, fitID, charID): pyfalog.debug("Changing character ({0}) for fit ID: {1}", charID, fitID) if fitID is None or charID is None: