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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
0
utils/__init__.py
Normal file
Reference in New Issue
Block a user