Toggle fighter abilities in fighter context menu

This commit is contained in:
blitzmann
2016-04-17 02:16:58 -04:00
parent 021de1af80
commit 708425c67a
4 changed files with 69 additions and 13 deletions

View File

@@ -17,10 +17,7 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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

View File

@@ -21,4 +21,5 @@ __all__ = [
"amount",
"metaSwap",
"implantSets",
"fighterAbilities",
]

View File

@@ -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()

View File

@@ -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: