Show spoolup option for projected modules, and set spoolup via command processor for all cases

This commit is contained in:
DarkPhoenix
2019-04-14 03:59:59 +03:00
parent 9a6255cb29
commit 88acec4241
4 changed files with 77 additions and 54 deletions

View File

@@ -2,12 +2,11 @@
import wx
import eos.config
import gui.fitCommands as cmd
import gui.mainFrame
from eos.utils.spoolSupport import SpoolType, SpoolOptions
from gui import globalEvents as GE
from gui.contextMenu import ContextMenu
from service.settings import ContextMenuSettings
from service.fit import Fit
class SpoolUp(ContextMenu):
@@ -21,10 +20,11 @@ class SpoolUp(ContextMenu):
if not self.settings.get('spoolup'):
return False
if srcContext not in ("fittingModule") or self.mainFrame.getActiveFit() is None:
if srcContext not in ('fittingModule', 'projectedModule') or self.mainFrame.getActiveFit() is None:
return False
self.mod = selection[0]
self.context = srcContext
return self.mod.item.group.name in ("Precursor Weapon", "Mutadaptive Remote Armor Repairer")
@@ -68,15 +68,19 @@ class SpoolUp(ContextMenu):
def handleSpoolChange(self, event):
if event.Id == self.resetId:
self.mod.spoolType = None
self.mod.spoolAmount = None
spoolType = None
spoolAmount = None
elif event.Id in self.cycleMap:
cycles = self.cycleMap[event.Id]
self.mod.spoolType = SpoolType.CYCLES
self.mod.spoolAmount = cycles
fitID = self.mainFrame.getActiveFit()
Fit.getInstance().recalc(fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
spoolType = SpoolType.CYCLES
spoolAmount = self.cycleMap[event.Id]
else:
return
self.mainFrame.command.Submit(cmd.GuiSetSpoolup(
fitID=self.mainFrame.getActiveFit(),
position=self.mod.modPosition,
spoolType=spoolType,
spoolAmount=spoolAmount,
context=self.context))
SpoolUp.register()

View File

@@ -0,0 +1,48 @@
import wx
from logbook import Logger
import eos.db
from service.fit import Fit
pyfalog = Logger(__name__)
class FitChangeModuleSpoolupCommand(wx.Command):
def __init__(self, fitID, position, spoolType, spoolAmount, projected=False):
wx.Command.__init__(self, True, 'Change Module Spoolup')
self.fitID = fitID
self.position = position
self.spoolType = spoolType
self.spoolAmount = spoolAmount
self.projected = projected
self.savedSpoolType = None
self.savedSpoolAmount = None
def Do(self):
pyfalog.debug('Doing change of module spoolup at position {} to {} type {} amount on fit {}'.format(self.position, self.spoolType, self.spoolAmount, self.fitID))
fit = Fit.getInstance().getFit(self.fitID)
container = fit.modules if not self.projected else fit.projectedModules
mod = container[self.position]
if mod.isEmpty:
pyfalog.warning('Attempt to change spoolup for empty module')
return False
self.savedSpoolType = mod.spoolType
self.savedSpoolAmount = mod.spoolAmount
if self.spoolType == self.savedSpoolType and self.spoolAmount == self.savedSpoolAmount:
return False
mod.spoolType = self.spoolType
mod.spoolAmount = self.spoolAmount
eos.db.commit()
return True
def Undo(self):
pyfalog.debug('Undoing change of module spoolup at position {} to {} type {} amount on fit {}'.format(self.position, self.spoolType, self.spoolAmount, self.fitID))
cmd = FitChangeModuleSpoolupCommand(
fitID=self.fitID,
position=self.position,
spoolType=self.savedSpoolType,
spoolAmount=self.savedSpoolAmount,
projected=self.projected)
return cmd.Do()

View File

@@ -1,37 +0,0 @@
import wx
import eos.db
from logbook import Logger
from eos.saveddata.booster import Booster
pyfalog = Logger(__name__)
class FitSetSpoolupCommand(wx.Command):
def __init__(self, fitID, position, spoolType, spoolAmount):
wx.Command.__init__(self, True)
self.fitID = fitID
self.position = position
self.spoolType = spoolType
self.spoolAmount = spoolAmount
self.projected = False # todo: get this to work with projected modules? Is that a thing?
self.cache = None
def Do(self):
return self.__set(self.spoolType, self.spoolAmount)
def Undo(self):
if self.cache:
self.__set(*self.cache)
return True
def __set(self, type, amount):
fit = eos.db.getFit(self.fitID)
source = fit.modules if not self.projected else fit.projectedModules
mod = source[self.position]
self.cache = mod.spoolType, mod.spoolAmount
mod.spoolType = type
mod.spoolAmount = amount
eos.db.commit()
return True

View File

@@ -3,22 +3,30 @@ from service.fit import Fit
import gui.mainFrame
from gui import globalEvents as GE
from .calc.fitSetSpoolup import FitSetSpoolupCommand
from .calc.fitChangeModuleSpoolup import FitChangeModuleSpoolupCommand
class GuiSetSpoolup(wx.Command):
def __init__(self, fitID, module, spoolupType, spoolupAmount):
def __init__(self, fitID, position, spoolType, spoolAmount, context):
wx.Command.__init__(self, True, "Booster Add")
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.sFit = Fit.getInstance()
self.internal_history = wx.CommandProcessor()
self.fitID = fitID
self.position = module.modPosition
self.spoolType = spoolupType
self.spoolupAmount = spoolupAmount
self.position = position
self.spoolType = spoolType
self.spoolupAmount = spoolAmount
self.context = context
def Do(self):
if self.internal_history.Submit(FitSetSpoolupCommand(self.fitID, self.position, self.spoolType, self.spoolupAmount)):
if self.internal_history.Submit(FitChangeModuleSpoolupCommand(
fitID=self.fitID,
position=self.position,
spoolType=self.spoolType,
spoolAmount=self.spoolupAmount,
projected=True if self.context == 'projectedModule' else False
)):
self.sFit.recalc(self.fitID)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True