diff --git a/eos/saveddata/fighterAbility.py b/eos/saveddata/fighterAbility.py index 47864f056..3ed4536a7 100644 --- a/eos/saveddata/fighterAbility.py +++ b/eos/saveddata/fighterAbility.py @@ -17,10 +17,7 @@ # along with eos. If not, see . #=============================================================================== -from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut, ChargeAttrShortcut -from eos.effectHandlerHelpers import HandledItem, HandledCharge from sqlalchemy.orm import validates, reconstructor -import eos.db import logging logger = logging.getLogger(__name__) @@ -28,34 +25,32 @@ logger = logging.getLogger(__name__) class FighterAbility(object): def __init__(self, effect): - print "creating fighter ability" """Initialize from the program""" self.__effect = effect self.effectID = effect.ID if effect is not None else None self.active = False - #self.build() + self.build() @reconstructor def init(self): '''Initialize from the database''' - print "Initialize fighter ability from the database, effectID:" self.__effect = None - print self.effectID - ''' if self.effectID: - self.__item = eos.db.getItem(self.itemID) - if self.__item is None: - logger.error("Item (id: %d) does not exist", self.itemID) + self.__effect = next((x for x in self.fighter.item.effects.itervalues() if x.ID == self.effectID), None) + if self.__effect is None: + logger.error("Effect (id: %d) does not exist", self.effectID) return - ''' self.build() def build(self): - # pull needed values from effect to here pass @property def effect(self): return self.__effect + + @property + def name(self): + return self.__effect.handlerName diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index c2a39b179..55f26256a 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -21,4 +21,5 @@ __all__ = [ "amount", "metaSwap", "implantSets", + "fighterAbilities", ] diff --git a/gui/builtinContextMenus/fighterAbilities.py b/gui/builtinContextMenus/fighterAbilities.py new file mode 100644 index 000000000..8693be19a --- /dev/null +++ b/gui/builtinContextMenus/fighterAbilities.py @@ -0,0 +1,54 @@ +import wx +from gui.contextMenu import ContextMenu +import gui.mainFrame +import service +import gui.globalEvents as GE + +class FighterAbility(ContextMenu): + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + def display(self, srcContext, selection): + if self.mainFrame.getActiveFit() is None or srcContext != "fighterItem": + return False + + self.fighter = selection[0] + return True + + def getText(self, itmContext, selection): + return "Abilities" + + def addAbility(self, menu, ability): + label = ability.name + id = wx.NewId() + self.abilityIds[id] = ability + menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_CHECK) + menu.Bind(wx.EVT_MENU, self.handleMode, menuItem) + return menuItem + + def getSubMenu(self, context, selection, rootMenu, i, pitem): + msw = True if "wxMSW" in wx.PlatformInfo else False + self.context = context + self.abilityIds = {} + + sub = wx.Menu() + + for ability in self.fighter.abilities: + menuItem = self.addAbility(rootMenu if msw else sub, ability) + sub.AppendItem(menuItem) + menuItem.Check(ability.active) + + return sub + + def handleMode(self, event): + ability = self.abilityIds[event.Id] + if ability is False or ability not in self.fighter.abilities: + event.Skip() + return + + sFit = service.Fit.getInstance() + fitID = self.mainFrame.getActiveFit() + sFit.toggleFighterAbility(fitID, ability) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + +FighterAbility.register() diff --git a/service/fit.py b/service/fit.py index a931061f1..3ee5995e7 100644 --- a/service/fit.py +++ b/service/fit.py @@ -778,6 +778,12 @@ class Fit(object): self.recalc(fit) return True + def toggleFighterAbility(self, fitID, ability): + fit = eos.db.getFit(fitID) + ability.active = not ability.active + eos.db.commit() + self.recalc(fit) + def changeChar(self, fitID, charID): if fitID is None or charID is None: if charID is not None: