From 436bee1e85f2379d012b133d4afdcd4b626c922b Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sat, 5 Jan 2019 22:26:17 -0500 Subject: [PATCH 01/16] Start working on a gui to set spoolup options --- gui/builtinContextMenus/spoolUp.py | 122 +++++++++++++++++++++++++++++ gui/contextMenu.py | 1 + 2 files changed, 123 insertions(+) create mode 100644 gui/builtinContextMenus/spoolUp.py diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py new file mode 100644 index 000000000..0d6f04452 --- /dev/null +++ b/gui/builtinContextMenus/spoolUp.py @@ -0,0 +1,122 @@ +import gui.mainFrame +from gui.contextMenu import ContextMenu +# noinspection PyPackageRequirements +from service.settings import ContextMenuSettings +import wx +from eos.utils.spoolSupport import SpoolType + +class SpoolUp(ContextMenu): + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() + + def display(self, srcContext, selection): + if not self.settings.get('project'): + return False + + if srcContext not in ("fittingModule") or self.mainFrame.getActiveFit() is None: + return False + + item = selection[0] + + return item.item.group.name in ('Precursor Weapon') + + def getText(self, itmContext, selection): + return "Set Spoolup".format(itmContext) + + def activate(self, fullContext, selection, i): + thing = selection[0] + mainFrame = gui.mainFrame.MainFrame.getInstance() + fitID = mainFrame.getActiveFit() + srcContext = fullContext[0] + + while True: + dlg = SpoolUpChanger(self.mainFrame, thing) + if dlg.ShowModal() != wx.ID_OK: + break + + type = dlg.spoolChoice.GetClientData(dlg.spoolChoice.GetSelection()) + amount = dlg.input.GetValue() + + if type == SpoolType.SCALE: + if amount < 0 or amount > 100: + dlg = wx.MessageDialog(self.mainFrame, "The amount provided isn't within the range of 0 - 100.", "Error", wx.OK | wx.ICON_ERROR) + dlg.ShowModal() + continue + amount = amount / 100 + if type is None: + amount = None + + thing.spoolType = type + thing.spoolAmount = amount + break + + + +SpoolUp.register() + + +class SpoolUpChanger(wx.Dialog): + + spoolTypes = { + None: ("Default", "pyfa defaults to using 'scale' calculation with 100%"), + SpoolType.SCALE: ("Scale", "Amount is a percentage from 0 - 100; rounds down to closest module cycle."), + SpoolType.TIME: ("Time (s)", "Amount defines time in seconds since spoolup module was activated."), + SpoolType.CYCLES: ("Cycles", "Amount is number of cycles module went through since being activated.") + } + + def __init__(self, parent, module): + wx.Dialog.__init__(self, parent, title="Change Spool-Up") + self.SetMinSize((346, 156)) + + bSizer1 = wx.BoxSizer(wx.VERTICAL) + + bSizer2 = wx.BoxSizer(wx.VERTICAL) + + text = wx.StaticText(self, wx.ID_ANY, "Type:") + bSizer2.Add(text, 0) + + self.spoolChoice = wx.Choice(self, wx.ID_ANY, style=0) + + for k, v in self.spoolTypes.items(): + i = self.spoolChoice.Append(v[0], k) + if module.spoolType == k: + self.spoolChoice.SetSelection(i) + + self.spoolChoice.Bind(wx.EVT_CHOICE, self.spoolTypeChanged) + + + bSizer2.Add(self.spoolChoice, 0, wx.TOP | wx.BOTTOM | wx.EXPAND, 5) + + self.spoolDesc = wx.StaticText(self, wx.ID_ANY, self.spoolTypes[module.spoolType][1]) + bSizer2.Add(self.spoolDesc, 1) + + text1 = wx.StaticText(self, wx.ID_ANY, "Amount:") + bSizer2.Add(text1, 0, wx.TOP, 10) + + bSizer1.Add(bSizer2, 0, wx.ALL, 10) + + self.input = wx.SpinCtrlDouble(self, min=0, max=1000) + + bSizer1.Add(self.input, 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) + + bSizer3 = wx.BoxSizer(wx.VERTICAL) + bSizer3.Add(wx.StaticLine(self, wx.ID_ANY), 0, wx.BOTTOM | wx.EXPAND, 15) + + bSizer3.Add(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL), 0, wx.EXPAND) + bSizer1.Add(bSizer3, 0, wx.ALL | wx.EXPAND, 10) + + self.input.SetFocus() + self.input.Bind(wx.EVT_TEXT_ENTER, self.processEnter) + self.SetSizer(bSizer1) + self.CenterOnParent() + self.Fit() + + def spoolTypeChanged(self, evt): + if evt.ClientData is None: + self.input.Enable(False) + self.spoolDesc.SetLabel(self.spoolTypes[evt.ClientData][1]) + self.Layout() + + def processEnter(self, evt): + self.EndModal(wx.ID_OK) diff --git a/gui/contextMenu.py b/gui/contextMenu.py index be972b0f8..6a97481a2 100644 --- a/gui/contextMenu.py +++ b/gui/contextMenu.py @@ -184,6 +184,7 @@ from gui.builtinContextMenus import ( # noqa: E402,F401 moduleGlobalAmmoPicker, moduleAmmoPicker, itemStats, + spoolUp, damagePattern, marketJump, # droneSplit, From c645c089ddeefc4a8cd79ad0d55ced91b4003ccb Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 10 Jan 2019 23:13:22 -0500 Subject: [PATCH 02/16] More work on the spoolup gui, including support for commands and some other nicities (recalc fit when changing, load the input with previous) --- gui/builtinContextMenus/spoolUp.py | 12 ++++----- gui/fitCommands/__init__.py | 1 + gui/fitCommands/calc/fitSetSpoolup.py | 37 +++++++++++++++++++++++++++ gui/fitCommands/guiSetSpoolup.py | 32 +++++++++++++++++++++++ 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 gui/fitCommands/calc/fitSetSpoolup.py create mode 100644 gui/fitCommands/guiSetSpoolup.py diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 0d6f04452..e87becabf 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -4,6 +4,8 @@ from gui.contextMenu import ContextMenu from service.settings import ContextMenuSettings import wx from eos.utils.spoolSupport import SpoolType +import gui.fitCommands as cmd + class SpoolUp(ContextMenu): def __init__(self): @@ -47,10 +49,8 @@ class SpoolUp(ContextMenu): if type is None: amount = None - thing.spoolType = type - thing.spoolAmount = amount - break - + self.mainFrame.command.Submit(cmd.GuiSetSpoolup(fitID, thing, type, amount)) + return SpoolUp.register() @@ -106,6 +106,7 @@ class SpoolUpChanger(wx.Dialog): bSizer3.Add(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL), 0, wx.EXPAND) bSizer1.Add(bSizer3, 0, wx.ALL | wx.EXPAND, 10) + self.input.SetValue(module.spoolAmount or 0) self.input.SetFocus() self.input.Bind(wx.EVT_TEXT_ENTER, self.processEnter) self.SetSizer(bSizer1) @@ -113,8 +114,7 @@ class SpoolUpChanger(wx.Dialog): self.Fit() def spoolTypeChanged(self, evt): - if evt.ClientData is None: - self.input.Enable(False) + self.input.Enable(evt.ClientData is not None) self.spoolDesc.SetLabel(self.spoolTypes[evt.ClientData][1]) self.Layout() diff --git a/gui/fitCommands/__init__.py b/gui/fitCommands/__init__.py index 3501e8089..2598f8bfb 100644 --- a/gui/fitCommands/__init__.py +++ b/gui/fitCommands/__init__.py @@ -34,3 +34,4 @@ from .guiToggleDrone import GuiToggleDroneCommand from .guiFitRename import GuiFitRenameCommand from .guiChangeImplantLocation import GuiChangeImplantLocation from .guiImportMutatedModule import GuiImportMutatedModuleCommand +from .guiSetSpoolup import GuiSetSpoolup diff --git a/gui/fitCommands/calc/fitSetSpoolup.py b/gui/fitCommands/calc/fitSetSpoolup.py new file mode 100644 index 000000000..9274d94bc --- /dev/null +++ b/gui/fitCommands/calc/fitSetSpoolup.py @@ -0,0 +1,37 @@ +import wx +import eos.db +from logbook import Logger +from eos.saveddata.booster import Booster +pyfalog = Logger(__name__) + + +class FitSetSpoolupCommand(wx.Command): + def __init__(self, fitID, position, spoolType, spoolAmount): + wx.Command.__init__(self, True) + self.fitID = fitID + self.position = position + self.spoolType = spoolType + self.spoolAmount = spoolAmount + self.projected = False # todo: get this to work with projected modules? Is that a thing? + self.cache = None + + def Do(self): + return self.__set(self.spoolType, self.spoolAmount) + + def Undo(self): + if self.cache: + self.__set(*self.cache) + return True + + def __set(self, type, amount): + fit = eos.db.getFit(self.fitID) + source = fit.modules if not self.projected else fit.projectedModules + + mod = source[self.position] + self.cache = mod.spoolType, mod.spoolAmount + + mod.spoolType = type + mod.spoolAmount = amount + + eos.db.commit() + return True diff --git a/gui/fitCommands/guiSetSpoolup.py b/gui/fitCommands/guiSetSpoolup.py new file mode 100644 index 000000000..60f0c6f1e --- /dev/null +++ b/gui/fitCommands/guiSetSpoolup.py @@ -0,0 +1,32 @@ +import wx +from service.fit import Fit + +import gui.mainFrame +from gui import globalEvents as GE +from .calc.fitSetSpoolup import FitSetSpoolupCommand + + +class GuiSetSpoolup(wx.Command): + def __init__(self, fitID, module, spoolupType, spoolupAmount): + wx.Command.__init__(self, True, "Booster Add") + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.sFit = Fit.getInstance() + self.internal_history = wx.CommandProcessor() + self.fitID = fitID + self.position = module.modPosition + self.spoolType = spoolupType + self.spoolupAmount = spoolupAmount + + def Do(self): + if self.internal_history.Submit(FitSetSpoolupCommand(self.fitID, self.position, self.spoolType, self.spoolupAmount)): + self.sFit.recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True + return False + + def Undo(self): + for _ in self.internal_history.Commands: + self.internal_history.Undo() + self.sFit.recalc(self.fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) + return True From 5f237e578bfa167bbc7f7e56d276026827b0cc90 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 10 Jan 2019 23:16:04 -0500 Subject: [PATCH 03/16] use spoolup dialog with remote reps --- gui/builtinContextMenus/spoolUp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index e87becabf..5206ea713 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -21,7 +21,7 @@ class SpoolUp(ContextMenu): item = selection[0] - return item.item.group.name in ('Precursor Weapon') + return item.item.group.name in ("Precursor Weapon", "Mutadaptive Remote Armor Repairer", "Mutadaptive Remote Armor Repairer Blueprint") def getText(self, itmContext, selection): return "Set Spoolup".format(itmContext) From 3259cc3e50a93ff3b47c3d6677d698df07ee974d Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 10 Jan 2019 23:24:34 -0500 Subject: [PATCH 04/16] Rename Scale to percentage --- gui/builtinContextMenus/spoolUp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 5206ea713..0ea4c6253 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -60,7 +60,7 @@ class SpoolUpChanger(wx.Dialog): spoolTypes = { None: ("Default", "pyfa defaults to using 'scale' calculation with 100%"), - SpoolType.SCALE: ("Scale", "Amount is a percentage from 0 - 100; rounds down to closest module cycle."), + SpoolType.SCALE: ("Percentage", "Amount is a percentage from 0 - 100; rounds down to closest module cycle."), SpoolType.TIME: ("Time (s)", "Amount defines time in seconds since spoolup module was activated."), SpoolType.CYCLES: ("Cycles", "Amount is number of cycles module went through since being activated.") } From 986ae16eafc5659a0681fb6335aa30ab3895a917 Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sat, 2 Mar 2019 21:31:13 -0500 Subject: [PATCH 05/16] Allow global spoolup value to be editable via preferences --- eos/config.py | 1 + ...hipmoduleremotearmormutadaptiverepairer.py | 5 ++-- .../pyfaEnginePreferences.py | 23 +++++++++++++++++++ gui/builtinStatsViews/firepowerViewFull.py | 5 ++-- gui/builtinStatsViews/outgoingViewFull.py | 4 ++-- gui/builtinStatsViews/outgoingViewMinimal.py | 4 ++-- gui/builtinViewColumns/misc.py | 8 +++---- 7 files changed, 36 insertions(+), 14 deletions(-) diff --git a/eos/config.py b/eos/config.py index c6c53f748..a570a1926 100644 --- a/eos/config.py +++ b/eos/config.py @@ -26,6 +26,7 @@ pyfalog.debug("Saveddata connection string: {0}", saveddata_connectionstring) settings = { "useStaticAdaptiveArmorHardener": False, "strictSkillLevels": True, + "globalDefaultSpoolupPercentage": 1.0 } # Autodetect path, only change if the autodetection bugs out. diff --git a/eos/effects/shipmoduleremotearmormutadaptiverepairer.py b/eos/effects/shipmoduleremotearmormutadaptiverepairer.py index ec98c1e23..29d52fb47 100644 --- a/eos/effects/shipmoduleremotearmormutadaptiverepairer.py +++ b/eos/effects/shipmoduleremotearmormutadaptiverepairer.py @@ -5,7 +5,7 @@ from eos.utils.spoolSupport import SpoolType, SpoolOptions, calculateSpoolup, resolveSpoolOptions - +import eos.config type = "projected", "active" runTime = "late" @@ -17,8 +17,7 @@ def handler(fit, container, context, **kwargs): cycleTime = container.getModifiedItemAttr("duration") / 1000.0 repSpoolMax = container.getModifiedItemAttr("repairMultiplierBonusMax") repSpoolPerCycle = container.getModifiedItemAttr("repairMultiplierBonusPerCycle") - # TODO: fetch spoolup option - defaultSpoolValue = 1 + defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage'] spoolType, spoolAmount = resolveSpoolOptions(SpoolOptions(SpoolType.SCALE, defaultSpoolValue, False), container) rps = repAmountBase * (1 + calculateSpoolup(repSpoolMax, repSpoolPerCycle, cycleTime, spoolType, spoolAmount)[0]) / cycleTime rpsPreSpool = repAmountBase * (1 + calculateSpoolup(repSpoolMax, repSpoolPerCycle, cycleTime, SpoolType.SCALE, 0)[0]) / cycleTime diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index c41921393..fe5bcc5cb 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -8,6 +8,7 @@ import gui.globalEvents as GE from gui.preferenceView import PreferenceView from service.settings import EOSSettings import gui.mainFrame +from wx.lib.intctrl import IntCtrl logger = logging.getLogger(__name__) @@ -61,6 +62,22 @@ class PFFittingEnginePref(PreferenceView): wx.DefaultPosition, wx.DefaultSize, 0) mainSizer.Add(self.cbUniversalAdaptiveArmorHardener, 0, wx.ALL | wx.EXPAND, 5) + + spoolup_sizer = wx.BoxSizer(wx.HORIZONTAL) + + self.spool_up_label = wx.StaticText(panel, wx.ID_ANY, "Global Default Spoolup Percentage:", wx.DefaultPosition, wx.DefaultSize, 0) + self.spool_up_label.Wrap(-1) + self.spool_up_label.SetCursor(helpCursor) + self.spool_up_label.SetToolTip( + wx.ToolTip('The amount of spoolup to use by default on module which support it. Can be changed on a per-module basis')) + + spoolup_sizer.Add(self.spool_up_label, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) + + self.spoolup_value = IntCtrl(panel, min=0, max=100, limited=True) + spoolup_sizer.Add(self.spoolup_value , 0, wx.ALL, 5) + + mainSizer.Add(spoolup_sizer, 0, wx.ALL | wx.EXPAND, 0) + # Future code once new cap sim is implemented ''' self.cbGlobalForceReactivationTimer = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reactivation timer", wx.DefaultPosition, wx.DefaultSize, 0 ) @@ -96,9 +113,15 @@ class PFFittingEnginePref(PreferenceView): self.cbUniversalAdaptiveArmorHardener.SetValue(self.engine_settings.get("useStaticAdaptiveArmorHardener")) self.cbUniversalAdaptiveArmorHardener.Bind(wx.EVT_CHECKBOX, self.OnCBUniversalAdaptiveArmorHardenerChange) + self.spoolup_value.SetValue(int(self.engine_settings.get("globalDefaultSpoolupPercentage") * 100)) + self.spoolup_value.Bind(wx.lib.intctrl.EVT_INT, self.OnSpoolupChange) + panel.SetSizer(mainSizer) panel.Layout() + def OnSpoolupChange(self, event): + self.engine_settings.set("globalDefaultSpoolupPercentage", self.spoolup_value.GetValue() / 100) + def OnCBGlobalForceReloadStateChange(self, event): self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() fitID = self.mainFrame.getActiveFit() diff --git a/gui/builtinStatsViews/firepowerViewFull.py b/gui/builtinStatsViews/firepowerViewFull.py index 4c773c9f1..c678e0b61 100644 --- a/gui/builtinStatsViews/firepowerViewFull.py +++ b/gui/builtinStatsViews/firepowerViewFull.py @@ -25,7 +25,7 @@ from gui.bitmap_loader import BitmapLoader from gui.utils.numberFormatter import formatAmount, roundToPrec from eos.utils.spoolSupport import SpoolType, SpoolOptions from service.fit import Fit - +import eos.config class FirepowerViewFull(StatsView): name = "firepowerViewFull" @@ -157,8 +157,7 @@ class FirepowerViewFull(StatsView): formatAmount(preSpool, prec, lowest, highest), formatAmount(fullSpool, prec, lowest, highest)) - # TODO: fetch spoolup option - defaultSpoolValue = 1 + defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage'] stats = ( ( "labelFullDpsWeapon", diff --git a/gui/builtinStatsViews/outgoingViewFull.py b/gui/builtinStatsViews/outgoingViewFull.py index 3b6a6ce58..740042b8c 100644 --- a/gui/builtinStatsViews/outgoingViewFull.py +++ b/gui/builtinStatsViews/outgoingViewFull.py @@ -23,6 +23,7 @@ from gui.statsView import StatsView from gui.bitmap_loader import BitmapLoader from gui.utils.numberFormatter import formatAmount, roundToPrec from eos.utils.spoolSupport import SpoolType, SpoolOptions +import eos.config stats = [ @@ -101,8 +102,7 @@ class OutgoingViewFull(StatsView): formatAmount(preSpool, prec, lowest, highest), formatAmount(fullSpool, prec, lowest, highest)) - # TODO: fetch spoolup option - defaultSpoolValue = 1 + defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage'] counter = 0 for labelName, labelDesc, valueFormat, image, tooltip, val, preSpoolVal, fullSpoolVal, prec, lowest, highest in stats: label = getattr(self, labelName) diff --git a/gui/builtinStatsViews/outgoingViewMinimal.py b/gui/builtinStatsViews/outgoingViewMinimal.py index 055a65e9e..4ed86831f 100644 --- a/gui/builtinStatsViews/outgoingViewMinimal.py +++ b/gui/builtinStatsViews/outgoingViewMinimal.py @@ -22,6 +22,7 @@ import wx from gui.statsView import StatsView from gui.utils.numberFormatter import formatAmount, roundToPrec from eos.utils.spoolSupport import SpoolType, SpoolOptions +import eos.config stats = [ @@ -100,8 +101,7 @@ class OutgoingViewMinimal(StatsView): formatAmount(preSpool, prec, lowest, highest), formatAmount(fullSpool, prec, lowest, highest)) - # TODO: fetch spoolup option - defaultSpoolValue = 1 + defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage'] counter = 0 for labelName, labelDesc, valueFormat, image, tooltip, val, preSpoolVal, fullSpoolVal, prec, lowest, highest in stats: label = getattr(self, labelName) diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index e9bff3d56..24c5d7a55 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -28,6 +28,7 @@ from gui.bitmap_loader import BitmapLoader from gui.utils.numberFormatter import formatAmount from gui.utils.listFormatter import formatList from eos.utils.spoolSupport import SpoolType, SpoolOptions +import eos.config class Miscellanea(ViewColumn): @@ -117,8 +118,8 @@ class Miscellanea(ViewColumn): text = "{0}".format(formatAmount(trackingSpeed, 3, 0, 3)) tooltip = "tracking speed" info.append((text, tooltip)) - # TODO: fetch spoolup option - defaultSpoolValue = 1 + + defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage'] spoolTime = stuff.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, defaultSpoolValue, False))[1] if spoolTime: text = "{0}s".format(formatAmount(spoolTime, 3, 0, 3)) @@ -339,8 +340,7 @@ class Miscellanea(ViewColumn): tooltip = "Armor repaired per second" return text, tooltip elif itemGroup == "Mutadaptive Remote Armor Repairer": - # TODO: fetch spoolup option - defaultSpoolValue = 1 + defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage'] spoolOptDefault = SpoolOptions(SpoolType.SCALE, defaultSpoolValue, False) spoolOptPre = SpoolOptions(SpoolType.SCALE, 0, True) spoolOptFull = SpoolOptions(SpoolType.SCALE, 1, True) From df80449b0b9e544adf818aec93cf7f64136b349b Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sat, 2 Mar 2019 22:11:55 -0500 Subject: [PATCH 06/16] Simplify the spoolup dialog --- gui/builtinContextMenus/spoolUp.py | 79 +++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 0ea4c6253..9fbb78225 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -34,11 +34,16 @@ class SpoolUp(ContextMenu): while True: dlg = SpoolUpChanger(self.mainFrame, thing) - if dlg.ShowModal() != wx.ID_OK: - break + result = dlg.ShowModal() - type = dlg.spoolChoice.GetClientData(dlg.spoolChoice.GetSelection()) - amount = dlg.input.GetValue() + if result == wx.ID_CANCEL: + break + if result == wx.ID_DEFAULT: + type = None + amount = None + else: + type = SpoolType.CYCLES # dlg.spoolChoice.GetClientData(dlg.spoolChoice.GetSelection()) + amount = dlg.input.GetValue() if type == SpoolType.SCALE: if amount < 0 or amount > 100: @@ -73,37 +78,54 @@ class SpoolUpChanger(wx.Dialog): bSizer2 = wx.BoxSizer(wx.VERTICAL) - text = wx.StaticText(self, wx.ID_ANY, "Type:") - bSizer2.Add(text, 0) + # This code allows the user to select the type of spoolup. Commented out to keep simpple, can introduce an + # text = wx.StaticText(self, wx.ID_ANY, "Type:") + # bSizer2.Add(text, 0) + # + # "advanced" functionality later + # self.spoolChoice = wx.Choice(self, wx.ID_ANY, style=0) + # + # for k, v in self.spoolTypes.items(): + # i = self.spoolChoice.Append(v[0], k) + # if module.spoolType == k: + # self.spoolChoice.SetSelection(i) + # + # self.spoolChoice.Bind(wx.EVT_CHOICE, self.spoolTypeChanged) + # + # bSizer2.Add(self.spoolChoice, 0, wx.TOP | wx.BOTTOM | wx.EXPAND, 5) + # + # self.spoolDesc = wx.StaticText(self, wx.ID_ANY, self.spoolTypes[module.spoolType][1]) - self.spoolChoice = wx.Choice(self, wx.ID_ANY, style=0) - - for k, v in self.spoolTypes.items(): - i = self.spoolChoice.Append(v[0], k) - if module.spoolType == k: - self.spoolChoice.SetSelection(i) - - self.spoolChoice.Bind(wx.EVT_CHOICE, self.spoolTypeChanged) - - - bSizer2.Add(self.spoolChoice, 0, wx.TOP | wx.BOTTOM | wx.EXPAND, 5) - - self.spoolDesc = wx.StaticText(self, wx.ID_ANY, self.spoolTypes[module.spoolType][1]) + self.spoolDesc = wx.StaticText(self, wx.ID_ANY, "Specify the number of cycles that you wish to set the module to") bSizer2.Add(self.spoolDesc, 1) - - text1 = wx.StaticText(self, wx.ID_ANY, "Amount:") - bSizer2.Add(text1, 0, wx.TOP, 10) + # + # text1 = wx.StaticText(self, wx.ID_ANY, "Amount:") + # bSizer2.Add(text1, 0, wx.TOP, 10) bSizer1.Add(bSizer2, 0, wx.ALL, 10) self.input = wx.SpinCtrlDouble(self, min=0, max=1000) - bSizer1.Add(self.input, 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) bSizer3 = wx.BoxSizer(wx.VERTICAL) bSizer3.Add(wx.StaticLine(self, wx.ID_ANY), 0, wx.BOTTOM | wx.EXPAND, 15) - bSizer3.Add(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL), 0, wx.EXPAND) + bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) + + self.btnRevert = wx.Button(self, wx.ID_DEFAULT, "Reset to Global Default") + self.btnOK = wx.Button(self, wx.ID_OK) + self.btnCancel = wx.Button(self, wx.ID_CANCEL) + + bSizerButtons.Add(self.btnRevert, 0, wx.ALL, 5) + bSizerButtons.AddStretchSpacer() + bSizerButtons.Add(self.btnOK, 0, wx.ALL, 5) + bSizerButtons.Add(self.btnCancel, 0, wx.ALL, 5) + + self.btnCancel.Bind(wx.EVT_BUTTON, self.OnBtnCancel) + self.btnRevert.Bind(wx.EVT_BUTTON, self.OnBtnRevert) + self.btnOK.Bind(wx.EVT_BUTTON, self.OnBtnOk) + + bSizer3.Add(bSizerButtons, 0, wx.EXPAND, 5) bSizer1.Add(bSizer3, 0, wx.ALL | wx.EXPAND, 10) self.input.SetValue(module.spoolAmount or 0) @@ -113,6 +135,15 @@ class SpoolUpChanger(wx.Dialog): self.CenterOnParent() self.Fit() + def OnBtnCancel(self, event): + self.EndModal(wx.ID_CANCEL) + + def OnBtnOk(self, event): + self.EndModal(wx.ID_OK) + + def OnBtnRevert(self, event): + self.EndModal(wx.ID_DEFAULT) + def spoolTypeChanged(self, evt): self.input.Enable(evt.ClientData is not None) self.spoolDesc.SetLabel(self.spoolTypes[evt.ClientData][1]) From b944f27fc86c5661b7b35485f8f54a69d3e34871 Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sat, 2 Mar 2019 22:14:39 -0500 Subject: [PATCH 07/16] tweak --- gui/builtinContextMenus/spoolUp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 9fbb78225..ba901ede4 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -112,7 +112,7 @@ class SpoolUpChanger(wx.Dialog): bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) - self.btnRevert = wx.Button(self, wx.ID_DEFAULT, "Reset to Global Default") + self.btnRevert = wx.Button(self, wx.ID_DEFAULT, "Reset to Default") self.btnOK = wx.Button(self, wx.ID_OK) self.btnCancel = wx.Button(self, wx.ID_CANCEL) From 2e49aa14196844bbb65ac8c7a6b26ef2a0cc544e Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sun, 3 Mar 2019 08:26:39 -0500 Subject: [PATCH 08/16] #1863 dont attempt to remove character implants --- gui/builtinAdditionPanes/implantView.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index 0b8521cea..8ea9495dd 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -204,7 +204,10 @@ class ImplantDisplay(d.Display): def removeImplant(self, implant): fitID = self.mainFrame.getActiveFit() - self.mainFrame.command.Submit(cmd.GuiRemoveImplantCommand(fitID, self.original.index(implant))) + sFit = Fit.getInstance() + fit = sFit.getFit(fitID) + if fit.implantLocation == ImplantLocation.FIT: + self.mainFrame.command.Submit(cmd.GuiRemoveImplantCommand(fitID, self.original.index(implant))) def click(self, event): event.Skip() From 6e44963d57d4aa6929aa194132ae03a05c6500dc Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 18 Mar 2019 17:52:37 +0300 Subject: [PATCH 09/16] Implement spoolup selection via purely context menu --- gui/builtinContextMenus/spoolUp.py | 164 +++++++---------------------- 1 file changed, 38 insertions(+), 126 deletions(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index ba901ede4..ff81ff6cc 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -1,16 +1,20 @@ -import gui.mainFrame -from gui.contextMenu import ContextMenu # noinspection PyPackageRequirements -from service.settings import ContextMenuSettings import wx -from eos.utils.spoolSupport import SpoolType -import gui.fitCommands as cmd + +import gui.mainFrame +from eos.utils.spoolSupport import SpoolType, SpoolOptions +from gui import globalEvents as GE +from gui.contextMenu import ContextMenu +from service.settings import ContextMenuSettings +from service.fit import Fit class SpoolUp(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.settings = ContextMenuSettings.getInstance() + self.cycleMap = {} + self.resetId = None def display(self, srcContext, selection): if not self.settings.get('project'): @@ -19,135 +23,43 @@ class SpoolUp(ContextMenu): if srcContext not in ("fittingModule") or self.mainFrame.getActiveFit() is None: return False - item = selection[0] + self.mod = selection[0] - return item.item.group.name in ("Precursor Weapon", "Mutadaptive Remote Armor Repairer", "Mutadaptive Remote Armor Repairer Blueprint") + return self.mod.item.group.name in ("Precursor Weapon", "Mutadaptive Remote Armor Repairer") def getText(self, itmContext, selection): - return "Set Spoolup".format(itmContext) + return "Spoolup" - def activate(self, fullContext, selection, i): - thing = selection[0] - mainFrame = gui.mainFrame.MainFrame.getInstance() - fitID = mainFrame.getActiveFit() - srcContext = fullContext[0] + def getSubMenu(self, context, selection, rootMenu, i, pitem): + m = wx.Menu() + cyclesMin = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 0, True))[0] + cyclesMax = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 1, True))[0] - while True: - dlg = SpoolUpChanger(self.mainFrame, thing) - result = dlg.ShowModal() + for cycle in range(cyclesMin, cyclesMax + 1): + menuId = ContextMenu.nextID() + item = wx.MenuItem(m, menuId, "{}".format(cycle)) + m.Bind(wx.EVT_MENU, self.handleSpoolChange, item) + m.Append(item) + self.cycleMap[menuId] = cycle - if result == wx.ID_CANCEL: - break - if result == wx.ID_DEFAULT: - type = None - amount = None - else: - type = SpoolType.CYCLES # dlg.spoolChoice.GetClientData(dlg.spoolChoice.GetSelection()) - amount = dlg.input.GetValue() + self.resetId = ContextMenu.nextID() + item = wx.MenuItem(m, self.resetId, "Default") + m.Bind(wx.EVT_MENU, self.handleSpoolChange, item) + m.Append(item) - if type == SpoolType.SCALE: - if amount < 0 or amount > 100: - dlg = wx.MessageDialog(self.mainFrame, "The amount provided isn't within the range of 0 - 100.", "Error", wx.OK | wx.ICON_ERROR) - dlg.ShowModal() - continue - amount = amount / 100 - if type is None: - amount = None + return m - self.mainFrame.command.Submit(cmd.GuiSetSpoolup(fitID, thing, type, amount)) - return + def handleSpoolChange(self, event): + if event.Id == self.resetId: + self.mod.spoolType = None + self.mod.spoolAmount = None + elif event.Id in self.cycleMap: + cycles = self.cycleMap[event.Id] + self.mod.spoolType = SpoolType.CYCLES + self.mod.spoolAmount = cycles + fitID = self.mainFrame.getActiveFit() + Fit.getInstance().recalc(fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) SpoolUp.register() - - -class SpoolUpChanger(wx.Dialog): - - spoolTypes = { - None: ("Default", "pyfa defaults to using 'scale' calculation with 100%"), - SpoolType.SCALE: ("Percentage", "Amount is a percentage from 0 - 100; rounds down to closest module cycle."), - SpoolType.TIME: ("Time (s)", "Amount defines time in seconds since spoolup module was activated."), - SpoolType.CYCLES: ("Cycles", "Amount is number of cycles module went through since being activated.") - } - - def __init__(self, parent, module): - wx.Dialog.__init__(self, parent, title="Change Spool-Up") - self.SetMinSize((346, 156)) - - bSizer1 = wx.BoxSizer(wx.VERTICAL) - - bSizer2 = wx.BoxSizer(wx.VERTICAL) - - # This code allows the user to select the type of spoolup. Commented out to keep simpple, can introduce an - # text = wx.StaticText(self, wx.ID_ANY, "Type:") - # bSizer2.Add(text, 0) - # - # "advanced" functionality later - # self.spoolChoice = wx.Choice(self, wx.ID_ANY, style=0) - # - # for k, v in self.spoolTypes.items(): - # i = self.spoolChoice.Append(v[0], k) - # if module.spoolType == k: - # self.spoolChoice.SetSelection(i) - # - # self.spoolChoice.Bind(wx.EVT_CHOICE, self.spoolTypeChanged) - # - # bSizer2.Add(self.spoolChoice, 0, wx.TOP | wx.BOTTOM | wx.EXPAND, 5) - # - # self.spoolDesc = wx.StaticText(self, wx.ID_ANY, self.spoolTypes[module.spoolType][1]) - - self.spoolDesc = wx.StaticText(self, wx.ID_ANY, "Specify the number of cycles that you wish to set the module to") - bSizer2.Add(self.spoolDesc, 1) - # - # text1 = wx.StaticText(self, wx.ID_ANY, "Amount:") - # bSizer2.Add(text1, 0, wx.TOP, 10) - - bSizer1.Add(bSizer2, 0, wx.ALL, 10) - - self.input = wx.SpinCtrlDouble(self, min=0, max=1000) - bSizer1.Add(self.input, 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) - - bSizer3 = wx.BoxSizer(wx.VERTICAL) - bSizer3.Add(wx.StaticLine(self, wx.ID_ANY), 0, wx.BOTTOM | wx.EXPAND, 15) - - bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) - - self.btnRevert = wx.Button(self, wx.ID_DEFAULT, "Reset to Default") - self.btnOK = wx.Button(self, wx.ID_OK) - self.btnCancel = wx.Button(self, wx.ID_CANCEL) - - bSizerButtons.Add(self.btnRevert, 0, wx.ALL, 5) - bSizerButtons.AddStretchSpacer() - bSizerButtons.Add(self.btnOK, 0, wx.ALL, 5) - bSizerButtons.Add(self.btnCancel, 0, wx.ALL, 5) - - self.btnCancel.Bind(wx.EVT_BUTTON, self.OnBtnCancel) - self.btnRevert.Bind(wx.EVT_BUTTON, self.OnBtnRevert) - self.btnOK.Bind(wx.EVT_BUTTON, self.OnBtnOk) - - bSizer3.Add(bSizerButtons, 0, wx.EXPAND, 5) - bSizer1.Add(bSizer3, 0, wx.ALL | wx.EXPAND, 10) - - self.input.SetValue(module.spoolAmount or 0) - self.input.SetFocus() - self.input.Bind(wx.EVT_TEXT_ENTER, self.processEnter) - self.SetSizer(bSizer1) - self.CenterOnParent() - self.Fit() - - def OnBtnCancel(self, event): - self.EndModal(wx.ID_CANCEL) - - def OnBtnOk(self, event): - self.EndModal(wx.ID_OK) - - def OnBtnRevert(self, event): - self.EndModal(wx.ID_DEFAULT) - - def spoolTypeChanged(self, evt): - self.input.Enable(evt.ClientData is not None) - self.spoolDesc.SetLabel(self.spoolTypes[evt.ClientData][1]) - self.Layout() - - def processEnter(self, evt): - self.EndModal(wx.ID_OK) From 51180a9375c69ba8c023d7f28233e9ae27154f04 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 18 Mar 2019 17:54:00 +0300 Subject: [PATCH 10/16] Put spoolup menu above item stats --- gui/contextMenu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/contextMenu.py b/gui/contextMenu.py index 43d6ef58d..b479ab913 100644 --- a/gui/contextMenu.py +++ b/gui/contextMenu.py @@ -183,8 +183,8 @@ from gui.builtinContextMenus import ( # noqa: E402,F401 openFit, moduleGlobalAmmoPicker, moduleAmmoPicker, - itemStats, spoolUp, + itemStats, damagePattern, marketJump, # droneSplit, From 33b91a79ab4a28a89ca75dfd724f1c7f975b7fd7 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 18 Mar 2019 18:21:53 +0300 Subject: [PATCH 11/16] Add option to disable this context menu --- gui/builtinContextMenus/spoolUp.py | 2 +- .../pyfaContextMenuPreferences.py | 34 +++++++++++-------- service/settings.py | 1 + 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index ff81ff6cc..680c48b94 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -17,7 +17,7 @@ class SpoolUp(ContextMenu): self.resetId = None def display(self, srcContext, selection): - if not self.settings.get('project'): + if not self.settings.get('spoolup'): return False if srcContext not in ("fittingModule") or self.mainFrame.getActiveFit() is None: diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py index 7c767c5fb..6ff7c8210 100644 --- a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -36,7 +36,7 @@ class PFContextMenuPref(PreferenceView): self.rbBox1 = wx.RadioBox(panel, -1, "Set as Damage Pattern", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) self.rbBox1.SetSelection(self.settings.get('ammoPattern')) - rbSizerRow1.Add(self.rbBox1, 1, wx.TOP | wx.RIGHT, 5) + rbSizerRow1.Add(self.rbBox1, 1, wx.ALL, 5) self.rbBox1.Bind(wx.EVT_RADIOBOX, self.OnSetting1Change) self.rbBox2 = wx.RadioBox(panel, -1, "Change Skills", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) @@ -56,36 +56,39 @@ class PFContextMenuPref(PreferenceView): self.rbBox4 = wx.RadioBox(panel, -1, "Variations", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) self.rbBox4.SetSelection(self.settings.get('metaSwap')) - rbSizerRow2.Add(self.rbBox4, 1, wx.TOP | wx.RIGHT, 5) + rbSizerRow2.Add(self.rbBox4, 1, wx.ALL, 5) self.rbBox4.Bind(wx.EVT_RADIOBOX, self.OnSetting4Change) - ''' - self.rbBox5 = wx.RadioBox(panel, -1, "Charge", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) - self.rbBox5.SetSelection(self.settings.get('moduleAmmoPicker')) - rbSizerRow2.Add(self.rbBox5, 1, wx.ALL, 5) - self.rbBox5.Bind(wx.EVT_RADIOBOX, self.OnSetting5Change) - ''' + # self.rbBox5 = wx.RadioBox(panel, -1, "Charge", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) + # self.rbBox5.SetSelection(self.settings.get('moduleAmmoPicker')) + # rbSizerRow2.Add(self.rbBox5, 0, wx.ALL, 5) + # self.rbBox5.Bind(wx.EVT_RADIOBOX, self.OnSetting5Change) self.rbBox6 = wx.RadioBox(panel, -1, "Charge (All)", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) self.rbBox6.SetSelection(self.settings.get('moduleGlobalAmmoPicker')) rbSizerRow2.Add(self.rbBox6, 1, wx.ALL, 5) self.rbBox6.Bind(wx.EVT_RADIOBOX, self.OnSetting6Change) + self.rbBox7 = wx.RadioBox(panel, -1, "Project onto Fit", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) + self.rbBox7.SetSelection(self.settings.get('project')) + rbSizerRow2.Add(self.rbBox7, 1, wx.ALL, 5) + self.rbBox7.Bind(wx.EVT_RADIOBOX, self.OnSetting7Change) + mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) # Row 3 rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL) - self.rbBox7 = wx.RadioBox(panel, -1, "Project onto Fit", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) - self.rbBox7.SetSelection(self.settings.get('project')) - rbSizerRow3.Add(self.rbBox7, 1, wx.TOP | wx.RIGHT, 5) - self.rbBox7.Bind(wx.EVT_RADIOBOX, self.OnSetting7Change) - self.rbBox8 = wx.RadioBox(panel, -1, "Fill with module", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) self.rbBox8.SetSelection(self.settings.get('moduleFill')) - rbSizerRow3.Add(self.rbBox8, 1, wx.TOP | wx.RIGHT, 5) + rbSizerRow3.Add(self.rbBox8, 1, wx.ALL, 5) self.rbBox8.Bind(wx.EVT_RADIOBOX, self.OnSetting8Change) + self.rbBox9 = wx.RadioBox(panel, -1, "Spoolup", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) + self.rbBox9.SetSelection(self.settings.get('spoolup')) + rbSizerRow3.Add(self.rbBox9, 1, wx.ALL, 5) + self.rbBox9.Bind(wx.EVT_RADIOBOX, self.OnSetting9Change) + mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0) panel.SetSizer(mainSizer) @@ -115,6 +118,9 @@ class PFContextMenuPref(PreferenceView): def OnSetting8Change(self, event): self.settings.set('moduleFill', event.GetInt()) + def OnSetting9Change(self, event): + self.settings.set('spoolup', event.GetInt()) + def getImage(self): return BitmapLoader.getBitmap("settings_menu", "gui") diff --git a/service/settings.py b/service/settings.py index df5038d1f..b901b1d72 100644 --- a/service/settings.py +++ b/service/settings.py @@ -526,6 +526,7 @@ class ContextMenuSettings(object): "targetResists" : 1, "whProjector" : 1, "moduleFill" : 1, + "spoolup" : 1, } self.ContextMenuDefaultSettings = SettingsProvider.getInstance().getSettings("pyfaContextMenuSettings", ContextMenuDefaultSettings) From 34fe530ac76d2a61ed7912f528f1cda2472c36b5 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 18 Mar 2019 19:29:27 +0300 Subject: [PATCH 12/16] Add current value marker --- gui/builtinContextMenus/spoolUp.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 680c48b94..a4f6a8ada 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -1,6 +1,7 @@ # noinspection PyPackageRequirements import wx +import eos.config import gui.mainFrame from eos.utils.spoolSupport import SpoolType, SpoolOptions from gui import globalEvents as GE @@ -32,12 +33,17 @@ class SpoolUp(ContextMenu): def getSubMenu(self, context, selection, rootMenu, i, pitem): m = wx.Menu() - cyclesMin = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 0, True))[0] - cyclesMax = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 1, True))[0] + cycleCurrent = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, eos.config.settings['globalDefaultSpoolupPercentage'], False))[0] + cycleMin = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 0, True))[0] + cycleMax = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 1, True))[0] - for cycle in range(cyclesMin, cyclesMax + 1): + for cycle in range(cycleMin, cycleMax + 1): menuId = ContextMenu.nextID() - item = wx.MenuItem(m, menuId, "{}".format(cycle)) + if cycleCurrent == cycle: + text = "- {} -".format(cycle) + else: + text = "{}".format(cycle) + item = wx.MenuItem(m, menuId, text) m.Bind(wx.EVT_MENU, self.handleSpoolChange, item) m.Append(item) self.cycleMap[menuId] = cycle From 894231b0091270d04061bae4f608cebfee63d5c5 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 18 Mar 2019 19:40:30 +0300 Subject: [PATCH 13/16] Change selection affix --- gui/builtinContextMenus/spoolUp.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index a4f6a8ada..5c7347ef5 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -33,14 +33,20 @@ class SpoolUp(ContextMenu): def getSubMenu(self, context, selection, rootMenu, i, pitem): m = wx.Menu() + isNotDefault = self.mod.spoolType is not None and self.mod.spoolAmount is not None + cycleDefault = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, eos.config.settings['globalDefaultSpoolupPercentage'], True))[0] cycleCurrent = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, eos.config.settings['globalDefaultSpoolupPercentage'], False))[0] cycleMin = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 0, True))[0] cycleMax = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, 1, True))[0] for cycle in range(cycleMin, cycleMax + 1): menuId = ContextMenu.nextID() - if cycleCurrent == cycle: - text = "- {} -".format(cycle) + # Show selected only for current value and when overriden by user + if isNotDefault and cycle == cycleCurrent: + text = "{} (selected)".format(cycle) + # Show default only for current value and when not overriden + elif not isNotDefault and cycle == cycleDefault: + text = "{} (default)".format(cycle) else: text = "{}".format(cycle) item = wx.MenuItem(m, menuId, text) From 52c9f4076b90d1b785692a0e4ca44b206d2f4e98 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 18 Mar 2019 20:08:06 +0300 Subject: [PATCH 14/16] Change reset label --- gui/builtinContextMenus/spoolUp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 5c7347ef5..74bb1721e 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -55,7 +55,7 @@ class SpoolUp(ContextMenu): self.cycleMap[menuId] = cycle self.resetId = ContextMenu.nextID() - item = wx.MenuItem(m, self.resetId, "Default") + item = wx.MenuItem(m, self.resetId, "Reset") m.Bind(wx.EVT_MENU, self.handleSpoolChange, item) m.Append(item) From bb7fb022efc1af0719be39cd818993d07492dc4b Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Mon, 18 Mar 2019 20:25:28 -0400 Subject: [PATCH 15/16] fixes for windows and selected menu item --- gui/builtinContextMenus/spoolUp.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/gui/builtinContextMenus/spoolUp.py b/gui/builtinContextMenus/spoolUp.py index 74bb1721e..a75568802 100644 --- a/gui/builtinContextMenus/spoolUp.py +++ b/gui/builtinContextMenus/spoolUp.py @@ -29,10 +29,15 @@ class SpoolUp(ContextMenu): return self.mod.item.group.name in ("Precursor Weapon", "Mutadaptive Remote Armor Repairer") def getText(self, itmContext, selection): - return "Spoolup" + return "Spoolup Cycles" def getSubMenu(self, context, selection, rootMenu, i, pitem): m = wx.Menu() + if "wxMSW" in wx.PlatformInfo: + bindmenu = rootMenu + else: + bindmenu = m + isNotDefault = self.mod.spoolType is not None and self.mod.spoolAmount is not None cycleDefault = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, eos.config.settings['globalDefaultSpoolupPercentage'], True))[0] cycleCurrent = self.mod.getSpoolData(spoolOptions=SpoolOptions(SpoolType.SCALE, eos.config.settings['globalDefaultSpoolupPercentage'], False))[0] @@ -41,22 +46,22 @@ class SpoolUp(ContextMenu): for cycle in range(cycleMin, cycleMax + 1): menuId = ContextMenu.nextID() - # Show selected only for current value and when overriden by user - if isNotDefault and cycle == cycleCurrent: - text = "{} (selected)".format(cycle) + # Show default only for current value and when not overriden - elif not isNotDefault and cycle == cycleDefault: + if not isNotDefault and cycle == cycleDefault: text = "{} (default)".format(cycle) else: text = "{}".format(cycle) - item = wx.MenuItem(m, menuId, text) - m.Bind(wx.EVT_MENU, self.handleSpoolChange, item) + + item = wx.MenuItem(m, menuId, text, kind=wx.ITEM_CHECK) + bindmenu.Bind(wx.EVT_MENU, self.handleSpoolChange, item) m.Append(item) + item.Check(isNotDefault and cycle == cycleCurrent) self.cycleMap[menuId] = cycle self.resetId = ContextMenu.nextID() item = wx.MenuItem(m, self.resetId, "Reset") - m.Bind(wx.EVT_MENU, self.handleSpoolChange, item) + bindmenu.Bind(wx.EVT_MENU, self.handleSpoolChange, item) m.Append(item) return m From f6c6f9a0c99653dccea3ecc021b1fb52f59c90c7 Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Mon, 18 Mar 2019 22:30:54 -0400 Subject: [PATCH 16/16] Handle double click event on skill groups in character editor (#1886) --- gui/characterEditor.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 643b5963e..fdd17aa95 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -368,6 +368,7 @@ class SkillTreeView(wx.Panel): self.populateSkillTree() + tree.Bind(wx.dataview.EVT_TREELIST_ITEM_ACTIVATED, self.expand) tree.Bind(wx.dataview.EVT_TREELIST_ITEM_EXPANDING, self.expandLookup) tree.Bind(wx.dataview.EVT_TREELIST_ITEM_CONTEXT_MENU, self.scheduleMenu) @@ -555,9 +556,18 @@ class SkillTreeView(wx.Panel): if event: event.Skip() + def expand(self, event): + root = event.GetItem() + tree = self.skillTreeListCtrl + if tree.IsExpanded(root): + tree.Collapse(root) + else: + tree.Expand(root) + def expandLookup(self, event): root = event.GetItem() tree = self.skillTreeListCtrl + child = tree.GetFirstChild(root) if tree.GetItemText(child) == "dummy": tree.DeleteItem(child)