From 264208b42e5136ab7ec04dc0b3659c2708afb3a3 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 20 Apr 2019 02:12:03 +0300 Subject: [PATCH] Make sure projected drones do not choke on mass removal --- gui/builtinAdditionPanes/projectedView.py | 44 ++++++++++++++------- gui/builtinContextMenus/droneAddStack.py | 1 - gui/builtinContextMenus/itemAmountChange.py | 5 ++- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/gui/builtinAdditionPanes/projectedView.py b/gui/builtinAdditionPanes/projectedView.py index 473da003c..04d815d96 100644 --- a/gui/builtinAdditionPanes/projectedView.py +++ b/gui/builtinAdditionPanes/projectedView.py @@ -128,14 +128,20 @@ class ProjectedView(d.Display): self.mainFrame.command.Submit(cmd.GuiRemoveProjectedFitCommand( fitID=fitID, projectedFitID=thing.ID)) elif isinstance(thing, es_Module): - self.mainFrame.command.Submit(cmd.GuiRemoveProjectedModuleCommand( - fitID=fitID, position=Fit.getInstance().getFit(fitID).projectedModules.index(thing))) + fit = Fit.getInstance().getFit(fitID) + if thing in fit.projectedModules: + position = fit.projectedModules.index(thing) + self.mainFrame.command.Submit(cmd.GuiRemoveProjectedModuleCommand( + fitID=fitID, position=position)) elif isinstance(thing, es_Drone): self.mainFrame.command.Submit(cmd.GuiRemoveProjectedDroneCommand( fitID=fitID, itemID=thing.itemID, amount=math.inf)) elif isinstance(thing, es_Fighter): - self.mainFrame.command.Submit(cmd.GuiRemoveProjectedFighterCommand( - fitID=fitID, position=Fit.getInstance().getFit(fitID).projectedFighters.index(thing))) + fit = Fit.getInstance().getFit(fitID) + if thing in fit.projectedFighters: + position = fit.projectedFighters.index(thing) + self.mainFrame.command.Submit(cmd.GuiRemoveProjectedFighterCommand( + fitID=fitID, position=position)) def handleDrag(self, type, fitID): # Those are drags coming from pyfa sources, NOT builtin wx drags @@ -261,16 +267,20 @@ class ProjectedView(d.Display): self.mainFrame.command.Submit(cmd.GuiToggleProjectedFitStateCommand( fitID=fitID, projectedFitID=thing.ID)) elif isinstance(thing, es_Module): - self.mainFrame.command.Submit(cmd.GuiChangeProjectedModuleStateCommand( - fitID=fitID, - position=Fit.getInstance().getFit(fitID).projectedModules.index(thing), - click='right' if button == 3 else 'left')) + fit = Fit.getInstance().getFit(fitID) + if thing in fit.projectedModules: + position = fit.projectedModules.index(thing) + self.mainFrame.command.Submit(cmd.GuiChangeProjectedModuleStateCommand( + fitID=fitID, position=position, click='right' if button == 3 else 'left')) elif isinstance(thing, es_Drone) and button != 3: self.mainFrame.command.Submit(cmd.GuiToggleProjectedDroneStateCommand( fitID=fitID, itemID=thing.itemID)) elif isinstance(thing, es_Fighter) and button != 3: - self.mainFrame.command.Submit(cmd.GuiToggleProjectedFighterStateCommand( - fitID=fitID, position=Fit.getInstance().getFit(fitID).projectedFighters.index(thing))) + fit = Fit.getInstance().getFit(fitID) + if thing in fit.projectedFighters: + position = fit.projectedFighters.index(thing) + self.mainFrame.command.Submit(cmd.GuiToggleProjectedFighterStateCommand( + fitID=fitID, position=position)) def spawnMenu(self, event): fitID = self.mainFrame.getActiveFit() @@ -328,8 +338,11 @@ class ProjectedView(d.Display): self.mainFrame.command.Submit(cmd.GuiRemoveProjectedFitCommand( fitID=fitID, projectedFitID=thing.ID)) elif isinstance(thing, es_Module): - self.mainFrame.command.Submit(cmd.GuiRemoveProjectedModuleCommand( - fitID=fitID, position=Fit.getInstance().getFit(fitID).projectedModules.index(thing))) + fit = Fit.getInstance().getFit(fitID) + if thing in fit.projectedModules: + position = fit.projectedModules.index(thing) + self.mainFrame.command.Submit(cmd.GuiRemoveProjectedModuleCommand( + fitID=fitID, position=position)) elif isinstance(thing, es_Drone): mstate = wx.GetMouseState() self.mainFrame.command.Submit(cmd.GuiRemoveProjectedDroneCommand( @@ -337,5 +350,8 @@ class ProjectedView(d.Display): itemID=thing.itemID, amount=math.inf if mstate.cmdDown or mstate.altDown else 1)) elif isinstance(thing, es_Fighter): - self.mainFrame.command.Submit(cmd.GuiRemoveProjectedFighterCommand( - fitID=fitID, position=Fit.getInstance().getFit(fitID).projectedFighters.index(thing))) + fit = Fit.getInstance().getFit(fitID) + if thing in fit.projectedFighters: + position = fit.projectedFighters.index(thing) + self.mainFrame.command.Submit(cmd.GuiRemoveProjectedFighterCommand( + fitID=fitID, position=position)) diff --git a/gui/builtinContextMenus/droneAddStack.py b/gui/builtinContextMenus/droneAddStack.py index dcf1117d1..f9739b59e 100644 --- a/gui/builtinContextMenus/droneAddStack.py +++ b/gui/builtinContextMenus/droneAddStack.py @@ -20,7 +20,6 @@ class DroneAddStack(ContextMenu): return False item = selection[0] - print(item.category.name) if item.category.name != 'Drone': return False diff --git a/gui/builtinContextMenus/itemAmountChange.py b/gui/builtinContextMenus/itemAmountChange.py index 65c1b879c..89fbc8c38 100644 --- a/gui/builtinContextMenus/itemAmountChange.py +++ b/gui/builtinContextMenus/itemAmountChange.py @@ -31,7 +31,10 @@ class ChangeItemAmount(ContextMenu): fitID = mainFrame.getActiveFit() srcContext = fullContext[0] if isinstance(thing, es_Fit): - value = thing.getProjectionInfo(fitID).amount + try: + value = thing.getProjectionInfo(fitID).amount + except AttributeError: + return elif isinstance(thing, es_Fighter): value = thing.amountActive else: