Undoing removal of drones now restores their proper state

This commit is contained in:
DarkPhoenix
2019-04-11 18:20:56 +03:00
parent e90e9a5ca1
commit 5579929f83
6 changed files with 65 additions and 42 deletions

View File

@@ -336,6 +336,7 @@ class HandledProjectedModList(HandledList):
class HandledProjectedDroneList(HandledDroneCargoList): class HandledProjectedDroneList(HandledDroneCargoList):
def append(self, proj): def append(self, proj):
proj.projected = True proj.projected = True
HandledList.append(self, proj) HandledList.append(self, proj)
@@ -343,6 +344,19 @@ class HandledProjectedDroneList(HandledDroneCargoList):
# Remove invalid or non-projectable drones # Remove invalid or non-projectable drones
if proj.isInvalid or not proj.item.isType("projected"): if proj.isInvalid or not proj.item.isType("projected"):
self.remove(proj) self.remove(proj)
return False
return True
def insert(self, idx, proj):
proj.projected = True
HandledList.insert(self, idx, proj)
# Remove invalid or non-projectable drones
if proj.isInvalid or not proj.item.isType("projected"):
self.remove(proj)
return False
return True
class HandledItem(object): class HandledItem(object):

View File

@@ -122,8 +122,7 @@ class ProjectedView(d.Display):
if row != -1: if row != -1:
thing = self.get(row) thing = self.get(row)
if thing: if thing:
sFit.removeProjected(fitID, self.get(row)) self.mainFrame.command.Submit(cmd.GuiRemoveProjectedCommand(fitID, self.get(row)))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def handleDrag(self, type, fitID): def handleDrag(self, type, fitID):
# Those are drags coming from pyfa sources, NOT builtin wx drags # Those are drags coming from pyfa sources, NOT builtin wx drags

View File

@@ -43,9 +43,11 @@ class FitAddProjectedModuleCommand(wx.Command):
self.oldModuleInfo = ModuleInfoCache(oldPosition, oldItemID, oldState, oldChargeID, oldBaseItemID, oldMutaplasmidID, oldMutations) self.oldModuleInfo = ModuleInfoCache(oldPosition, oldItemID, oldState, oldChargeID, oldBaseItemID, oldMutaplasmidID, oldMutations)
if self.newPosition is not None: if self.newPosition is not None:
fit.projectedModules.insert(self.newPosition, mod) if not fit.projectedModules.insert(self.newPosition, mod):
return False
else: else:
fit.projectedModules.append(mod) if not fit.projectedModules.append(mod):
return False
self.newPosition = fit.projectedModules.index(mod) self.newPosition = fit.projectedModules.index(mod)
eos.db.commit() eos.db.commit()

View File

@@ -18,7 +18,7 @@ class FitRemoveDroneCommand(wx.Command):
wx.Command.__init__(self, True, "Drone add") wx.Command.__init__(self, True, "Drone add")
self.fitID = fitID self.fitID = fitID
self.position = position self.position = position
self.amountToRemove = amount # add x amount. If this goes over amount, removes stack self.amountToRemove = amount
self.savedItemID = None self.savedItemID = None
self.savedAmount = None self.savedAmount = None
self.savedAmountActive = None self.savedAmountActive = None

View File

@@ -1,42 +1,67 @@
import wx import wx
import eos.db
from logbook import Logger from logbook import Logger
import eos.db
from eos.saveddata.drone import Drone
from service.fit import Fit
from service.market import Market
pyfalog = Logger(__name__) pyfalog = Logger(__name__)
# this has the same exact definition that regular projected modules, besides the undo
class FitRemoveProjectedDroneCommand(wx.Command): class FitRemoveProjectedDroneCommand(wx.Command):
"""" """"
from sFit.project from sFit.project
""" """
def __init__(self, fitID, position, stack=False): def __init__(self, fitID, position, amount=1):
wx.Command.__init__(self, True) wx.Command.__init__(self, True)
self.fitID = fitID self.fitID = fitID
self.position = position self.position = position
self.removed_item = None self.amountToRemove = amount
self.stack = stack self.savedItemID = None
self.savedAmount = None
self.savedAmountActive = None
self.removedStack = None
def Do(self): def Do(self):
pyfalog.debug("Removing ({0}) onto: {1}", self.fitID, self.position) pyfalog.debug("Removing ({0}) onto: {1}".format(self.fitID, self.position))
fit = eos.db.getFit(self.fitID) fit = Fit.getInstance().getFit(self.fitID)
drone = fit.projectedDrones[self.position] drone = fit.projectedDrones[self.position]
if self.stack: self.savedItemID = drone.itemID
fit.projectedDrones.remove(drone) self.savedAmount = drone.amount
self.savedAmountActive = drone.amountActive
drone.amount -= self.amountToRemove
if drone.amountActive > 0:
drone.amountActive -= self.amountToRemove
if drone.amount == 0:
del fit.projectedDrones[self.position]
self.removedStack = True
else: else:
if drone.amount > 1: self.removedStack = False
drone.amount -= 1
else:
fit.projectedDrones.remove(drone)
self.drone_item = drone.itemID
eos.db.commit() eos.db.commit()
return True return True
def Undo(self): def Undo(self):
from gui.fitCommands.calc.fitAddProjectedDrone import FitAddProjectedDroneCommand fit = Fit.getInstance().getFit(self.fitID)
cmd = FitAddProjectedDroneCommand(self.fitID, self.drone_item) if self.removedStack:
cmd.Do() droneItem = Market.getInstance().getItem(self.savedItemID, eager=("attributes", "group.category"))
try:
drone = Drone(droneItem)
except ValueError:
pyfalog.warning("Invalid drone: {}", droneItem)
return False
if not drone.fits(fit):
return False
drone.amount = self.savedAmount
drone.amountActive = self.savedAmountActive
fit.projectedDrones.insert(self.position, drone)
else:
drone = fit.projectedDrones[self.position]
drone.amount = self.savedAmount
drone.amountActive = self.savedAmountActive
eos.db.commit()
return True return True

View File

@@ -353,23 +353,6 @@ class FitDeprecated(object):
eos.db.commit() eos.db.commit()
self.recalc(fit) self.recalc(fit)
@deprecated
def removeProjected(self, fitID, thing):
pyfalog.debug("Removing projection on fit ({0}) from: {1}", fitID, thing)
fit = eos.db.getFit(fitID)
if isinstance(thing, es_Drone):
fit.projectedDrones.remove(thing)
elif isinstance(thing, es_Module):
fit.projectedModules.remove(thing)
elif isinstance(thing, es_Fighter):
fit.projectedFighters.remove(thing)
else:
del fit.projectedFitDict[thing.ID]
# fit.projectedFits.remove(thing)
eos.db.commit()
self.recalc(fit)
@deprecated @deprecated
def removeCommand(self, fitID, thing): def removeCommand(self, fitID, thing):
pyfalog.debug("Removing command projection from fit ({0}) for: {1}", fitID, thing) pyfalog.debug("Removing command projection from fit ({0}) for: {1}", fitID, thing)