Skip to content

Commit

Permalink
Allow to override menu visibility settings with control key
Browse files Browse the repository at this point in the history
  • Loading branch information
DarkFenX committed Dec 16, 2019
1 parent 2339327 commit dee8fa4
Show file tree
Hide file tree
Showing 12 changed files with 38 additions and 49 deletions.
5 changes: 2 additions & 3 deletions gui/builtinContextMenus/additionsExportAll.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from gui.utils.clipboard import toClipboard
from service.fit import Fit
from service.port.eft import exportDrones, exportFighters, exportCargo, exportImplants, exportBoosters
from service.settings import ContextMenuSettings


viewSpecMap = {
Expand All @@ -17,12 +16,12 @@

class AdditionsExportAll(ContextMenuUnconditional):

visibilitySetting = 'additionsCopyPaste'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()

def display(self, callingWindow, srcContext):
if not ContextMenuSettings.getInstance().get('additionsCopyPaste'):
return False
if srcContext not in viewSpecMap:
return False
fit = Fit.getInstance().getFit(self.mainFrame.getActiveFit())
Expand Down
5 changes: 2 additions & 3 deletions gui/builtinContextMenus/additionsExportSelection.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from gui.utils.clipboard import toClipboard
from service.fit import Fit
from service.port.eft import exportDrones, exportFighters, exportCargo, exportImplants, exportBoosters
from service.settings import ContextMenuSettings


viewSpecMap = {
Expand All @@ -17,12 +16,12 @@

class AdditionsExportAll(ContextMenuSelection):

visibilitySetting = 'additionsCopyPaste'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()

def display(self, callingWindow, srcContext, selection):
if not ContextMenuSettings.getInstance().get('additionsCopyPaste'):
return False
if srcContext not in viewSpecMap:
return False
if not selection:
Expand Down
5 changes: 2 additions & 3 deletions gui/builtinContextMenus/additionsImport.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from gui.utils.clipboard import fromClipboard
from service.fit import Fit
from service.port.eft import parseAdditions
from service.settings import ContextMenuSettings


viewSpecMap = {
Expand All @@ -18,12 +17,12 @@

class AdditionsImport(ContextMenuUnconditional):

visibilitySetting = 'additionsCopyPaste'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()

def display(self, callingWindow, srcContext):
if not ContextMenuSettings.getInstance().get('additionsCopyPaste'):
return False
if srcContext not in viewSpecMap:
return False
fit = Fit.getInstance().getFit(self.mainFrame.getActiveFit())
Expand Down
7 changes: 2 additions & 5 deletions gui/builtinContextMenus/ammoToDmgPattern.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,16 @@
import gui.mainFrame
from gui.contextMenu import ContextMenuSingle
from service.fit import Fit
from service.settings import ContextMenuSettings


class AmmoToDmgPattern(ContextMenuSingle):

visibilitySetting = 'ammoPattern'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()

def display(self, callingWindow, srcContext, mainItem):
if not self.settings.get('ammoPattern'):
return False

if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False

Expand Down
7 changes: 2 additions & 5 deletions gui/builtinContextMenus/itemFill.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
import gui.fitCommands as cmd
import gui.mainFrame
from gui.contextMenu import ContextMenuSingle
from service.settings import ContextMenuSettings


class FillWithItem(ContextMenuSingle):

visibilitySetting = 'moduleFill'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()

def display(self, callingWindow, srcContext, mainItem):
if not self.settings.get('moduleFill'):
return False

if srcContext not in ('marketItemGroup', 'marketItemMisc'):
return False

Expand Down
7 changes: 2 additions & 5 deletions gui/builtinContextMenus/itemProject.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,16 @@
import gui.mainFrame
from gui.contextMenu import ContextMenuSingle
from service.fit import Fit
from service.settings import ContextMenuSettings


class ProjectItem(ContextMenuSingle):

visibilitySetting = 'project'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()

def display(self, callingWindow, srcContext, mainItem):
if not self.settings.get('project'):
return False

if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False

Expand Down
7 changes: 2 additions & 5 deletions gui/builtinContextMenus/itemVariationChange.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,16 @@
from gui.fitCommands.helpers import getSimilarModPositions, getSimilarFighters
from service.fit import Fit
from service.market import Market
from service.settings import ContextMenuSettings


class ChangeItemToVariation(ContextMenuCombined):

visibilitySetting = 'metaSwap'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()

def display(self, callingWindow, srcContext, mainItem, selection):
if not self.settings.get('metaSwap'):
return False

if self.mainFrame.getActiveFit() is None or srcContext not in (
'fittingModule',
'droneItem',
Expand Down
8 changes: 2 additions & 6 deletions gui/builtinContextMenus/moduleFill.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@
import gui.mainFrame
from gui.contextMenu import ContextMenuSingle
from service.fit import Fit
from service.settings import ContextMenuSettings


class FillWithModule(ContextMenuSingle):

visibilitySetting = 'moduleFill'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()

def display(self, callingWindow, srcContext, mainItem):

if not self.settings.get('moduleFill'):
return False

if mainItem is None or getattr(mainItem, 'isEmpty', False):
return False

Expand Down
7 changes: 2 additions & 5 deletions gui/builtinContextMenus/moduleSpool.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,17 @@
from eos.utils.spoolSupport import SpoolType, SpoolOptions
from gui.contextMenu import ContextMenuSingle
from service.fit import Fit
from service.settings import ContextMenuSettings


class ChangeModuleSpool(ContextMenuSingle):

visibilitySetting = 'spoolup'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()
self.resetId = None

def display(self, callingWindow, srcContext, mainItem):
if not self.settings.get('spoolup'):
return False

if srcContext not in ('fittingModule', 'projectedModule') or self.mainFrame.getActiveFit() is None:
return False

Expand Down
7 changes: 2 additions & 5 deletions gui/builtinContextMenus/skillAffectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,16 @@
from gui.contextMenu import ContextMenuSingle
from service.character import Character
from service.fit import Fit
from service.settings import ContextMenuSettings


class ChangeAffectingSkills(ContextMenuSingle):

visibilitySetting = 'changeAffectingSkills'

def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.settings = ContextMenuSettings.getInstance()

def display(self, callingWindow, srcContext, mainItem):
if not self.settings.get('changeAffectingSkills'):
return False

if srcContext not in (
"fittingModule", "fittingCharge",
"fittingShip", "droneItem",
Expand Down
9 changes: 6 additions & 3 deletions gui/builtinPreferenceViews/pyfaContextMenuPreferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,12 @@ def populatePanel(self, panel):
self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString))
mainSizer.Add(self.stTitle, 0, wx.EXPAND | wx.ALL, 5)

self.stSubTitle = wx.StaticText(panel, wx.ID_ANY,
"Disabling context menus can improve responsiveness.",
wx.DefaultPosition, wx.DefaultSize, 0)
self.stSubTitle = wx.StaticText(
panel, wx.ID_ANY,
'Disabling context menus can improve responsiveness.\n'
'You can hold {} key + right-click to show all menu items regardless of these settings.'.format(
'Command' if 'wxMac' in wx.PlatformInfo else 'Control'),
wx.DefaultPosition, wx.DefaultSize, 0)
self.stSubTitle.Wrap(-1)
mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5)

Expand Down
13 changes: 12 additions & 1 deletion gui/contextMenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import wx
from logbook import Logger

from service.settings import ContextMenuSettings


pyfalog = Logger(__name__)

Expand All @@ -32,6 +34,7 @@ class ContextMenu(metaclass=ABCMeta):
menus = []
_ids = [] # [wx.NewId() for x in xrange(200)] # init with decent amount
_idxid = -1
visibilitySetting = None

@classmethod
def register(cls):
Expand Down Expand Up @@ -72,6 +75,10 @@ def getMenu(cls, callingWindow, mainItem, selection, *fullContexts):
ContextMenu._idxid = -1
debug_start = len(ContextMenu._ids)

# Control being pressed forces all hidden menu items to be shown
visibilitySettingOverride = wx.GetMouseState().GetModifiers() == wx.MOD_CONTROL
cmSettings = ContextMenuSettings.getInstance()

rootMenu = wx.Menu()
rootMenu.info = {}
rootMenu.selection = (selection,) if not hasattr(selection, "__iter__") else selection
Expand All @@ -87,7 +94,11 @@ def getMenu(cls, callingWindow, mainItem, selection, *fullContexts):
for menuHandler in cls.menus:
# loop through registered menus
m = menuHandler()
if m._baseDisplay(callingWindow, srcContext, mainItem, selection):
if m.visibilitySetting:
visible = visibilitySettingOverride or cmSettings.get(m.visibilitySetting)
else:
visible = True
if visible and m._baseDisplay(callingWindow, srcContext, mainItem, selection):
display_amount += 1
texts = m._baseGetText(callingWindow, itemContext, mainItem, selection)

Expand Down

0 comments on commit dee8fa4

Please sign in to comment.