Implement service layer mode setter. Modes now have basic support and testing.

Also decided to have two separate functions that return the mode items as Items or Modes. Returning them as Items makes it easier to check if provided modeID from user database is valid (since we cannot easily map the modeID to create a Mode), returning as Modes allows us to easily use them for setters. There's probably a better way to do this, but w/e
This commit is contained in:
blitzmann
2014-11-30 16:43:15 -05:00
parent 081e32da6f
commit 23a71e7448
5 changed files with 42 additions and 18 deletions

View File

@@ -101,7 +101,7 @@ class Fit(object):
self.extraAttributes.original = self.EXTRA_ATTRIBUTES
self.ship = Ship(db.getItem(self.shipID)) if self.shipID is not None else None
if self.ship is not None and self.modeID is not None:
self._mode = self.ship.checkMode(db.getItem(self.modeID))
self._mode = self.ship.checkModeItem(db.getItem(self.modeID))
else:
self._mode = None

View File

@@ -66,7 +66,7 @@ class Ship(ItemAttrShortcut, HandledItem):
if effect.runTime == runTime and effect.isType("passive"):
effect.handler(fit, self, ("ship",))
def checkMode(self, item):
def checkModeItem(self, item):
"""
Checks if provided item is a valid mode.
@@ -87,8 +87,16 @@ class Ship(ItemAttrShortcut, HandledItem):
return Mode(item)
return None
def getModes(self):
items = self.getModeItems()
return [Mode(item) for item in items]
def getModeItems(self):
"""Gets valid modes for ship, returns None if not a t3 dessy"""
"""
Returns a list of valid mode items for ship. Note that this returns the
valid Item objects, not the Mode objects. Returns None if not a
t3 dessy
"""
# @todo: is there a better way to determine this that isn't hardcoded groupIDs?
if self.item.groupID != 1305:
return None

View File

@@ -2,7 +2,7 @@ import wx
from gui.contextMenu import ContextMenu
import gui.mainFrame
import service
from gui.shipBrowser import Stage3Selected
import gui.globalEvents as GE
class TacticalMode(ContextMenu):
def __init__(self):
@@ -11,37 +11,43 @@ class TacticalMode(ContextMenu):
def display(self, srcContext, selection):
sFit = service.Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
self.ship = sFit.getFit(fitID).ship
self.modeItems = self.ship.getModeItems()
ship = sFit.getFit(fitID).ship
self.modes = ship.getModes()
return srcContext == "fittingShip" and self.modeItems is not None
return srcContext == "fittingShip" and self.modes is not None
def getText(self, itmContext, selection):
return "Tactical Modes"
def addMode(self, rootMenu, item):
label = item.name.rsplit()[-2]
def addMode(self, rootMenu, mode):
label = mode.item.name.rsplit()[-2]
id = wx.NewId()
self.itemIds[id] = item
self.modeIds[id] = mode
menuItem = wx.MenuItem(rootMenu, id, label, kind=wx.ITEM_RADIO)
rootMenu.Bind(wx.EVT_MENU, self.handleMode, menuItem)
return menuItem
def getSubMenu(self, context, selection, rootMenu, i, pitem):
self.context = context
self.itemIds = {}
self.modeIds = {}
m = wx.Menu()
sub = wx.Menu()
for item in self.modeItems:
for item in self.modes:
menuItem = self.addMode(rootMenu, item)
m.AppendItem(menuItem)
sub.AppendItem(menuItem)
return m
return sub
def handleMode(self, event):
item = self.itemIds[event.Id]
print item
# @todo fit service change mode
item = self.modeIds[event.Id]
if item is False or item not in self.modes:
event.Skip()
return
sFit = service.Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setMode(fitID, self.modeIds[event.Id])
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
TacticalMode.register()

View File

@@ -719,6 +719,16 @@ class Fit(object):
self.recalc(fit)
def setMode(self, fitID, mode):
if fitID is None:
return
fit = eos.db.getFit(fitID)
fit.mode = mode
eos.db.commit()
self.recalc(fit)
def setAsPattern(self, fitID, ammo):
if fitID is None:
return

0
utils/__init__.py Normal file
View File