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