diff --git a/eos/gamedata.py b/eos/gamedata.py index 50bd66d94..e63763cb8 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -142,7 +142,7 @@ class Effect(EqBase): """ if not self.__generated: self.__generateHandler() - + return self.__effectDef is not None def isType(self, type): @@ -151,7 +151,7 @@ class Effect(EqBase): """ if not self.__generated: self.__generateHandler() - + return self.type is not None and type in self.type def __generateHandler(self): @@ -477,9 +477,33 @@ class Item(EqBase): def getAbyssalTypes(cls): cls.ABYSSAL_TYPES = eos.db.getAbyssalTypes() + @property + def isModule(self): + return self.category.name == 'Module' + + @property + def isSubsystem(self): + return self.category.name == 'Subsystem' + @property def isCharge(self): - return self.category.name == "Charge" + return self.category.name == 'Charge' + + @property + def isDrone(self): + return self.category.name == 'Drone' + + @property + def isFighter(self): + return self.category.name == 'Fighter' + + @property + def isImplant(self): + return self.category.name == 'Implant' and self.group.name != 'Booster' + + @property + def isBooster(self): + return self.group.name == 'Booster' and self.category.name == 'Implant' def __repr__(self): return "Item(ID={}, name={}) at {}".format( diff --git a/gui/builtinAdditionPanes/boosterView.py b/gui/builtinAdditionPanes/boosterView.py index 41e55ab5b..e3adc2874 100644 --- a/gui/builtinAdditionPanes/boosterView.py +++ b/gui/builtinAdditionPanes/boosterView.py @@ -19,14 +19,16 @@ # noinspection PyPackageRequirements import wx + import gui.display as d +import gui.fitCommands as cmd import gui.globalEvents as GE -from gui.builtinMarketBrowser.events import ItemSelected, ITEM_SELECTED +from gui.builtinMarketBrowser.events import ITEM_SELECTED, ItemSelected from gui.builtinViewColumns.state import State from gui.contextMenu import ContextMenu from gui.utils.staticHelpers import DragDropHelper from service.fit import Fit -import gui.fitCommands as cmd +from service.market import Market class BoosterViewDrop(wx.DropTarget): @@ -124,10 +126,13 @@ class BoosterView(d.Display): event.Skip() def addItem(self, event): - sFit = Fit.getInstance() - fitID = self.mainFrame.getActiveFit() + item = Market.getInstance().getItem(event.itemID, eager='group') + if item is None or not item.isBooster: + event.Skip() + return - fit = sFit.getFit(fitID) + fitID = self.mainFrame.getActiveFit() + fit = Fit.getInstance().getFit(fitID) if not fit or fit.isStructure: event.Skip() diff --git a/gui/builtinAdditionPanes/droneView.py b/gui/builtinAdditionPanes/droneView.py index 19a4cf1ac..745f16889 100644 --- a/gui/builtinAdditionPanes/droneView.py +++ b/gui/builtinAdditionPanes/droneView.py @@ -206,11 +206,13 @@ class DroneView(Display): event.Skip() def addItem(self, event): - sFit = Fit.getInstance() + item = Market.getInstance().getItem(event.itemID, eager='group.category') + if item is None or not item.isDrone: + event.Skip() + return + fitID = self.mainFrame.getActiveFit() - - fit = sFit.getFit(fitID) - + fit = Fit.getInstance().getFit(fitID) if not fit or fit.isStructure: event.Skip() return diff --git a/gui/builtinAdditionPanes/fighterView.py b/gui/builtinAdditionPanes/fighterView.py index 0e17d98f6..f468a29f9 100644 --- a/gui/builtinAdditionPanes/fighterView.py +++ b/gui/builtinAdditionPanes/fighterView.py @@ -257,8 +257,12 @@ class FighterDisplay(d.Display): event.Skip() def addItem(self, event): - fitID = self.mainFrame.getActiveFit() + item = Market.getInstance().getItem(event.itemID, eager='group.category') + if item is None or not item.isFighter: + event.Skip() + return + fitID = self.mainFrame.getActiveFit() if self.mainFrame.command.Submit(cmd.GuiAddLocalFighterCommand(fitID, event.itemID)): self.mainFrame.additionsPane.select("Fighters") diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index b7978e434..e05dc6fd0 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -175,10 +175,13 @@ class ImplantDisplay(d.Display): event.Skip() def addItem(self, event): - sFit = Fit.getInstance() - fitID = self.mainFrame.getActiveFit() + item = Market.getInstance().getItem(event.itemID, eager='group.category') + if item is None or not item.isImplant: + event.Skip() + return - fit = sFit.getFit(fitID) + fitID = self.mainFrame.getActiveFit() + fit = Fit.getInstance().getFit(fitID) if not fit or fit.isStructure: event.Skip() diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index f5f510523..98640bfdf 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -357,8 +357,11 @@ class FittingView(d.Display): itemID = event.itemID fitID = self.activeFitID if fitID is not None: - sFit = Fit.getInstance() - if sFit.isAmmo(itemID): + item = Market.getInstance().getItem(event.itemID, eager='group.category') + if item is None or not (item.isModule or item.isSubsystem): + event.Skip() + return + if Fit.getInstance().isAmmo(itemID): # If we've selected ammo, then apply to the selected module(s) modules = [] sel = self.GetFirstSelected() diff --git a/gui/fitCommands/gui/guiCargoToModule.py b/gui/fitCommands/gui/guiCargoToModule.py index a3b187160..e2f96d33d 100644 --- a/gui/fitCommands/gui/guiCargoToModule.py +++ b/gui/fitCommands/gui/guiCargoToModule.py @@ -37,6 +37,7 @@ class GuiCargoToModuleCommand(wx.Command): result = False # We're trying to move a charge from cargo to a slot. Use SetCharge command (don't respect move vs copy) + # todo: replace with item.ischarge, broken for now if sFit.isAmmo(cargo.itemID): result = self.internalHistory.Submit(CalcChangeModuleChargesCommand(self.fitID, False, {module.modPosition: cargo.itemID})) else: diff --git a/service/fit.py b/service/fit.py index 0bd63c8b2..567a40041 100644 --- a/service/fit.py +++ b/service/fit.py @@ -401,11 +401,6 @@ class Fit(FitDeprecated): fit.character = self.character = eos.db.getCharacter(charID) self.recalc(fit) - @staticmethod - def isAmmo(itemID): - # todo: get rid of this form the service, use directly from item - return eos.db.getItem(itemID).isCharge - @staticmethod def getTargetResists(fitID): pyfalog.debug("Get target resists for fit ID: {0}", fitID)