Rework conditions in some context menus to check mainItem when it's needed by the menu

This commit is contained in:
DarkPhoenix
2019-04-23 10:14:59 +03:00
parent 87ba6a9af0
commit ad0c7a7a9d
21 changed files with 128 additions and 47 deletions

View File

@@ -19,6 +19,9 @@ class AmmoToDmgPattern(ContextMenu):
if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False
if mainItem is None:
return False
for attr in ("emDamage", "thermalDamage", "explosiveDamage", "kineticDamage"):
if mainItem.getAttribute(attr) is not None:
return True
@@ -26,13 +29,12 @@ class AmmoToDmgPattern(ContextMenu):
return False
def getText(self, itmContext, mainItem, selection):
return "Set {0} as Damage Pattern".format(itmContext if itmContext is not None else "Item")
return "Set {} as Damage Pattern".format(itmContext if itmContext is not None else "Item")
def activate(self, fullContext, mainItem, selection, i):
fit = self.mainFrame.getActiveFit()
sFit = Fit.getInstance()
sFit.setAsPattern(fit, mainItem)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fit))
fitID = self.mainFrame.getActiveFit()
Fit.getInstance().setAsPattern(fitID, mainItem)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
def getBitmap(self, context, mainItem, selection):
return None

View File

@@ -15,12 +15,12 @@ class BoosterSideEffect(ContextMenu):
self.settings = ContextMenuSettings.getInstance()
def display(self, srcContext, mainItem, selection):
# if not self.settings.get('fighterAbilities'):
# return False
if self.mainFrame.getActiveFit() is None or srcContext not in "boosterItem":
return False
if mainItem is None:
return False
self.booster = mainItem
for effect in self.booster.sideEffects:

View File

@@ -14,6 +14,9 @@ class AddToCargo(ContextMenu):
if srcContext not in ("marketItemGroup", "marketItemMisc"):
return False
if mainItem is None:
return False
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)

View File

@@ -13,11 +13,13 @@ class AddToCargoAmmo(ContextMenu):
if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False
for selected_item in selection:
if selected_item.category.ID in (
8, # Charge
):
return True
if mainItem is None:
return False
if mainItem.category.ID != 8:
return False
return True
def getText(self, itmContext, mainItem, selection):
return "Add {0} to Cargo (x1000)".format(itmContext)

View File

@@ -19,6 +19,9 @@ class DroneAddStack(ContextMenu):
if self.mainFrame.getActiveFit() is None:
return False
if mainItem is None:
return False
if mainItem.category.name != 'Drone':
return False

View File

@@ -16,10 +16,16 @@ class DroneSplitStack(ContextMenu):
self.settings = ContextMenuSettings.getInstance()
def display(self, srcContext, mainItem, selection):
return srcContext == "droneItem" and mainItem.amount > 1
if srcContext != "droneItem":
return False
if mainItem is None:
return False
return mainItem.amount > 1
def getText(self, itmContext, mainItem, selection):
return "Split {0} Stack".format(itmContext)
return "Split {} Stack".format(itmContext)
def activate(self, fullContext, mainItem, selection, i):
dlg = DroneStackSplit(self.mainFrame, mainItem.amount)

View File

