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):
def append(self, proj):
proj.projected = True
HandledList.append(self, proj)
@@ -343,6 +344,19 @@ class HandledProjectedDroneList(HandledDroneCargoList):
# Remove invalid or non-projectable drones
if proj.isInvalid or not proj.item.isType("projected"):
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):

View File

@@ -122,8 +122,7 @@ class ProjectedView(d.Display):
if row != -1:
thing = self.get(row)
if thing:
sFit.removeProjected(fitID, self.get(row))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
self.mainFrame.command.Submit(cmd.GuiRemoveProjectedCommand(fitID, self.get(row)))
def handleDrag(self, type, fitID):
# 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)
if self.newPosition is not None:
fit.projectedModules.insert(self.newPosition, mod)
if not fit.projectedModules.insert(self.newPosition, mod):
return False
else:
fit.projectedModules.append(mod)
if not fit.projectedModules.append(mod):
return False
self.newPosition = fit.projectedModules.index(mod)
eos.db.commit()

View File

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

View File

@@ -1,42 +1,67 @@
import wx
import eos.db
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__)
# this has the same exact definition that regular projected modules, besides the undo
class FitRemoveProjectedDroneCommand(wx.Command):
""""
from sFit.project
"""
def __init__(self, fitID, position, stack=False):
def __init__(self, fitID, position, amount=1):
wx.Command.__init__(self, True)
self.fitID = fitID
self.position = position
self.removed_item = None
self.stack = stack
self.amountToRemove = amount
self.savedItemID = None
self.savedAmount = None
self.savedAmountActive = None
self.removedStack = None
def Do(self):
pyfalog.debug("Removing ({0}) onto: {1}", self.fitID, self.position)
fit = eos.db.getFit(self.fitID)
pyfalog.debug("Removing ({0}) onto: {1}".format(self.fitID, self.position))
fit = Fit.getInstance().getFit(self.fitID)
drone = fit.projectedDrones[self.position]
if self.stack:
fit.projectedDrones.remove(drone)
self.savedItemID = drone.itemID
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:
if drone.amount > 1:
drone.amount -= 1
else:
fit.projectedDrones.remove(drone)
self.drone_item = drone.itemID
self.removedStack = False
eos.db.commit()
return True
def Undo(self):
from gui.fitCommands.calc.fitAddProjectedDrone import FitAddProjectedDroneCommand
cmd = FitAddProjectedDroneCommand(self.fitID, self.drone_item)
cmd.Do()
fit = Fit.getInstance().getFit(self.fitID)
if self.removedStack:
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

View File

@@ -353,23 +353,6 @@ class FitDeprecated(object):
eos.db.commit()
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
def removeCommand(self, fitID, thing):
pyfalog.debug("Removing command projection from fit ({0}) for: {1}", fitID, thing)