Skip to content

Commit ce6fd4b

Browse files
authored
Merge pull request #2673 from NicolasKion/master
Add "Fill cargo" feature to item context menu
2 parents 126105c + 6e4ca64 commit ce6fd4b

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

gui/builtinContextMenus/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from gui.builtinContextMenus import itemFill
3737
from gui.builtinContextMenus import droneAddStack
3838
from gui.builtinContextMenus import cargoAdd
39+
from gui.builtinContextMenus import cargoFill
3940
from gui.builtinContextMenus import cargoAddAmmo
4041
from gui.builtinContextMenus import itemProject
4142
from gui.builtinContextMenus import ammoToDmgPattern
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import wx
2+
3+
import gui.fitCommands as cmd
4+
import gui.mainFrame
5+
from gui.contextMenu import ContextMenuSingle
6+
from service.fit import Fit
7+
from eos.saveddata.cargo import Cargo
8+
9+
_t = wx.GetTranslation
10+
11+
12+
class FillCargoWithItem(ContextMenuSingle):
13+
def __init__(self):
14+
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
15+
16+
def display(self, callingWindow, srcContext, mainItem):
17+
if srcContext not in ("marketItemGroup", "marketItemMisc", "cargoItem"):
18+
return False
19+
20+
if mainItem is None:
21+
return False
22+
23+
if self.mainFrame.getActiveFit() is None:
24+
return False
25+
26+
if srcContext in ("marketItemGroup", "marketItemMisc"):
27+
if not (mainItem.isCharge or mainItem.isCommodity):
28+
return False
29+
30+
return True
31+
32+
def getText(self, callingWindow, itmContext, mainItem):
33+
return _t("Fill Cargo With {0}").format(itmContext)
34+
35+
def activate(self, callingWindow, fullContext, mainItem, i):
36+
fitID = self.mainFrame.getActiveFit()
37+
fit = Fit.getInstance().getFit(fitID)
38+
39+
if isinstance(mainItem, Cargo):
40+
itemVolume = mainItem.item.attributes['volume'].value
41+
itemID = mainItem.itemID
42+
else:
43+
itemVolume = mainItem.attributes['volume'].value
44+
itemID = int(mainItem.ID)
45+
46+
if itemVolume is None or itemVolume <= 0:
47+
return
48+
49+
# Calculate how many items can fit in the cargo
50+
cargoCapacity = fit.ship.getModifiedItemAttr("capacity")
51+
currentCargoVolume = fit.cargoBayUsed
52+
availableVolume = cargoCapacity - currentCargoVolume
53+
54+
if availableVolume <= 0:
55+
return
56+
57+
# Calculate maximum amount that can fit
58+
maxAmount = int(availableVolume / itemVolume)
59+
if maxAmount <= 0:
60+
return
61+
62+
# Add the items to cargo
63+
command = cmd.GuiAddCargoCommand(fitID=fitID, itemID=itemID, amount=maxAmount)
64+
if self.mainFrame.command.Submit(command):
65+
self.mainFrame.additionsPane.select("Cargo", focus=False)
66+
67+
68+
FillCargoWithItem.register()

0 commit comments

Comments
 (0)