Restore booster state even when it was replaced by another booster
This commit is contained in:
@@ -9,49 +9,52 @@ class FitAddBoosterCommand(wx.Command):
|
||||
""""
|
||||
from sFit.addBooster
|
||||
"""
|
||||
def __init__(self, fitID, itemID, state=None, sideEffects=None):
|
||||
def __init__(self, fitID, itemID, state, sideEffects):
|
||||
wx.Command.__init__(self, True)
|
||||
self.fitID = fitID
|
||||
self.itemID = itemID
|
||||
self.state = state
|
||||
self.sideEffects = sideEffects
|
||||
self.new_index = None
|
||||
self.old_item = None
|
||||
self.newItemID = itemID
|
||||
self.newState = state
|
||||
self.newSideEffects = sideEffects
|
||||
self.newIndex = None
|
||||
self.oldItemID = None
|
||||
self.oldState = None
|
||||
self.oldSideEffects = None
|
||||
|
||||
def Do(self):
|
||||
pyfalog.debug("Adding booster ({0}) to fit ID: {1}", self.itemID, self.fitID)
|
||||
pyfalog.debug("Adding booster ({0}) to fit ID: {1}", self.newItemID, self.fitID)
|
||||
|
||||
fit = eos.db.getFit(self.fitID)
|
||||
item = eos.db.getItem(self.itemID, eager="attributes")
|
||||
item = eos.db.getItem(self.newItemID, eager="attributes")
|
||||
|
||||
if next((x for x in fit.boosters if x.itemID == self.itemID), None):
|
||||
if next((x for x in fit.boosters if x.itemID == self.newItemID), None):
|
||||
return False # already have item in list of boosters
|
||||
|
||||
try:
|
||||
booster = Booster(item)
|
||||
except ValueError:
|
||||
pyfalog.warning("Invalid item: {0}", self.itemID)
|
||||
pyfalog.warning("Invalid item: {0}", self.newItemID)
|
||||
return False
|
||||
|
||||
if self.state is not None:
|
||||
booster.active = self.state
|
||||
if self.sideEffects is not None:
|
||||
if self.newState is not None:
|
||||
booster.active = self.newState
|
||||
if self.newSideEffects is not None:
|
||||
for sideEffect in booster.sideEffects:
|
||||
sideEffect.active = self.sideEffects.get(sideEffect.effectID, False)
|
||||
sideEffect.active = self.newSideEffects.get(sideEffect.effectID, False)
|
||||
|
||||
self.old_item = fit.boosters.makeRoom(booster)
|
||||
|
||||
self.oldItemID, self.oldState, self.oldSideEffects = fit.boosters.makeRoom(booster)
|
||||
fit.boosters.append(booster)
|
||||
self.new_index = fit.boosters.index(booster)
|
||||
self.newIndex = fit.boosters.index(booster)
|
||||
return True
|
||||
|
||||
def Undo(self):
|
||||
if self.old_item:
|
||||
if self.oldItemID:
|
||||
# If we had an item in the slot previously, add it back.
|
||||
cmd = FitAddBoosterCommand(self.fitID, self.old_item)
|
||||
cmd = FitAddBoosterCommand(self.fitID, self.oldItemID, self.oldState, self.oldSideEffects)
|
||||
cmd.Do()
|
||||
return True
|
||||
|
||||
from .fitRemoveBooster import FitRemoveBoosterCommand # Avoid circular import
|
||||
cmd = FitRemoveBoosterCommand(self.fitID, self.new_index)
|
||||
cmd = FitRemoveBoosterCommand(self.fitID, self.newIndex)
|
||||
cmd.Do()
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user