diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index cb983d796..a358254ea 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -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 diff --git a/eos/saveddata/ship.py b/eos/saveddata/ship.py index 018570d0d..f1b9b6950 100644 --- a/eos/saveddata/ship.py +++ b/eos/saveddata/ship.py @@ -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 diff --git a/gui/builtinContextMenus/tacticalMode.py b/gui/builtinContextMenus/tacticalMode.py index 393379dcf..5927dab0e 100644 --- a/gui/builtinContextMenus/tacticalMode.py +++ b/gui/builtinContextMenus/tacticalMode.py @@ -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() diff --git a/service/fit.py b/service/fit.py index 60e899faf..e731c3edf 100644 --- a/service/fit.py +++ b/service/fit.py @@ -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 diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 000000000..e69de29bb