From 8072bb600c53d67cdb7afbadc1c96904baff3e3a Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 10 Apr 2019 18:47:46 +0300 Subject: [PATCH] Make toggling side-effects undoable --- gui/builtinContextMenus/boosterSideEffects.py | 10 +++--- gui/fitCommands/__init__.py | 1 + gui/fitCommands/calc/fitToggleBooster.py | 2 ++ .../calc/fitToggleBoosterSideEffect.py | 35 +++++++++++++++++++ gui/fitCommands/guiToggleBoosterSideEffect.py | 31 ++++++++++++++++ service/fit.py | 7 ---- 6 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 gui/fitCommands/calc/fitToggleBoosterSideEffect.py create mode 100644 gui/fitCommands/guiToggleBoosterSideEffect.py diff --git a/gui/builtinContextMenus/boosterSideEffects.py b/gui/builtinContextMenus/boosterSideEffects.py index d6dbc38c6..bd33170c6 100644 --- a/gui/builtinContextMenus/boosterSideEffects.py +++ b/gui/builtinContextMenus/boosterSideEffects.py @@ -1,8 +1,10 @@ # noinspection PyPackageRequirements import wx -from gui.contextMenu import ContextMenu + import gui.mainFrame import gui.globalEvents as GE +from gui import fitCommands as cmd +from gui.contextMenu import ContextMenu from service.fit import Fit from service.settings import ContextMenuSettings @@ -61,10 +63,10 @@ class BoosterSideEffect(ContextMenu): event.Skip() return - sFit = Fit.getInstance() fitID = self.mainFrame.getActiveFit() - sFit.toggleBoosterSideEffect(fitID, effect) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + fit = Fit.getInstance().getFit(fitID) + index = fit.boosters.index(self.booster) + self.mainFrame.command.Submit(cmd.GuiToggleBoosterSideEffectCommand(fitID, index, effect.effectID)) BoosterSideEffect.register() diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index 4174ec344..8761a2ed2 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -40,3 +40,4 @@ from .guiRebaseItems import GuiRebaseItemsCommand from .guiMutaConvert import GuiMutaConvertCommand from .guiMutaRevert import GuiMutaRevertCommand from .guiToggleProjected import GuiToggleProjectedCommand +from .guiToggleBoosterSideEffect import GuiToggleBoosterSideEffectCommand diff --git a/gui/fitCommands/calc/fitToggleBooster.py b/gui/fitCommands/calc/fitToggleBooster.py index 5ca0444fd..29b5528eb 100644 --- a/gui/fitCommands/calc/fitToggleBooster.py +++ b/gui/fitCommands/calc/fitToggleBooster.py @@ -1,6 +1,8 @@ import wx import eos.db from logbook import Logger + + pyfalog = Logger(__name__) diff --git a/gui/fitCommands/calc/fitToggleBoosterSideEffect.py b/gui/fitCommands/calc/fitToggleBoosterSideEffect.py new file mode 100644 index 000000000..dae1b54e6 --- /dev/null +++ b/gui/fitCommands/calc/fitToggleBoosterSideEffect.py @@ -0,0 +1,35 @@ +import wx +from logbook import Logger + +import eos.db + + +pyfalog = Logger(__name__) + + +class FitToggleBoosterSideEffectCommand(wx.Command): + + def __init__(self, fitID, position, effectID): + wx.Command.__init__(self, True, "Toggle Booster Side Effect") + self.fitID = fitID + self.position = position + self.effectID = effectID + + def Do(self): + pyfalog.debug("Toggling booster side-effect for fit ID: {0}", self.fitID) + fit = eos.db.getFit(self.fitID) + booster = fit.boosters[self.position] + for se in booster.sideEffects: + if se.effectID == self.effectID: + sideEffect = se + break + else: + return False + + sideEffect.active = not sideEffect.active + eos.db.commit() + return True + + def Undo(self): + cmd = FitToggleBoosterSideEffectCommand(self.fitID, self.position, self.effectID) + return cmd.Do() diff --git a/gui/fitCommands/guiToggleBoosterSideEffect.py b/gui/fitCommands/guiToggleBoosterSideEffect.py new file mode 100644 index 000000000..dce898b12 --- /dev/null +++ b/gui/fitCommands/guiToggleBoosterSideEffect.py @@ -0,0 +1,31 @@ +import wx +from service.fit import Fit + +import gui.mainFrame +from gui import globalEvents as GE +from .calc.fitToggleBoosterSideEffect import FitToggleBoosterSideEffectCommand + + +class GuiToggleBoosterSideEffectCommand(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(FitToggleBoosterSideEffectCommand(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 4f07957f6..ca3c489fc 100644 --- a/service/fit.py +++ b/service/fit.py @@ -396,13 +396,6 @@ class Fit(FitDeprecated): eos.db.commit() self.recalc(fit) - def toggleBoosterSideEffect(self, fitID, sideEffect): - pyfalog.debug("Toggling booster side effect for fit ID: {0}", fitID) - fit = eos.db.getFit(fitID) - sideEffect.active = not sideEffect.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: