From 1ec7e795df541993a9cebe38fb6dda6ae413d6f6 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Sat, 30 Oct 2010 11:30:28 +0200 Subject: [PATCH] Add Ammo support for projected effects view --- gui/builtinContextMenus/moduleAmmoPicker.py | 15 ++++--- gui/builtinViewColumns/__init__.py | 2 +- gui/builtinViewColumns/projectedAmmo.py | 43 ++++++++++++++++++++ gui/builtinViewColumns/projectedAmmoIcon.py | 44 +++++++++++++++++++++ gui/fittingView.py | 2 +- gui/projectedView.py | 6 ++- service/fit.py | 5 +-- 7 files changed, 105 insertions(+), 12 deletions(-) create mode 100755 gui/builtinViewColumns/projectedAmmo.py create mode 100755 gui/builtinViewColumns/projectedAmmoIcon.py 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()