Files
pyfa/gui/builtinContextMenus/moduleAmmoPicker.py
2010-10-19 10:31:52 +02:00

64 lines
2.0 KiB
Python
Executable File

from gui.contextMenu import ContextMenu
import gui.mainFrame
import service
import gui.fittingView
import wx
from gui import bitmapLoader
class ModuleAmmoPicker(ContextMenu):
def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, context, selection):
if self.mainFrame.getActiveFit() is None or context != "module":
return False
modules = self.mainFrame.getFittingView().getSelectedMods()
validCharges = None
for mod in modules:
currCharges = mod.getValidCharges()
if validCharges is not None and validCharges != currCharges:
return False
validCharges = currCharges
self.charges = validCharges
return True
def getText(self, context, selection):
return "Ammo"
def activate(self, context, selection, i):
pass
def getSubMenu(self, context, selection, menu, i):
menu.Bind(wx.EVT_MENU, self.handleAmmoSwitch)
m = wx.Menu()
self.chargeIds = {}
for charge in self.charges:
id = wx.NewId()
self.chargeIds[id] = charge
item = wx.MenuItem(m, id, charge.name)
item.charge = charge
if charge.icon is not None:
bitmap = bitmapLoader.getBitmap(charge.icon.iconFile, "pack")
if bitmap is not None:
item.SetBitmap(bitmap)
m.AppendItem(item)
return m
def handleAmmoSwitch(self, event):
charge = self.chargeIds.get(event.Id)
if charge is None:
event.Skip()
return
sFit = service.Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
modules = map(lambda mod: mod.position, self.mainFrame.getFittingView().getSelectedMods())
sFit.setAmmo(fitID, charge.ID, modules)
wx.PostEvent(self.mainFrame, gui.fittingView.FitChanged(fitID=fitID))
ModuleAmmoPicker.register()