From 3fa5ac7858fef6d43e7995ba22c335840324274e Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 15 Apr 2019 18:44:26 +0300 Subject: [PATCH] As commands now commit/recalc even in case of failure (as they do not know about exact reason of failure and we're not sure if rollback was succeeded), do not run them for every item added via double-click --- eos/gamedata.py | 30 ++++++++++++++++++++++--- gui/builtinAdditionPanes/boosterView.py | 15 ++++++++----- gui/builtinAdditionPanes/droneView.py | 10 +++++---- gui/builtinAdditionPanes/fighterView.py | 6 ++++- gui/builtinAdditionPanes/implantView.py | 9 +++++--- gui/builtinViews/fittingView.py | 7 ++++-- gui/fitCommands/gui/guiCargoToModule.py | 1 + service/fit.py | 5 ----- 8 files changed, 60 insertions(+), 23 deletions(-) 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)