From 67cef93dd86ae808399d02178beeafc1b2c15c52 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 30 Jul 2019 19:43:42 +0300 Subject: [PATCH] Re-use context menu infrastructure for fit list in graph window --- gui/builtinContextMenus/itemRemove.py | 26 ++++++++++++--------- gui/graphFrame/lists.py | 33 ++++++++++++++------------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py index 607d3c2c4..b83d91353 100644 --- a/gui/builtinContextMenus/itemRemove.py +++ b/gui/builtinContextMenus/itemRemove.py @@ -25,7 +25,7 @@ class RemoveItem(ContextMenuCombined): "projectedModule", "cargoItem", "projectedFit", "projectedDrone", "fighterItem", "projectedFighter", - "commandFit" + "commandFit", "graphFitList" ): return False @@ -52,14 +52,15 @@ class RemoveItem(ContextMenuCombined): 'projectedModule': self.__handleProjectedItem, 'projectedDrone': self.__handleProjectedItem, 'projectedFighter': self.__handleProjectedItem, - 'commandFit': self.__handleCommandFit} + 'commandFit': self.__handleCommandFit, + 'graphFitList': self.__handleGraphFit} srcContext = fullContext[0] handler = handlerMap.get(srcContext) if handler is None: return - handler(mainItem, selection) + handler(callingWindow, mainItem, selection) - def __handleModule(self, mainItem, selection): + def __handleModule(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) if wx.GetMouseState().GetModifiers() == wx.MOD_ALT: @@ -72,7 +73,7 @@ class RemoveItem(ContextMenuCombined): self.mainFrame.command.Submit(cmd.GuiRemoveLocalModuleCommand( fitID=fitID, positions=positions)) - def __handleDrone(self, mainItem, selection): + def __handleDrone(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) positions = [] @@ -82,7 +83,7 @@ class RemoveItem(ContextMenuCombined): self.mainFrame.command.Submit(cmd.GuiRemoveLocalDronesCommand( fitID=fitID, positions=positions, amount=math.inf)) - def __handleFighter(self, mainItem, selection): + def __handleFighter(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) if wx.GetMouseState().GetModifiers() == wx.MOD_ALT: @@ -96,7 +97,7 @@ class RemoveItem(ContextMenuCombined): self.mainFrame.command.Submit(cmd.GuiRemoveLocalFightersCommand( fitID=fitID, positions=positions)) - def __handleImplant(self, mainItem, selection): + def __handleImplant(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) positions = [] @@ -106,7 +107,7 @@ class RemoveItem(ContextMenuCombined): self.mainFrame.command.Submit(cmd.GuiRemoveImplantsCommand( fitID=fitID, positions=positions)) - def __handleBooster(self, mainItem, selection): + def __handleBooster(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() fit = Fit.getInstance().getFit(fitID) positions = [] @@ -116,13 +117,13 @@ class RemoveItem(ContextMenuCombined): self.mainFrame.command.Submit(cmd.GuiRemoveBoostersCommand( fitID=fitID, positions=positions)) - def __handleCargo(self, mainItem, selection): + def __handleCargo(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() itemIDs = [c.itemID for c in selection] self.mainFrame.command.Submit(cmd.GuiRemoveCargosCommand( fitID=fitID, itemIDs=itemIDs)) - def __handleProjectedItem(self, mainItem, selection): + def __handleProjectedItem(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() if isinstance(mainItem, EosFit): self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand( @@ -151,11 +152,14 @@ class RemoveItem(ContextMenuCombined): self.mainFrame.command.Submit(cmd.GuiRemoveProjectedItemsCommand( fitID=fitID, items=selection, amount=math.inf)) - def __handleCommandFit(self, mainItem, selection): + def __handleCommandFit(self, callingWindow, mainItem, selection): fitID = self.mainFrame.getActiveFit() commandFitIDs = [cf.ID for cf in selection] self.mainFrame.command.Submit(cmd.GuiRemoveCommandFitsCommand( fitID=fitID, commandFitIDs=commandFitIDs)) + def __handleGraphFit(self, callingWindow, mainItem, selection): + callingWindow.removeFits(selection) + RemoveItem.register() diff --git a/gui/graphFrame/lists.py b/gui/graphFrame/lists.py index 49a0d14d9..d03ee77f1 100644 --- a/gui/graphFrame/lists.py +++ b/gui/graphFrame/lists.py @@ -25,6 +25,7 @@ import gui.display import gui.globalEvents as GE from eos.saveddata.targetProfile import TargetProfile from gui.builtinShipBrowser.events import EVT_FIT_RENAMED +from gui.contextMenu import ContextMenu from service.const import GraphCacheCleanupReason from service.fit import Fit @@ -45,17 +46,11 @@ class BaseList(gui.display.Display): self.defaultTT = 'Drag a fit into this list to graph it' - self.contextMenu = wx.Menu() - removeItem = wx.MenuItem(self.contextMenu, 1, 'Remove Fit') - self.contextMenu.Append(removeItem) - self.contextMenu.Bind(wx.EVT_MENU, self.ContextMenuHandler, removeItem) - self.graphFrame.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged) self.graphFrame.mainFrame.Bind(GE.FIT_REMOVED, self.OnFitRemoved) self.graphFrame.mainFrame.Bind(EVT_FIT_RENAMED, self.OnFitRenamed) self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick) self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) - self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) @@ -78,16 +73,6 @@ class BaseList(gui.display.Display): else: self.removeFits([fit]) - def OnContextMenu(self, event): - if self.getSelectedFits(): - self.PopupMenu(self.contextMenu) - - def ContextMenuHandler(self, event): - selectedMenuItem = event.GetId() - if selectedMenuItem == 1: - fits = self.getSelectedFits() - self.removeFits(fits) - def OnFitRemoved(self, event): event.Skip() fit = next((f for f in self.fits if f.ID == event.fitID), None) @@ -194,6 +179,7 @@ class FitList(BaseList): def __init__(self, graphFrame, parent): super().__init__(graphFrame, parent) fit = Fit.getInstance().getFit(self.graphFrame.mainFrame.getActiveFit()) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) if fit is not None: self.fits.append(fit) self.updateView() @@ -204,6 +190,21 @@ class FitList(BaseList): def updateView(self): self.update(self.fits) + def spawnMenu(self, event): + selection = self.getSelectedFits() + clickedPos = self.getRowByAbs(event.Position) + mainFit = None + if clickedPos != -1: + try: + mainFit = self.fits[clickedPos] + except IndexError: + pass + sourceContext = "graphFitList" + itemContext = None if mainFit is None else "Fit" + menu = ContextMenu.getMenu(self, mainFit, selection, (sourceContext, itemContext)) + if menu: + self.PopupMenu(menu) + class TargetList(BaseList):