Make removal of fighters completely undoable

This commit is contained in:
DarkPhoenix
2019-04-11 16:31:44 +03:00
parent 2341650437
commit e90e9a5ca1
5 changed files with 46 additions and 21 deletions

View File

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

View File

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

View File

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

View File

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

View File

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