Implant and cargo conversions

This commit is contained in:
blitzmann
2018-07-27 23:54:41 -04:00
parent b724e5bec1
commit dd430bc9bb
13 changed files with 164 additions and 28 deletions

View File

@@ -26,6 +26,7 @@ import gui.globalEvents as GE
from gui.utils.staticHelpers import DragDropHelper
from service.fit import Fit
from service.market import Market
import gui.fitCommands as cmd
class CargoViewDrop(wx.DropTarget):
@@ -80,9 +81,7 @@ class CargoView(d.Display):
if data[0] == "fitting":
self.swapModule(x, y, int(data[1]))
elif data[0] == "market":
sFit = Fit.getInstance()
sFit.addCargo(self.mainFrame.getActiveFit(), int(data[1]), 1)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
self.mainFrame.command.Submit(cmd.GuiAddCargoCommand(self.mainFrame.getActiveFit(), int(data[1])))
def startDrag(self, event):
row = event.GetIndex()

View File

@@ -28,7 +28,7 @@ import gui.globalEvents as GE
from eos.saveddata.fit import ImplantLocation
from service.fit import Fit
from service.market import Market
import gui.fitCommands as cmd
class ImplantView(wx.Panel):
def __init__(self, parent):
@@ -155,9 +155,7 @@ class ImplantDisplay(d.Display):
event.Skip()
return
trigger = sFit.addImplant(fitID, event.itemID)
if trigger:
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
if self.mainFrame.command.Submit(cmd.GuiAddImplantCommand(fitID, event.itemID)):
self.mainFrame.additionsPane.select("Implants")
event.Skip()
@@ -175,10 +173,7 @@ class ImplantDisplay(d.Display):
def removeImplant(self, implant):
fitID = self.mainFrame.getActiveFit()
sFit = Fit.getInstance()
sFit.removeImplant(fitID, self.original.index(implant))
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
self.mainFrame.command.Submit(cmd.GuiRemoveImplantCommand(fitID, self.original.index(implant)))
def click(self, event):
event.Skip()

View File

@@ -9,7 +9,7 @@ from service.fit import Fit
from eos.saveddata.cargo import Cargo as es_Cargo
from eos.saveddata.fighter import Fighter as es_Fighter
from service.settings import ContextMenuSettings
import gui.fitCommands as cmd
class ChangeAmount(ContextMenu):
def __init__(self):
@@ -45,7 +45,8 @@ class ChangeAmount(ContextMenu):
cleanInput = re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip())
if isinstance(thing, es_Cargo):
sFit.addCargo(fitID, thing.item.ID, int(float(cleanInput)), replace=True)
self.mainFrame.command.Submit(cmd.GuiAddCargoCommand(fitID, thing.item.ID, int(float(cleanInput)), replace=True))
return # no need for post event here
elif isinstance(thing, es_Fit):
sFit.changeAmount(fitID, thing, int(float(cleanInput)))
elif isinstance(thing, es_Fighter):

View File

@@ -4,7 +4,7 @@ import gui.globalEvents as GE
import wx
from service.settings import ContextMenuSettings
from service.fit import Fit
import gui.fitCommands as cmd
class CargoAmmo(ContextMenu):
def __init__(self):
@@ -28,13 +28,10 @@ class CargoAmmo(ContextMenu):
return "Add {0} to Cargo (x1000)".format(itmContext)
def activate(self, fullContext, selection, i):
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
typeID = int(selection[0].ID)
sFit.addCargo(fitID, typeID, 1000)
self.mainFrame.command.Submit(cmd.GuiAddCargoCommand(fitID, typeID, 1000))
self.mainFrame.additionsPane.select("Cargo")
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
CargoAmmo.register()

View File

@@ -45,7 +45,8 @@ class ItemRemove(ContextMenu):
elif srcContext == "fighterItem":
sFit.removeFighter(fitID, fit.fighters.index(selection[0]))
elif srcContext == "implantItem":
sFit.removeImplant(fitID, fit.implants.index(selection[0]))
self.mainFrame.command.Submit(cmd.GuiRemoveImplantCommand(fitID, fit.implants.index(selection[0])))
return # the command takes care of the PostEvent
elif srcContext == "boosterItem":
sFit.removeBooster(fitID, fit.boosters.index(selection[0]))
elif srcContext == "cargoItem":

View File

@@ -15,7 +15,7 @@ from eos.saveddata.drone import Drone
from eos.saveddata.fighter import Fighter
from eos.saveddata.implant import Implant
from eos.saveddata.cargo import Cargo
import gui.fitCommands as cmd
class MetaSwap(ContextMenu):
def __init__(self):
@@ -183,16 +183,18 @@ class MetaSwap(ContextMenu):
elif isinstance(selected_item, Implant):
for idx, implant_stack in enumerate(fit.implants):
if implant_stack is selected_item:
sFit.removeImplant(fitID, idx, False)
sFit.addImplant(fitID, item.ID, True)
break
self.mainFrame.command.Submit(cmd.GuiRemoveImplantCommand(fitID, idx))
self.mainFrame.command.Submit(cmd.GuiAddImplantCommand(fitID, item.ID))
return
elif isinstance(selected_item, Cargo):
for idx, cargo_stack in enumerate(fit.cargo):
if cargo_stack is selected_item:
# todo: make a command to change varieance of all items, or maybe per item type, which would
# utilize the two fitting commands that we need to remove then add?
sFit.removeCargo(fitID, idx)
sFit.addCargo(fitID, item.ID, cargo_stack.amount, True)
break
self.mainFrame.command.Submit(cmd.GuiAddCargoCommand(fitID, item.ID, cargo_stack.amount, True))
return # don't need the post event
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))

