From 62e8da6ff2cc363149d32076c850c7a665e3eca4 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 20 Apr 2019 01:51:55 +0300 Subject: [PATCH] Make fighter pane more reliable and change few already checked panels as well --- gui/builtinAdditionPanes/boosterView.py | 22 ++++++++++--- gui/builtinAdditionPanes/cargoView.py | 30 +++++++++++++++--- gui/builtinAdditionPanes/commandView.py | 8 ++--- gui/builtinAdditionPanes/droneView.py | 20 +++++++++--- gui/builtinAdditionPanes/fighterView.py | 34 ++++++++++++++++----- gui/builtinAdditionPanes/implantView.py | 24 ++++++++++++--- gui/builtinContextMenus/fighterAbilities.py | 12 +++++--- 7 files changed, 116 insertions(+), 34 deletions(-) diff --git a/gui/builtinAdditionPanes/boosterView.py b/gui/builtinAdditionPanes/boosterView.py index 1e87bf21a..41bdfbafb 100644 --- a/gui/builtinAdditionPanes/boosterView.py +++ b/gui/builtinAdditionPanes/boosterView.py @@ -90,7 +90,11 @@ class BoosterView(d.Display): if keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE): row = self.GetFirstSelected() if row != -1: - self.removeBooster(self.boosters[self.GetItemData(row)]) + try: + booster = self.boosters[self.GetItemData(row)] + except IndexError: + return + self.removeBooster(booster) event.Skip() @@ -148,7 +152,11 @@ class BoosterView(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - self.removeBooster(self.boosters[self.GetItemData(row)]) + try: + booster = self.boosters[self.GetItemData(row)] + except IndexError: + return + self.removeBooster(booster) def removeBooster(self, booster): fitID = self.mainFrame.getActiveFit() @@ -164,7 +172,10 @@ class BoosterView(d.Display): col = self.getColumn(event.Position) if col == self.getColIndex(State): fitID = self.mainFrame.getActiveFit() - booster = self.boosters[self.GetItemData(row)] + try: + booster = self.boosters[self.GetItemData(row)] + except IndexError: + return if booster in self.original: position = self.original.index(booster) self.mainFrame.command.Submit(cmd.GuiToggleBoosterStateCommand( @@ -174,7 +185,10 @@ class BoosterView(d.Display): def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: - booster = self.boosters[sel] + try: + booster = self.boosters[sel] + except IndexError: + return None srcContext = "boosterItem" itemContext = "Booster" menu = ContextMenu.getMenu((booster,), (srcContext, itemContext)) diff --git a/gui/builtinAdditionPanes/cargoView.py b/gui/builtinAdditionPanes/cargoView.py index 8f4fef40c..fd63864ca 100644 --- a/gui/builtinAdditionPanes/cargoView.py +++ b/gui/builtinAdditionPanes/cargoView.py @@ -88,7 +88,10 @@ class CargoView(d.Display): if row != -1: data = wx.TextDataObject() - dataStr = "cargo:{}".format(self.cargo[row].itemID) + try: + dataStr = "cargo:{}".format(self.cargo[row].itemID) + except IndexError: + return data.SetText(dataStr) dropSource = wx.DropSource(self) @@ -102,7 +105,10 @@ class CargoView(d.Display): row = self.GetFirstSelected() if row != -1: fitID = self.mainFrame.getActiveFit() - cargo = self.cargo[self.GetItemData(row)] + try: + cargo = self.cargo[self.GetItemData(row)] + except IndexError: + return self.mainFrame.command.Submit(cmd.GuiRemoveCargoCommand(fitID=fitID, itemID=cargo.itemID)) event.Skip() @@ -112,10 +118,18 @@ class CargoView(d.Display): fit = sFit.getFit(self.mainFrame.getActiveFit()) dstRow, _ = self.HitTest((x, y)) + if dstRow > -1: + try: + dstCargoItemID = getattr(self.cargo[dstRow], 'itemID', None) + except IndexError: + dstCargoItemID = None + else: + dstCargoItemID = None + self.mainFrame.command.Submit(cmd.GuiLocalModuleToCargoCommand( fitID=self.mainFrame.getActiveFit(), modPosition=fit.modules[modIdx].modPosition, - cargoItemID=self.cargo[dstRow].itemID if dstRow > -1 else None, + cargoItemID=dstCargoItemID, copy=wx.GetMouseState().cmdDown)) def fitChanged(self, event): @@ -156,13 +170,19 @@ class CargoView(d.Display): col = self.getColumn(event.Position) if col != self.getColIndex(State): fitID = self.mainFrame.getActiveFit() - cargo = self.cargo[self.GetItemData(row)] + try: + cargo = self.cargo[self.GetItemData(row)] + except IndexError: + return self.mainFrame.command.Submit(cmd.GuiRemoveCargoCommand(fitID=fitID, itemID=cargo.itemID)) def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: - cargo = self.cargo[sel] + try: + cargo = self.cargo[sel] + except IndexError: + return sMkt = Market.getInstance() sourceContext = "cargoItem" itemContext = sMkt.getCategoryByItem(cargo.item).name diff --git a/gui/builtinAdditionPanes/commandView.py b/gui/builtinAdditionPanes/commandView.py index 9f3e18329..5d67b490a 100644 --- a/gui/builtinAdditionPanes/commandView.py +++ b/gui/builtinAdditionPanes/commandView.py @@ -169,13 +169,13 @@ class CommandView(d.Display): def get(self, row): if row == -1: return None - numFits = len(self.fits) - if numFits == 0: return None - - return self.fits[row] + try: + return self.fits[row] + except IndexError: + return None def click(self, event): event.Skip() diff --git a/gui/builtinAdditionPanes/droneView.py b/gui/builtinAdditionPanes/droneView.py index 3c502c4f9..b63b71d54 100644 --- a/gui/builtinAdditionPanes/droneView.py +++ b/gui/builtinAdditionPanes/droneView.py @@ -102,7 +102,10 @@ class DroneView(Display): self.hoveredRow = row self.hoveredColumn = col if row != -1 and col != -1 and col < len(self.DEFAULT_COLS): - mod = self.drones[self.GetItemData(row)] + try: + mod = self.drones[self.GetItemData(row)] + except IndexError: + return if self.DEFAULT_COLS[col] == "Miscellanea": tooltip = self.activeColumns[col].getToolTip(mod) if tooltip is not None: @@ -120,7 +123,10 @@ class DroneView(Display): if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: row = self.GetFirstSelected() if row != -1: - drone = self.drones[self.GetItemData(row)] + try: + drone = self.drones[self.GetItemData(row)] + except IndexError: + return self.removeDroneStack(drone) event.Skip() @@ -234,7 +240,10 @@ class DroneView(Display): col = self.getColumn(event.Position) if col != self.getColIndex(State): mstate = wx.GetMouseState() - drone = self.drones[self.GetItemData(row)] + try: + drone = self.drones[self.GetItemData(row)] + except IndexError: + return if mstate.cmdDown or mstate.altDown: self.removeDroneStack(drone) else: @@ -273,7 +282,10 @@ class DroneView(Display): def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: - drone = self.drones[sel] + try: + drone = self.drones[sel] + except IndexError: + return sMkt = Market.getInstance() sourceContext = "droneItem" itemContext = sMkt.getCategoryByItem(drone.item).name diff --git a/gui/builtinAdditionPanes/fighterView.py b/gui/builtinAdditionPanes/fighterView.py index 1c71bbdcd..88ad7902d 100644 --- a/gui/builtinAdditionPanes/fighterView.py +++ b/gui/builtinAdditionPanes/fighterView.py @@ -162,7 +162,10 @@ class FighterDisplay(d.Display): self.hoveredRow = row self.hoveredColumn = col if row != -1 and col != -1 and col < len(self.DEFAULT_COLS): - mod = self.fighters[self.GetItemData(row)] + try: + mod = self.fighters[self.GetItemData(row)] + except IndexError: + return if self.DEFAULT_COLS[col] == "Miscellanea": tooltip = self.activeColumns[col].getToolTip(mod) if tooltip is not None: @@ -180,7 +183,10 @@ class FighterDisplay(d.Display): if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: row = self.GetFirstSelected() if row != -1: - fighter = self.fighters[self.GetItemData(row)] + try: + fighter = self.fighters[self.GetItemData(row)] + except IndexError: + return self.removeFighter(fighter) event.Skip() @@ -273,12 +279,17 @@ class FighterDisplay(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - fighter = self.fighters[self.GetItemData(row)] + try: + fighter = self.fighters[self.GetItemData(row)] + except IndexError: + return self.removeFighter(fighter) def removeFighter(self, fighter): fitID = self.mainFrame.getActiveFit() - self.mainFrame.command.Submit(cmd.GuiRemoveLocalFighterCommand(fitID, self.original.index(fighter))) + if fighter in self.original: + position = self.original.index(fighter) + self.mainFrame.command.Submit(cmd.GuiRemoveLocalFighterCommand(fitID=fitID, position=position)) def click(self, event): event.Skip() @@ -287,14 +298,21 @@ class FighterDisplay(d.Display): col = self.getColumn(event.Position) if col == self.getColIndex(State): fitID = self.mainFrame.getActiveFit() - fighter = self.fighters[row] - self.mainFrame.command.Submit(cmd.GuiToggleLocalFighterStateCommand(fitID, self.original.index(fighter))) + try: + fighter = self.fighters[row] + except IndexError: + return + if fighter in self.original: + position = self.original.index(fighter) + self.mainFrame.command.Submit(cmd.GuiToggleLocalFighterStateCommand(fitID=fitID, position=position)) def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: - fighter = self.fighters[sel] - + try: + fighter = self.fighters[sel] + except IndexError: + return sMkt = Market.getInstance() sourceContext = "fighterItem" itemContext = sMkt.getCategoryByItem(fighter.item).name diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index d8bfc10fd..1dfea89d3 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -137,12 +137,16 @@ class ImplantDisplay(d.Display): self.mainFrame.additionsPane.select("Implants") def kbEvent(self, event): + event.Skip() keycode = event.GetKeyCode() if keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE): row = self.GetFirstSelected() if row != -1: - self.removeImplant(self.implants[self.GetItemData(row)]) - event.Skip() + try: + implant = self.implants[self.GetItemData(row)] + except IndexError: + return + self.removeImplant(implant) def fitChanged(self, event): sFit = Fit.getInstance() @@ -204,7 +208,11 @@ class ImplantDisplay(d.Display): if row != -1: col = self.getColumn(event.Position) if col != self.getColIndex(State): - self.removeImplant(self.implants[self.GetItemData(row)]) + try: + implant = self.implants[self.GetItemData(row)] + except IndexError: + return + self.removeImplant(implant) def removeImplant(self, implant): fitID = self.mainFrame.getActiveFit() @@ -226,7 +234,10 @@ class ImplantDisplay(d.Display): col = self.getColumn(event.Position) if col == self.getColIndex(State): fitID = self.mainFrame.getActiveFit() - implant = self.implants[self.GetItemData(row)] + try: + implant = self.implants[self.GetItemData(row)] + except IndexError: + return if implant in self.original: position = self.original.index(implant) self.mainFrame.command.Submit(cmd.GuiToggleImplantStateCommand( @@ -243,7 +254,10 @@ class ImplantDisplay(d.Display): return if sel != -1: - implant = self.implants[sel] + try: + implant = self.implants[sel] + except IndexError: + return sMkt = Market.getInstance() sourceContext = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar" itemContext = sMkt.getCategoryByItem(implant.item).name diff --git a/gui/builtinContextMenus/fighterAbilities.py b/gui/builtinContextMenus/fighterAbilities.py index 73b4686c9..f58c55126 100644 --- a/gui/builtinContextMenus/fighterAbilities.py +++ b/gui/builtinContextMenus/fighterAbilities.py @@ -58,11 +58,15 @@ class FighterAbilities(ContextMenu): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) if self.isProjected: - self.mainFrame.command.Submit(cmd.GuiToggleProjectedFighterAbilityStateCommand( - fitID=fitID, position=fit.projectedFighters.index(self.fighter), effectID=ability.effectID)) + if self.fighter in fit.projectedFighters: + position = fit.projectedFighters.index(self.fighter) + self.mainFrame.command.Submit(cmd.GuiToggleProjectedFighterAbilityStateCommand( + fitID=fitID, position=position, effectID=ability.effectID)) else: - self.mainFrame.command.Submit(cmd.GuiToggleLocalFighterAbilityStateCommand( - fitID=fitID, position=fit.fighters.index(self.fighter), effectID=ability.effectID)) + if self.fighter in fit.fighters: + position = fit.fighters.index(self.fighter) + self.mainFrame.command.Submit(cmd.GuiToggleLocalFighterAbilityStateCommand( + fitID=fitID, position=position, effectID=ability.effectID))