@@ -18,6 +18,9 @@ class FighterAbilities(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext not in ("fighterItem", "projectedFighter"):
return False
if mainItem is None:
return False
self.fighter = mainItem
self.isProjected = True if srcContext == "projectedFighter" else False
return True

View File

@@ -15,6 +15,10 @@ class OpenFitInNewTab(ContextMenu):
def display(self, srcContext, mainItem, selection):
if srcContext not in ("projectedFit", "commandFit"):
return False
if mainItem is None:
return False
currentFitID = self.mainFrame.getActiveFit()
selectedFitID = mainItem.ID
if currentFitID == selectedFitID:

View File

@@ -34,7 +34,7 @@ class addImplantSet(ContextMenu):
way of doing this. However, we use this context menu within the Character Editor to apply implant sets to a
character, so we need to access the character editor.
It is for these reasons that I hijack the selection parameter when calling the menu and pass a pointer to the
It is for these reasons that I hijack the mainItem parameter when calling the menu and pass a pointer to the
Character Editor. This way we can use it to get current editing character ID and apply the implants.
It would probably be better to have a function on the MainFrame to get the currently open Character Editor (as

View File

@@ -20,7 +20,13 @@ class ChangeItemAmount(ContextMenu):
self.settings = ContextMenuSettings.getInstance()
def display(self, srcContext, mainItem, selection):
return srcContext in ("droneItem", "projectedDrone", "cargoItem", "projectedFit", "fighterItem", "projectedFighter")
if srcContext not in ("droneItem", "projectedDrone", "cargoItem", "projectedFit", "fighterItem", "projectedFighter"):
return False
if mainItem is None:
return False
return True
def getText(self, itmContext, mainItem, selection):
return "Change {0} Quantity".format(itmContext)

View File

@@ -13,12 +13,19 @@ class FillWithItem(ContextMenu):
def display(self, srcContext, mainItem, selection):
if not self.settings.get('moduleFill'):
return False
if srcContext not in ('marketItemGroup', 'marketItemMisc'):
return False
if self.mainFrame.getActiveFit() is None:
return False
if mainItem is None:
return False
if mainItem.category.name != 'Module':
return False
return True
def getText(self, itmContext, mainItem, selection):

View File

@@ -21,6 +21,9 @@ class JumpToMarketItem(ContextMenu):
if srcContext not in validContexts or mainItem is None:
return False
if mainItem is None or getattr(mainItem, "isEmpty", False):
return False
sMkt = Market.getInstance()
item = getattr(mainItem, "item", mainItem)
isMutated = getattr(mainItem, "isMutated", False)

View File

@@ -17,6 +17,9 @@ class ProjectItem(ContextMenu):
if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None:
return False
if mainItem is None:
return False
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)

View File

@@ -13,12 +13,20 @@ class RemoveItem(ContextMenu):
self.settings = ContextMenuSettings.getInstance()
def display(self, srcContext, mainItem, selection):
return srcContext in ("fittingModule", "droneItem",
"implantItem", "boosterItem",
"projectedModule", "cargoItem",
"projectedFit", "projectedDrone",
"fighterItem", "projectedFighter",
"commandFit")
if srcContext not in (
"fittingModule", "droneItem",
"implantItem", "boosterItem",
"projectedModule", "cargoItem",
"projectedFit", "projectedDrone",
"fighterItem", "projectedFighter",
"commandFit"
):
return False
if mainItem is None and len(selection) == 0:
return False
return True
def getText(self, itmContext, mainItem, selection):
return 'Remove {}{}'.format(
@@ -27,6 +35,8 @@ class RemoveItem(ContextMenu):
def activate(self, fullContext, mainItem, selection, i):
mainItem = selection[0] if mainItem is None else mainItem
srcContext = fullContext[0]
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()

View File

@@ -14,19 +14,27 @@ class ItemStats(ContextMenu):
self.settings = ContextMenuSettings.getInstance()
def display(self, srcContext, mainItem, selection):
return srcContext in ("marketItemGroup", "marketItemMisc",
"fittingModule", "fittingCharge",
"fittingShip", "baseShip",
"cargoItem", "droneItem",
"implantItem", "boosterItem",
"skillItem", "projectedModule",
"projectedDrone", "projectedCharge",
"itemStats", "fighterItem",
"implantItemChar", "projectedFighter",
"fittingMode")
if srcContext not in (
"marketItemGroup", "marketItemMisc",
"fittingModule", "fittingCharge",
"fittingShip", "baseShip",
"cargoItem", "droneItem",
"implantItem", "boosterItem",
"skillItem", "projectedModule",
"projectedDrone", "projectedCharge",
"itemStats", "fighterItem",
"implantItemChar", "projectedFighter",
"fittingMode"
):
return False
if (mainItem is None or getattr(mainItem, "isEmpty", False)) and srcContext != "fittingShip":
return False
return True
def getText(self, itmContext, mainItem, selection):
return "{0} Stats".format(itmContext if itmContext is not None else "Item")
return "{} Stats".format(itmContext if itmContext is not None else "Item")
def activate(self, fullContext, mainItem, selection, i):
srcContext = fullContext[0]

View File

@@ -31,6 +31,9 @@ class ChangeItemToVariation(ContextMenu):
):
return False
if (mainItem is None or getattr(mainItem, 'isEmpty', False)) and len(selection) == 0:
return False
# Check if list of variations is same for all of selection
# If not - don't show the menu
mkt = Market.getInstance()

View File

@@ -25,12 +25,13 @@ class ChangeModuleAmmo(ContextMenu):
if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "projectedModule"):
return False
modules = selection if srcContext == "fittingModule" else (mainItem,)
if len(selection) == 0:
return False
validCharges = None
checkedTypes = set()
for mod in modules:
for mod in selection:
# loop through modules and gather list of valid charges
if mod.item.ID in checkedTypes:
continue
@@ -45,13 +46,15 @@ class ChangeModuleAmmo(ContextMenu):
if validCharges is not None and validCharges != currCharges:
return False
validCharges = currCharges
self.module = mod
if validCharges is None:
return False
self.modules = modules
self.mainItem = mainItem
self.selection = selection
self.charges = list([charge for charge in validCharges if Market.getInstance().getPublicityByItem(charge)])
self.context = srcContext
return len(self.charges) > 0
@@ -241,7 +244,7 @@ class ChangeModuleAmmo(ContextMenu):
modContainer = fit.projectedModules
else:
return
selectedModule = self.modules[0]
selectedModule = self.selection[0] if self.mainItem is None else self.mainItem
positions = getSimilarModPositions(modContainer, selectedModule)
self.mainFrame.command.Submit(command(
fitID=fitID,
@@ -258,7 +261,7 @@ class ChangeModuleAmmo(ContextMenu):
return
positions = []
for position, mod in enumerate(modContainer):
if mod in self.modules:
if mod in self.selection:
positions.append(position)
self.mainFrame.command.Submit(command(
fitID=fitID,

View File

@@ -13,6 +13,10 @@ class FillWithModule(ContextMenu):
def display(self, srcContext, mainItem, selection):
if not self.settings.get('moduleFill'):
return False
if mainItem is None or mainItem.isEmpty:
return False
return srcContext == "fittingModule"
def getText(self, itmContext, mainItem, selection):

View File

@@ -15,13 +15,12 @@ class ChangeModuleMutation(ContextMenu):
self.eventIDs = {}
def display(self, srcContext, mainItem, selection):
# if not self.settings.get('ammoPattern'):
# return False
if srcContext != "fittingModule" or self.mainFrame.getActiveFit() is None:
return False
if mainItem is None or mainItem.isEmpty:
return False
if len(mainItem.item.mutaplasmids) == 0 and not mainItem.isMutated:
return False

View File

@@ -24,6 +24,9 @@ class ChangeModuleSpool(ContextMenu):
if srcContext not in ('fittingModule', 'projectedModule') or self.mainFrame.getActiveFit() is None:
return False
if mainItem is None or mainItem.isEmpty:
return False
self.mod = mainItem
self.context = srcContext

View File

@@ -20,13 +20,23 @@ class ChangeAffectingSkills(ContextMenu):
if not self.settings.get('changeAffectingSkills'):
return False
if self.mainFrame.getActiveFit() is None or srcContext not in (
"fittingModule", "fittingCharge", "fittingShip", "droneItem", "fighterItem"):
if srcContext not in (
"fittingModule", "fittingCharge",
"fittingShip", "droneItem",
"fighterItem"
):
return False
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return False
if mainItem is None or getattr(mainItem, "isEmpty", False):
return
self.sChar = Character.getInstance()
self.sFit = Fit.getInstance()
fit = self.sFit.getFit(self.mainFrame.getActiveFit())
fit = self.sFit.getFit(fitID)
self.charID = fit.character.ID
@@ -34,7 +44,6 @@ class ChangeAffectingSkills(ContextMenu):
# return False
if srcContext == "fittingShip":
fitID = self.mainFrame.getActiveFit()
sFit = Fit.getInstance()
self.stuff = sFit.getFit(fitID).ship
cont = sFit.getFit(fitID).ship.itemModifiedAttributes