View File

@@ -6,4 +6,6 @@ from .moduleSwapOrClone import GuiModuleSwapOrCloneCommand
from .guiRemoveCargo import GuiRemoveCargoCommand
from .guiAddCargo import GuiAddCargoCommand
from .fitAddCargo import FitAddCargoCommand
from .fitRemoveCargo import FitRemoveCargoCommand
from .fitRemoveCargo import FitRemoveCargoCommand
from .guiRemoveImplant import GuiRemoveImplantCommand
from .guiAddImplant import GuiAddImplantCommand

View File

@@ -0,0 +1,41 @@
import wx
from service.fit import Fit
import gui.mainFrame
from gui import globalEvents as GE
#from .helpers import ModuleInfoCache
from eos.saveddata.module import Module, State
import eos.db
from logbook import Logger
pyfalog = Logger(__name__)
from eos.saveddata.implant import Implant
class FitAddImplantCommand(wx.Command):
""""
from sFit.addImplant
"""
def __init__(self, fitID, itemID):
wx.Command.__init__(self, True, "Cargo add")
self.fitID = fitID
self.itemID = itemID
def Do(self):
pyfalog.debug("Adding implant to fit ({0}) for item ID: {1}", self.fitID, self.itemID)
fit = eos.db.getFit(self.fitID)
item = eos.db.getItem(self.itemID, eager="attributes")
try:
implant = Implant(item)
except ValueError:
pyfalog.warning("Invalid item: {0}", self.itemID)
return False
fit.implants.append(implant)
self.new_index = fit.implants.index(implant)
return True
def Undo(self):
from .fitRemoveImplant import FitRemoveImplantCommand # Avoid circular import
cmd = FitRemoveImplantCommand(self.fitID, self.new_index)
cmd.Do()
return True

View File

@@ -0,0 +1,38 @@
import wx
from service.fit import Fit
import gui.mainFrame
from gui import globalEvents as GE
#from .helpers import ModuleInfoCache
from eos.saveddata.module import Module, State
import eos.db
from logbook import Logger
pyfalog = Logger(__name__)
class FitRemoveImplantCommand(wx.Command):
""""
Fitting command that sets the amount for an item within the cargo.
from sFit.removeImplant
"""
def __init__(self, fitID, position):
wx.Command.__init__(self, True, "Implant remove")
self.fitID = fitID
self.position = position
self.old_implant = None
def Do(self):
pyfalog.debug("Removing implant from position ({0}) for fit ID: {1}", self.position, self.fitID)
fit = eos.db.getFit(self.fitID)
implant = fit.implants[self.position]
self.old_implant = implant.itemID
fit.implants.remove(implant)
return True
def Undo(self):
from .fitAddImplant import FitAddImplantCommand # Avoid circular import
cmd = FitAddImplantCommand(self.fitID, self.old_implant)
cmd.Do()
return True

View File

@@ -6,14 +6,14 @@ from gui import globalEvents as GE
from .fitAddCargo import FitAddCargoCommand
class GuiAddCargoCommand(wx.Command):
def __init__(self, fitID, itemID):
def __init__(self, fitID, itemID, amount=1, replace=False):
wx.Command.__init__(self, True, "Cargo Add")
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.sFit = Fit.getInstance()
self.internal_history = wx.CommandProcessor()
self.fitID = fitID
# can set his up no to not have to set variables on our object
self.cmd = FitAddCargoCommand(fitID, itemID)
self.cmd = FitAddCargoCommand(fitID, itemID, amount, replace)
def Do(self):
if self.internal_history.Submit(self.cmd):

View File

@@ -0,0 +1,29 @@
import wx
from service.fit import Fit
import gui.mainFrame
from gui import globalEvents as GE
from .fitAddImplant import FitAddImplantCommand
class GuiAddImplantCommand(wx.Command):
def __init__(self, fitID, itemID):
wx.Command.__init__(self, True, "Implant Add")
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.sFit = Fit.getInstance()
self.internal_history = wx.CommandProcessor()
self.fitID = fitID
# can set his up no to not have to set variables on our object
self.cmd = FitAddImplantCommand(fitID, itemID)
def Do(self):
if self.internal_history.Submit(self.cmd):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True
return False
def Undo(self):
for x in self.internal_history.Commands:
self.internal_history.Undo()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True

View File

@@ -0,0 +1,29 @@
import wx
from service.fit import Fit
import gui.mainFrame
from gui import globalEvents as GE
from .fitRemoveImplant import FitRemoveImplantCommand
class GuiRemoveImplantCommand(wx.Command):
def __init__(self, fitID, position):
wx.Command.__init__(self, True, "")
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.sFit = Fit.getInstance()
self.internal_history = wx.CommandProcessor()
self.fitID = fitID
# can set his up no to not have to set variables on our object
self.cmd = FitRemoveImplantCommand(fitID, position)
def Do(self):
if self.internal_history.Submit(self.cmd):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True
return False
def Undo(self):
for x in self.internal_history.Commands:
self.internal_history.Undo()
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True

View File

@@ -319,6 +319,7 @@ class Fit(object):
fit.notes))
return fits
@deprecated
def addImplant(self, fitID, itemID, recalc=True):
pyfalog.debug("Adding implant to fit ({0}) for item ID: {1}", fitID, itemID)
if fitID is None:
@@ -337,6 +338,7 @@ class Fit(object):
self.recalc(fit)
return True
@deprecated
def removeImplant(self, fitID, position, recalc=True):
pyfalog.debug("Removing implant from position ({0}) for fit ID: {1}", position, fitID)
if fitID is None: