From e3f21cf70004874c992d44d6671d937d430717db Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 20 Apr 2019 01:15:38 +0300 Subject: [PATCH] Make local drone commands reliable --- gui/builtinAdditionPanes/droneView.py | 35 ++++++++++++++++------ gui/builtinContextMenus/droneSplitStack.py | 9 +++--- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/gui/builtinAdditionPanes/droneView.py b/gui/builtinAdditionPanes/droneView.py index 4a4f554cd..3c502c4f9 100644 --- a/gui/builtinAdditionPanes/droneView.py +++ b/gui/builtinAdditionPanes/droneView.py @@ -155,11 +155,16 @@ class DroneView(Display): def _merge(self, srcRow, dstRow): fitID = self.mainFrame.getActiveFit() - fit = Fit.getInstance().getFit(fitID) - self.mainFrame.command.Submit(cmd.GuiMergeLocalDroneStacksCommand( - fitID=fitID, - srcPosition=fit.drones.index(self.drones[srcRow]), - dstPosition=fit.drones.index(self.drones[dstRow]))) + try: + srcDrone = self.drones[srcRow] + dstDrone = self.drones[dstRow] + except IndexError: + return + if srcDrone in self.original and dstDrone in self.original: + srcPosition = self.original.index(srcDrone) + dstPosition = self.original.index(dstDrone) + self.mainFrame.command.Submit(cmd.GuiMergeLocalDroneStacksCommand( + fitID=fitID, srcPosition=srcPosition, dstPosition=dstPosition)) DRONE_ORDER = ('Light Scout Drones', 'Medium Scout Drones', 'Heavy Attack Drones', 'Sentry Drones', 'Combat Utility Drones', @@ -237,11 +242,17 @@ class DroneView(Display): def removeDrone(self, drone): fitID = self.mainFrame.getActiveFit() - self.mainFrame.command.Submit(cmd.GuiRemoveLocalDroneCommand(fitID, self.original.index(drone), 1)) + if drone in self.original: + position = self.original.index(drone) + self.mainFrame.command.Submit(cmd.GuiRemoveLocalDroneCommand( + fitID=fitID, position=position, amount=1)) def removeDroneStack(self, drone): fitID = self.mainFrame.getActiveFit() - self.mainFrame.command.Submit(cmd.GuiRemoveLocalDroneCommand(fitID, self.original.index(drone), math.inf)) + if drone in self.original: + position = self.original.index(drone) + self.mainFrame.command.Submit(cmd.GuiRemoveLocalDroneCommand( + fitID=fitID, position=position, amount=math.inf)) def click(self, event): event.Skip() @@ -250,8 +261,14 @@ class DroneView(Display): col = self.getColumn(event.Position) if col == self.getColIndex(State): fitID = self.mainFrame.getActiveFit() - drone = self.drones[row] - self.mainFrame.command.Submit(cmd.GuiToggleLocalDroneStateCommand(fitID, self.original.index(drone))) + try: + drone = self.drones[row] + except IndexError: + return + if drone in self.original: + position = self.original.index(drone) + self.mainFrame.command.Submit(cmd.GuiToggleLocalDroneStateCommand( + fitID=fitID, position=position)) def spawnMenu(self, event): sel = self.GetFirstSelected() diff --git a/gui/builtinContextMenus/droneSplitStack.py b/gui/builtinContextMenus/droneSplitStack.py index 31eb9e276..22b1fa04b 100644 --- a/gui/builtinContextMenus/droneSplitStack.py +++ b/gui/builtinContextMenus/droneSplitStack.py @@ -22,7 +22,6 @@ class DroneSplitStack(ContextMenu): return "Split {0} Stack".format(itmContext) def activate(self, fullContext, selection, i): - srcContext = fullContext[0] drone = selection[0] dlg = DroneStackSplit(self.mainFrame, drone.amount) @@ -35,10 +34,10 @@ class DroneSplitStack(ContextMenu): fit = Fit.getInstance().getFit(fitID) cleanInput = re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip()) - self.mainFrame.command.Submit(cmd.GuiSplitLocalDroneStackCommand( - fitID=fitID, - position=fit.drones.index(drone), - amount=int(cleanInput))) + if drone in fit.drones: + position = fit.drones.index(drone) + self.mainFrame.command.Submit(cmd.GuiSplitLocalDroneStackCommand( + fitID=fitID, position=position, amount=int(cleanInput))) DroneSplitStack.register()