From 88acec4241d2d8b57f7e04ea2f524a26aa292b3c Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sun, 14 Apr 2019 03:59:59 +0300 Subject: [PATCH] Show spoolup option for projected modules, and set spoolup via command processor for all cases --- gui/builtinContextMenus/spoolUp.py | 26 +++++----- .../calc/fitChangeModuleSpoolup.py | 48 +++++++++++++++++++ gui/fitCommands/calc/fitSetSpoolup.py | 37 -------------- gui/fitCommands/guiSetSpoolup.py | 20 +++++--- 4 files changed, 77 insertions(+), 54 deletions(-) create mode 100644 gui/fitCommands/calc/fitChangeModuleSpoolup.py delete mode 100644 gui/fitCommands/calc/fitSetSpoolup.py diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index a75568802..567e909eb 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -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() diff --git a/gui/fitCommands/calc/fitChangeModuleSpoolup.py b/gui/fitCommands/calc/fitChangeModuleSpoolup.py new file mode 100644 index 000000000..216fcfa92 --- /dev/null +++ b/gui/fitCommands/calc/fitChangeModuleSpoolup.py @@ -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() diff --git a/gui/fitCommands/calc/fitSetSpoolup.py b/gui/fitCommands/calc/fitSetSpoolup.py deleted file mode 100644 index 9274d94bc..000000000 --- a/gui/fitCommands/calc/fitSetSpoolup.py +++ /dev/null @@ -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 diff --git a/gui/fitCommands/guiSetSpoolup.py b/gui/fitCommands/guiSetSpoolup.py index 60f0c6f1e..7d1879fee 100644 --- a/gui/fitCommands/guiSetSpoolup.py +++ b/gui/fitCommands/guiSetSpoolup.py @@ -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