From 46c6381cd90b7042e66e14a13766181e7e16b078 Mon Sep 17 00:00:00 2001 From: Nicolas Kion Date: Sun, 11 May 2025 19:43:31 +0200 Subject: [PATCH 1/2] Add "Fill cargo" menu item --- gui/builtinContextMenus/__init__.py | 1 + gui/builtinContextMenus/cargoFill.py | 62 ++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 gui/builtinContextMenus/cargoFill.py diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 787ff25dd..a1a26e591 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -36,6 +36,7 @@ from gui.builtinContextMenus import skillAffectors from gui.builtinContextMenus import itemFill from gui.builtinContextMenus import droneAddStack from gui.builtinContextMenus import cargoAdd +from gui.builtinContextMenus import cargoFill from gui.builtinContextMenus import cargoAddAmmo from gui.builtinContextMenus import itemProject from gui.builtinContextMenus import ammoToDmgPattern diff --git a/gui/builtinContextMenus/cargoFill.py b/gui/builtinContextMenus/cargoFill.py new file mode 100644 index 000000000..03a1b1fae --- /dev/null +++ b/gui/builtinContextMenus/cargoFill.py @@ -0,0 +1,62 @@ +import wx + +import gui.fitCommands as cmd +import gui.mainFrame +from gui.contextMenu import ContextMenuSingle +from service.fit import Fit + +_t = wx.GetTranslation + + +class FillCargoWithItem(ContextMenuSingle): + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + def display(self, callingWindow, srcContext, mainItem): + if srcContext not in ("marketItemGroup", "marketItemMisc"): + return False + + if mainItem is None: + return False + + if self.mainFrame.getActiveFit() is None: + return False + + # Only allow items that can be stored in cargo + if not (mainItem.isCharge or mainItem.isCommodity): + return False + + return True + + def getText(self, callingWindow, itmContext, mainItem): + return _t("Fill Cargo With {0}").format(itmContext) + + def activate(self, callingWindow, fullContext, mainItem, i): + fitID = self.mainFrame.getActiveFit() + fit = Fit.getInstance().getFit(fitID) + + # Get the item's volume + itemVolume = mainItem.attributes['volume'].value + if itemVolume is None or itemVolume <= 0: + return + + # Calculate how many items can fit in the cargo + cargoCapacity = fit.ship.getModifiedItemAttr("capacity") + currentCargoVolume = fit.cargoBayUsed + availableVolume = cargoCapacity - currentCargoVolume + + if availableVolume <= 0: + return + + # Calculate maximum amount that can fit + maxAmount = int(availableVolume / itemVolume) + if maxAmount <= 0: + return + + # Add the items to cargo + command = cmd.GuiAddCargoCommand(fitID=fitID, itemID=int(mainItem.ID), amount=maxAmount) + if self.mainFrame.command.Submit(command): + self.mainFrame.additionsPane.select("Cargo", focus=False) + + +FillCargoWithItem.register() \ No newline at end of file From 6e4ca641d74461fbbff691ca9e29f4dc9fe8994e Mon Sep 17 00:00:00 2001 From: Nicolas Kion Date: Sun, 11 May 2025 19:53:57 +0200 Subject: [PATCH 2/2] Allow usage of existing item to fill cargo --- gui/builtinContextMenus/cargoFill.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gui/builtinContextMenus/cargoFill.py b/gui/builtinContextMenus/cargoFill.py index 03a1b1fae..e75b38013 100644 --- a/gui/builtinContextMenus/cargoFill.py +++ b/gui/builtinContextMenus/cargoFill.py @@ -4,6 +4,7 @@ import gui.fitCommands as cmd import gui.mainFrame from gui.contextMenu import ContextMenuSingle from service.fit import Fit +from eos.saveddata.cargo import Cargo _t = wx.GetTranslation @@ -13,7 +14,7 @@ class FillCargoWithItem(ContextMenuSingle): self.mainFrame = gui.mainFrame.MainFrame.getInstance() def display(self, callingWindow, srcContext, mainItem): - if srcContext not in ("marketItemGroup", "marketItemMisc"): + if srcContext not in ("marketItemGroup", "marketItemMisc", "cargoItem"): return False if mainItem is None: @@ -22,9 +23,9 @@ class FillCargoWithItem(ContextMenuSingle): if self.mainFrame.getActiveFit() is None: return False - # Only allow items that can be stored in cargo - if not (mainItem.isCharge or mainItem.isCommodity): - return False + if srcContext in ("marketItemGroup", "marketItemMisc"): + if not (mainItem.isCharge or mainItem.isCommodity): + return False return True @@ -35,8 +36,13 @@ class FillCargoWithItem(ContextMenuSingle): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) - # Get the item's volume - itemVolume = mainItem.attributes['volume'].value + if isinstance(mainItem, Cargo): + itemVolume = mainItem.item.attributes['volume'].value + itemID = mainItem.itemID + else: + itemVolume = mainItem.attributes['volume'].value + itemID = int(mainItem.ID) + if itemVolume is None or itemVolume <= 0: return @@ -54,7 +60,7 @@ class FillCargoWithItem(ContextMenuSingle): return # Add the items to cargo - command = cmd.GuiAddCargoCommand(fitID=fitID, itemID=int(mainItem.ID), amount=maxAmount) + command = cmd.GuiAddCargoCommand(fitID=fitID, itemID=itemID, amount=maxAmount) if self.mainFrame.command.Submit(command): self.mainFrame.additionsPane.select("Cargo", focus=False)