Move target profile context menu handling to separate package

This is needed to be able to import them separately at different times and avoid code duplication
This commit is contained in:
DarkPhoenix
2019-07-31 09:53:37 +03:00
parent 7190d91d31
commit 1e3783c21d
5 changed files with 164 additions and 56 deletions

View File

@@ -1,47 +1,44 @@
# noinspection PyUnresolvedReferences
from gui.builtinContextMenus import ( # noqa: E402,F401
# Various command and projected-related items which we want to have first,
# before generic commands
fitOpenNewTab,
envEffectAdd,
fitAddCurrentlyOpen,
commandFitAdd,
# Often-used item manipulations
shipModeChange,
moduleAmmoChange,
moduleSpool,
boosterSideEffects,
fighterAbilities,
# Item info
itemStats,
itemMarketJump,
fitSystemSecurity, # Not really an item info but want to keep it here
shipJump,
# Generic item manipulations
itemRemove,
itemAmountChange,
droneSplitStack,
itemVariationChange,
moduleMutations,
moduleFill,
skillAffectors,
# Market stuff
itemFill,
droneAddStack,
cargoAdd,
cargoAddAmmo,
itemProject,
ammoToDmgPattern,
implantSetAdd,
# Price
priceOptions,
# Resistance panel
damagePatternChange,
# Firepower panel
factorReload,
targetProfile,
# Graph extra options
graphDmgIgnoreResists,
graphDmgApplyProjected,
graphDmgDroneMode,
)
# Various command and projected-related items which we want to have first,
# before generic commands
from gui.builtinContextMenus import fitOpenNewTab
from gui.builtinContextMenus import envEffectAdd
from gui.builtinContextMenus import fitAddCurrentlyOpen
from gui.builtinContextMenus import commandFitAdd
# Often-used item manipulations
from gui.builtinContextMenus import shipModeChange
from gui.builtinContextMenus import moduleAmmoChange
from gui.builtinContextMenus import moduleSpool
from gui.builtinContextMenus import boosterSideEffects
from gui.builtinContextMenus import fighterAbilities
# Item info
from gui.builtinContextMenus import itemStats
from gui.builtinContextMenus import itemMarketJump
from gui.builtinContextMenus import fitSystemSecurity # Not really an item info but want to keep it here
from gui.builtinContextMenus import shipJump
# Generic item manipulations
from gui.builtinContextMenus import itemRemove
from gui.builtinContextMenus import itemAmountChange
from gui.builtinContextMenus import droneSplitStack
from gui.builtinContextMenus import itemVariationChange
from gui.builtinContextMenus import moduleMutations
from gui.builtinContextMenus import moduleFill
from gui.builtinContextMenus import skillAffectors
# Market stuff
from gui.builtinContextMenus import itemFill
from gui.builtinContextMenus import droneAddStack
from gui.builtinContextMenus import cargoAdd
from gui.builtinContextMenus import cargoAddAmmo
from gui.builtinContextMenus import itemProject
from gui.builtinContextMenus import ammoToDmgPattern
from gui.builtinContextMenus import implantSetAdd
# Price
from gui.builtinContextMenus import priceOptions
# Resistance panel
from gui.builtinContextMenus import damagePatternChange
# Firepower panel
from gui.builtinContextMenus import factorReload
from gui.builtinContextMenus.targetProfile import switcher
# Graph extra options
from gui.builtinContextMenus import graphDmgIgnoreResists
from gui.builtinContextMenus import graphDmgApplyProjected
from gui.builtinContextMenus import graphDmgDroneMode

View File

