Make toggling side-effects undoable

This commit is contained in:
DarkPhoenix
2019-04-10 18:47:46 +03:00
parent fda2c43a1d
commit 8072bb600c
6 changed files with 75 additions and 11 deletions

View File

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

View File

@@ -40,3 +40,4 @@ from .guiRebaseItems import GuiRebaseItemsCommand
from .guiMutaConvert import GuiMutaConvertCommand
from .guiMutaRevert import GuiMutaRevertCommand
from .guiToggleProjected import GuiToggleProjectedCommand
from .guiToggleBoosterSideEffect import GuiToggleBoosterSideEffectCommand

View File

@@ -1,6 +1,8 @@
import wx
import eos.db
from logbook import Logger
pyfalog = Logger(__name__)

View File

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

View File

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

View File

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