Re-use context menu infrastructure for fit list in graph window

This commit is contained in:
DarkPhoenix
2019-07-30 19:43:42 +03:00
parent 2aa274f56f
commit 67cef93dd8
2 changed files with 32 additions and 27 deletions

View File

@@ -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()

View File

@@ -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):