From 7e4d8a3074820e139f727b7d0320e0b6b268605c Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 23 Oct 2021 04:05:20 +0300 Subject: [PATCH] Allow to change multiple cargo items at once --- gui/builtinContextMenus/itemAmountChange.py | 20 +++++++++++++------- gui/fitCommands/__init__.py | 2 +- gui/fitCommands/gui/cargo/changeAmount.py | 17 +++++++++++------ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/gui/builtinContextMenus/itemAmountChange.py b/gui/builtinContextMenus/itemAmountChange.py index 5e8df51ba..676cc2c7a 100644 --- a/gui/builtinContextMenus/itemAmountChange.py +++ b/gui/builtinContextMenus/itemAmountChange.py @@ -8,7 +8,7 @@ from eos.saveddata.cargo import Cargo as es_Cargo from eos.saveddata.drone import Drone from eos.saveddata.fighter import Fighter as es_Fighter from eos.saveddata.fit import Fit as es_Fit -from gui.contextMenu import ContextMenuSingle +from gui.contextMenu import ContextMenuCombined from service.fit import Fit # noinspection PyPackageRequirements @@ -16,12 +16,12 @@ from service.fit import Fit _t = wx.GetTranslation -class ChangeItemAmount(ContextMenuSingle): +class ChangeItemAmount(ContextMenuCombined): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() - def display(self, callingWindow, srcContext, mainItem): + def display(self, callingWindow, srcContext, mainItem, selection): if srcContext not in ("droneItem", "projectedDrone", "cargoItem", "projectedFit", "fighterItem", "projectedFighter"): return False @@ -30,10 +30,12 @@ class ChangeItemAmount(ContextMenuSingle): return True - def getText(self, callingWindow, itmContext, mainItem): + def getText(self, callingWindow, itmContext, mainItem, selection): + if isinstance(mainItem, es_Cargo): + return _t("Change Selection Quantity") return _t("Change {0} Quantity").format(itmContext) - def activate(self, callingWindow, fullContext, mainItem, i): + def activate(self, callingWindow, fullContext, mainItem, selection, i): fitID = self.mainFrame.getActiveFit() srcContext = fullContext[0] if isinstance(mainItem, es_Fit): @@ -56,8 +58,12 @@ class ChangeItemAmount(ContextMenuSingle): cleanInput = int(float(re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip()))) if isinstance(mainItem, es_Cargo): - self.mainFrame.command.Submit(cmd.GuiChangeCargoAmountCommand( - fitID=fitID, itemID=mainItem.itemID, amount=cleanInput)) + itemIDs = [] + for cargo in selection: + if cargo in fit.cargo: + itemIDs.append(cargo.itemID) + self.mainFrame.command.Submit(cmd.GuiChangeCargosAmountCommand( + fitID=fitID, itemIDs=itemIDs, amount=cleanInput)) elif isinstance(mainItem, Drone): if srcContext == "projectedDrone": self.mainFrame.command.Submit(cmd.GuiChangeProjectedDroneAmountCommand( diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index ecef17781..6e8382ae8 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -5,7 +5,7 @@ from .gui.booster.remove import GuiRemoveBoostersCommand from .gui.booster.sideEffectToggleState import GuiToggleBoosterSideEffectStateCommand from .gui.booster.toggleStates import GuiToggleBoosterStatesCommand from .gui.cargo.add import GuiAddCargoCommand -from .gui.cargo.changeAmount import GuiChangeCargoAmountCommand +from .gui.cargo.changeAmount import GuiChangeCargosAmountCommand from .gui.cargo.changeMetas import GuiChangeCargoMetasCommand from .gui.cargo.imprt import GuiImportCargosCommand from .gui.cargo.remove import GuiRemoveCargosCommand diff --git a/gui/fitCommands/gui/cargo/changeAmount.py b/gui/fitCommands/gui/cargo/changeAmount.py index f8f47ee4f..5319967ad 100644 --- a/gui/fitCommands/gui/cargo/changeAmount.py +++ b/gui/fitCommands/gui/cargo/changeAmount.py @@ -10,21 +10,26 @@ from gui.fitCommands.calc.cargo.remove import CalcRemoveCargoCommand from gui.fitCommands.helpers import CargoInfo, InternalCommandHistory -class GuiChangeCargoAmountCommand(wx.Command): +class GuiChangeCargosAmountCommand(wx.Command): - def __init__(self, fitID, itemID, amount): + def __init__(self, fitID, itemIDs, amount): wx.Command.__init__(self, True, 'Change Cargo Amount') self.internalHistory = InternalCommandHistory() self.fitID = fitID - self.itemID = itemID + self.itemIDs = itemIDs self.amount = amount def Do(self): + cmds = [] if self.amount > 0: - cmd = CalcChangeCargoAmountCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=self.itemID, amount=self.amount)) + for itemID in self.itemIDs: + cmd = CalcChangeCargoAmountCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=itemID, amount=self.amount)) + cmds.append(cmd) else: - cmd = CalcRemoveCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=self.itemID, amount=math.inf)) - success = self.internalHistory.submit(cmd) + for itemID in self.itemIDs: + cmd = CalcRemoveCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=itemID, amount=math.inf)) + cmds.append(cmd) + success = self.internalHistory.submitBatch(*cmds) eos.db.commit() wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitChanged(fitIDs=(self.fitID,))) return success