Merge branch 'master' into test-3
Conflicts: eos/gamedata.py eos/saveddata/booster.py eos/saveddata/character.py gui/builtinAdditionPanes/commandView.py gui/builtinContextMenus/commandFits.py gui/builtinMarketBrowser/itemView.py gui/builtinMarketBrowser/marketTree.py gui/builtinPreferenceViews/pyfaGeneralPreferences.py gui/builtinShipBrowser/categoryItem.py gui/builtinShipBrowser/fitItem.py gui/builtinShipBrowser/navigationPanel.py gui/builtinShipBrowser/raceSelector.py gui/builtinShipBrowser/shipItem.py gui/builtinStatsViews/priceViewFull.py gui/builtinViews/fittingView.py gui/characterEditor.py gui/characterSelection.py gui/chromeTabs.py gui/crestFittings.py gui/itemStats.py gui/mainFrame.py scripts/itemDiff.py service/price.py
This commit is contained in:
@@ -4,6 +4,7 @@ import gui.mainFrame
|
||||
import gui.globalEvents as GE
|
||||
# noinspection PyPackageRequirements
|
||||
import wx
|
||||
import re
|
||||
from service.fit import Fit
|
||||
from eos.saveddata.cargo import Cargo as es_Cargo
|
||||
from eos.saveddata.fighter import Fighter as es_Fighter
|
||||
@@ -22,7 +23,7 @@ class ChangeAmount(ContextMenu):
|
||||
return srcContext in ("cargoItem", "projectedFit", "fighterItem", "projectedFighter")
|
||||
|
||||
def getText(self, itmContext, selection):
|
||||
return "Change {0} Quantity".format(itmContext)
|
||||
return u"Change {0} Quantity".format(itmContext)
|
||||
|
||||
def activate(self, fullContext, selection, i):
|
||||
srcContext = fullContext[0]
|
||||
@@ -61,15 +62,16 @@ class AmountChanger(wx.Dialog):
|
||||
return
|
||||
|
||||
sFit = Fit.getInstance()
|
||||
cleanInput = re.sub(r'[^0-9.]', '', self.input.GetLineText(0).strip())
|
||||
mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
fitID = mainFrame.getActiveFit()
|
||||
|
||||
if isinstance(self.thing, es_Cargo):
|
||||
sFit.addCargo(fitID, self.thing.item.ID, int(float(self.input.GetLineText(0))), replace=True)
|
||||
sFit.addCargo(fitID, self.thing.item.ID, int(float(cleanInput)), replace=True)
|
||||
elif isinstance(self.thing, es_Fit):
|
||||
sFit.changeAmount(fitID, self.thing, int(float(self.input.GetLineText(0))))
|
||||
sFit.changeAmount(fitID, self.thing, int(float(cleanInput)))
|
||||
elif isinstance(self.thing, es_Fighter):
|
||||
sFit.changeActiveFighters(fitID, self.thing, int(float(self.input.GetLineText(0))))
|
||||
sFit.changeActiveFighters(fitID, self.thing, int(float(cleanInput)))
|
||||
|
||||
wx.PostEvent(mainFrame, GE.FitChanged(fitID=fitID))
|
||||
|
||||
|
||||
69
gui/builtinContextMenus/boosterSideEffects.py
Normal file
69
gui/builtinContextMenus/boosterSideEffects.py
Normal file
@@ -0,0 +1,69 @@
|
||||
# noinspection PyPackageRequirements
|
||||
import wx
|
||||
from gui.contextMenu import ContextMenu
|
||||
import gui.mainFrame
|
||||
import gui.globalEvents as GE
|
||||
from service.fit import Fit
|
||||
from service.settings import ContextMenuSettings
|
||||
|
||||
|
||||
class BoosterSideEffect(ContextMenu):
|
||||
def __init__(self):
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
self.settings = ContextMenuSettings.getInstance()
|
||||
|
||||
def display(self, srcContext, selection):
|
||||
# if not self.settings.get('fighterAbilities'):
|
||||
# return False
|
||||
|
||||
if self.mainFrame.getActiveFit() is None or srcContext not in ("boosterItem"):
|
||||
return False
|
||||
|
||||
self.booster = selection[0]
|
||||
|
||||
for effect in self.booster.sideEffects:
|
||||
if effect.effect.isImplemented:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def getText(self, itmContext, selection):
|
||||
return "Side Effects"
|
||||
|
||||
def addEffect(self, menu, ability):
|
||||
label = ability.name
|
||||
id = ContextMenu.nextID()
|
||||
self.effectIds[id] = ability
|
||||
menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_CHECK)
|
||||
menu.Bind(wx.EVT_MENU, self.handleMode, menuItem)
|
||||
return menuItem
|
||||
|
||||
def getSubMenu(self, context, selection, rootMenu, i, pitem):
|
||||
msw = True if "wxMSW" in wx.PlatformInfo else False
|
||||
self.context = context
|
||||
self.effectIds = {}
|
||||
|
||||
sub = wx.Menu()
|
||||
|
||||
for effect in self.booster.sideEffects:
|
||||
if not effect.effect.isImplemented:
|
||||
continue
|
||||
menuItem = self.addEffect(rootMenu if msw else sub, effect)
|
||||
sub.AppendItem(menuItem)
|
||||
menuItem.Check(effect.active)
|
||||
|
||||
return sub
|
||||
|
||||
def handleMode(self, event):
|
||||
effect = self.effectIds[event.Id]
|
||||
if effect is False or effect not in self.booster.sideEffects:
|
||||
event.Skip()
|
||||
return
|
||||
|
||||
sFit = Fit.getInstance()
|
||||
fitID = self.mainFrame.getActiveFit()
|
||||
sFit.toggleBoosterSideEffect(fitID, effect)
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
||||
|
||||
|
||||
BoosterSideEffect.register()
|
||||
@@ -18,7 +18,7 @@ class CommandFits(ContextMenu):
|
||||
menu = None
|
||||
|
||||
@classmethod
|
||||
def populateFits(cls, evt):
|
||||
def fitChanged(cls, evt):
|
||||
# This fires on a FitChanged event and updates the command fits whenever a command burst module is added or
|
||||
# removed from a fit. evt.typeID can be either a int or a set (in the case of multiple module deletions)
|
||||
if evt is None or (getattr(evt, 'action', None) in ("modadd", "moddel") and getattr(evt, 'typeID', None)):
|
||||
@@ -29,8 +29,12 @@ class CommandFits(ContextMenu):
|
||||
|
||||
if evt is None or not ids.isdisjoint(cls.commandTypeIDs):
|
||||
# we are adding or removing an item that defines a command fit. Need to refresh fit list
|
||||
sFit = Fit.getInstance()
|
||||
cls.commandFits = sFit.getFitsWithModules(cls.commandTypeIDs)
|
||||
cls.populateFits(evt)
|
||||
|
||||
@classmethod
|
||||
def populateFits(cls, evt):
|
||||
sFit = Fit.getInstance()
|
||||
cls.commandFits = sFit.getFitsWithModules(cls.commandTypeIDs)
|
||||
|
||||
def __init__(self):
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
@@ -62,7 +66,6 @@ class CommandFits(ContextMenu):
|
||||
|
||||
if len(self.__class__.commandFits) < 15:
|
||||
for fit in sorted(self.__class__.commandFits, key=lambda x: x.name):
|
||||
print(fit)
|
||||
menuItem = self.addFit(rootMenu if msw else sub, fit, True)
|
||||
sub.Append(menuItem)
|
||||
else:
|
||||
|
||||
@@ -75,10 +75,10 @@ class ImplantSets(ContextMenu):
|
||||
if self.context == "implantEditor":
|
||||
# we are calling from character editor, the implant source is different
|
||||
sChar = Character.getInstance()
|
||||
charID = self.selection.getActiveCharacter()
|
||||
char = self.selection.entityEditor.getActiveEntity()
|
||||
|
||||
for implant in set.implants:
|
||||
sChar.addImplant(charID, implant.item.ID)
|
||||
sChar.addImplant(char.ID, implant.item.ID)
|
||||
|
||||
wx.PostEvent(self.selection, GE.CharChanged())
|
||||
else:
|
||||
|
||||
@@ -25,7 +25,7 @@ class ItemRemove(ContextMenu):
|
||||
"commandFit")
|
||||
|
||||
def getText(self, itmContext, selection):
|
||||
return "Remove {0}".format(itmContext if itmContext is not None else "Item")
|
||||
return u"Remove {0}".format(itmContext if itmContext is not None else "Item")
|
||||
|
||||
def activate(self, fullContext, selection, i):
|
||||
|
||||
@@ -50,7 +50,7 @@ class ItemRemove(ContextMenu):
|
||||
sFit.removeBooster(fitID, fit.boosters.index(selection[0]))
|
||||
elif srcContext == "cargoItem":
|
||||
sFit.removeCargo(fitID, fit.cargo.index(selection[0]))
|
||||
elif srcContext == "projectedFit":
|
||||
elif srcContext in ("projectedFit", "projectedModule", "projectedDrone", "projectedFighter"):
|
||||
sFit.removeProjected(fitID, selection[0])
|
||||
elif srcContext == "commandFit":
|
||||
sFit.removeCommand(fitID, selection[0])
|
||||
|
||||
@@ -14,6 +14,7 @@ from eos.saveddata.module import Module
|
||||
from eos.saveddata.drone import Drone
|
||||
from eos.saveddata.fighter import Fighter
|
||||
from eos.saveddata.implant import Implant
|
||||
from eos.saveddata.cargo import Cargo
|
||||
|
||||
|
||||
class MetaSwap(ContextMenu):
|
||||
@@ -31,6 +32,7 @@ class MetaSwap(ContextMenu):
|
||||
"fighterItem",
|
||||
"boosterItem",
|
||||
"implantItem",
|
||||
"cargoItem",
|
||||
):
|
||||
return False
|
||||
|
||||
@@ -104,7 +106,9 @@ class MetaSwap(ContextMenu):
|
||||
group = None
|
||||
for item in items:
|
||||
# Apparently no metaGroup for the Tech I variant:
|
||||
if item.metaGroup is None:
|
||||
if "subSystem" in item.effects:
|
||||
thisgroup = item.marketGroup.marketGroupName
|
||||
elif item.metaGroup is None:
|
||||
thisgroup = "Tech I"
|
||||
else:
|
||||
thisgroup = item.metaGroup.name
|
||||
@@ -183,6 +187,13 @@ class MetaSwap(ContextMenu):
|
||||
sFit.addImplant(fitID, item.ID, True)
|
||||
break
|
||||
|
||||
elif isinstance(selected_item, Cargo):
|
||||
for idx, cargo_stack in enumerate(fit.cargo):
|
||||
if cargo_stack is selected_item:
|
||||
sFit.removeCargo(fitID, idx)
|
||||
sFit.addCargo(fitID, item.ID, cargo_stack.amount, True)
|
||||
break
|
||||
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ from gui.contextMenu import ContextMenu
|
||||
import gui.mainFrame
|
||||
# noinspection PyPackageRequirements
|
||||
import wx
|
||||
from gui.shipBrowser import FitSelected
|
||||
from gui.builtinShipBrowser.events import FitSelected
|
||||
from service.settings import ContextMenuSettings
|
||||
|
||||
|
||||
|
||||
50
gui/builtinContextMenus/priceOptions.py
Normal file
50
gui/builtinContextMenus/priceOptions.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import wx
|
||||
|
||||
import gui.globalEvents as GE
|
||||
import gui.mainFrame
|
||||
from gui.contextMenu import ContextMenu
|
||||
from service.settings import PriceMenuSettings
|
||||
|
||||
|
||||
class PriceOptions(ContextMenu):
|
||||
def __init__(self):
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
self.settings = PriceMenuSettings.getInstance()
|
||||
self.optionList = ["Ship", "Modules", "Drones", "Cargo", "Character"]
|
||||
|
||||
def display(self, srcContext, selection):
|
||||
return srcContext in ("priceViewFull", "priceViewMinimal")
|
||||
|
||||
def getText(self, itmContext, selection):
|
||||
return "Include in total"
|
||||
|
||||
def addOption(self, menu, option):
|
||||
label = option
|
||||
id = ContextMenu.nextID()
|
||||
self.optionIds[id] = option
|
||||
menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_CHECK)
|
||||
menu.Bind(wx.EVT_MENU, self.handleMode, menuItem)
|
||||
return menuItem
|
||||
|
||||
def getSubMenu(self, context, selection, rootMenu, i, pitem):
|
||||
msw = True if "wxMSW" in wx.PlatformInfo else False
|
||||
self.context = context
|
||||
self.optionIds = {}
|
||||
|
||||
sub = wx.Menu()
|
||||
|
||||
for option in self.optionList:
|
||||
menuItem = self.addOption(rootMenu if msw else sub, option)
|
||||
sub.AppendItem(menuItem)
|
||||
menuItem.Check(self.settings.get(option.lower()))
|
||||
|
||||
return sub
|
||||
|
||||
def handleMode(self, event):
|
||||
option = self.optionIds[event.Id]
|
||||
self.settings.set(option.lower(), event.Int)
|
||||
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
|
||||
|
||||
|
||||
PriceOptions.register()
|
||||
@@ -2,7 +2,7 @@
|
||||
import wx
|
||||
from gui.contextMenu import ContextMenu
|
||||
import gui.mainFrame
|
||||
from gui.shipBrowser import Stage3Selected
|
||||
from gui.builtinShipBrowser.events import Stage3Selected
|
||||
from service.fit import Fit
|
||||
from service.settings import ContextMenuSettings
|
||||
|
||||
|
||||
Reference in New Issue
Block a user