diff --git a/gui/builtinAdditionPanes/droneView.py b/gui/builtinAdditionPanes/droneView.py index efd4b62a3..e111c7536 100644 --- a/gui/builtinAdditionPanes/droneView.py +++ b/gui/builtinAdditionPanes/droneView.py @@ -36,6 +36,11 @@ import gui.fitCommands as cmd from gui.fitCommands.helpers import droneStackLimit +DRONE_ORDER = ('Light Scout Drones', 'Medium Scout Drones', + 'Heavy Attack Drones', 'Sentry Drones', 'Combat Utility Drones', + 'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones') + + class DroneViewDrop(wx.DropTarget): def __init__(self, dropFn, *args, **kwargs): super(DroneViewDrop, self).__init__(*args, **kwargs) @@ -186,17 +191,13 @@ class DroneView(Display): 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', - 'Electronic Warfare Drones', 'Logistic Drones', 'Mining Drones', 'Salvage Drones') - - def droneKey(self, drone): + @staticmethod + def droneKey(drone): sMkt = Market.getInstance() groupName = sMkt.getMarketGroupByItem(drone.item).name - return (self.DRONE_ORDER.index(groupName), - drone.item.name) + return (DRONE_ORDER.index(groupName), drone.item.name) def fitChanged(self, event): event.Skip() diff --git a/gui/builtinAdditionPanes/fighterView.py b/gui/builtinAdditionPanes/fighterView.py index d37346b3f..588dbda6f 100644 --- a/gui/builtinAdditionPanes/fighterView.py +++ b/gui/builtinAdditionPanes/fighterView.py @@ -34,6 +34,9 @@ from service.fit import Fit from service.market import Market +FIGHTER_ORDER = ('Light Fighter', 'Heavy Fighter', 'Support Fighter') + + class FighterViewDrop(wx.DropTarget): def __init__(self, dropFn, *args, **kwargs): super(FighterViewDrop, self).__init__(*args, **kwargs) @@ -250,11 +253,10 @@ class FighterDisplay(d.Display): def _merge(src, dst): return - FIGHTER_ORDER = ('Light Fighter', 'Heavy Fighter', 'Support Fighter') - - def fighterKey(self, fighter): + @staticmethod + def fighterKey(fighter): groupName = Market.getInstance().getGroupByItem(fighter.item).name - orderPos = self.FIGHTER_ORDER.index(groupName) + orderPos = FIGHTER_ORDER.index(groupName) # Sort support fighters by name, ignore their abilities if groupName == 'Support Fighter': abilityEffectIDs = () diff --git a/gui/builtinContextMenus/graphFitAmmoPicker.py b/gui/builtinContextMenus/graphFitAmmoPicker.py index 3918aaaa9..1574937ae 100644 --- a/gui/builtinContextMenus/graphFitAmmoPicker.py +++ b/gui/builtinContextMenus/graphFitAmmoPicker.py @@ -124,8 +124,14 @@ class AmmoPickerContents(wx.ScrolledCanvas): addCheckbox(ammo.name, indentLvl=2) if drones: addRadioButton('Drones') + from gui.builtinAdditionPanes.droneView import DroneView + for drone in sorted(drones, key=DroneView.droneKey): + addCheckbox('{}x {}'.format(drone.amount, drone.item.name), indentLvl=1) if fighters: addRadioButton('Fighters') + from gui.builtinAdditionPanes.fighterView import FighterDisplay + for fighter in sorted(fighters, key=FighterDisplay.fighterKey): + addCheckbox('{}x {}'.format(fighter.amount, fighter.item.name), indentLvl=1) self.SetSizer(mainSizer) self.refreshStatus() @@ -162,35 +168,35 @@ class AmmoPickerContents(wx.ScrolledCanvas): return modsFinal def getDrones(self, fit): - drones = set() + drones = [] if fit is not None: for drone in fit.drones: if drone.item is None: continue # Drones are our "ammo", so we want to pick even those which are inactive if drone.canDealDamage(ignoreState=True): - drones.add(drone) + drones.append(drone) continue if {'remoteWebifierEntity', 'remoteTargetPaintEntity'}.intersection(drone.item.effects): - drones.add(drone) + drones.append(drone) continue return drones def getFighters(self, fit): - fighters = set() + fighters = [] if fit is not None: for fighter in fit.fighters: if fighter.item is None: continue # Fighters are our "ammo" as well if fighter.canDealDamage(ignoreState=True): - fighters.add(fighter) + fighters.append(fighter) continue for ability in fighter.abilities: if not ability.active: continue if ability.effect.name == 'fighterAbilityStasisWebifier': - fighters.add(fighter) + fighters.append(fighter) break return fighters