diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py
index 85b763242..6e008324e 100644
--- a/gui/builtinContextMenus/moduleAmmoPicker.py
+++ b/gui/builtinContextMenus/moduleAmmoPicker.py
@@ -11,10 +11,13 @@ class ModuleAmmoPicker(ContextMenu):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, context, selection):
- if self.mainFrame.getActiveFit() is None or context != "module":
+ if self.mainFrame.getActiveFit() is None or context not in ("module", "projectedModule"):
return False
- modules = self.mainFrame.getFittingView().getSelectedMods()
+ if context == "module":
+ modules = self.mainFrame.getFittingView().getSelectedMods()
+ else:
+ modules = (selection[0],)
validCharges = None
for mod in modules:
currCharges = mod.getValidCharges()
@@ -23,6 +26,7 @@ class ModuleAmmoPicker(ContextMenu):
validCharges = currCharges
+ self.modules = modules
self.charges = list(validCharges)
self.module = mod
return len(self.charges) > 0
@@ -41,7 +45,7 @@ class ModuleAmmoPicker(ContextMenu):
d = charge.getAttribute("%sDamage" % type)
if d > 0:
damage += d
-
+
return (-range - falloff, charge.name.rsplit()[-2:], damage, charge.name)
MISSILE_ORDER = ["em", "thermal", "kinetic", "explosive"]
@@ -74,6 +78,7 @@ class ModuleAmmoPicker(ContextMenu):
m.Enable(id, False)
def getSubMenu(self, context, selection, menu, i):
+ self.context = context
menu.Bind(wx.EVT_MENU, self.handleAmmoSwitch)
m = wx.Menu()
m.Bind(wx.EVT_MENU, self.handleAmmoSwitch)
@@ -167,8 +172,8 @@ class ModuleAmmoPicker(ContextMenu):
sFit = service.Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
- modules = map(lambda mod: mod.position, self.mainFrame.getFittingView().getSelectedMods())
- sFit.setAmmo(fitID, charge.ID if charge is not None else None, modules)
+
+ sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules)
wx.PostEvent(self.mainFrame, gui.fittingView.FitChanged(fitID=fitID))
ModuleAmmoPicker.register()
diff --git a/gui/builtinViewColumns/__init__.py b/gui/builtinViewColumns/__init__.py
index a38c54ec2..46dac14d8 100644
--- a/gui/builtinViewColumns/__init__.py
+++ b/gui/builtinViewColumns/__init__.py
@@ -1,4 +1,4 @@
__all__ = ["moduleState", "moduleNameOrSlot", "attributeDisplay", "maxRange",
"name", "droneDps", "droneNameAmount", "droneCheckbox", "moduleAmmo",
"capacitorUse", "activityCheckbox", "moduleAmmoIcon", "modulePrice",
- "projectedName", "projectedState"]
+ "projectedName", "projectedState", "projectedAmmoIcon", "projectedAmmo"]
diff --git a/gui/builtinViewColumns/projectedAmmo.py b/gui/builtinViewColumns/projectedAmmo.py
new file mode 100755
index 000000000..b36541d1f
--- /dev/null
+++ b/gui/builtinViewColumns/projectedAmmo.py
@@ -0,0 +1,43 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of pyfa.
+#
+# pyfa is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# pyfa is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with pyfa. If not, see .
+#===============================================================================
+
+from gui.viewColumn import ViewColumn
+import gui.builtinViewColumns.moduleAmmo
+from eos.types import Module
+
+class ProjectedAmmo(ViewColumn):
+ name = "Projected Ammo"
+ def __init__(self, fittingView, params):
+ ViewColumn.__init__(self, fittingView)
+ self.columnText = "Ammo"
+ self.slave = gui.builtinViewColumns.moduleAmmo.ModuleAmmo(fittingView, params)
+
+ def getText(self, stuff):
+ if isinstance(stuff, Module):
+ return self.slave.getText(stuff)
+ else:
+ return ""
+
+ def getImageId(self, thing):
+ if isinstance(thing, Module):
+ return self.slave.getImageId(thing)
+ else:
+ return -1
+
+ProjectedAmmo.register()
diff --git a/gui/builtinViewColumns/projectedAmmoIcon.py b/gui/builtinViewColumns/projectedAmmoIcon.py
new file mode 100755
index 000000000..9785901bb
--- /dev/null
+++ b/gui/builtinViewColumns/projectedAmmoIcon.py
@@ -0,0 +1,44 @@
+#===============================================================================
+# Copyright (C) 2010 Diego Duclos
+#
+# This file is part of pyfa.
+#
+# pyfa is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# pyfa is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with pyfa. If not, see .
+#===============================================================================
+
+from gui.viewColumn import ViewColumn
+import gui.builtinViewColumns.moduleAmmoIcon
+from eos.types import Module
+
+class ProjectedAmmoIcon(ViewColumn):
+ name = "Projected Ammo Icon"
+ def __init__(self, fittingView, params):
+ ViewColumn.__init__(self, fittingView)
+ self.columnText = ""
+ self.size = 20
+ self.slave = gui.builtinViewColumns.moduleAmmoIcon.ModuleAmmoIcon(fittingView, params)
+
+ def getText(self, stuff):
+ if isinstance(stuff, Module):
+ return self.slave.getText(stuff)
+ else:
+ return ""
+
+ def getImageId(self, thing):
+ if isinstance(thing, Module):
+ return self.slave.getImageId(thing)
+ else:
+ return -1
+
+ProjectedAmmoIcon.register()
diff --git a/gui/fittingView.py b/gui/fittingView.py
index 4556df0a7..90f623884 100644
--- a/gui/fittingView.py
+++ b/gui/fittingView.py
@@ -122,7 +122,7 @@ class FittingView(d.Display):
modules = []
sel = self.GetFirstSelected()
while sel != -1:
- modules.append(self.mods[self.GetItemData(sel)].position)
+ modules.append(self.mods[self.GetItemData(sel)])
sel = self.GetNextSelected(sel)
cFit.setAmmo(fitID, itemID, modules)
diff --git a/gui/projectedView.py b/gui/projectedView.py
index 56b33877c..ca99d0de0 100644
--- a/gui/projectedView.py
+++ b/gui/projectedView.py
@@ -27,8 +27,10 @@ from gui.contextMenu import ContextMenu
import eos.types
class ProjectedView(d.Display):
- DEFAULT_COLS = ["Projected State",
- "Projected Name"]
+ DEFAULT_COLS = ["Projected Ammo Icon",
+ "Projected State",
+ "Projected Name",
+ "Projected Ammo"]
def __init__(self, parent):
d.Display.__init__(self, parent)
diff --git a/service/fit.py b/service/fit.py
index 82eb990eb..ff3f96187 100644
--- a/service/fit.py
+++ b/service/fit.py
@@ -366,10 +366,9 @@ class Fit(object):
fit = eos.db.getFit(fitID)
ammo = eos.db.getItem(ammoID)
- for pos in modules:
- mod = fit.modules[pos]
+ for mod in modules:
if mod.isValidCharge(ammo):
- fit.modules[pos].charge = ammo
+ mod.charge = ammo
fit.clear()
fit.calculateModifiedAttributes()