64 lines
2.0 KiB
Python
Executable File
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()
|