Rework conditions in some context menus to check mainItem when it's needed by the menu
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user