@@ -0,0 +1,111 @@
from collections import OrderedDict
# noinspection PyPackageRequirements
import wx
import gui.globalEvents as GE
import gui.mainFrame
from gui.bitmap_loader import BitmapLoader
from gui.contextMenu import ContextMenuUnconditional
from service.fit import Fit
from service.targetProfile import TargetProfile as svc_TargetProfile
class TargetProfileAdder(ContextMenuUnconditional):
def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, callingWindow, srcContext):
if srcContext != 'graphTgtList':
return False
sTR = svc_TargetProfile.getInstance()
self.patterns = sTR.getTargetProfileList()
self.patterns.sort(key=lambda p: (p.name in ['None'], p.name))
return len(self.patterns) > 0
def getText(self, callingWindow, itmContext):
return 'Add Target Profile'
def handleResistSwitch(self, event):
pattern = self.patternIds.get(event.Id, False)
if pattern is False:
event.Skip()
return
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setTargetProfile(fitID, pattern)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitIDs=(fitID,)))
def addPattern(self, rootMenu, pattern):
id = ContextMenuUnconditional.nextID()
name = getattr(pattern, '_name', pattern.name) if pattern is not None else 'No Profile'
self.patternIds[id] = pattern
item = wx.MenuItem(rootMenu, id, name)
rootMenu.Bind(wx.EVT_MENU, self.handleResistSwitch, item)
# set pattern attr to menu item
item.pattern = pattern
# determine active pattern
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
f = sFit.getFit(fitID)
tr = f.targetProfile
if tr == pattern:
bitmap = BitmapLoader.getBitmap('state_active_small', 'gui')
item.SetBitmap(bitmap)
return item
def getSubMenu(self, callingWindow, context, rootMenu, i, pitem):
msw = True if 'wxMSW' in wx.PlatformInfo else False
self.patternIds = {}
self.subMenus = OrderedDict()
self.singles = []
sub = wx.Menu()
for pattern in self.patterns:
start, end = pattern.name.find('['), pattern.name.find(']')
if start is not -1 and end is not -1:
currBase = pattern.name[start + 1:end]
# set helper attr
setattr(pattern, '_name', pattern.name[end + 1:].strip())
if currBase not in self.subMenus:
self.subMenus[currBase] = []
self.subMenus[currBase].append(pattern)
else:
self.singles.append(pattern)
sub.Append(self.addPattern(rootMenu if msw else sub, None)) # Add reset
sub.AppendSeparator()
# Single items, no parent
for pattern in self.singles:
sub.Append(self.addPattern(rootMenu if msw else sub, pattern))
# Items that have a parent
for menuName, patterns in list(self.subMenus.items()):
# Create parent item for root menu that is simply name of parent
item = wx.MenuItem(rootMenu, ContextMenuUnconditional.nextID(), menuName)
# Create menu for child items
grandSub = wx.Menu()
# sub.Bind(wx.EVT_MENU, self.handleResistSwitch)
# Apply child menu to parent item
item.SetSubMenu(grandSub)
# Append child items to child menu
for pattern in patterns:
grandSub.Append(self.addPattern(rootMenu if msw else grandSub, pattern))
sub.Append(item) # finally, append parent item to root menu
return sub
TargetProfileAdder.register()

View File

@@ -11,24 +11,24 @@ from service.fit import Fit
from service.targetProfile import TargetProfile as svc_TargetProfile
class TargetProfile(ContextMenuUnconditional):
class TargetProfileSwitcher(ContextMenuUnconditional):
def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, callingWindow, srcContext):
if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull":
if self.mainFrame.getActiveFit() is None or srcContext != 'firepowerViewFull':
return False
sTR = svc_TargetProfile.getInstance()
self.patterns = sTR.getTargetProfileList()
self.patterns.sort(key=lambda p: (p.name in ["None"], p.name))
self.patterns.sort(key=lambda p: (p.name in ['None'], p.name))
return len(self.patterns) > 0
def getText(self, callingWindow, itmContext):
# We take into consideration just target resists, so call menu item accordingly
return "Target Resists"
return 'Target Resists'
def handleResistSwitch(self, event):
pattern = self.patternIds.get(event.Id, False)
@@ -43,7 +43,7 @@ class TargetProfile(ContextMenuUnconditional):
def addPattern(self, rootMenu, pattern):
id = ContextMenuUnconditional.nextID()
name = getattr(pattern, "_name", pattern.name) if pattern is not None else "No Profile"
name = getattr(pattern, '_name', pattern.name) if pattern is not None else 'No Profile'
self.patternIds[id] = pattern
item = wx.MenuItem(rootMenu, id, name)
@@ -59,12 +59,12 @@ class TargetProfile(ContextMenuUnconditional):
tr = f.targetProfile
if tr == pattern:
bitmap = BitmapLoader.getBitmap("state_active_small", "gui")
bitmap = BitmapLoader.getBitmap('state_active_small', 'gui')
item.SetBitmap(bitmap)
return item
def getSubMenu(self, callingWindow, context, rootMenu, i, pitem):
msw = True if "wxMSW" in wx.PlatformInfo else False
msw = True if 'wxMSW' in wx.PlatformInfo else False
self.patternIds = {}
self.subMenus = OrderedDict()
self.singles = []
@@ -75,7 +75,7 @@ class TargetProfile(ContextMenuUnconditional):
if start is not -1 and end is not -1:
currBase = pattern.name[start + 1:end]
# set helper attr
setattr(pattern, "_name", pattern.name[end + 1:].strip())
setattr(pattern, '_name', pattern.name[end + 1:].strip())
if currBase not in self.subMenus:
self.subMenus[currBase] = []
self.subMenus[currBase].append(pattern)
@@ -109,4 +109,4 @@ class TargetProfile(ContextMenuUnconditional):
return sub
TargetProfile.register()
TargetProfileSwitcher.register()