Make toggling fighter abilities undoable

This commit is contained in:
DarkPhoenix
2019-04-11 00:05:28 +03:00
parent d2fab0a10e
commit 4cbeb34a3e
7 changed files with 78 additions and 14 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -41,3 +41,4 @@ from .guiMutaConvert import GuiMutaConvertCommand
from .guiMutaRevert import GuiMutaRevertCommand
from .guiToggleProjected import GuiToggleProjectedCommand
from .guiToggleBoosterSideEffect import GuiToggleBoosterSideEffectCommand
from .guiToggleFighterAbility import GuiToggleFighterAbilityCommand

View File

@@ -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:

View File

@@ -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()

View File

@@ -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

View File

@@ -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: