From 63ca8dc55964e4fe61e7d1474b019fbf55203525 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Fri, 5 Jul 2019 01:08:00 +0300 Subject: [PATCH] Recalc all fits which might need that when changing factorReload flag --- eos/saveddata/fit.py | 4 +++ gui/builtinContextMenus/factorReload.py | 8 ++---- .../pyfaEnginePreferences.py | 8 ++---- gui/builtinShipBrowser/fitItem.py | 8 ------ service/fit.py | 25 ++++++++++--------- 5 files changed, 21 insertions(+), 32 deletions(-) diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 069d04632..41397f9f2 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -137,6 +137,10 @@ class Fit(object): self.ecmProjectedStr = 1 self.commandBonuses = {} + @property + def hasDpsData(self): + return len(self.__weaponDpsMap) > 0 + @property def targetResists(self): return self.__targetResists diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py index 9d6e6d852..2296f57e7 100644 --- a/gui/builtinContextMenus/factorReload.py +++ b/gui/builtinContextMenus/factorReload.py @@ -25,12 +25,8 @@ class FactorReload(ContextMenuUnconditional): return "Factor in Reload Time" def activate(self, fullContext, i): - refreshFitIDs = set() - fitID = self.mainFrame.getActiveFit() - if fitID is not None: - refreshFitIDs.add(fitID) - Fit.getInstance().toggleFactorReload(fitsIdToRefresh=refreshFitIDs) - for fitID in refreshFitIDs: + fitIDs = Fit.getInstance().toggleFactorReload() + for fitID in fitIDs: wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) @property diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index 1b7028222..d8da4a649 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -123,12 +123,8 @@ class PFFittingEnginePref(PreferenceView): self.engine_settings.set("globalDefaultSpoolupPercentage", self.spoolup_value.GetValue() / 100) def OnCBGlobalForceReloadStateChange(self, event): - refreshFitIDs = set() - fitID = self.mainFrame.getActiveFit() - if fitID is not None: - refreshFitIDs.add(fitID) - self.sFit.toggleFactorReload(value=bool(self.cbGlobalForceReload.GetValue()), fitsIdToRefresh=refreshFitIDs) - for fitID in refreshFitIDs: + fitIDs = self.sFit.toggleFactorReload(value=bool(self.cbGlobalForceReload.GetValue())) + for fitID in fitIDs: wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def OnCBStrictSkillLevelsChange(self, event): diff --git a/gui/builtinShipBrowser/fitItem.py b/gui/builtinShipBrowser/fitItem.py index 90441c94a..cc741c3c6 100644 --- a/gui/builtinShipBrowser/fitItem.py +++ b/gui/builtinShipBrowser/fitItem.py @@ -172,14 +172,6 @@ class FitItem(SFItem.SFBrowserItem): def OpenNewTab(self, evt): self.selectFit(newTab=True) - def OnToggleBooster(self, event): - sFit = Fit.getInstance() - sFit.toggleBoostFit(self.fitID) - self.fitBooster = not self.fitBooster - self.boosterBtn.Show(self.fitBooster) - self.Refresh() - wx.PostEvent(self.mainFrame, BoosterListUpdated()) - event.Skip() def OnProjectToFit(self, event): activeFit = self.mainFrame.getActiveFit() diff --git a/service/fit.py b/service/fit.py index da76ff7f8..eae984f8f 100644 --- a/service/fit.py +++ b/service/fit.py @@ -20,6 +20,7 @@ import copy import datetime from time import time +from weakref import WeakSet import wx from logbook import Logger @@ -71,7 +72,7 @@ class Fit: self.targetResists = None self.character = saveddata_Character.getAll5() self.booster = False - self.dirtyFitIDs = set() + self._loadedFits = WeakSet() serviceFittingDefaultOptions = { "useGlobalCharacter": False, @@ -179,13 +180,6 @@ class Fit: self.fill(fit) return fit.ID - @staticmethod - def toggleBoostFit(fitID): - pyfalog.debug("Toggling as booster for fit ID: {0}", fitID) - fit = eos.db.getFit(fitID) - fit.booster = not fit.booster - eos.db.commit() - @staticmethod def deleteFit(fitID): fit = eos.db.getFit(fitID) @@ -249,11 +243,16 @@ class Fit: fit.notes = notes eos.db.commit() - def toggleFactorReload(self, value=None, fitsIdToRefresh=()): + def toggleFactorReload(self, value=None): self.serviceFittingOptions['useGlobalForceReload'] = value if value is not None else not self.serviceFittingOptions['useGlobalForceReload'] - for fitID in fitsIdToRefresh: - fit = self.getFit(fitID) - self.recalc(fit) + fitIDs = set() + for fit in set(self._loadedFits): + if fit is None: + continue + if fit.hasDpsData: + self.recalc(fit) + fitIDs.add(fit.ID) + return fitIDs def switchFit(self, fitID): pyfalog.debug("Switching fit to fit ID: {0}", fitID) @@ -293,6 +292,8 @@ class Fit: if fit is None: return None + self._loadedFits.add(fit) + if basic: return fit