From 201d596c803028f8da2cade2d311275dcf1bd581 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 07:38:43 -0800 Subject: [PATCH 01/15] Initial rollup of #868 --- gui/builtinPreferenceViews/__init__.py | 12 +++++- .../pyfaDatabasePreferences.py | 0 .../pyfaEnginePreferences.py | 0 .../pyfaGeneralPreferences.py | 13 ------ .../pyfaLoggingPreferences.py | 0 .../pyfaStatViewPreferences.py | 0 gui/builtinStatsViews/__init__.py | 12 ++++-- gui/statsPane.py | 42 +++++++++++++++++-- service/settings.py | 41 ++++++++++++++++++ 9 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 gui/builtinPreferenceViews/pyfaDatabasePreferences.py create mode 100644 gui/builtinPreferenceViews/pyfaEnginePreferences.py create mode 100644 gui/builtinPreferenceViews/pyfaLoggingPreferences.py create mode 100644 gui/builtinPreferenceViews/pyfaStatViewPreferences.py diff --git a/gui/builtinPreferenceViews/__init__.py b/gui/builtinPreferenceViews/__init__.py index 38beb0d0f..8b61beb13 100644 --- a/gui/builtinPreferenceViews/__init__.py +++ b/gui/builtinPreferenceViews/__init__.py @@ -1,8 +1,16 @@ # noinspection PyPackageRequirements import wx -__all__ = ["pyfaGeneralPreferences", "pyfaHTMLExportPreferences", "pyfaUpdatePreferences", - "pyfaNetworkPreferences"] # noqa +__all__ = [ + "pyfaGeneralPreferences", + "pyfaHTMLExportPreferences", + "pyfaUpdatePreferences", + "pyfaNetworkPreferences", + "pyfaDatabasePreferences", + "pyfaLoggingPreferences", + "pyfaEnginePreferences", + "pyfaStatViewPreferences", +] if 'wxMac' not in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3, 0)): __all__.append("pyfaCrestPreferences") diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py index 2e69466bb..8a278a048 100644 --- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py +++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py @@ -40,10 +40,6 @@ class PFGeneralPref(PreferenceView): wx.DefaultSize, 0) mainSizer.Add(self.cbGlobalDmgPattern, 0, wx.ALL | wx.EXPAND, 5) - self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, - wx.DefaultSize, 0) - mainSizer.Add(self.cbGlobalForceReload, 0, wx.ALL | wx.EXPAND, 5) - self.cbCompactSkills = wx.CheckBox(panel, wx.ID_ANY, u"Compact skills needed tooltip", wx.DefaultPosition, wx.DefaultSize, 0) mainSizer.Add(self.cbCompactSkills, 0, wx.ALL | wx.EXPAND, 5) @@ -97,7 +93,6 @@ class PFGeneralPref(PreferenceView): self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"]) self.cbGlobalDmgPattern.SetValue(self.sFit.serviceFittingOptions["useGlobalDamagePattern"]) - self.cbGlobalForceReload.SetValue(self.sFit.serviceFittingOptions["useGlobalForceReload"]) self.cbFitColorSlots.SetValue(self.sFit.serviceFittingOptions["colorFitBySlot"] or False) self.cbRackSlots.SetValue(self.sFit.serviceFittingOptions["rackSlots"] or False) self.cbRackLabels.SetValue(self.sFit.serviceFittingOptions["rackLabels"] or False) @@ -112,7 +107,6 @@ class PFGeneralPref(PreferenceView): self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange) self.cbGlobalDmgPattern.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalDmgPatternStateChange) - self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange) self.cbFitColorSlots.Bind(wx.EVT_CHECKBOX, self.onCBGlobalColorBySlot) self.cbRackSlots.Bind(wx.EVT_CHECKBOX, self.onCBGlobalRackSlots) self.cbRackLabels.Bind(wx.EVT_CHECKBOX, self.onCBGlobalRackLabels) @@ -152,13 +146,6 @@ class PFGeneralPref(PreferenceView): wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() - def OnCBGlobalForceReloadStateChange(self, event): - self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() - fitID = self.mainFrame.getActiveFit() - self.sFit.refreshFit(fitID) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - event.Skip() - def OnCBGlobalCharStateChange(self, event): self.sFit.serviceFittingOptions["useGlobalCharacter"] = self.cbGlobalChar.GetValue() event.Skip() diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinStatsViews/__init__.py b/gui/builtinStatsViews/__init__.py index 5f2ca646e..bb116f274 100644 --- a/gui/builtinStatsViews/__init__.py +++ b/gui/builtinStatsViews/__init__.py @@ -1,3 +1,9 @@ -__all__ = ["resourcesViewFull", "resistancesViewFull", - "rechargeViewFull", "firepowerViewFull", "capacitorViewFull", - "targetingMiscViewFull", "priceViewFull", "miningyieldViewFull"] +__all__ = [ + "resourcesViewFull", + "resistancesViewFull", + "rechargeViewFull", + "firepowerViewFull", + "capacitorViewFull", + "targetingMiscViewMinimal", + "priceViewFull", +] diff --git a/gui/statsPane.py b/gui/statsPane.py index 6aaf277f5..9c3e9c698 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -21,6 +21,7 @@ import wx from service.fit import Fit +from service.settings import Settings import gui.mainFrame import gui.builtinStatsViews import gui.globalEvents as GE @@ -31,9 +32,37 @@ from gui.pyfatogglepanel import TogglePanel class StatsPane(wx.Panel): - DEFAULT_VIEWS = ["resourcesViewFull", "resistancesViewFull", "rechargeViewFull", "firepowerViewFull", - "capacitorViewFull", "targetingmiscViewFull", - "priceViewFull"] + AVAILIBLE_VIEWS = [ + "resources", + "resistances", + "recharge", + "firepower", + "capacitor", + "targetingmisc", + "price", + ] + + # Don't have these....yet.... + ''' + "miningyield", "drones" + ] + ''' + + DEFAULT_VIEWS = [] + + settings = Settings.statViewSettings.getInstance() + + for aView in AVAILIBLE_VIEWS: + if settings.get(aView) == 2: + DEFAULT_VIEWS.extend(["%sViewFull" % aView]) + + if settings.get(aView) == 1: + DEFAULT_VIEWS.extend(["%sViewMinimal" % aView]) + + # If it's 0, it's disabled and we don't do anything. + + # TODO + # Add logging def fitChanged(self, event): sFit = Fit.getInstance() @@ -66,7 +95,12 @@ class StatsPane(wx.Panel): contentPanel = tp.GetContentPane() contentPanel.viewName = viewName - view = StatsView.getView(viewName)(self) + try: + view = StatsView.getView(viewName)(self) + except KeyError: + # View doesn't exist. Skip to next view + continue + self.nameViewMap[viewName] = view self.views.append(view) diff --git a/service/settings.py b/service/settings.py index cf4b67b1e..9a5dcee9e 100644 --- a/service/settings.py +++ b/service/settings.py @@ -341,4 +341,45 @@ class CRESTSettings(object): def set(self, type, value): self.serviceCRESTSettings[type] = value +class statViewSettings(object): + _instance = None + + @classmethod + def getInstance(cls): + if cls._instance is None: + cls._instance = statViewSettings() + + return cls._instance + + def __init__(self): + # mode + # 0 - Do not show + # 1 - Minimal/Text Only View + # 2 - Full View + serviceStatViewDefaultSettings = { + "resources": 2, + "resistances": 2, + "recharge": 2, + "firepower": 2, + "capacitor": 2, + "targetingmisc": 1, + "price": 2, + "miningyield": 2, + "drones": 2 + } + + # We don't have these....yet + ''' + "miningyield": 2, + "drones": 2 + ''' + + self.serviceStatViewDefaultSettings = SettingsProvider.getInstance().getSettings("pyfaServiceStatViewSettings", serviceStatViewDefaultSettings) + + def get(self, type): + return self.serviceStatViewDefaultSettings[type] + + def set(self, type, value): + self.serviceStatViewDefaultSettings[type] = value + # @todo: migrate fit settings (from fit service) here? From 343331c6670ef9006c2da461472d6b42825e9fa8 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 08:16:08 -0800 Subject: [PATCH 02/15] Commit file so we can migrate over from old PR --- gui/builtinStatsViews/targetingMiscViewMinimal.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gui/builtinStatsViews/targetingMiscViewMinimal.py diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py new file mode 100644 index 000000000..e69de29bb From fff67906d6d901aa59e1556131311037a8f59f77 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 08:20:09 -0800 Subject: [PATCH 03/15] Migrate files from #868 --- .../pyfaDatabasePreferences.py | 121 +++++++++ .../pyfaEnginePreferences.py | 89 +++++++ .../pyfaLoggingPreferences.py | 67 +++++ .../pyfaStatViewPreferences.py | 167 ++++++++++++ .../targetingMiscViewMinimal.py | 251 ++++++++++++++++++ 5 files changed, 695 insertions(+) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index e69de29bb..aa95c3f98 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -0,0 +1,121 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +import config + +import logging + +logger = logging.getLogger(__name__) + +from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues + + +class PFGeneralPref ( PreferenceView): + title = "Database" + + def populatePanel( self, panel ): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.dirtySettings = False + #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSubTitle.Wrap( -1 ) + self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + #Save in Root + self.cbsaveInRoot = wx.CheckBox( panel, wx.ID_ANY, u"Using Executable Path for Saved Fit Database and Settings", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbsaveInRoot, 0, wx.ALL|wx.EXPAND, 5 ) + + #Database path + self.stSetUserPath = wx.StaticText( panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSetUserPath.Wrap( -1 ) + mainSizer.Add( self.stSetUserPath, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + self.inputUserPath = wx.TextCtrl(panel, wx.ID_ANY, config.savePath, wx.DefaultPosition, wx.DefaultSize, 0) + self.inputUserPath.SetEditable(False) + self.inputUserPath.SetBackgroundColour((200, 200, 200)) + mainSizer.Add(self.inputUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) + + #Save DB + self.stFitDB = wx.StaticText( panel, wx.ID_ANY, u"Fitting Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stFitDB.Wrap( -1 ) + mainSizer.Add( self.stFitDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.inputFitDB = wx.TextCtrl(panel, wx.ID_ANY, config.saveDB, wx.DefaultPosition, wx.DefaultSize, 0) + self.inputFitDB.SetEditable(False) + self.inputFitDB.SetBackgroundColour((200, 200, 200)) + mainSizer.Add(self.inputFitDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) + + #Game Data DB + self.stGameDB = wx.StaticText( panel, wx.ID_ANY, u"Game Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stGameDB.Wrap( -1 ) + mainSizer.Add( self.stGameDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.inputGameDB = wx.TextCtrl(panel, wx.ID_ANY, config.gameDB, wx.DefaultPosition, wx.DefaultSize, 0) + self.inputGameDB.SetEditable(False) + self.inputGameDB.SetBackgroundColour((200, 200, 200)) + mainSizer.Add(self.inputGameDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) + + + defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) + + self.cbsaveInRoot.SetValue(config.saveInRoot) + self.cbsaveInRoot.Bind(wx.EVT_CHECKBOX, self.onCBsaveInRoot) + + self.inputUserPath.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) + self.inputFitDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) + self.inputGameDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) + + panel.SetSizer( mainSizer ) + panel.Layout() + + + def onCBsaveInRoot(self, event): + # We don't want users to be able to actually change this, + # so if they try and change it, set it back to the current setting + self.cbsaveInRoot.SetValue(config.saveInRoot) + + # If we ever enable it might need this. + ''' + config.saveInRoot = self.cbsaveInRoot.GetValue() + ''' + + def getImage(self): + return BitmapLoader.getBitmap("prefs_settings", "gui") + + def OnWindowLeave(self, event): + # We don't want to do anything when they leave, + # but in the future we'd want to make sure settings + # changed get saved. + pass + + ''' + #Set database path + config.defPaths(self.inputFitDBPath.GetValue()) + + logger.debug("Running database import") + if self.cbimportDefaults is True: + # Import default database values + # Import values that must exist otherwise Pyfa breaks + DefaultDatabaseValues.importRequiredDefaults() + # Import default values for damage profiles + DefaultDatabaseValues.importDamageProfileDefaults() + # Import default values for target resist profiles + DefaultDatabaseValues.importResistProfileDefaults() + ''' + +PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index e69de29bb..a79f590b9 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -0,0 +1,89 @@ +import logging + +import wx + +import gui.globalEvents as GE +import gui.mainFrame +import service +from gui.bitmapLoader import BitmapLoader +from gui.preferenceView import PreferenceView + +logger = logging.getLogger(__name__) + + +class PFFittingEnginePref ( PreferenceView): + title = "Fitting Engine" + + def populatePanel( self, panel ): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.dirtySettings = False + #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + self.cbGlobalForceReload = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbGlobalForceReload, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbGlobalForceReloadText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.cbGlobalForceReloadText.Wrap( -1 ) + self.cbGlobalForceReloadText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.cbGlobalForceReloadText, 0, wx.ALL, 5 ) + + # 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 ) + mainSizer.Add( self.cbGlobalForceReactivationTimer, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbGlobalForceReactivationTimerText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reactivation timer when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.cbGlobalForceReactivationTimerText.Wrap( -1 ) + self.cbGlobalForceReactivationTimerText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.cbGlobalForceReactivationTimerText, 0, wx.ALL, 5 ) + ''' + + # Future code once for mining laser crystal + ''' + self.cbGlobalMiningSpecialtyCrystal = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reactivation timer", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbGlobalMiningSpecialtyCrystal, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbGlobalMiningSpecialtyCrystalText = wx.StaticText( panel, wx.ID_ANY, u" If enabled, displays the Specialty Crystal mining amount.\n This is the amount mined when using crystals and mining the matching asteroid.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.cbGlobalMiningSpecialtyCrystalText.Wrap( -1 ) + self.cbGlobalMiningSpecialtyCrystalText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.cbGlobalMiningSpecialtyCrystalText, 0, wx.ALL, 5 ) + ''' + + + self.sFit = service.Fit.getInstance() + + self.cbGlobalForceReload.SetValue(self.sFit.serviceFittingOptions["useGlobalForceReload"]) + + self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange) + + panel.SetSizer( mainSizer ) + panel.Layout() + + + def OnCBGlobalForceReloadStateChange(self, event): + self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() + fitID = self.mainFrame.getActiveFit() + self.sFit.refreshFit(fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + event.Skip() + + def getImage(self): + return BitmapLoader.getBitmap("prefs_settings", "gui") + + def OnWindowLeave(self, event): + # We don't want to do anything when they leave, + # but in the future we might. + pass + + +PFFittingEnginePref.register() diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index e69de29bb..4d574fb93 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -0,0 +1,67 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +import config + + +class PFGeneralPref ( PreferenceView): + title = "Logging" + + def populatePanel( self, panel ): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.dirtySettings = False + #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSubTitle.Wrap( -1 ) + self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + #Debug Logging + self.cbdebugLogging = wx.CheckBox( panel, wx.ID_ANY, u"Debug Logging Enabled", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbdebugLogging, 0, wx.ALL|wx.EXPAND, 5 ) + + + defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) + + self.cbdebugLogging.SetValue(config.debug) + self.cbdebugLogging.Bind(wx.EVT_CHECKBOX, self.onCBdebugLogging) + + panel.SetSizer( mainSizer ) + panel.Layout() + + + def onCBdebugLogging(self, event): + # We don't want users to be able to actually change this, + # so if they try and change it, set it back to the current setting + self.cbdebugLogging.SetValue(config.debug) + + # In case we do, down there road, here's a bit of a start. + ''' + if self.cbdebugLogging.GetValue() is True: + self.cbdebugLogging.SetValue(False) + config.Debug = self.cbdebugLogging.GetValue() + else: + self.cbdebugLogging.SetValue(True) + config.Debug = self.cbdebugLogging.GetValue() + ''' + + def getImage(self): + return BitmapLoader.getBitmap("prefs_settings", "gui") + + +PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py index e69de29bb..d2a2a3ccd 100644 --- a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py +++ b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py @@ -0,0 +1,167 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +from service.crest import CrestModes + +from wx.lib.intctrl import IntCtrl + + +class PFStatViewPref(PreferenceView): + title = "Statistics Panel" + + def populatePanel(self, panel): + self.settings = service.settings.statViewSettings.getInstance() + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + self.dirtySettings = False + dlgWidth = panel.GetParent().GetParent().ClientSize.width + mainSizer = wx.BoxSizer(wx.VERTICAL) + + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) + + self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", + wx.DefaultPosition, wx.DefaultSize, 0) + self.stInfo.Wrap(dlgWidth - 50) + mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + # Row 1 + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) + + self.rbResources = wx.RadioBox(panel, -1, "Resources", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbResources.EnableItem(1, False) + self.rbResources.SetSelection(self.settings.get('resources')) + rbSizerRow1.Add(self.rbResources, 1, wx.TOP | wx.RIGHT, 5) + self.rbResources.Bind(wx.EVT_RADIOBOX, self.OnResourcesChange) + + self.rbResistances = wx.RadioBox(panel, -1, "Resistances", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbResistances.EnableItem(1, False) + self.rbResistances.SetSelection(self.settings.get('resistances')) + rbSizerRow1.Add(self.rbResistances, 1, wx.ALL, 5) + self.rbResistances.Bind(wx.EVT_RADIOBOX, self.OnResistancesChange) + + self.rbRecharge = wx.RadioBox(panel, -1, "Shield/Armor Tank", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbRecharge.EnableItem(1, False) + self.rbRecharge.SetSelection(self.settings.get('recharge')) + rbSizerRow1.Add(self.rbRecharge, 1, wx.ALL, 5) + self.rbRecharge.Bind(wx.EVT_RADIOBOX, self.OnRechargeChange) + + mainSizer.Add(rbSizerRow1, 1, wx.ALL | wx.EXPAND, 0) + + # Row 2 + self.m_staticline2 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) + + self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbFirepower.EnableItem(1, False) + self.rbFirepower.SetSelection(self.settings.get('firepower')) + rbSizerRow2.Add(self.rbFirepower, 1, wx.TOP | wx.RIGHT, 5) + self.rbFirepower.Bind(wx.EVT_RADIOBOX, self.OnFirepowerChange) + + self.rbCapacitor = wx.RadioBox(panel, -1, "Capacitor", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbCapacitor.EnableItem(1, False) + self.rbCapacitor.SetSelection(self.settings.get('capacitor')) + rbSizerRow2.Add(self.rbCapacitor, 1, wx.ALL, 5) + self.rbCapacitor.Bind(wx.EVT_RADIOBOX, self.OnCapacitorChange) + + self.rbMisc = wx.RadioBox(panel, -1, "Misc", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, + wx.RA_SPECIFY_COLS) + # Disable full as we don't have a view for this yet + self.rbMisc.EnableItem(2, False) + self.rbMisc.SetSelection(self.settings.get('targetingmisc')) + rbSizerRow2.Add(self.rbMisc, 1, wx.ALL, 5) + self.rbMisc.Bind(wx.EVT_RADIOBOX, self.OnTargetingMiscChange) + + mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) + + # Row 3 + self.m_staticline3 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL) + + self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], + 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbPrice.EnableItem(1, False) + self.rbPrice.SetSelection(self.settings.get('price')) + rbSizerRow3.Add(self.rbPrice, 1, wx.TOP | wx.RIGHT, 5) + self.rbPrice.Bind(wx.EVT_RADIOBOX, self.OnPriceChange) + + # We don't have views for these.....yet + ''' + self.rbMining = wx.RadioBox(panel, -1, "Mining", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbMining.SetSelection(self.settings.get('miningyield')) + rbSizerRow3.Add(self.rbMining, 1, wx.ALL, 5) + self.rbMining.Bind(wx.EVT_RADIOBOX, self.OnMiningYieldChange) + + self.rbDrones = wx.RadioBox(panel, -1, "Drones", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbDrones.SetSelection(self.settings.get('drones')) + rbSizerRow3.Add(self.rbDrones, 1, wx.ALL, 5) + self.rbDrones.Bind(wx.EVT_RADIOBOX, self.OnDroneChange) + ''' + + mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0) + + panel.SetSizer(mainSizer) + panel.Layout() + + # serviceStatViewDefaultSettings = {"resources": 2, "resistances": 2, "recharge": 2, "firepower": 2, "capacitor": 1, + # "targetingmisc": 2, "price": 2, "miningyield": 0} + + def OnResourcesChange(self, event): + self.settings.set('resources', event.GetInt()) + + def OnResistancesChange(self, event): + self.settings.set('resistances', event.GetInt()) + + def OnRechargeChange(self, event): + self.settings.set('recharge', event.GetInt()) + + def OnFirepowerChange(self, event): + self.settings.set('firepower', event.GetInt()) + + def OnCapacitorChange(self, event): + self.settings.set('capacitor', event.GetInt()) + + def OnTargetingMiscChange(self, event): + self.settings.set('targetingmisc', event.GetInt()) + + def OnPriceChange(self, event): + self.settings.set('price', event.GetInt()) + + def OnMiningYieldChange(self, event): + self.settings.set('miningyield', event.GetInt()) + + def OnDroneChange(self, event): + self.settings.set('drones', event.GetInt()) + + def getImage(self): + return BitmapLoader.getBitmap("pref-gauges_big", "gui") + + +PFStatViewPref.register() \ No newline at end of file diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py index e69de29bb..e0564aaac 100644 --- a/gui/builtinStatsViews/targetingMiscViewMinimal.py +++ b/gui/builtinStatsViews/targetingMiscViewMinimal.py @@ -0,0 +1,251 @@ +# ============================================================================= +# Copyright (C) 2010 Diego Duclos +# +# This file is part of pyfa. +# +# pyfa is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# pyfa is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with pyfa. If not, see . +# ============================================================================= + +# noinspection PyPackageRequirements +import wx +from gui.statsView import StatsView +from gui.utils.numberFormatter import formatAmount + +try: + from collections import OrderedDict +except ImportError: + from utils.compat import OrderedDict + + +class TargetingMiscViewMinimal(StatsView): + name = "targetingmiscViewMinimal" + + def __init__(self, parent): + StatsView.__init__(self) + self.parent = parent + self._cachedValues = [] + + def getHeaderText(self, fit): + return "Targeting && Misc" + + def getTextExtentW(self, text): + width, height = self.parent.GetTextExtent(text) + return width + + def populatePanel(self, contentPanel, headerPanel): + contentSizer = contentPanel.GetSizer() + + self.panel = contentPanel + self.headerPanel = headerPanel + gridTargetingMisc = wx.FlexGridSizer(1, 3) + contentSizer.Add(gridTargetingMisc, 0, wx.EXPAND | wx.ALL, 0) + gridTargetingMisc.AddGrowableCol(0) + gridTargetingMisc.AddGrowableCol(2) + # Targeting + + gridTargeting = wx.FlexGridSizer(5, 2) + gridTargeting.AddGrowableCol(1) + + gridTargetingMisc.Add(gridTargeting, 0, wx.ALIGN_LEFT | wx.ALL, 5) + + labels = (("Targets", "Targets", ""), + ("Range", "Range", "km"), + ("Scan res.", "ScanRes", "mm"), + ("Sensor str.", "SensorStr", ""), + ("Drone range", "CtrlRange", "km")) + + for header, labelShort, unit in labels: + gridTargeting.Add(wx.StaticText(contentPanel, wx.ID_ANY, "%s: " % header), 0, wx.ALIGN_LEFT) + + box = wx.BoxSizer(wx.HORIZONTAL) + gridTargeting.Add(box, 0, wx.ALIGN_LEFT) + + lbl = wx.StaticText(contentPanel, wx.ID_ANY, "0 %s" % unit) + setattr(self, "label%s" % labelShort, lbl) + box.Add(lbl, 0, wx.ALIGN_LEFT) + + self._cachedValues.append({"main": 0}) + + # Misc + gridTargetingMisc.Add(wx.StaticLine(contentPanel, wx.ID_ANY, style=wx.VERTICAL), 0, wx.EXPAND, 3) + gridMisc = wx.FlexGridSizer(5, 2) + gridMisc.AddGrowableCol(1) + gridTargetingMisc.Add(gridMisc, 0, wx.ALIGN_LEFT | wx.ALL, 5) + + labels = (("Speed", "Speed", "m/s"), + ("Align time", "AlignTime", "s"), + ("Signature", "SigRadius", "m"), + ("Warp Speed", "WarpSpeed", "AU/s"), + ("Cargo", "Cargo", u"m\u00B3")) + + for header, labelShort, unit in labels: + gridMisc.Add(wx.StaticText(contentPanel, wx.ID_ANY, "%s: " % header), 0, wx.ALIGN_LEFT) + + box = wx.BoxSizer(wx.HORIZONTAL) + gridMisc.Add(box, 0, wx.ALIGN_LEFT) + + lbl = wx.StaticText(contentPanel, wx.ID_ANY, "0 %s" % unit) + setattr(self, "labelFull%s" % labelShort, lbl) + box.Add(lbl, 0, wx.ALIGN_LEFT) + + self._cachedValues.append({"main": 0}) + + def refreshPanel(self, fit): + # If we did anything interesting, we'd update our labels to reflect the new fit's stats here + + cargoNamesOrder = OrderedDict(( + ("fleetHangarCapacity", "Fleet hangar"), + ("shipMaintenanceBayCapacity", "Maintenance bay"), + ("specialAmmoHoldCapacity", "Ammo hold"), + ("specialFuelBayCapacity", "Fuel bay"), + ("specialShipHoldCapacity", "Ship hold"), + ("specialSmallShipHoldCapacity", "Small ship hold"), + ("specialMediumShipHoldCapacity", "Medium ship hold"), + ("specialLargeShipHoldCapacity", "Large ship hold"), + ("specialIndustrialShipHoldCapacity", "Industrial ship hold"), + ("specialOreHoldCapacity", "Ore hold"), + ("specialMineralHoldCapacity", "Mineral hold"), + ("specialMaterialBayCapacity", "Material bay"), + ("specialGasHoldCapacity", "Gas hold"), + ("specialSalvageHoldCapacity", "Salvage hold"), + ("specialCommandCenterHoldCapacity", "Command center hold"), + ("specialPlanetaryCommoditiesHoldCapacity", "Planetary goods hold"), + ("specialQuafeHoldCapacity", "Quafe hold") + )) + + cargoValues = { + "main": lambda: fit.ship.getModifiedItemAttr("capacity"), + "fleetHangarCapacity": lambda: fit.ship.getModifiedItemAttr("fleetHangarCapacity"), + "shipMaintenanceBayCapacity": lambda: fit.ship.getModifiedItemAttr("shipMaintenanceBayCapacity"), + "specialAmmoHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialAmmoHoldCapacity"), + "specialFuelBayCapacity": lambda: fit.ship.getModifiedItemAttr("specialFuelBayCapacity"), + "specialShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialShipHoldCapacity"), + "specialSmallShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialSmallShipHoldCapacity"), + "specialMediumShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialMediumShipHoldCapacity"), + "specialLargeShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialLargeShipHoldCapacity"), + "specialIndustrialShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialIndustrialShipHoldCapacity"), + "specialOreHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialOreHoldCapacity"), + "specialMineralHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialMineralHoldCapacity"), + "specialMaterialBayCapacity": lambda: fit.ship.getModifiedItemAttr("specialMaterialBayCapacity"), + "specialGasHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialGasHoldCapacity"), + "specialSalvageHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialSalvageHoldCapacity"), + "specialCommandCenterHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialCommandCenterHoldCapacity"), + "specialPlanetaryCommoditiesHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialPlanetaryCommoditiesHoldCapacity"), + "specialQuafeHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialQuafeHoldCapacity") + } + + stats = (("labelTargets", {"main": lambda: fit.maxTargets}, 3, 0, 0, ""), + ("labelRange", {"main": lambda: fit.maxTargetRange / 1000}, 3, 0, 0, "km"), + ("labelScanRes", {"main": lambda: fit.ship.getModifiedItemAttr("scanResolution")}, 3, 0, 0, "mm"), + ("labelSensorStr", {"main": lambda: fit.scanStrength}, 3, 0, 0, ""), + ("labelCtrlRange", {"main": lambda: fit.extraAttributes["droneControlRange"] / 1000}, 3, 0, 0, "km"), + ("labelFullSpeed", {"main": lambda: fit.maxSpeed}, 3, 0, 0, "m/s"), + ("labelFullAlignTime", {"main": lambda: fit.alignTime}, 3, 0, 0, "s"), + ("labelFullSigRadius", {"main": lambda: fit.ship.getModifiedItemAttr("signatureRadius")}, 3, 0, 9, ""), + ("labelFullWarpSpeed", {"main": lambda: fit.warpSpeed}, 3, 0, 0, "AU/s"), + ("labelFullCargo", cargoValues, 4, 0, 9, u"m\u00B3")) + + counter = 0 + RADII = [("Pod", 25), ("Interceptor", 33), ("Frigate", 38), + ("Destroyer", 83), ("Cruiser", 130), + ("Battlecruiser", 265), ("Battleship", 420), + ("Carrier", 3000)] + for labelName, valueDict, prec, lowest, highest, unit in stats: + label = getattr(self, labelName) + newValues = {} + for valueAlias, value in valueDict.items(): + value = value() if fit is not None else 0 + value = value if value is not None else 0 + newValues[valueAlias] = value + if self._cachedValues[counter] != newValues: + mainValue = newValues["main"] + otherValues = dict((k, newValues[k]) for k in filter(lambda k: k != "main", newValues)) + if labelName == "labelFullCargo": + # Get sum of all cargoholds except for maintenance bay + additionalCargo = sum(otherValues.values()) + if additionalCargo > 0: + label.SetLabel("%s+%s %s" % (formatAmount(mainValue, prec, lowest, highest), + formatAmount(additionalCargo, prec, lowest, highest), + unit)) + else: + label.SetLabel("%s %s" % (formatAmount(mainValue, prec, lowest, highest), unit)) + else: + label.SetLabel("%s %s" % (formatAmount(mainValue, prec, lowest, highest), unit)) + # Tooltip stuff + if fit: + if labelName == "labelScanRes": + lockTime = "%s\n" % "Lock Times".center(30) + for size, radius in RADII: + left = "%.1fs" % fit.calculateLockTime(radius) + right = "%s [%d]" % (size, radius) + lockTime += "%5s\t%s\n" % (left, right) + label.SetToolTip(wx.ToolTip(lockTime)) + elif labelName == "labelFullSigRadius": + label.SetToolTip(wx.ToolTip("Probe Size: %.3f" % (fit.probeSize or 0))) + elif labelName == "labelFullWarpSpeed": + label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % fit.maxWarpDistance)) + elif labelName == "labelSensorStr": + if fit.jamChance > 0: + label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) + else: + label.SetToolTip(wx.ToolTip("Type: %s" % fit.scanType)) + elif labelName == "labelFullAlignTime": + alignTime = "Align:\t%.3fs" % mainValue + mass = 'Mass:\t{:,.0f}kg'.format(fit.ship.getModifiedItemAttr("mass")) + agility = "Agility:\t%.3fx" % (fit.ship.getModifiedItemAttr("agility") or 0) + label.SetToolTip(wx.ToolTip("%s\n%s\n%s" % (alignTime, mass, agility))) + elif labelName == "labelFullCargo": + tipLines = [u"Cargohold: {:,.2f}m\u00B3 / {:,.2f}m\u00B3".format(fit.cargoBayUsed, newValues["main"])] + for attrName, tipAlias in cargoNamesOrder.items(): + if newValues[attrName] > 0: + tipLines.append(u"{}: {:,.2f}m\u00B3".format(tipAlias, newValues[attrName])) + label.SetToolTip(wx.ToolTip(u"\n".join(tipLines))) + else: + label.SetToolTip(wx.ToolTip("%.1f" % mainValue)) + else: + label.SetToolTip(wx.ToolTip("")) + self._cachedValues[counter] = newValues + elif labelName == "labelFullWarpSpeed": + if fit: + label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % fit.maxWarpDistance)) + else: + label.SetToolTip(wx.ToolTip("")) + elif labelName == "labelSensorStr": + if fit: + if fit.jamChance > 0: + label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) + else: + label.SetToolTip(wx.ToolTip("Type: %s" % fit.scanType)) + else: + label.SetToolTip(wx.ToolTip("")) + elif labelName == "labelFullCargo": + if fit: + cachedCargo = self._cachedValues[counter] + # if you add stuff to cargo, the capacity doesn't change and thus it is still cached + # This assures us that we force refresh of cargo tooltip + tipLines = [u"Cargohold: {:,.2f}m\u00B3 / {:,.2f}m\u00B3".format(fit.cargoBayUsed, cachedCargo["main"])] + for attrName, tipAlias in cargoNamesOrder.items(): + if cachedCargo[attrName] > 0: + tipLines.append(u"{}: {:,.2f}m\u00B3".format(tipAlias, cachedCargo[attrName])) + label.SetToolTip(wx.ToolTip(u"\n".join(tipLines))) + else: + label.SetToolTip(wx.ToolTip("")) + + counter += 1 + + self.panel.Layout() + self.headerPanel.Layout() + + +TargetingMiscViewMinimal.register() From 56f1e9ed3ab0daa0eb0b2ab1c842f338b50c93c6 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 09:59:56 -0800 Subject: [PATCH 04/15] Finish migrate from #868. Lots of tox/formatting/inspection fixes to the files touched. --- gui/builtinContextMenus/ammoPattern.py | 5 + gui/builtinContextMenus/amount.py | 5 + gui/builtinContextMenus/cargo.py | 12 +- .../changeAffectingSkills.py | 5 + gui/builtinContextMenus/damagePattern.py | 5 + gui/builtinContextMenus/droneRemoveStack.py | 5 + gui/builtinContextMenus/droneSplit.py | 5 + gui/builtinContextMenus/factorReload.py | 5 + gui/builtinContextMenus/fighterAbilities.py | 5 + gui/builtinContextMenus/implantSets.py | 5 + gui/builtinContextMenus/itemRemove.py | 5 + gui/builtinContextMenus/itemStats.py | 4 + gui/builtinContextMenus/marketJump.py | 5 + gui/builtinContextMenus/metaSwap.py | 4 + gui/builtinContextMenus/moduleAmmoPicker.py | 5 + .../moduleGlobalAmmoPicker.py | 5 + gui/builtinContextMenus/openFit.py | 5 + gui/builtinContextMenus/priceClear.py | 5 + gui/builtinContextMenus/project.py | 5 + gui/builtinContextMenus/shipJump.py | 5 + gui/builtinContextMenus/tacticalMode.py | 5 + gui/builtinContextMenus/targetResists.py | 5 + gui/builtinContextMenus/whProjector.py | 5 + .../pyfaContextMenuPreferences.py | 118 ++++++++++++++++++ .../pyfaDatabasePreferences.py | 72 +++++------ .../pyfaEnginePreferences.py | 62 ++++----- .../pyfaLoggingPreferences.py | 45 +++---- .../pyfaStatViewPreferences.py | 49 +++----- .../pyfaUpdatePreferences.py | 2 +- .../targetingMiscViewMinimal.py | 2 +- gui/preferenceView.py | 7 +- gui/statsPane.py | 4 +- service/settings.py | 97 ++++++++++---- 33 files changed, 422 insertions(+), 156 deletions(-) create mode 100644 gui/builtinPreferenceViews/pyfaContextMenuPreferences.py diff --git a/gui/builtinContextMenus/ammoPattern.py b/gui/builtinContextMenus/ammoPattern.py index e131bb1c6..1b8dfd95c 100644 --- a/gui/builtinContextMenus/ammoPattern.py +++ b/gui/builtinContextMenus/ammoPattern.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class AmmoPattern(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('ammoPattern'): + return False + if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None: return False diff --git a/gui/builtinContextMenus/amount.py b/gui/builtinContextMenus/amount.py index 12d483243..dd73c9b3e 100644 --- a/gui/builtinContextMenus/amount.py +++ b/gui/builtinContextMenus/amount.py @@ -7,13 +7,18 @@ import wx from service.fit import Fit from eos.saveddata.cargo import Cargo as es_Cargo from eos.saveddata.fighter import Fighter as es_Fighter +from service.settings import ContextMenuSettings class ChangeAmount(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('amount'): + return False + return srcContext in ("cargoItem", "projectedFit", "fighterItem", "projectedFighter") def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/cargo.py b/gui/builtinContextMenus/cargo.py index 97ea7b8ab..32d6370cf 100644 --- a/gui/builtinContextMenus/cargo.py +++ b/gui/builtinContextMenus/cargo.py @@ -4,20 +4,28 @@ import gui.globalEvents as GE # noinspection PyPackageRequirements import wx from service.fit import Fit +from service.settings import ContextMenuSettings class Cargo(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('cargo'): + return False + + if srcContext not in ("marketItemGroup", "marketItemMisc"): + return False + sFit = Fit.getInstance() fitID = self.mainFrame.getActiveFit() - fit = sFit.getFit(fitID) # Make sure context menu registers in the correct view - if srcContext not in ("marketItemGroup", "marketItemMisc") or not fit or fit.isStructure: + if not fit or fit.isStructure: return False + return True def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/changeAffectingSkills.py b/gui/builtinContextMenus/changeAffectingSkills.py index 6c02d07b9..dc71fc06d 100644 --- a/gui/builtinContextMenus/changeAffectingSkills.py +++ b/gui/builtinContextMenus/changeAffectingSkills.py @@ -8,13 +8,18 @@ from eos.saveddata.character import Skill import gui.globalEvents as GE from service.fit import Fit from service.character import Character +from service.settings import ContextMenuSettings class ChangeAffectingSkills(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('changeAffectingSkills'): + return False + if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "fittingCharge", "fittingShip"): return False diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py index 20e1b4343..8399dd069 100644 --- a/gui/builtinContextMenus/damagePattern.py +++ b/gui/builtinContextMenus/damagePattern.py @@ -6,6 +6,7 @@ import wx from gui.bitmapLoader import BitmapLoader from service.fit import Fit from service.damagePattern import DamagePattern as import_DamagePattern +from service.settings import ContextMenuSettings try: from collections import OrderedDict @@ -16,8 +17,12 @@ except ImportError: class DamagePattern(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('damagePattern'): + return False + return srcContext == "resistancesViewFull" and self.mainFrame.getActiveFit() is not None def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/droneRemoveStack.py b/gui/builtinContextMenus/droneRemoveStack.py index b8e4b820b..c7dae1e03 100644 --- a/gui/builtinContextMenus/droneRemoveStack.py +++ b/gui/builtinContextMenus/droneRemoveStack.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class ItemRemove(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('droneRemoveStack'): + return False + return srcContext == "droneItem" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py index 77ba87e8a..761262a8c 100644 --- a/gui/builtinContextMenus/droneSplit.py +++ b/gui/builtinContextMenus/droneSplit.py @@ -4,13 +4,18 @@ import gui.globalEvents as GE from service.fit import Fit # noinspection PyPackageRequirements import wx +from service.settings import ContextMenuSettings class DroneSplit(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('droneSplit'): + return False + return srcContext in ("droneItem", "projectedDrone") and selection[0].amount > 1 def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py index 86553c73b..6770e64af 100644 --- a/gui/builtinContextMenus/factorReload.py +++ b/gui/builtinContextMenus/factorReload.py @@ -5,13 +5,18 @@ import gui.globalEvents as GE import wx from gui.bitmapLoader import BitmapLoader from service.fit import Fit +from service.settings import ContextMenuSettings class FactorReload(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('factorReload'): + return False + return srcContext == "firepowerViewFull" and self.mainFrame.getActiveFit() is not None def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/fighterAbilities.py b/gui/builtinContextMenus/fighterAbilities.py index 8c26a9ffe..6f6bc8051 100644 --- a/gui/builtinContextMenus/fighterAbilities.py +++ b/gui/builtinContextMenus/fighterAbilities.py @@ -4,13 +4,18 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class FighterAbility(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 ("fighterItem", "projectedFighter"): return False diff --git a/gui/builtinContextMenus/implantSets.py b/gui/builtinContextMenus/implantSets.py index 994c0d607..6a2ee7bfe 100644 --- a/gui/builtinContextMenus/implantSets.py +++ b/gui/builtinContextMenus/implantSets.py @@ -6,13 +6,18 @@ import wx from service.implantSet import ImplantSets as s_ImplantSets from service.character import Character from service.fit import Fit +from service.settings import ContextMenuSettings class ImplantSets(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('implantSets'): + return False + return srcContext in ("implantView", "implantEditor") def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py index fb8a70679..6ad128220 100644 --- a/gui/builtinContextMenus/itemRemove.py +++ b/gui/builtinContextMenus/itemRemove.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class ItemRemove(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('itemRemove'): + return False + return srcContext in ("fittingModule", "fittingCharge", "droneItem", "implantItem", "boosterItem", "projectedModule", diff --git a/gui/builtinContextMenus/itemStats.py b/gui/builtinContextMenus/itemStats.py index 1b923ecf5..4e1b8187e 100644 --- a/gui/builtinContextMenus/itemStats.py +++ b/gui/builtinContextMenus/itemStats.py @@ -4,13 +4,17 @@ import gui.mainFrame # noinspection PyPackageRequirements import wx from service.fit import Fit +from service.settings import ContextMenuSettings class ItemStats(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('itemStats'): + return False return srcContext in ("marketItemGroup", "marketItemMisc", "fittingModule", "fittingCharge", diff --git a/gui/builtinContextMenus/marketJump.py b/gui/builtinContextMenus/marketJump.py index e96292b41..c630312c1 100644 --- a/gui/builtinContextMenus/marketJump.py +++ b/gui/builtinContextMenus/marketJump.py @@ -1,13 +1,18 @@ from gui.contextMenu import ContextMenu import gui.mainFrame from service.market import Market +from service.settings import ContextMenuSettings class MarketJump(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('marketJump'): + return False + validContexts = ("marketItemMisc", "fittingModule", "fittingCharge", "droneItem", "implantItem", "boosterItem", diff --git a/gui/builtinContextMenus/metaSwap.py b/gui/builtinContextMenus/metaSwap.py index 389335f53..ba3934b3f 100644 --- a/gui/builtinContextMenus/metaSwap.py +++ b/gui/builtinContextMenus/metaSwap.py @@ -8,13 +8,17 @@ from service.market import Market import gui.mainFrame import gui.globalEvents as GE from gui.contextMenu import ContextMenu +from service.settings import ContextMenuSettings class MetaSwap(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('metaSwap'): + return False if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule",): return False diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py index b6791662d..1af970190 100644 --- a/gui/builtinContextMenus/moduleAmmoPicker.py +++ b/gui/builtinContextMenus/moduleAmmoPicker.py @@ -10,6 +10,7 @@ import gui.mainFrame import gui.globalEvents as GE from gui.contextMenu import ContextMenu from gui.bitmapLoader import BitmapLoader +from service.settings import ContextMenuSettings class ModuleAmmoPicker(ContextMenu): @@ -18,8 +19,12 @@ class ModuleAmmoPicker(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('moduleAmmoPicker'): + return False + if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "projectedModule"): return False diff --git a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py index 849896111..5e516e68f 100644 --- a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py +++ b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py @@ -6,12 +6,14 @@ import gui.globalEvents as GE from gui.builtinContextMenus.moduleAmmoPicker import ModuleAmmoPicker from eos.db.saveddata.queries import getFit as db_getFit from service.fit import Fit +from service.settings import ContextMenuSettings class ModuleGlobalAmmoPicker(ModuleAmmoPicker): def __init__(self): super(ModuleGlobalAmmoPicker, self).__init__() self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def getText(self, itmContext, selection): return "Charge (All)" @@ -42,6 +44,9 @@ class ModuleGlobalAmmoPicker(ModuleAmmoPicker): wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def display(self, srcContext, selection): + if not self.settings.get('moduleGlobalAmmoPicker'): + return False + try: selectionLen = len(selection) except: diff --git a/gui/builtinContextMenus/openFit.py b/gui/builtinContextMenus/openFit.py index 5a0a760f7..d13618132 100644 --- a/gui/builtinContextMenus/openFit.py +++ b/gui/builtinContextMenus/openFit.py @@ -3,13 +3,18 @@ import gui.mainFrame # noinspection PyPackageRequirements import wx from gui.shipBrowser import FitSelected +from service.settings import ContextMenuSettings class OpenFit(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('openFit'): + return False + return srcContext == "projectedFit" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/priceClear.py b/gui/builtinContextMenus/priceClear.py index 8cb1a5175..44093e662 100644 --- a/gui/builtinContextMenus/priceClear.py +++ b/gui/builtinContextMenus/priceClear.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.market import Market +from service.settings import ContextMenuSettings class PriceClear(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('priceClear'): + return False + return srcContext == "priceViewFull" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/project.py b/gui/builtinContextMenus/project.py index 838b4e4fc..f06c29152 100644 --- a/gui/builtinContextMenus/project.py +++ b/gui/builtinContextMenus/project.py @@ -4,13 +4,18 @@ import gui.globalEvents as GE # noinspection PyPackageRequirements import wx from service.fit import Fit +from service.settings import ContextMenuSettings class Project(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 ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None: return False diff --git a/gui/builtinContextMenus/shipJump.py b/gui/builtinContextMenus/shipJump.py index 40dda42c8..8f426ff1a 100644 --- a/gui/builtinContextMenus/shipJump.py +++ b/gui/builtinContextMenus/shipJump.py @@ -4,13 +4,18 @@ from gui.contextMenu import ContextMenu import gui.mainFrame from gui.shipBrowser import Stage3Selected from service.fit import Fit +from service.settings import ContextMenuSettings class ShipJump(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('shipJump'): + return False + return srcContext == "fittingShip" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/tacticalMode.py b/gui/builtinContextMenus/tacticalMode.py index 679be45f3..8b87dd10b 100644 --- a/gui/builtinContextMenus/tacticalMode.py +++ b/gui/builtinContextMenus/tacticalMode.py @@ -5,13 +5,18 @@ import gui.mainFrame import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class TacticalMode(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('tacticalMode'): + return False + if self.mainFrame.getActiveFit() is None or srcContext != "fittingShip": return False diff --git a/gui/builtinContextMenus/targetResists.py b/gui/builtinContextMenus/targetResists.py index 8ebd4076d..95468ecd0 100644 --- a/gui/builtinContextMenus/targetResists.py +++ b/gui/builtinContextMenus/targetResists.py @@ -6,6 +6,7 @@ import wx from gui.bitmapLoader import BitmapLoader from service.targetResists import TargetResists as svc_TargetResists from service.fit import Fit +from service.settings import ContextMenuSettings try: from collections import OrderedDict @@ -16,8 +17,12 @@ except ImportError: class TargetResists(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('targetResists'): + return False + if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull": return False diff --git a/gui/builtinContextMenus/whProjector.py b/gui/builtinContextMenus/whProjector.py index d5883541f..a677ceabf 100644 --- a/gui/builtinContextMenus/whProjector.py +++ b/gui/builtinContextMenus/whProjector.py @@ -5,13 +5,18 @@ import gui.globalEvents as GE import wx from service.market import Market from service.fit import Fit +from service.settings import ContextMenuSettings class WhProjector(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('whProjector'): + return False + return srcContext == "projected" def getText(self, itmContext, selection): diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py new file mode 100644 index 000000000..29ce587d3 --- /dev/null +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -0,0 +1,118 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +from service.settings import ContextMenuSettings + + +class PFContextMenuPref(PreferenceView): + title = "Context Menu Panel" + + def populatePanel(self, panel): + self.settings = ContextMenuSettings.getInstance() + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + self.dirtySettings = False + dlgWidth = panel.GetParent().GetParent().ClientSize.width + mainSizer = wx.BoxSizer(wx.VERTICAL) + + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) + + self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Disabling context menus can improve responsiveness.", wx.DefaultPosition, wx.DefaultSize, 0) + self.stInfo.Wrap(dlgWidth - 50) + mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + # Row 1 + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) + + 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) + 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) + self.rbBox2.SetSelection(self.settings.get('changeAffectingSkills')) + rbSizerRow1.Add(self.rbBox2, 1, wx.ALL, 5) + self.rbBox2.Bind(wx.EVT_RADIOBOX, self.OnSetting2Change) + + self.rbBox3 = wx.RadioBox(panel, -1, "Factor in Reload Time", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) + self.rbBox3.SetSelection(self.settings.get('factorReload')) + rbSizerRow1.Add(self.rbBox3, 1, wx.ALL, 5) + self.rbBox3.Bind(wx.EVT_RADIOBOX, self.OnSetting3Change) + + mainSizer.Add(rbSizerRow1, 1, wx.ALL | wx.EXPAND, 0) + + # Row 2 + self.m_staticline2 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) + + 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) + 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.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) + + mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) + + # Row 3 + self.m_staticline3 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + 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) + + mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0) + + panel.SetSizer(mainSizer) + panel.Layout() + + def OnSetting1Change(self, event): + self.settings.set('ammoPattern', event.GetInt()) + + def OnSetting2Change(self, event): + self.settings.set('changeAffectingSkills', event.GetInt()) + + def OnSetting3Change(self, event): + self.settings.set('factorReload', event.GetInt()) + + def OnSetting4Change(self, event): + self.settings.set('metaSwap', event.GetInt()) + + def OnSetting5Change(self, event): + self.settings.set('moduleAmmoPicker', event.GetInt()) + + def OnSetting6Change(self, event): + self.settings.set('moduleGlobalAmmoPicker', event.GetInt()) + + def OnSetting7Change(self, event): + self.settings.set('project', event.GetInt()) + + def getImage(self): + return BitmapLoader.getBitmap("pref-gauges_big", "gui") + + +PFContextMenuPref.register() diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index aa95c3f98..1460599a1 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -3,76 +3,70 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader -import gui.mainFrame -import service +from gui.mainFrame import MainFrame import config import logging logger = logging.getLogger(__name__) -from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues - -class PFGeneralPref ( PreferenceView): +class PFGeneralPref(PreferenceView): title = "Database" - def populatePanel( self, panel ): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() + def populatePanel(self, panel): + self.mainFrame = MainFrame.getInstance() self.dirtySettings = False - #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - mainSizer = wx.BoxSizer( wx.VERTICAL ) + mainSizer = wx.BoxSizer(wx.VERTICAL) - self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stTitle.Wrap( -1 ) - self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stSubTitle.Wrap( -1 ) - self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle.Wrap(-1) + self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) - self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) - mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - #Save in Root - self.cbsaveInRoot = wx.CheckBox( panel, wx.ID_ANY, u"Using Executable Path for Saved Fit Database and Settings", wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add( self.cbsaveInRoot, 0, wx.ALL|wx.EXPAND, 5 ) + # Save in Root + self.cbsaveInRoot = wx.CheckBox(panel, wx.ID_ANY, u"Using Executable Path for Saved Fit Database and Settings", wx.DefaultPosition, wx.DefaultSize, 0) + mainSizer.Add(self.cbsaveInRoot, 0, wx.ALL | wx.EXPAND, 5) - #Database path - self.stSetUserPath = wx.StaticText( panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stSetUserPath.Wrap( -1 ) - mainSizer.Add( self.stSetUserPath, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + # Database path + self.stSetUserPath = wx.StaticText(panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSetUserPath.Wrap(-1) + mainSizer.Add(self.stSetUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputUserPath = wx.TextCtrl(panel, wx.ID_ANY, config.savePath, wx.DefaultPosition, wx.DefaultSize, 0) self.inputUserPath.SetEditable(False) self.inputUserPath.SetBackgroundColour((200, 200, 200)) mainSizer.Add(self.inputUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) - #Save DB - self.stFitDB = wx.StaticText( panel, wx.ID_ANY, u"Fitting Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stFitDB.Wrap( -1 ) - mainSizer.Add( self.stFitDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + # Save DB + self.stFitDB = wx.StaticText(panel, wx.ID_ANY, u"Fitting Database:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stFitDB.Wrap(-1) + mainSizer.Add(self.stFitDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputFitDB = wx.TextCtrl(panel, wx.ID_ANY, config.saveDB, wx.DefaultPosition, wx.DefaultSize, 0) self.inputFitDB.SetEditable(False) self.inputFitDB.SetBackgroundColour((200, 200, 200)) mainSizer.Add(self.inputFitDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) - #Game Data DB - self.stGameDB = wx.StaticText( panel, wx.ID_ANY, u"Game Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stGameDB.Wrap( -1 ) - mainSizer.Add( self.stGameDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + # Game Data DB + self.stGameDB = wx.StaticText(panel, wx.ID_ANY, u"Game Database:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stGameDB.Wrap(-1) + mainSizer.Add(self.stGameDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputGameDB = wx.TextCtrl(panel, wx.ID_ANY, config.gameDB, wx.DefaultPosition, wx.DefaultSize, 0) self.inputGameDB.SetEditable(False) self.inputGameDB.SetBackgroundColour((200, 200, 200)) mainSizer.Add(self.inputGameDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) - - defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) - self.cbsaveInRoot.SetValue(config.saveInRoot) self.cbsaveInRoot.Bind(wx.EVT_CHECKBOX, self.onCBsaveInRoot) @@ -80,10 +74,9 @@ class PFGeneralPref ( PreferenceView): self.inputFitDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) self.inputGameDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) - panel.SetSizer( mainSizer ) + panel.SetSizer(mainSizer) panel.Layout() - def onCBsaveInRoot(self, event): # We don't want users to be able to actually change this, # so if they try and change it, set it back to the current setting @@ -118,4 +111,5 @@ class PFGeneralPref ( PreferenceView): DefaultDatabaseValues.importResistProfileDefaults() ''' + PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index a79f590b9..a7e1c2d5b 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -2,80 +2,80 @@ import logging import wx -import gui.globalEvents as GE -import gui.mainFrame -import service +from service.fit import Fit from gui.bitmapLoader import BitmapLoader from gui.preferenceView import PreferenceView logger = logging.getLogger(__name__) -class PFFittingEnginePref ( PreferenceView): +class PFFittingEnginePref(PreferenceView): title = "Fitting Engine" - def populatePanel( self, panel ): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() + def __init__(self): self.dirtySettings = False - #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - mainSizer = wx.BoxSizer( wx.VERTICAL ) + def refreshPanel(self, fit): + pass - self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stTitle.Wrap( -1 ) - self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + # noinspection PyAttributeOutsideInit + def populatePanel(self, panel): + # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) - mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + mainSizer = wx.BoxSizer(wx.VERTICAL) - self.cbGlobalForceReload = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add( self.cbGlobalForceReload, 0, wx.ALL|wx.EXPAND, 5 ) + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.cbGlobalForceReloadText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.cbGlobalForceReloadText.Wrap( -1 ) - self.cbGlobalForceReloadText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.cbGlobalForceReloadText, 0, wx.ALL, 5 ) + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0) + mainSizer.Add(self.cbGlobalForceReload, 0, wx.ALL | wx.EXPAND, 5) + + self.cbGlobalForceReloadText = wx.StaticText(panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", + wx.DefaultPosition, wx.DefaultSize, 0) + self.cbGlobalForceReloadText.Wrap(-1) + self.cbGlobalForceReloadText.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.cbGlobalForceReloadText, 0, wx.ALL, 5) # 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 ) mainSizer.Add( self.cbGlobalForceReactivationTimer, 0, wx.ALL|wx.EXPAND, 5 ) - self.cbGlobalForceReactivationTimerText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reactivation timer when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) + text = u" Ignores reactivation timer when calculating capacitor usage,\n damage, and tank." + self.cbGlobalForceReactivationTimerText = wx.StaticText( panel, wx.ID_ANY, text, wx.DefaultPosition, wx.DefaultSize, 0 ) self.cbGlobalForceReactivationTimerText.Wrap( -1 ) self.cbGlobalForceReactivationTimerText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) mainSizer.Add( self.cbGlobalForceReactivationTimerText, 0, wx.ALL, 5 ) ''' - # Future code once for mining laser crystal + # Future code for mining laser crystal ''' self.cbGlobalMiningSpecialtyCrystal = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reactivation timer", wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add( self.cbGlobalMiningSpecialtyCrystal, 0, wx.ALL|wx.EXPAND, 5 ) - self.cbGlobalMiningSpecialtyCrystalText = wx.StaticText( panel, wx.ID_ANY, u" If enabled, displays the Specialty Crystal mining amount.\n This is the amount mined when using crystals and mining the matching asteroid.", wx.DefaultPosition, wx.DefaultSize, 0 ) + text = u" If enabled, displays the Specialty Crystal mining amount.\n This is the amount mined when using crystals and mining the matching asteroid." + self.cbGlobalMiningSpecialtyCrystalText = wx.StaticText( panel, wx.ID_ANY, text, wx.DefaultPosition, wx.DefaultSize, 0 ) self.cbGlobalMiningSpecialtyCrystalText.Wrap( -1 ) self.cbGlobalMiningSpecialtyCrystalText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) mainSizer.Add( self.cbGlobalMiningSpecialtyCrystalText, 0, wx.ALL, 5 ) ''' - - self.sFit = service.Fit.getInstance() + self.sFit = Fit.getInstance() self.cbGlobalForceReload.SetValue(self.sFit.serviceFittingOptions["useGlobalForceReload"]) self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange) - panel.SetSizer( mainSizer ) + panel.SetSizer(mainSizer) panel.Layout() - def OnCBGlobalForceReloadStateChange(self, event): self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() - fitID = self.mainFrame.getActiveFit() - self.sFit.refreshFit(fitID) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - event.Skip() def getImage(self): return BitmapLoader.getBitmap("prefs_settings", "gui") diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index 4d574fb93..ecc0a6140 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -3,48 +3,43 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader -import gui.mainFrame -import service +from gui.mainFrame import MainFrame import config -class PFGeneralPref ( PreferenceView): +class PFGeneralPref(PreferenceView): title = "Logging" - def populatePanel( self, panel ): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() + def populatePanel(self, panel): + self.mainFrame = MainFrame.getInstance() self.dirtySettings = False - #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - mainSizer = wx.BoxSizer( wx.VERTICAL ) + mainSizer = wx.BoxSizer(wx.VERTICAL) - self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stTitle.Wrap( -1 ) - self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stSubTitle.Wrap( -1 ) - self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle.Wrap(-1) + self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) - self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) - mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - #Debug Logging - self.cbdebugLogging = wx.CheckBox( panel, wx.ID_ANY, u"Debug Logging Enabled", wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add( self.cbdebugLogging, 0, wx.ALL|wx.EXPAND, 5 ) - - - defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) + # Debug Logging + self.cbdebugLogging = wx.CheckBox(panel, wx.ID_ANY, u"Debug Logging Enabled", wx.DefaultPosition, wx.DefaultSize, 0) + mainSizer.Add(self.cbdebugLogging, 0, wx.ALL | wx.EXPAND, 5) self.cbdebugLogging.SetValue(config.debug) self.cbdebugLogging.Bind(wx.EVT_CHECKBOX, self.onCBdebugLogging) - panel.SetSizer( mainSizer ) + panel.SetSizer(mainSizer) panel.Layout() - def onCBdebugLogging(self, event): # We don't want users to be able to actually change this, # so if they try and change it, set it back to the current setting diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py index d2a2a3ccd..05583bc49 100644 --- a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py +++ b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py @@ -1,23 +1,23 @@ +# noinspection PyPackageRequirements import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader - -import gui.mainFrame -import service -from service.crest import CrestModes - -from wx.lib.intctrl import IntCtrl +from service.settings import StatViewSettings class PFStatViewPref(PreferenceView): title = "Statistics Panel" - def populatePanel(self, panel): - self.settings = service.settings.statViewSettings.getInstance() - self.mainFrame = gui.mainFrame.MainFrame.getInstance() - + def __init__(self): self.dirtySettings = False + self.settings = StatViewSettings.getInstance() + + def refreshPanel(self, fit): + pass + + # noinspection PyAttributeOutsideInit + def populatePanel(self, panel): dlgWidth = panel.GetParent().GetParent().ClientSize.width mainSizer = wx.BoxSizer(wx.VERTICAL) @@ -27,8 +27,7 @@ class PFStatViewPref(PreferenceView): mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", - wx.DefaultPosition, wx.DefaultSize, 0) + self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", wx.DefaultPosition, wx.DefaultSize, 0) self.stInfo.Wrap(dlgWidth - 50) mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) @@ -38,24 +37,21 @@ class PFStatViewPref(PreferenceView): rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) - self.rbResources = wx.RadioBox(panel, -1, "Resources", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbResources = wx.RadioBox(panel, -1, "Resources", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbResources.EnableItem(1, False) self.rbResources.SetSelection(self.settings.get('resources')) rbSizerRow1.Add(self.rbResources, 1, wx.TOP | wx.RIGHT, 5) self.rbResources.Bind(wx.EVT_RADIOBOX, self.OnResourcesChange) - self.rbResistances = wx.RadioBox(panel, -1, "Resistances", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbResistances = wx.RadioBox(panel, -1, "Resistances", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbResistances.EnableItem(1, False) self.rbResistances.SetSelection(self.settings.get('resistances')) rbSizerRow1.Add(self.rbResistances, 1, wx.ALL, 5) self.rbResistances.Bind(wx.EVT_RADIOBOX, self.OnResistancesChange) - self.rbRecharge = wx.RadioBox(panel, -1, "Shield/Armor Tank", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbRecharge = wx.RadioBox(panel, -1, "Shield/Armor Tank", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbRecharge.EnableItem(1, False) self.rbRecharge.SetSelection(self.settings.get('recharge')) @@ -70,24 +66,21 @@ class PFStatViewPref(PreferenceView): rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) - self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbFirepower.EnableItem(1, False) self.rbFirepower.SetSelection(self.settings.get('firepower')) rbSizerRow2.Add(self.rbFirepower, 1, wx.TOP | wx.RIGHT, 5) self.rbFirepower.Bind(wx.EVT_RADIOBOX, self.OnFirepowerChange) - self.rbCapacitor = wx.RadioBox(panel, -1, "Capacitor", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbCapacitor = wx.RadioBox(panel, -1, "Capacitor", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbCapacitor.EnableItem(1, False) self.rbCapacitor.SetSelection(self.settings.get('capacitor')) rbSizerRow2.Add(self.rbCapacitor, 1, wx.ALL, 5) self.rbCapacitor.Bind(wx.EVT_RADIOBOX, self.OnCapacitorChange) - self.rbMisc = wx.RadioBox(panel, -1, "Misc", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, - wx.RA_SPECIFY_COLS) + self.rbMisc = wx.RadioBox(panel, -1, "Misc", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable full as we don't have a view for this yet self.rbMisc.EnableItem(2, False) self.rbMisc.SetSelection(self.settings.get('targetingmisc')) @@ -102,8 +95,7 @@ class PFStatViewPref(PreferenceView): rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL) - self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], - 1, wx.RA_SPECIFY_COLS) + self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbPrice.EnableItem(1, False) self.rbPrice.SetSelection(self.settings.get('price')) @@ -130,9 +122,6 @@ class PFStatViewPref(PreferenceView): panel.SetSizer(mainSizer) panel.Layout() - # serviceStatViewDefaultSettings = {"resources": 2, "resistances": 2, "recharge": 2, "firepower": 2, "capacitor": 1, - # "targetingmisc": 2, "price": 2, "miningyield": 0} - def OnResourcesChange(self, event): self.settings.set('resources', event.GetInt()) @@ -164,4 +153,4 @@ class PFStatViewPref(PreferenceView): return BitmapLoader.getBitmap("pref-gauges_big", "gui") -PFStatViewPref.register() \ No newline at end of file +PFStatViewPref.register() diff --git a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py index 4e3519e2f..cfc1bef11 100644 --- a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py +++ b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py @@ -44,7 +44,7 @@ class PFUpdatePref(PreferenceView): self.versionSizer = wx.BoxSizer(wx.VERTICAL) self.versionTitle = wx.StaticText(panel, wx.ID_ANY, "Suppressing {0} Notifications".format( - self.UpdateSettings.get('version')), wx.DefaultPosition, wx.DefaultSize, 0) + self.UpdateSettings.get('version')), wx.DefaultPosition, wx.DefaultSize, 0) self.versionTitle.Wrap(-1) self.versionTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py index e0564aaac..0c9ae5004 100644 --- a/gui/builtinStatsViews/targetingMiscViewMinimal.py +++ b/gui/builtinStatsViews/targetingMiscViewMinimal.py @@ -197,7 +197,7 @@ class TargetingMiscViewMinimal(StatsView): label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % fit.maxWarpDistance)) elif labelName == "labelSensorStr": if fit.jamChance > 0: - label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) + label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) else: label.SetToolTip(wx.ToolTip("Type: %s" % fit.scanType)) elif labelName == "labelFullAlignTime": diff --git a/gui/preferenceView.py b/gui/preferenceView.py index 662a2ff20..edd370542 100644 --- a/gui/preferenceView.py +++ b/gui/preferenceView.py @@ -41,8 +41,13 @@ class PreferenceView(object): # noinspection PyUnresolvedReferences from gui.builtinPreferenceViews import ( # noqa: E402, F401 pyfaGeneralPreferences, + pyfaContextMenuPreferences, + pyfaStatViewPreferences, pyfaNetworkPreferences, pyfaHTMLExportPreferences, pyfaCrestPreferences, - pyfaUpdatePreferences + pyfaDatabasePreferences, + pyfaLoggingPreferences, + pyfaEnginePreferences, + pyfaUpdatePreferences, ) diff --git a/gui/statsPane.py b/gui/statsPane.py index 9c3e9c698..c7d92bea3 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -21,7 +21,7 @@ import wx from service.fit import Fit -from service.settings import Settings +from service.settings import StatViewSettings import gui.mainFrame import gui.builtinStatsViews import gui.globalEvents as GE @@ -50,7 +50,7 @@ class StatsPane(wx.Panel): DEFAULT_VIEWS = [] - settings = Settings.statViewSettings.getInstance() + settings = StatViewSettings.getInstance() for aView in AVAILIBLE_VIEWS: if settings.get(aView) == 2: diff --git a/service/settings.py b/service/settings.py index 9a5dcee9e..be14f13e5 100644 --- a/service/settings.py +++ b/service/settings.py @@ -133,17 +133,17 @@ class NetworkSettings(object): def __init__(self): serviceNetworkDefaultSettings = { - "mode": self.PROXY_MODE_AUTODETECT, - "type": "https", - "address": "", - "port": "", - "access": 15, - "login": None, + "mode" : self.PROXY_MODE_AUTODETECT, + "type" : "https", + "address" : "", + "port" : "", + "access" : 15, + "login" : None, "password": None } self.serviceNetworkSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceNetworkSettings", serviceNetworkDefaultSettings) + "pyfaServiceNetworkSettings", serviceNetworkDefaultSettings) def isEnabled(self, type): if type & self.serviceNetworkSettings["access"]: @@ -256,12 +256,12 @@ class HTMLExportSettings(object): def __init__(self): serviceHTMLExportDefaultSettings = { "enabled": False, - "path": config.pyfaPath + os.sep + 'pyfaFits.html', + "path" : config.pyfaPath + os.sep + 'pyfaFits.html', "minimal": False } self.serviceHTMLExportSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceHTMLExportSettings", - serviceHTMLExportDefaultSettings + "pyfaServiceHTMLExportSettings", + serviceHTMLExportDefaultSettings ) def getEnabled(self): @@ -303,8 +303,8 @@ class UpdateSettings(object): # version - Set to release tag that user does not want notifications for serviceUpdateDefaultSettings = {"prerelease": True, 'version': None} self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceUpdateSettings", - serviceUpdateDefaultSettings + "pyfaServiceUpdateSettings", + serviceUpdateDefaultSettings ) def get(self, type): @@ -331,8 +331,8 @@ class CRESTSettings(object): serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": "", "timeout": 60} self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceCRESTSettings", - serviceCRESTDefaultSettings + "pyfaServiceCRESTSettings", + serviceCRESTDefaultSettings ) def get(self, type): @@ -341,13 +341,14 @@ class CRESTSettings(object): def set(self, type, value): self.serviceCRESTSettings[type] = value -class statViewSettings(object): + +class StatViewSettings(object): _instance = None @classmethod def getInstance(cls): if cls._instance is None: - cls._instance = statViewSettings() + cls._instance = StatViewSettings() return cls._instance @@ -357,15 +358,15 @@ class statViewSettings(object): # 1 - Minimal/Text Only View # 2 - Full View serviceStatViewDefaultSettings = { - "resources": 2, - "resistances": 2, - "recharge": 2, - "firepower": 2, - "capacitor": 2, + "resources" : 2, + "resistances" : 2, + "recharge" : 2, + "firepower" : 2, + "capacitor" : 2, "targetingmisc": 1, - "price": 2, - "miningyield": 2, - "drones": 2 + "price" : 2, + "miningyield" : 2, + "drones" : 2 } # We don't have these....yet @@ -382,4 +383,52 @@ class statViewSettings(object): def set(self, type, value): self.serviceStatViewDefaultSettings[type] = value + +class ContextMenuSettings(object): + _instance = None + + @classmethod + def getInstance(cls): + if cls._instance is None: + cls._instance = ContextMenuSettings() + + return cls._instance + + def __init__(self): + # mode + # 0 - Do not show + # 1 - Show + ContextMenuDefaultSettings = { + "ammoPattern" : 1, + "amount" : 1, + "cargo" : 1, + "changeAffectingSkills" : 1, + "damagePattern" : 1, + "droneRemoveStack" : 1, + "droneSplit" : 1, + "factorReload" : 1, + "fighterAbilities" : 1, + "implantSet" : 1, + "itemStats" : 1, + "marketJump" : 1, + "metaSwap" : 1, + "moduleAmmoPicker" : 1, + "moduleGlobalAmmoPicker": 1, + "openFit" : 1, + "priceClear" : 1, + "project" : 1, + "shipJump" : 1, + "tacticalMode" : 1, + "targetResists" : 1, + "whProjector" : 1, + } + + self.ContextMenuDefaultSettings = SettingsProvider.getInstance().getSettings("pyfaContextMenuSettings", ContextMenuDefaultSettings) + + def get(self, type): + return self.ContextMenuDefaultSettings[type] + + def set(self, type, value): + self.ContextMenuDefaultSettings[type] = value + # @todo: migrate fit settings (from fit service) here? From e8101f94106f3d656e1f61048752e2abc0ec1808 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 10:45:28 -0800 Subject: [PATCH 05/15] Embiggen the preference pane window. Change text, and clean up some unused imports. --- gui/builtinPreferenceViews/pyfaContextMenuPreferences.py | 2 ++ gui/builtinPreferenceViews/pyfaDatabasePreferences.py | 4 +--- gui/builtinPreferenceViews/pyfaLoggingPreferences.py | 5 +---- gui/preferenceDialog.py | 6 +++--- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py index 29ce587d3..f9f92d4e9 100644 --- a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -62,10 +62,12 @@ class PFContextMenuPref(PreferenceView): rbSizerRow2.Add(self.rbBox4, 1, wx.TOP | wx.RIGHT, 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.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')) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index 1460599a1..2ef248d18 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -3,7 +3,6 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader -from gui.mainFrame import MainFrame import config import logging @@ -15,7 +14,6 @@ class PFGeneralPref(PreferenceView): title = "Database" def populatePanel(self, panel): - self.mainFrame = MainFrame.getInstance() self.dirtySettings = False # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) @@ -26,7 +24,7 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index ecc0a6140..286aa9966 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -2,8 +2,6 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader - -from gui.mainFrame import MainFrame import config @@ -11,7 +9,6 @@ class PFGeneralPref(PreferenceView): title = "Logging" def populatePanel(self, panel): - self.mainFrame = MainFrame.getInstance() self.dirtySettings = False # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) @@ -22,7 +19,7 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/gui/preferenceDialog.py b/gui/preferenceDialog.py index e6c5f12af..2ed0f829a 100644 --- a/gui/preferenceDialog.py +++ b/gui/preferenceDialog.py @@ -66,12 +66,12 @@ class PreferenceDialog(wx.Dialog): # Set the height based on a condition. Can all the panels fit in the current height? # If not, use the .GetBestVirtualSize() to ensure that all content is available. - minHeight = 360 + minHeight = 550 bestFit = self.GetBestVirtualSize() if minHeight > bestFit[1]: - self.SetSizeWH(450, minHeight) + self.SetSizeWH(650, minHeight) else: - self.SetSizeWH(450, bestFit[1]) + self.SetSizeWH(650, bestFit[1]) self.Layout() From b63c5fa1ff5b78dc7fc6d3ee901cd1fb8ae3f955 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Sun, 26 Feb 2017 08:50:13 -0800 Subject: [PATCH 06/15] Tox fixes --- gui/builtinPreferenceViews/pyfaDatabasePreferences.py | 3 ++- gui/builtinPreferenceViews/pyfaLoggingPreferences.py | 3 ++- service/crest.py | 1 - service/server.py | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index 2ef248d18..5451840e6 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -24,7 +24,8 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", + wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index 286aa9966..9f2ff6df5 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -19,7 +19,8 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", + wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/service/crest.py b/service/crest.py index bbe8cd1bb..f968df7a3 100644 --- a/service/crest.py +++ b/service/crest.py @@ -1,6 +1,5 @@ # noinspection PyPackageRequirements import wx -import thread import logging import threading import copy diff --git a/service/server.py b/service/server.py index 38ecebfe4..c75892d70 100644 --- a/service/server.py +++ b/service/server.py @@ -55,6 +55,7 @@ else {{ ''' + # https://github.com/fuzzysteve/CREST-Market-Downloader/ class AuthHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(self): From 0bc0cb7f82166139055684a6807d343adc243fe8 Mon Sep 17 00:00:00 2001 From: blitzman Date: Sun, 26 Feb 2017 12:27:14 -0500 Subject: [PATCH 07/15] wx tweaks --- .../pyfaContextMenuPreferences.py | 17 ++++++----------- .../pyfaDatabasePreferences.py | 8 +++----- .../pyfaEnginePreferences.py | 9 ++------- .../pyfaLoggingPreferences.py | 5 ++--- .../pyfaStatViewPreferences.py | 16 ++++++---------- gui/preferenceView.py | 10 +++++----- 6 files changed, 24 insertions(+), 41 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py index f9f92d4e9..618538825 100644 --- a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -2,7 +2,6 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader - import gui.mainFrame from service.settings import ContextMenuSettings @@ -24,13 +23,15 @@ class PFContextMenuPref(PreferenceView): mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Disabling context menus can improve responsiveness.", wx.DefaultPosition, wx.DefaultSize, 0) - self.stInfo.Wrap(dlgWidth - 50) - mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, + u"Disabling context menus can improve responsiveness.", + wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle.Wrap(-1) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) # Row 1 self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) - mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.ALL, 5) rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) @@ -52,9 +53,6 @@ class PFContextMenuPref(PreferenceView): mainSizer.Add(rbSizerRow1, 1, wx.ALL | wx.EXPAND, 0) # Row 2 - self.m_staticline2 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) - mainSizer.Add(self.m_staticline2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) self.rbBox4 = wx.RadioBox(panel, -1, "Variations", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) @@ -77,9 +75,6 @@ class PFContextMenuPref(PreferenceView): mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) # Row 3 - self.m_staticline3 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) - mainSizer.Add(self.m_staticline3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - 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) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index 5451840e6..95c2e3263 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -2,7 +2,6 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader - import config import logging @@ -24,11 +23,10 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) - self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) - mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 3) self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) @@ -38,7 +36,7 @@ class PFGeneralPref(PreferenceView): mainSizer.Add(self.cbsaveInRoot, 0, wx.ALL | wx.EXPAND, 5) # Database path - self.stSetUserPath = wx.StaticText(panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSetUserPath = wx.StaticText(panel, wx.ID_ANY, u"pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0) self.stSetUserPath.Wrap(-1) mainSizer.Add(self.stSetUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputUserPath = wx.TextCtrl(panel, wx.ID_ANY, config.savePath, wx.DefaultPosition, wx.DefaultSize, 0) diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index a7e1c2d5b..b14776914 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -5,6 +5,7 @@ import wx from service.fit import Fit from gui.bitmapLoader import BitmapLoader from gui.preferenceView import PreferenceView +import gui.utils.fonts as fonts logger = logging.getLogger(__name__) @@ -32,15 +33,9 @@ class PFFittingEnginePref(PreferenceView): self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0) + self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time when calculating capacitor usage, damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0) mainSizer.Add(self.cbGlobalForceReload, 0, wx.ALL | wx.EXPAND, 5) - self.cbGlobalForceReloadText = wx.StaticText(panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", - wx.DefaultPosition, wx.DefaultSize, 0) - self.cbGlobalForceReloadText.Wrap(-1) - self.cbGlobalForceReloadText.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) - mainSizer.Add(self.cbGlobalForceReloadText, 0, wx.ALL, 5) - # 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 ) diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index 9f2ff6df5..6613998f7 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -19,11 +19,10 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) - self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) - mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 3) self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py index 05583bc49..fbb7596c4 100644 --- a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py +++ b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py @@ -27,13 +27,15 @@ class PFStatViewPref(PreferenceView): mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", wx.DefaultPosition, wx.DefaultSize, 0) - self.stInfo.Wrap(dlgWidth - 50) - mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, + u"Changes require restart of pyfa to take effect.", + wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle.Wrap(-1) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 3) # Row 1 self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) - mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.ALL, 5) rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) @@ -61,9 +63,6 @@ class PFStatViewPref(PreferenceView): mainSizer.Add(rbSizerRow1, 1, wx.ALL | wx.EXPAND, 0) # Row 2 - self.m_staticline2 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) - mainSizer.Add(self.m_staticline2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) @@ -90,9 +89,6 @@ class PFStatViewPref(PreferenceView): mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) # Row 3 - self.m_staticline3 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) - mainSizer.Add(self.m_staticline3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL) self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) diff --git a/gui/preferenceView.py b/gui/preferenceView.py index edd370542..a52a720e4 100644 --- a/gui/preferenceView.py +++ b/gui/preferenceView.py @@ -41,13 +41,13 @@ class PreferenceView(object): # noinspection PyUnresolvedReferences from gui.builtinPreferenceViews import ( # noqa: E402, F401 pyfaGeneralPreferences, - pyfaContextMenuPreferences, - pyfaStatViewPreferences, pyfaNetworkPreferences, pyfaHTMLExportPreferences, pyfaCrestPreferences, - pyfaDatabasePreferences, - pyfaLoggingPreferences, - pyfaEnginePreferences, + pyfaContextMenuPreferences, + pyfaStatViewPreferences, pyfaUpdatePreferences, + pyfaEnginePreferences, + pyfaDatabasePreferences, + pyfaLoggingPreferences ) From 5aa5732606f455fddb6624d523d4fec0692edd1a Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 07:38:43 -0800 Subject: [PATCH 08/15] Initial rollup of #868 --- gui/builtinPreferenceViews/__init__.py | 12 +++++- .../pyfaDatabasePreferences.py | 0 .../pyfaEnginePreferences.py | 0 .../pyfaGeneralPreferences.py | 13 ------ .../pyfaLoggingPreferences.py | 0 .../pyfaStatViewPreferences.py | 0 gui/builtinStatsViews/__init__.py | 12 ++++-- gui/statsPane.py | 42 +++++++++++++++++-- service/settings.py | 41 ++++++++++++++++++ 9 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 gui/builtinPreferenceViews/pyfaDatabasePreferences.py create mode 100644 gui/builtinPreferenceViews/pyfaEnginePreferences.py create mode 100644 gui/builtinPreferenceViews/pyfaLoggingPreferences.py create mode 100644 gui/builtinPreferenceViews/pyfaStatViewPreferences.py diff --git a/gui/builtinPreferenceViews/__init__.py b/gui/builtinPreferenceViews/__init__.py index 38beb0d0f..8b61beb13 100644 --- a/gui/builtinPreferenceViews/__init__.py +++ b/gui/builtinPreferenceViews/__init__.py @@ -1,8 +1,16 @@ # noinspection PyPackageRequirements import wx -__all__ = ["pyfaGeneralPreferences", "pyfaHTMLExportPreferences", "pyfaUpdatePreferences", - "pyfaNetworkPreferences"] # noqa +__all__ = [ + "pyfaGeneralPreferences", + "pyfaHTMLExportPreferences", + "pyfaUpdatePreferences", + "pyfaNetworkPreferences", + "pyfaDatabasePreferences", + "pyfaLoggingPreferences", + "pyfaEnginePreferences", + "pyfaStatViewPreferences", +] if 'wxMac' not in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3, 0)): __all__.append("pyfaCrestPreferences") diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py index 2e69466bb..8a278a048 100644 --- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py +++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py @@ -40,10 +40,6 @@ class PFGeneralPref(PreferenceView): wx.DefaultSize, 0) mainSizer.Add(self.cbGlobalDmgPattern, 0, wx.ALL | wx.EXPAND, 5) - self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, - wx.DefaultSize, 0) - mainSizer.Add(self.cbGlobalForceReload, 0, wx.ALL | wx.EXPAND, 5) - self.cbCompactSkills = wx.CheckBox(panel, wx.ID_ANY, u"Compact skills needed tooltip", wx.DefaultPosition, wx.DefaultSize, 0) mainSizer.Add(self.cbCompactSkills, 0, wx.ALL | wx.EXPAND, 5) @@ -97,7 +93,6 @@ class PFGeneralPref(PreferenceView): self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"]) self.cbGlobalDmgPattern.SetValue(self.sFit.serviceFittingOptions["useGlobalDamagePattern"]) - self.cbGlobalForceReload.SetValue(self.sFit.serviceFittingOptions["useGlobalForceReload"]) self.cbFitColorSlots.SetValue(self.sFit.serviceFittingOptions["colorFitBySlot"] or False) self.cbRackSlots.SetValue(self.sFit.serviceFittingOptions["rackSlots"] or False) self.cbRackLabels.SetValue(self.sFit.serviceFittingOptions["rackLabels"] or False) @@ -112,7 +107,6 @@ class PFGeneralPref(PreferenceView): self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange) self.cbGlobalDmgPattern.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalDmgPatternStateChange) - self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange) self.cbFitColorSlots.Bind(wx.EVT_CHECKBOX, self.onCBGlobalColorBySlot) self.cbRackSlots.Bind(wx.EVT_CHECKBOX, self.onCBGlobalRackSlots) self.cbRackLabels.Bind(wx.EVT_CHECKBOX, self.onCBGlobalRackLabels) @@ -152,13 +146,6 @@ class PFGeneralPref(PreferenceView): wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() - def OnCBGlobalForceReloadStateChange(self, event): - self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() - fitID = self.mainFrame.getActiveFit() - self.sFit.refreshFit(fitID) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - event.Skip() - def OnCBGlobalCharStateChange(self, event): self.sFit.serviceFittingOptions["useGlobalCharacter"] = self.cbGlobalChar.GetValue() event.Skip() diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py new file mode 100644 index 000000000..e69de29bb diff --git a/gui/builtinStatsViews/__init__.py b/gui/builtinStatsViews/__init__.py index 5f2ca646e..bb116f274 100644 --- a/gui/builtinStatsViews/__init__.py +++ b/gui/builtinStatsViews/__init__.py @@ -1,3 +1,9 @@ -__all__ = ["resourcesViewFull", "resistancesViewFull", - "rechargeViewFull", "firepowerViewFull", "capacitorViewFull", - "targetingMiscViewFull", "priceViewFull", "miningyieldViewFull"] +__all__ = [ + "resourcesViewFull", + "resistancesViewFull", + "rechargeViewFull", + "firepowerViewFull", + "capacitorViewFull", + "targetingMiscViewMinimal", + "priceViewFull", +] diff --git a/gui/statsPane.py b/gui/statsPane.py index 6aaf277f5..9c3e9c698 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -21,6 +21,7 @@ import wx from service.fit import Fit +from service.settings import Settings import gui.mainFrame import gui.builtinStatsViews import gui.globalEvents as GE @@ -31,9 +32,37 @@ from gui.pyfatogglepanel import TogglePanel class StatsPane(wx.Panel): - DEFAULT_VIEWS = ["resourcesViewFull", "resistancesViewFull", "rechargeViewFull", "firepowerViewFull", - "capacitorViewFull", "targetingmiscViewFull", - "priceViewFull"] + AVAILIBLE_VIEWS = [ + "resources", + "resistances", + "recharge", + "firepower", + "capacitor", + "targetingmisc", + "price", + ] + + # Don't have these....yet.... + ''' + "miningyield", "drones" + ] + ''' + + DEFAULT_VIEWS = [] + + settings = Settings.statViewSettings.getInstance() + + for aView in AVAILIBLE_VIEWS: + if settings.get(aView) == 2: + DEFAULT_VIEWS.extend(["%sViewFull" % aView]) + + if settings.get(aView) == 1: + DEFAULT_VIEWS.extend(["%sViewMinimal" % aView]) + + # If it's 0, it's disabled and we don't do anything. + + # TODO + # Add logging def fitChanged(self, event): sFit = Fit.getInstance() @@ -66,7 +95,12 @@ class StatsPane(wx.Panel): contentPanel = tp.GetContentPane() contentPanel.viewName = viewName - view = StatsView.getView(viewName)(self) + try: + view = StatsView.getView(viewName)(self) + except KeyError: + # View doesn't exist. Skip to next view + continue + self.nameViewMap[viewName] = view self.views.append(view) diff --git a/service/settings.py b/service/settings.py index d3f28e0a4..38abd422f 100644 --- a/service/settings.py +++ b/service/settings.py @@ -341,4 +341,45 @@ class CRESTSettings(object): def set(self, type, value): self.serviceCRESTSettings[type] = value +class statViewSettings(object): + _instance = None + + @classmethod + def getInstance(cls): + if cls._instance is None: + cls._instance = statViewSettings() + + return cls._instance + + def __init__(self): + # mode + # 0 - Do not show + # 1 - Minimal/Text Only View + # 2 - Full View + serviceStatViewDefaultSettings = { + "resources": 2, + "resistances": 2, + "recharge": 2, + "firepower": 2, + "capacitor": 2, + "targetingmisc": 1, + "price": 2, + "miningyield": 2, + "drones": 2 + } + + # We don't have these....yet + ''' + "miningyield": 2, + "drones": 2 + ''' + + self.serviceStatViewDefaultSettings = SettingsProvider.getInstance().getSettings("pyfaServiceStatViewSettings", serviceStatViewDefaultSettings) + + def get(self, type): + return self.serviceStatViewDefaultSettings[type] + + def set(self, type, value): + self.serviceStatViewDefaultSettings[type] = value + # @todo: migrate fit settings (from fit service) here? From 2a72d10bfcdf8fc6abc5a5b1e9d1885e6f62868c Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 08:16:08 -0800 Subject: [PATCH 09/15] Commit file so we can migrate over from old PR --- gui/builtinStatsViews/targetingMiscViewMinimal.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gui/builtinStatsViews/targetingMiscViewMinimal.py diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py new file mode 100644 index 000000000..e69de29bb From 77e5bebf13c495da9d628d42b0b07dc64bf1b86b Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 08:20:09 -0800 Subject: [PATCH 10/15] Migrate files from #868 --- .../pyfaDatabasePreferences.py | 121 +++++++++ .../pyfaEnginePreferences.py | 89 +++++++ .../pyfaLoggingPreferences.py | 67 +++++ .../pyfaStatViewPreferences.py | 167 ++++++++++++ .../targetingMiscViewMinimal.py | 251 ++++++++++++++++++ 5 files changed, 695 insertions(+) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index e69de29bb..aa95c3f98 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -0,0 +1,121 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +import config + +import logging + +logger = logging.getLogger(__name__) + +from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues + + +class PFGeneralPref ( PreferenceView): + title = "Database" + + def populatePanel( self, panel ): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.dirtySettings = False + #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSubTitle.Wrap( -1 ) + self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + #Save in Root + self.cbsaveInRoot = wx.CheckBox( panel, wx.ID_ANY, u"Using Executable Path for Saved Fit Database and Settings", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbsaveInRoot, 0, wx.ALL|wx.EXPAND, 5 ) + + #Database path + self.stSetUserPath = wx.StaticText( panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSetUserPath.Wrap( -1 ) + mainSizer.Add( self.stSetUserPath, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + self.inputUserPath = wx.TextCtrl(panel, wx.ID_ANY, config.savePath, wx.DefaultPosition, wx.DefaultSize, 0) + self.inputUserPath.SetEditable(False) + self.inputUserPath.SetBackgroundColour((200, 200, 200)) + mainSizer.Add(self.inputUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) + + #Save DB + self.stFitDB = wx.StaticText( panel, wx.ID_ANY, u"Fitting Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stFitDB.Wrap( -1 ) + mainSizer.Add( self.stFitDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.inputFitDB = wx.TextCtrl(panel, wx.ID_ANY, config.saveDB, wx.DefaultPosition, wx.DefaultSize, 0) + self.inputFitDB.SetEditable(False) + self.inputFitDB.SetBackgroundColour((200, 200, 200)) + mainSizer.Add(self.inputFitDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) + + #Game Data DB + self.stGameDB = wx.StaticText( panel, wx.ID_ANY, u"Game Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stGameDB.Wrap( -1 ) + mainSizer.Add( self.stGameDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.inputGameDB = wx.TextCtrl(panel, wx.ID_ANY, config.gameDB, wx.DefaultPosition, wx.DefaultSize, 0) + self.inputGameDB.SetEditable(False) + self.inputGameDB.SetBackgroundColour((200, 200, 200)) + mainSizer.Add(self.inputGameDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) + + + defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) + + self.cbsaveInRoot.SetValue(config.saveInRoot) + self.cbsaveInRoot.Bind(wx.EVT_CHECKBOX, self.onCBsaveInRoot) + + self.inputUserPath.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) + self.inputFitDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) + self.inputGameDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) + + panel.SetSizer( mainSizer ) + panel.Layout() + + + def onCBsaveInRoot(self, event): + # We don't want users to be able to actually change this, + # so if they try and change it, set it back to the current setting + self.cbsaveInRoot.SetValue(config.saveInRoot) + + # If we ever enable it might need this. + ''' + config.saveInRoot = self.cbsaveInRoot.GetValue() + ''' + + def getImage(self): + return BitmapLoader.getBitmap("prefs_settings", "gui") + + def OnWindowLeave(self, event): + # We don't want to do anything when they leave, + # but in the future we'd want to make sure settings + # changed get saved. + pass + + ''' + #Set database path + config.defPaths(self.inputFitDBPath.GetValue()) + + logger.debug("Running database import") + if self.cbimportDefaults is True: + # Import default database values + # Import values that must exist otherwise Pyfa breaks + DefaultDatabaseValues.importRequiredDefaults() + # Import default values for damage profiles + DefaultDatabaseValues.importDamageProfileDefaults() + # Import default values for target resist profiles + DefaultDatabaseValues.importResistProfileDefaults() + ''' + +PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index e69de29bb..a79f590b9 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -0,0 +1,89 @@ +import logging + +import wx + +import gui.globalEvents as GE +import gui.mainFrame +import service +from gui.bitmapLoader import BitmapLoader +from gui.preferenceView import PreferenceView + +logger = logging.getLogger(__name__) + + +class PFFittingEnginePref ( PreferenceView): + title = "Fitting Engine" + + def populatePanel( self, panel ): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.dirtySettings = False + #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + self.cbGlobalForceReload = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbGlobalForceReload, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbGlobalForceReloadText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.cbGlobalForceReloadText.Wrap( -1 ) + self.cbGlobalForceReloadText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.cbGlobalForceReloadText, 0, wx.ALL, 5 ) + + # 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 ) + mainSizer.Add( self.cbGlobalForceReactivationTimer, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbGlobalForceReactivationTimerText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reactivation timer when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.cbGlobalForceReactivationTimerText.Wrap( -1 ) + self.cbGlobalForceReactivationTimerText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.cbGlobalForceReactivationTimerText, 0, wx.ALL, 5 ) + ''' + + # Future code once for mining laser crystal + ''' + self.cbGlobalMiningSpecialtyCrystal = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reactivation timer", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbGlobalMiningSpecialtyCrystal, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbGlobalMiningSpecialtyCrystalText = wx.StaticText( panel, wx.ID_ANY, u" If enabled, displays the Specialty Crystal mining amount.\n This is the amount mined when using crystals and mining the matching asteroid.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.cbGlobalMiningSpecialtyCrystalText.Wrap( -1 ) + self.cbGlobalMiningSpecialtyCrystalText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.cbGlobalMiningSpecialtyCrystalText, 0, wx.ALL, 5 ) + ''' + + + self.sFit = service.Fit.getInstance() + + self.cbGlobalForceReload.SetValue(self.sFit.serviceFittingOptions["useGlobalForceReload"]) + + self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange) + + panel.SetSizer( mainSizer ) + panel.Layout() + + + def OnCBGlobalForceReloadStateChange(self, event): + self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() + fitID = self.mainFrame.getActiveFit() + self.sFit.refreshFit(fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + event.Skip() + + def getImage(self): + return BitmapLoader.getBitmap("prefs_settings", "gui") + + def OnWindowLeave(self, event): + # We don't want to do anything when they leave, + # but in the future we might. + pass + + +PFFittingEnginePref.register() diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index e69de29bb..4d574fb93 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -0,0 +1,67 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +import config + + +class PFGeneralPref ( PreferenceView): + title = "Logging" + + def populatePanel( self, panel ): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.dirtySettings = False + #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSubTitle.Wrap( -1 ) + self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) + mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + #Debug Logging + self.cbdebugLogging = wx.CheckBox( panel, wx.ID_ANY, u"Debug Logging Enabled", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbdebugLogging, 0, wx.ALL|wx.EXPAND, 5 ) + + + defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) + + self.cbdebugLogging.SetValue(config.debug) + self.cbdebugLogging.Bind(wx.EVT_CHECKBOX, self.onCBdebugLogging) + + panel.SetSizer( mainSizer ) + panel.Layout() + + + def onCBdebugLogging(self, event): + # We don't want users to be able to actually change this, + # so if they try and change it, set it back to the current setting + self.cbdebugLogging.SetValue(config.debug) + + # In case we do, down there road, here's a bit of a start. + ''' + if self.cbdebugLogging.GetValue() is True: + self.cbdebugLogging.SetValue(False) + config.Debug = self.cbdebugLogging.GetValue() + else: + self.cbdebugLogging.SetValue(True) + config.Debug = self.cbdebugLogging.GetValue() + ''' + + def getImage(self): + return BitmapLoader.getBitmap("prefs_settings", "gui") + + +PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py index e69de29bb..d2a2a3ccd 100644 --- a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py +++ b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py @@ -0,0 +1,167 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +from service.crest import CrestModes + +from wx.lib.intctrl import IntCtrl + + +class PFStatViewPref(PreferenceView): + title = "Statistics Panel" + + def populatePanel(self, panel): + self.settings = service.settings.statViewSettings.getInstance() + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + self.dirtySettings = False + dlgWidth = panel.GetParent().GetParent().ClientSize.width + mainSizer = wx.BoxSizer(wx.VERTICAL) + + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) + + self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", + wx.DefaultPosition, wx.DefaultSize, 0) + self.stInfo.Wrap(dlgWidth - 50) + mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + # Row 1 + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) + + self.rbResources = wx.RadioBox(panel, -1, "Resources", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbResources.EnableItem(1, False) + self.rbResources.SetSelection(self.settings.get('resources')) + rbSizerRow1.Add(self.rbResources, 1, wx.TOP | wx.RIGHT, 5) + self.rbResources.Bind(wx.EVT_RADIOBOX, self.OnResourcesChange) + + self.rbResistances = wx.RadioBox(panel, -1, "Resistances", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbResistances.EnableItem(1, False) + self.rbResistances.SetSelection(self.settings.get('resistances')) + rbSizerRow1.Add(self.rbResistances, 1, wx.ALL, 5) + self.rbResistances.Bind(wx.EVT_RADIOBOX, self.OnResistancesChange) + + self.rbRecharge = wx.RadioBox(panel, -1, "Shield/Armor Tank", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbRecharge.EnableItem(1, False) + self.rbRecharge.SetSelection(self.settings.get('recharge')) + rbSizerRow1.Add(self.rbRecharge, 1, wx.ALL, 5) + self.rbRecharge.Bind(wx.EVT_RADIOBOX, self.OnRechargeChange) + + mainSizer.Add(rbSizerRow1, 1, wx.ALL | wx.EXPAND, 0) + + # Row 2 + self.m_staticline2 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) + + self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbFirepower.EnableItem(1, False) + self.rbFirepower.SetSelection(self.settings.get('firepower')) + rbSizerRow2.Add(self.rbFirepower, 1, wx.TOP | wx.RIGHT, 5) + self.rbFirepower.Bind(wx.EVT_RADIOBOX, self.OnFirepowerChange) + + self.rbCapacitor = wx.RadioBox(panel, -1, "Capacitor", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbCapacitor.EnableItem(1, False) + self.rbCapacitor.SetSelection(self.settings.get('capacitor')) + rbSizerRow2.Add(self.rbCapacitor, 1, wx.ALL, 5) + self.rbCapacitor.Bind(wx.EVT_RADIOBOX, self.OnCapacitorChange) + + self.rbMisc = wx.RadioBox(panel, -1, "Misc", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, + wx.RA_SPECIFY_COLS) + # Disable full as we don't have a view for this yet + self.rbMisc.EnableItem(2, False) + self.rbMisc.SetSelection(self.settings.get('targetingmisc')) + rbSizerRow2.Add(self.rbMisc, 1, wx.ALL, 5) + self.rbMisc.Bind(wx.EVT_RADIOBOX, self.OnTargetingMiscChange) + + mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) + + # Row 3 + self.m_staticline3 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL) + + self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], + 1, wx.RA_SPECIFY_COLS) + # Disable minimal as we don't have a view for this yet + self.rbPrice.EnableItem(1, False) + self.rbPrice.SetSelection(self.settings.get('price')) + rbSizerRow3.Add(self.rbPrice, 1, wx.TOP | wx.RIGHT, 5) + self.rbPrice.Bind(wx.EVT_RADIOBOX, self.OnPriceChange) + + # We don't have views for these.....yet + ''' + self.rbMining = wx.RadioBox(panel, -1, "Mining", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbMining.SetSelection(self.settings.get('miningyield')) + rbSizerRow3.Add(self.rbMining, 1, wx.ALL, 5) + self.rbMining.Bind(wx.EVT_RADIOBOX, self.OnMiningYieldChange) + + self.rbDrones = wx.RadioBox(panel, -1, "Drones", wx.DefaultPosition, wx.DefaultSize, + ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbDrones.SetSelection(self.settings.get('drones')) + rbSizerRow3.Add(self.rbDrones, 1, wx.ALL, 5) + self.rbDrones.Bind(wx.EVT_RADIOBOX, self.OnDroneChange) + ''' + + mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0) + + panel.SetSizer(mainSizer) + panel.Layout() + + # serviceStatViewDefaultSettings = {"resources": 2, "resistances": 2, "recharge": 2, "firepower": 2, "capacitor": 1, + # "targetingmisc": 2, "price": 2, "miningyield": 0} + + def OnResourcesChange(self, event): + self.settings.set('resources', event.GetInt()) + + def OnResistancesChange(self, event): + self.settings.set('resistances', event.GetInt()) + + def OnRechargeChange(self, event): + self.settings.set('recharge', event.GetInt()) + + def OnFirepowerChange(self, event): + self.settings.set('firepower', event.GetInt()) + + def OnCapacitorChange(self, event): + self.settings.set('capacitor', event.GetInt()) + + def OnTargetingMiscChange(self, event): + self.settings.set('targetingmisc', event.GetInt()) + + def OnPriceChange(self, event): + self.settings.set('price', event.GetInt()) + + def OnMiningYieldChange(self, event): + self.settings.set('miningyield', event.GetInt()) + + def OnDroneChange(self, event): + self.settings.set('drones', event.GetInt()) + + def getImage(self): + return BitmapLoader.getBitmap("pref-gauges_big", "gui") + + +PFStatViewPref.register() \ No newline at end of file diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py index e69de29bb..e0564aaac 100644 --- a/gui/builtinStatsViews/targetingMiscViewMinimal.py +++ b/gui/builtinStatsViews/targetingMiscViewMinimal.py @@ -0,0 +1,251 @@ +# ============================================================================= +# Copyright (C) 2010 Diego Duclos +# +# This file is part of pyfa. +# +# pyfa is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# pyfa is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with pyfa. If not, see . +# ============================================================================= + +# noinspection PyPackageRequirements +import wx +from gui.statsView import StatsView +from gui.utils.numberFormatter import formatAmount + +try: + from collections import OrderedDict +except ImportError: + from utils.compat import OrderedDict + + +class TargetingMiscViewMinimal(StatsView): + name = "targetingmiscViewMinimal" + + def __init__(self, parent): + StatsView.__init__(self) + self.parent = parent + self._cachedValues = [] + + def getHeaderText(self, fit): + return "Targeting && Misc" + + def getTextExtentW(self, text): + width, height = self.parent.GetTextExtent(text) + return width + + def populatePanel(self, contentPanel, headerPanel): + contentSizer = contentPanel.GetSizer() + + self.panel = contentPanel + self.headerPanel = headerPanel + gridTargetingMisc = wx.FlexGridSizer(1, 3) + contentSizer.Add(gridTargetingMisc, 0, wx.EXPAND | wx.ALL, 0) + gridTargetingMisc.AddGrowableCol(0) + gridTargetingMisc.AddGrowableCol(2) + # Targeting + + gridTargeting = wx.FlexGridSizer(5, 2) + gridTargeting.AddGrowableCol(1) + + gridTargetingMisc.Add(gridTargeting, 0, wx.ALIGN_LEFT | wx.ALL, 5) + + labels = (("Targets", "Targets", ""), + ("Range", "Range", "km"), + ("Scan res.", "ScanRes", "mm"), + ("Sensor str.", "SensorStr", ""), + ("Drone range", "CtrlRange", "km")) + + for header, labelShort, unit in labels: + gridTargeting.Add(wx.StaticText(contentPanel, wx.ID_ANY, "%s: " % header), 0, wx.ALIGN_LEFT) + + box = wx.BoxSizer(wx.HORIZONTAL) + gridTargeting.Add(box, 0, wx.ALIGN_LEFT) + + lbl = wx.StaticText(contentPanel, wx.ID_ANY, "0 %s" % unit) + setattr(self, "label%s" % labelShort, lbl) + box.Add(lbl, 0, wx.ALIGN_LEFT) + + self._cachedValues.append({"main": 0}) + + # Misc + gridTargetingMisc.Add(wx.StaticLine(contentPanel, wx.ID_ANY, style=wx.VERTICAL), 0, wx.EXPAND, 3) + gridMisc = wx.FlexGridSizer(5, 2) + gridMisc.AddGrowableCol(1) + gridTargetingMisc.Add(gridMisc, 0, wx.ALIGN_LEFT | wx.ALL, 5) + + labels = (("Speed", "Speed", "m/s"), + ("Align time", "AlignTime", "s"), + ("Signature", "SigRadius", "m"), + ("Warp Speed", "WarpSpeed", "AU/s"), + ("Cargo", "Cargo", u"m\u00B3")) + + for header, labelShort, unit in labels: + gridMisc.Add(wx.StaticText(contentPanel, wx.ID_ANY, "%s: " % header), 0, wx.ALIGN_LEFT) + + box = wx.BoxSizer(wx.HORIZONTAL) + gridMisc.Add(box, 0, wx.ALIGN_LEFT) + + lbl = wx.StaticText(contentPanel, wx.ID_ANY, "0 %s" % unit) + setattr(self, "labelFull%s" % labelShort, lbl) + box.Add(lbl, 0, wx.ALIGN_LEFT) + + self._cachedValues.append({"main": 0}) + + def refreshPanel(self, fit): + # If we did anything interesting, we'd update our labels to reflect the new fit's stats here + + cargoNamesOrder = OrderedDict(( + ("fleetHangarCapacity", "Fleet hangar"), + ("shipMaintenanceBayCapacity", "Maintenance bay"), + ("specialAmmoHoldCapacity", "Ammo hold"), + ("specialFuelBayCapacity", "Fuel bay"), + ("specialShipHoldCapacity", "Ship hold"), + ("specialSmallShipHoldCapacity", "Small ship hold"), + ("specialMediumShipHoldCapacity", "Medium ship hold"), + ("specialLargeShipHoldCapacity", "Large ship hold"), + ("specialIndustrialShipHoldCapacity", "Industrial ship hold"), + ("specialOreHoldCapacity", "Ore hold"), + ("specialMineralHoldCapacity", "Mineral hold"), + ("specialMaterialBayCapacity", "Material bay"), + ("specialGasHoldCapacity", "Gas hold"), + ("specialSalvageHoldCapacity", "Salvage hold"), + ("specialCommandCenterHoldCapacity", "Command center hold"), + ("specialPlanetaryCommoditiesHoldCapacity", "Planetary goods hold"), + ("specialQuafeHoldCapacity", "Quafe hold") + )) + + cargoValues = { + "main": lambda: fit.ship.getModifiedItemAttr("capacity"), + "fleetHangarCapacity": lambda: fit.ship.getModifiedItemAttr("fleetHangarCapacity"), + "shipMaintenanceBayCapacity": lambda: fit.ship.getModifiedItemAttr("shipMaintenanceBayCapacity"), + "specialAmmoHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialAmmoHoldCapacity"), + "specialFuelBayCapacity": lambda: fit.ship.getModifiedItemAttr("specialFuelBayCapacity"), + "specialShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialShipHoldCapacity"), + "specialSmallShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialSmallShipHoldCapacity"), + "specialMediumShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialMediumShipHoldCapacity"), + "specialLargeShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialLargeShipHoldCapacity"), + "specialIndustrialShipHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialIndustrialShipHoldCapacity"), + "specialOreHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialOreHoldCapacity"), + "specialMineralHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialMineralHoldCapacity"), + "specialMaterialBayCapacity": lambda: fit.ship.getModifiedItemAttr("specialMaterialBayCapacity"), + "specialGasHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialGasHoldCapacity"), + "specialSalvageHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialSalvageHoldCapacity"), + "specialCommandCenterHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialCommandCenterHoldCapacity"), + "specialPlanetaryCommoditiesHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialPlanetaryCommoditiesHoldCapacity"), + "specialQuafeHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialQuafeHoldCapacity") + } + + stats = (("labelTargets", {"main": lambda: fit.maxTargets}, 3, 0, 0, ""), + ("labelRange", {"main": lambda: fit.maxTargetRange / 1000}, 3, 0, 0, "km"), + ("labelScanRes", {"main": lambda: fit.ship.getModifiedItemAttr("scanResolution")}, 3, 0, 0, "mm"), + ("labelSensorStr", {"main": lambda: fit.scanStrength}, 3, 0, 0, ""), + ("labelCtrlRange", {"main": lambda: fit.extraAttributes["droneControlRange"] / 1000}, 3, 0, 0, "km"), + ("labelFullSpeed", {"main": lambda: fit.maxSpeed}, 3, 0, 0, "m/s"), + ("labelFullAlignTime", {"main": lambda: fit.alignTime}, 3, 0, 0, "s"), + ("labelFullSigRadius", {"main": lambda: fit.ship.getModifiedItemAttr("signatureRadius")}, 3, 0, 9, ""), + ("labelFullWarpSpeed", {"main": lambda: fit.warpSpeed}, 3, 0, 0, "AU/s"), + ("labelFullCargo", cargoValues, 4, 0, 9, u"m\u00B3")) + + counter = 0 + RADII = [("Pod", 25), ("Interceptor", 33), ("Frigate", 38), + ("Destroyer", 83), ("Cruiser", 130), + ("Battlecruiser", 265), ("Battleship", 420), + ("Carrier", 3000)] + for labelName, valueDict, prec, lowest, highest, unit in stats: + label = getattr(self, labelName) + newValues = {} + for valueAlias, value in valueDict.items(): + value = value() if fit is not None else 0 + value = value if value is not None else 0 + newValues[valueAlias] = value + if self._cachedValues[counter] != newValues: + mainValue = newValues["main"] + otherValues = dict((k, newValues[k]) for k in filter(lambda k: k != "main", newValues)) + if labelName == "labelFullCargo": + # Get sum of all cargoholds except for maintenance bay + additionalCargo = sum(otherValues.values()) + if additionalCargo > 0: + label.SetLabel("%s+%s %s" % (formatAmount(mainValue, prec, lowest, highest), + formatAmount(additionalCargo, prec, lowest, highest), + unit)) + else: + label.SetLabel("%s %s" % (formatAmount(mainValue, prec, lowest, highest), unit)) + else: + label.SetLabel("%s %s" % (formatAmount(mainValue, prec, lowest, highest), unit)) + # Tooltip stuff + if fit: + if labelName == "labelScanRes": + lockTime = "%s\n" % "Lock Times".center(30) + for size, radius in RADII: + left = "%.1fs" % fit.calculateLockTime(radius) + right = "%s [%d]" % (size, radius) + lockTime += "%5s\t%s\n" % (left, right) + label.SetToolTip(wx.ToolTip(lockTime)) + elif labelName == "labelFullSigRadius": + label.SetToolTip(wx.ToolTip("Probe Size: %.3f" % (fit.probeSize or 0))) + elif labelName == "labelFullWarpSpeed": + label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % fit.maxWarpDistance)) + elif labelName == "labelSensorStr": + if fit.jamChance > 0: + label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) + else: + label.SetToolTip(wx.ToolTip("Type: %s" % fit.scanType)) + elif labelName == "labelFullAlignTime": + alignTime = "Align:\t%.3fs" % mainValue + mass = 'Mass:\t{:,.0f}kg'.format(fit.ship.getModifiedItemAttr("mass")) + agility = "Agility:\t%.3fx" % (fit.ship.getModifiedItemAttr("agility") or 0) + label.SetToolTip(wx.ToolTip("%s\n%s\n%s" % (alignTime, mass, agility))) + elif labelName == "labelFullCargo": + tipLines = [u"Cargohold: {:,.2f}m\u00B3 / {:,.2f}m\u00B3".format(fit.cargoBayUsed, newValues["main"])] + for attrName, tipAlias in cargoNamesOrder.items(): + if newValues[attrName] > 0: + tipLines.append(u"{}: {:,.2f}m\u00B3".format(tipAlias, newValues[attrName])) + label.SetToolTip(wx.ToolTip(u"\n".join(tipLines))) + else: + label.SetToolTip(wx.ToolTip("%.1f" % mainValue)) + else: + label.SetToolTip(wx.ToolTip("")) + self._cachedValues[counter] = newValues + elif labelName == "labelFullWarpSpeed": + if fit: + label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % fit.maxWarpDistance)) + else: + label.SetToolTip(wx.ToolTip("")) + elif labelName == "labelSensorStr": + if fit: + if fit.jamChance > 0: + label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) + else: + label.SetToolTip(wx.ToolTip("Type: %s" % fit.scanType)) + else: + label.SetToolTip(wx.ToolTip("")) + elif labelName == "labelFullCargo": + if fit: + cachedCargo = self._cachedValues[counter] + # if you add stuff to cargo, the capacity doesn't change and thus it is still cached + # This assures us that we force refresh of cargo tooltip + tipLines = [u"Cargohold: {:,.2f}m\u00B3 / {:,.2f}m\u00B3".format(fit.cargoBayUsed, cachedCargo["main"])] + for attrName, tipAlias in cargoNamesOrder.items(): + if cachedCargo[attrName] > 0: + tipLines.append(u"{}: {:,.2f}m\u00B3".format(tipAlias, cachedCargo[attrName])) + label.SetToolTip(wx.ToolTip(u"\n".join(tipLines))) + else: + label.SetToolTip(wx.ToolTip("")) + + counter += 1 + + self.panel.Layout() + self.headerPanel.Layout() + + +TargetingMiscViewMinimal.register() From 68e75025be6bd8b63f8af0b81727031c2b92a4c6 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 09:59:56 -0800 Subject: [PATCH 11/15] Finish migrate from #868. Lots of tox/formatting/inspection fixes to the files touched. --- gui/builtinContextMenus/ammoPattern.py | 5 + gui/builtinContextMenus/amount.py | 5 + gui/builtinContextMenus/cargo.py | 12 +- .../changeAffectingSkills.py | 5 + gui/builtinContextMenus/damagePattern.py | 5 + gui/builtinContextMenus/droneRemoveStack.py | 5 + gui/builtinContextMenus/droneSplit.py | 5 + gui/builtinContextMenus/factorReload.py | 5 + gui/builtinContextMenus/fighterAbilities.py | 5 + gui/builtinContextMenus/implantSets.py | 5 + gui/builtinContextMenus/itemRemove.py | 5 + gui/builtinContextMenus/itemStats.py | 4 + gui/builtinContextMenus/marketJump.py | 5 + gui/builtinContextMenus/metaSwap.py | 4 + gui/builtinContextMenus/moduleAmmoPicker.py | 5 + .../moduleGlobalAmmoPicker.py | 5 + gui/builtinContextMenus/openFit.py | 5 + gui/builtinContextMenus/priceClear.py | 5 + gui/builtinContextMenus/project.py | 5 + gui/builtinContextMenus/shipJump.py | 5 + gui/builtinContextMenus/tacticalMode.py | 5 + gui/builtinContextMenus/targetResists.py | 5 + gui/builtinContextMenus/whProjector.py | 5 + .../pyfaContextMenuPreferences.py | 118 ++++++++++++++++++ .../pyfaDatabasePreferences.py | 72 +++++------ .../pyfaEnginePreferences.py | 62 ++++----- .../pyfaLoggingPreferences.py | 45 +++---- .../pyfaStatViewPreferences.py | 49 +++----- .../pyfaUpdatePreferences.py | 2 +- .../targetingMiscViewMinimal.py | 2 +- gui/preferenceView.py | 7 +- gui/statsPane.py | 4 +- service/settings.py | 97 ++++++++++---- 33 files changed, 422 insertions(+), 156 deletions(-) create mode 100644 gui/builtinPreferenceViews/pyfaContextMenuPreferences.py diff --git a/gui/builtinContextMenus/ammoPattern.py b/gui/builtinContextMenus/ammoPattern.py index e131bb1c6..1b8dfd95c 100644 --- a/gui/builtinContextMenus/ammoPattern.py +++ b/gui/builtinContextMenus/ammoPattern.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class AmmoPattern(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('ammoPattern'): + return False + if srcContext not in ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None: return False diff --git a/gui/builtinContextMenus/amount.py b/gui/builtinContextMenus/amount.py index 32eaf2026..f9dd957ff 100644 --- a/gui/builtinContextMenus/amount.py +++ b/gui/builtinContextMenus/amount.py @@ -7,13 +7,18 @@ import wx from service.fit import Fit from eos.saveddata.cargo import Cargo as es_Cargo from eos.saveddata.fighter import Fighter as es_Fighter +from service.settings import ContextMenuSettings class ChangeAmount(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('amount'): + return False + return srcContext in ("cargoItem", "projectedFit", "fighterItem", "projectedFighter") def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/cargo.py b/gui/builtinContextMenus/cargo.py index 97ea7b8ab..32d6370cf 100644 --- a/gui/builtinContextMenus/cargo.py +++ b/gui/builtinContextMenus/cargo.py @@ -4,20 +4,28 @@ import gui.globalEvents as GE # noinspection PyPackageRequirements import wx from service.fit import Fit +from service.settings import ContextMenuSettings class Cargo(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('cargo'): + return False + + if srcContext not in ("marketItemGroup", "marketItemMisc"): + return False + sFit = Fit.getInstance() fitID = self.mainFrame.getActiveFit() - fit = sFit.getFit(fitID) # Make sure context menu registers in the correct view - if srcContext not in ("marketItemGroup", "marketItemMisc") or not fit or fit.isStructure: + if not fit or fit.isStructure: return False + return True def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/changeAffectingSkills.py b/gui/builtinContextMenus/changeAffectingSkills.py index 6c02d07b9..dc71fc06d 100644 --- a/gui/builtinContextMenus/changeAffectingSkills.py +++ b/gui/builtinContextMenus/changeAffectingSkills.py @@ -8,13 +8,18 @@ from eos.saveddata.character import Skill import gui.globalEvents as GE from service.fit import Fit from service.character import Character +from service.settings import ContextMenuSettings class ChangeAffectingSkills(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('changeAffectingSkills'): + return False + if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "fittingCharge", "fittingShip"): return False diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py index 20e1b4343..8399dd069 100644 --- a/gui/builtinContextMenus/damagePattern.py +++ b/gui/builtinContextMenus/damagePattern.py @@ -6,6 +6,7 @@ import wx from gui.bitmapLoader import BitmapLoader from service.fit import Fit from service.damagePattern import DamagePattern as import_DamagePattern +from service.settings import ContextMenuSettings try: from collections import OrderedDict @@ -16,8 +17,12 @@ except ImportError: class DamagePattern(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('damagePattern'): + return False + return srcContext == "resistancesViewFull" and self.mainFrame.getActiveFit() is not None def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/droneRemoveStack.py b/gui/builtinContextMenus/droneRemoveStack.py index b8e4b820b..c7dae1e03 100644 --- a/gui/builtinContextMenus/droneRemoveStack.py +++ b/gui/builtinContextMenus/droneRemoveStack.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class ItemRemove(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('droneRemoveStack'): + return False + return srcContext == "droneItem" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py index 77ba87e8a..761262a8c 100644 --- a/gui/builtinContextMenus/droneSplit.py +++ b/gui/builtinContextMenus/droneSplit.py @@ -4,13 +4,18 @@ import gui.globalEvents as GE from service.fit import Fit # noinspection PyPackageRequirements import wx +from service.settings import ContextMenuSettings class DroneSplit(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('droneSplit'): + return False + return srcContext in ("droneItem", "projectedDrone") and selection[0].amount > 1 def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py index 86553c73b..6770e64af 100644 --- a/gui/builtinContextMenus/factorReload.py +++ b/gui/builtinContextMenus/factorReload.py @@ -5,13 +5,18 @@ import gui.globalEvents as GE import wx from gui.bitmapLoader import BitmapLoader from service.fit import Fit +from service.settings import ContextMenuSettings class FactorReload(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('factorReload'): + return False + return srcContext == "firepowerViewFull" and self.mainFrame.getActiveFit() is not None def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/fighterAbilities.py b/gui/builtinContextMenus/fighterAbilities.py index 8c26a9ffe..6f6bc8051 100644 --- a/gui/builtinContextMenus/fighterAbilities.py +++ b/gui/builtinContextMenus/fighterAbilities.py @@ -4,13 +4,18 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class FighterAbility(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 ("fighterItem", "projectedFighter"): return False diff --git a/gui/builtinContextMenus/implantSets.py b/gui/builtinContextMenus/implantSets.py index 994c0d607..6a2ee7bfe 100644 --- a/gui/builtinContextMenus/implantSets.py +++ b/gui/builtinContextMenus/implantSets.py @@ -6,13 +6,18 @@ import wx from service.implantSet import ImplantSets as s_ImplantSets from service.character import Character from service.fit import Fit +from service.settings import ContextMenuSettings class ImplantSets(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('implantSets'): + return False + return srcContext in ("implantView", "implantEditor") def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py index fb8a70679..6ad128220 100644 --- a/gui/builtinContextMenus/itemRemove.py +++ b/gui/builtinContextMenus/itemRemove.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class ItemRemove(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('itemRemove'): + return False + return srcContext in ("fittingModule", "fittingCharge", "droneItem", "implantItem", "boosterItem", "projectedModule", diff --git a/gui/builtinContextMenus/itemStats.py b/gui/builtinContextMenus/itemStats.py index 1b923ecf5..4e1b8187e 100644 --- a/gui/builtinContextMenus/itemStats.py +++ b/gui/builtinContextMenus/itemStats.py @@ -4,13 +4,17 @@ import gui.mainFrame # noinspection PyPackageRequirements import wx from service.fit import Fit +from service.settings import ContextMenuSettings class ItemStats(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('itemStats'): + return False return srcContext in ("marketItemGroup", "marketItemMisc", "fittingModule", "fittingCharge", diff --git a/gui/builtinContextMenus/marketJump.py b/gui/builtinContextMenus/marketJump.py index e96292b41..c630312c1 100644 --- a/gui/builtinContextMenus/marketJump.py +++ b/gui/builtinContextMenus/marketJump.py @@ -1,13 +1,18 @@ from gui.contextMenu import ContextMenu import gui.mainFrame from service.market import Market +from service.settings import ContextMenuSettings class MarketJump(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('marketJump'): + return False + validContexts = ("marketItemMisc", "fittingModule", "fittingCharge", "droneItem", "implantItem", "boosterItem", diff --git a/gui/builtinContextMenus/metaSwap.py b/gui/builtinContextMenus/metaSwap.py index 389335f53..ba3934b3f 100644 --- a/gui/builtinContextMenus/metaSwap.py +++ b/gui/builtinContextMenus/metaSwap.py @@ -8,13 +8,17 @@ from service.market import Market import gui.mainFrame import gui.globalEvents as GE from gui.contextMenu import ContextMenu +from service.settings import ContextMenuSettings class MetaSwap(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('metaSwap'): + return False if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule",): return False diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py index b6791662d..1af970190 100644 --- a/gui/builtinContextMenus/moduleAmmoPicker.py +++ b/gui/builtinContextMenus/moduleAmmoPicker.py @@ -10,6 +10,7 @@ import gui.mainFrame import gui.globalEvents as GE from gui.contextMenu import ContextMenu from gui.bitmapLoader import BitmapLoader +from service.settings import ContextMenuSettings class ModuleAmmoPicker(ContextMenu): @@ -18,8 +19,12 @@ class ModuleAmmoPicker(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('moduleAmmoPicker'): + return False + if self.mainFrame.getActiveFit() is None or srcContext not in ("fittingModule", "projectedModule"): return False diff --git a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py index 849896111..5e516e68f 100644 --- a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py +++ b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py @@ -6,12 +6,14 @@ import gui.globalEvents as GE from gui.builtinContextMenus.moduleAmmoPicker import ModuleAmmoPicker from eos.db.saveddata.queries import getFit as db_getFit from service.fit import Fit +from service.settings import ContextMenuSettings class ModuleGlobalAmmoPicker(ModuleAmmoPicker): def __init__(self): super(ModuleGlobalAmmoPicker, self).__init__() self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def getText(self, itmContext, selection): return "Charge (All)" @@ -42,6 +44,9 @@ class ModuleGlobalAmmoPicker(ModuleAmmoPicker): wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def display(self, srcContext, selection): + if not self.settings.get('moduleGlobalAmmoPicker'): + return False + try: selectionLen = len(selection) except: diff --git a/gui/builtinContextMenus/openFit.py b/gui/builtinContextMenus/openFit.py index 5a0a760f7..d13618132 100644 --- a/gui/builtinContextMenus/openFit.py +++ b/gui/builtinContextMenus/openFit.py @@ -3,13 +3,18 @@ import gui.mainFrame # noinspection PyPackageRequirements import wx from gui.shipBrowser import FitSelected +from service.settings import ContextMenuSettings class OpenFit(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('openFit'): + return False + return srcContext == "projectedFit" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/priceClear.py b/gui/builtinContextMenus/priceClear.py index 8cb1a5175..44093e662 100644 --- a/gui/builtinContextMenus/priceClear.py +++ b/gui/builtinContextMenus/priceClear.py @@ -4,13 +4,18 @@ import gui.mainFrame import wx import gui.globalEvents as GE from service.market import Market +from service.settings import ContextMenuSettings class PriceClear(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('priceClear'): + return False + return srcContext == "priceViewFull" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/project.py b/gui/builtinContextMenus/project.py index 838b4e4fc..f06c29152 100644 --- a/gui/builtinContextMenus/project.py +++ b/gui/builtinContextMenus/project.py @@ -4,13 +4,18 @@ import gui.globalEvents as GE # noinspection PyPackageRequirements import wx from service.fit import Fit +from service.settings import ContextMenuSettings class Project(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 ("marketItemGroup", "marketItemMisc") or self.mainFrame.getActiveFit() is None: return False diff --git a/gui/builtinContextMenus/shipJump.py b/gui/builtinContextMenus/shipJump.py index 40dda42c8..8f426ff1a 100644 --- a/gui/builtinContextMenus/shipJump.py +++ b/gui/builtinContextMenus/shipJump.py @@ -4,13 +4,18 @@ from gui.contextMenu import ContextMenu import gui.mainFrame from gui.shipBrowser import Stage3Selected from service.fit import Fit +from service.settings import ContextMenuSettings class ShipJump(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('shipJump'): + return False + return srcContext == "fittingShip" def getText(self, itmContext, selection): diff --git a/gui/builtinContextMenus/tacticalMode.py b/gui/builtinContextMenus/tacticalMode.py index 679be45f3..8b87dd10b 100644 --- a/gui/builtinContextMenus/tacticalMode.py +++ b/gui/builtinContextMenus/tacticalMode.py @@ -5,13 +5,18 @@ import gui.mainFrame import gui.globalEvents as GE from service.fit import Fit +from service.settings import ContextMenuSettings class TacticalMode(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('tacticalMode'): + return False + if self.mainFrame.getActiveFit() is None or srcContext != "fittingShip": return False diff --git a/gui/builtinContextMenus/targetResists.py b/gui/builtinContextMenus/targetResists.py index 8ebd4076d..95468ecd0 100644 --- a/gui/builtinContextMenus/targetResists.py +++ b/gui/builtinContextMenus/targetResists.py @@ -6,6 +6,7 @@ import wx from gui.bitmapLoader import BitmapLoader from service.targetResists import TargetResists as svc_TargetResists from service.fit import Fit +from service.settings import ContextMenuSettings try: from collections import OrderedDict @@ -16,8 +17,12 @@ except ImportError: class TargetResists(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('targetResists'): + return False + if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull": return False diff --git a/gui/builtinContextMenus/whProjector.py b/gui/builtinContextMenus/whProjector.py index d5883541f..a677ceabf 100644 --- a/gui/builtinContextMenus/whProjector.py +++ b/gui/builtinContextMenus/whProjector.py @@ -5,13 +5,18 @@ import gui.globalEvents as GE import wx from service.market import Market from service.fit import Fit +from service.settings import ContextMenuSettings class WhProjector(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = ContextMenuSettings.getInstance() def display(self, srcContext, selection): + if not self.settings.get('whProjector'): + return False + return srcContext == "projected" def getText(self, itmContext, selection): diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py new file mode 100644 index 000000000..29ce587d3 --- /dev/null +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -0,0 +1,118 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +from service.settings import ContextMenuSettings + + +class PFContextMenuPref(PreferenceView): + title = "Context Menu Panel" + + def populatePanel(self, panel): + self.settings = ContextMenuSettings.getInstance() + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + self.dirtySettings = False + dlgWidth = panel.GetParent().GetParent().ClientSize.width + mainSizer = wx.BoxSizer(wx.VERTICAL) + + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) + + self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Disabling context menus can improve responsiveness.", wx.DefaultPosition, wx.DefaultSize, 0) + self.stInfo.Wrap(dlgWidth - 50) + mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + # Row 1 + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) + + 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) + 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) + self.rbBox2.SetSelection(self.settings.get('changeAffectingSkills')) + rbSizerRow1.Add(self.rbBox2, 1, wx.ALL, 5) + self.rbBox2.Bind(wx.EVT_RADIOBOX, self.OnSetting2Change) + + self.rbBox3 = wx.RadioBox(panel, -1, "Factor in Reload Time", wx.DefaultPosition, wx.DefaultSize, ['Disabled', 'Enabled'], 1, wx.RA_SPECIFY_COLS) + self.rbBox3.SetSelection(self.settings.get('factorReload')) + rbSizerRow1.Add(self.rbBox3, 1, wx.ALL, 5) + self.rbBox3.Bind(wx.EVT_RADIOBOX, self.OnSetting3Change) + + mainSizer.Add(rbSizerRow1, 1, wx.ALL | wx.EXPAND, 0) + + # Row 2 + self.m_staticline2 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) + + 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) + 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.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) + + mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0) + + # Row 3 + self.m_staticline3 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + 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) + + mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0) + + panel.SetSizer(mainSizer) + panel.Layout() + + def OnSetting1Change(self, event): + self.settings.set('ammoPattern', event.GetInt()) + + def OnSetting2Change(self, event): + self.settings.set('changeAffectingSkills', event.GetInt()) + + def OnSetting3Change(self, event): + self.settings.set('factorReload', event.GetInt()) + + def OnSetting4Change(self, event): + self.settings.set('metaSwap', event.GetInt()) + + def OnSetting5Change(self, event): + self.settings.set('moduleAmmoPicker', event.GetInt()) + + def OnSetting6Change(self, event): + self.settings.set('moduleGlobalAmmoPicker', event.GetInt()) + + def OnSetting7Change(self, event): + self.settings.set('project', event.GetInt()) + + def getImage(self): + return BitmapLoader.getBitmap("pref-gauges_big", "gui") + + +PFContextMenuPref.register() diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index aa95c3f98..1460599a1 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -3,76 +3,70 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader -import gui.mainFrame -import service +from gui.mainFrame import MainFrame import config import logging logger = logging.getLogger(__name__) -from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues - -class PFGeneralPref ( PreferenceView): +class PFGeneralPref(PreferenceView): title = "Database" - def populatePanel( self, panel ): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() + def populatePanel(self, panel): + self.mainFrame = MainFrame.getInstance() self.dirtySettings = False - #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - mainSizer = wx.BoxSizer( wx.VERTICAL ) + mainSizer = wx.BoxSizer(wx.VERTICAL) - self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stTitle.Wrap( -1 ) - self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stSubTitle.Wrap( -1 ) - self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle.Wrap(-1) + self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) - self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) - mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - #Save in Root - self.cbsaveInRoot = wx.CheckBox( panel, wx.ID_ANY, u"Using Executable Path for Saved Fit Database and Settings", wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add( self.cbsaveInRoot, 0, wx.ALL|wx.EXPAND, 5 ) + # Save in Root + self.cbsaveInRoot = wx.CheckBox(panel, wx.ID_ANY, u"Using Executable Path for Saved Fit Database and Settings", wx.DefaultPosition, wx.DefaultSize, 0) + mainSizer.Add(self.cbsaveInRoot, 0, wx.ALL | wx.EXPAND, 5) - #Database path - self.stSetUserPath = wx.StaticText( panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stSetUserPath.Wrap( -1 ) - mainSizer.Add( self.stSetUserPath, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + # Database path + self.stSetUserPath = wx.StaticText(panel, wx.ID_ANY, u"Pyfa User Path:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSetUserPath.Wrap(-1) + mainSizer.Add(self.stSetUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputUserPath = wx.TextCtrl(panel, wx.ID_ANY, config.savePath, wx.DefaultPosition, wx.DefaultSize, 0) self.inputUserPath.SetEditable(False) self.inputUserPath.SetBackgroundColour((200, 200, 200)) mainSizer.Add(self.inputUserPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) - #Save DB - self.stFitDB = wx.StaticText( panel, wx.ID_ANY, u"Fitting Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stFitDB.Wrap( -1 ) - mainSizer.Add( self.stFitDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + # Save DB + self.stFitDB = wx.StaticText(panel, wx.ID_ANY, u"Fitting Database:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stFitDB.Wrap(-1) + mainSizer.Add(self.stFitDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputFitDB = wx.TextCtrl(panel, wx.ID_ANY, config.saveDB, wx.DefaultPosition, wx.DefaultSize, 0) self.inputFitDB.SetEditable(False) self.inputFitDB.SetBackgroundColour((200, 200, 200)) mainSizer.Add(self.inputFitDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) - #Game Data DB - self.stGameDB = wx.StaticText( panel, wx.ID_ANY, u"Game Database:", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stGameDB.Wrap( -1 ) - mainSizer.Add( self.stGameDB, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + # Game Data DB + self.stGameDB = wx.StaticText(panel, wx.ID_ANY, u"Game Database:", wx.DefaultPosition, wx.DefaultSize, 0) + self.stGameDB.Wrap(-1) + mainSizer.Add(self.stGameDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.inputGameDB = wx.TextCtrl(panel, wx.ID_ANY, config.gameDB, wx.DefaultPosition, wx.DefaultSize, 0) self.inputGameDB.SetEditable(False) self.inputGameDB.SetBackgroundColour((200, 200, 200)) mainSizer.Add(self.inputGameDB, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5) - - defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) - self.cbsaveInRoot.SetValue(config.saveInRoot) self.cbsaveInRoot.Bind(wx.EVT_CHECKBOX, self.onCBsaveInRoot) @@ -80,10 +74,9 @@ class PFGeneralPref ( PreferenceView): self.inputFitDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) self.inputGameDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) - panel.SetSizer( mainSizer ) + panel.SetSizer(mainSizer) panel.Layout() - def onCBsaveInRoot(self, event): # We don't want users to be able to actually change this, # so if they try and change it, set it back to the current setting @@ -118,4 +111,5 @@ class PFGeneralPref ( PreferenceView): DefaultDatabaseValues.importResistProfileDefaults() ''' + PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index a79f590b9..a7e1c2d5b 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -2,80 +2,80 @@ import logging import wx -import gui.globalEvents as GE -import gui.mainFrame -import service +from service.fit import Fit from gui.bitmapLoader import BitmapLoader from gui.preferenceView import PreferenceView logger = logging.getLogger(__name__) -class PFFittingEnginePref ( PreferenceView): +class PFFittingEnginePref(PreferenceView): title = "Fitting Engine" - def populatePanel( self, panel ): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() + def __init__(self): self.dirtySettings = False - #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - mainSizer = wx.BoxSizer( wx.VERTICAL ) + def refreshPanel(self, fit): + pass - self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stTitle.Wrap( -1 ) - self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + # noinspection PyAttributeOutsideInit + def populatePanel(self, panel): + # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) - mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + mainSizer = wx.BoxSizer(wx.VERTICAL) - self.cbGlobalForceReload = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add( self.cbGlobalForceReload, 0, wx.ALL|wx.EXPAND, 5 ) + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.cbGlobalForceReloadText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.cbGlobalForceReloadText.Wrap( -1 ) - self.cbGlobalForceReloadText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.cbGlobalForceReloadText, 0, wx.ALL, 5 ) + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) + + self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time", wx.DefaultPosition, wx.DefaultSize, 0) + mainSizer.Add(self.cbGlobalForceReload, 0, wx.ALL | wx.EXPAND, 5) + + self.cbGlobalForceReloadText = wx.StaticText(panel, wx.ID_ANY, u" Ignores reload when calculating capacitor usage,\n damage, and tank.", + wx.DefaultPosition, wx.DefaultSize, 0) + self.cbGlobalForceReloadText.Wrap(-1) + self.cbGlobalForceReloadText.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.cbGlobalForceReloadText, 0, wx.ALL, 5) # 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 ) mainSizer.Add( self.cbGlobalForceReactivationTimer, 0, wx.ALL|wx.EXPAND, 5 ) - self.cbGlobalForceReactivationTimerText = wx.StaticText( panel, wx.ID_ANY, u" Ignores reactivation timer when calculating capacitor usage,\n damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0 ) + text = u" Ignores reactivation timer when calculating capacitor usage,\n damage, and tank." + self.cbGlobalForceReactivationTimerText = wx.StaticText( panel, wx.ID_ANY, text, wx.DefaultPosition, wx.DefaultSize, 0 ) self.cbGlobalForceReactivationTimerText.Wrap( -1 ) self.cbGlobalForceReactivationTimerText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) mainSizer.Add( self.cbGlobalForceReactivationTimerText, 0, wx.ALL, 5 ) ''' - # Future code once for mining laser crystal + # Future code for mining laser crystal ''' self.cbGlobalMiningSpecialtyCrystal = wx.CheckBox( panel, wx.ID_ANY, u"Factor in reactivation timer", wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add( self.cbGlobalMiningSpecialtyCrystal, 0, wx.ALL|wx.EXPAND, 5 ) - self.cbGlobalMiningSpecialtyCrystalText = wx.StaticText( panel, wx.ID_ANY, u" If enabled, displays the Specialty Crystal mining amount.\n This is the amount mined when using crystals and mining the matching asteroid.", wx.DefaultPosition, wx.DefaultSize, 0 ) + text = u" If enabled, displays the Specialty Crystal mining amount.\n This is the amount mined when using crystals and mining the matching asteroid." + self.cbGlobalMiningSpecialtyCrystalText = wx.StaticText( panel, wx.ID_ANY, text, wx.DefaultPosition, wx.DefaultSize, 0 ) self.cbGlobalMiningSpecialtyCrystalText.Wrap( -1 ) self.cbGlobalMiningSpecialtyCrystalText.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) mainSizer.Add( self.cbGlobalMiningSpecialtyCrystalText, 0, wx.ALL, 5 ) ''' - - self.sFit = service.Fit.getInstance() + self.sFit = Fit.getInstance() self.cbGlobalForceReload.SetValue(self.sFit.serviceFittingOptions["useGlobalForceReload"]) self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange) - panel.SetSizer( mainSizer ) + panel.SetSizer(mainSizer) panel.Layout() - def OnCBGlobalForceReloadStateChange(self, event): self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue() - fitID = self.mainFrame.getActiveFit() - self.sFit.refreshFit(fitID) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - event.Skip() def getImage(self): return BitmapLoader.getBitmap("prefs_settings", "gui") diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index 4d574fb93..ecc0a6140 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -3,48 +3,43 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader -import gui.mainFrame -import service +from gui.mainFrame import MainFrame import config -class PFGeneralPref ( PreferenceView): +class PFGeneralPref(PreferenceView): title = "Logging" - def populatePanel( self, panel ): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() + def populatePanel(self, panel): + self.mainFrame = MainFrame.getInstance() self.dirtySettings = False - #self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) + # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) - mainSizer = wx.BoxSizer( wx.VERTICAL ) + mainSizer = wx.BoxSizer(wx.VERTICAL) - self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stTitle.Wrap( -1 ) - self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) + self.stTitle.Wrap(-1) + self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText( panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.stSubTitle.Wrap( -1 ) - self.stSubTitle.SetFont( wx.Font( 10, 70, 90, 90, False, wx.EmptyString ) ) - mainSizer.Add( self.stSubTitle, 0, wx.ALL, 5 ) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle.Wrap(-1) + self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) + mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) - self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) - mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) + mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - #Debug Logging - self.cbdebugLogging = wx.CheckBox( panel, wx.ID_ANY, u"Debug Logging Enabled", wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add( self.cbdebugLogging, 0, wx.ALL|wx.EXPAND, 5 ) - - - defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) + # Debug Logging + self.cbdebugLogging = wx.CheckBox(panel, wx.ID_ANY, u"Debug Logging Enabled", wx.DefaultPosition, wx.DefaultSize, 0) + mainSizer.Add(self.cbdebugLogging, 0, wx.ALL | wx.EXPAND, 5) self.cbdebugLogging.SetValue(config.debug) self.cbdebugLogging.Bind(wx.EVT_CHECKBOX, self.onCBdebugLogging) - panel.SetSizer( mainSizer ) + panel.SetSizer(mainSizer) panel.Layout() - def onCBdebugLogging(self, event): # We don't want users to be able to actually change this, # so if they try and change it, set it back to the current setting diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py index d2a2a3ccd..05583bc49 100644 --- a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py +++ b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py @@ -1,23 +1,23 @@ +# noinspection PyPackageRequirements import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader - -import gui.mainFrame -import service -from service.crest import CrestModes - -from wx.lib.intctrl import IntCtrl +from service.settings import StatViewSettings class PFStatViewPref(PreferenceView): title = "Statistics Panel" - def populatePanel(self, panel): - self.settings = service.settings.statViewSettings.getInstance() - self.mainFrame = gui.mainFrame.MainFrame.getInstance() - + def __init__(self): self.dirtySettings = False + self.settings = StatViewSettings.getInstance() + + def refreshPanel(self, fit): + pass + + # noinspection PyAttributeOutsideInit + def populatePanel(self, panel): dlgWidth = panel.GetParent().GetParent().ClientSize.width mainSizer = wx.BoxSizer(wx.VERTICAL) @@ -27,8 +27,7 @@ class PFStatViewPref(PreferenceView): mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", - wx.DefaultPosition, wx.DefaultSize, 0) + self.stInfo = wx.StaticText(panel, wx.ID_ANY, u"Changes require restart of Pyfa to take effect.", wx.DefaultPosition, wx.DefaultSize, 0) self.stInfo.Wrap(dlgWidth - 50) mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) @@ -38,24 +37,21 @@ class PFStatViewPref(PreferenceView): rbSizerRow1 = wx.BoxSizer(wx.HORIZONTAL) - self.rbResources = wx.RadioBox(panel, -1, "Resources", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbResources = wx.RadioBox(panel, -1, "Resources", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbResources.EnableItem(1, False) self.rbResources.SetSelection(self.settings.get('resources')) rbSizerRow1.Add(self.rbResources, 1, wx.TOP | wx.RIGHT, 5) self.rbResources.Bind(wx.EVT_RADIOBOX, self.OnResourcesChange) - self.rbResistances = wx.RadioBox(panel, -1, "Resistances", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbResistances = wx.RadioBox(panel, -1, "Resistances", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbResistances.EnableItem(1, False) self.rbResistances.SetSelection(self.settings.get('resistances')) rbSizerRow1.Add(self.rbResistances, 1, wx.ALL, 5) self.rbResistances.Bind(wx.EVT_RADIOBOX, self.OnResistancesChange) - self.rbRecharge = wx.RadioBox(panel, -1, "Shield/Armor Tank", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbRecharge = wx.RadioBox(panel, -1, "Shield/Armor Tank", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbRecharge.EnableItem(1, False) self.rbRecharge.SetSelection(self.settings.get('recharge')) @@ -70,24 +66,21 @@ class PFStatViewPref(PreferenceView): rbSizerRow2 = wx.BoxSizer(wx.HORIZONTAL) - self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbFirepower = wx.RadioBox(panel, -1, "Firepower", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbFirepower.EnableItem(1, False) self.rbFirepower.SetSelection(self.settings.get('firepower')) rbSizerRow2.Add(self.rbFirepower, 1, wx.TOP | wx.RIGHT, 5) self.rbFirepower.Bind(wx.EVT_RADIOBOX, self.OnFirepowerChange) - self.rbCapacitor = wx.RadioBox(panel, -1, "Capacitor", wx.DefaultPosition, wx.DefaultSize, - ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) + self.rbCapacitor = wx.RadioBox(panel, -1, "Capacitor", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbCapacitor.EnableItem(1, False) self.rbCapacitor.SetSelection(self.settings.get('capacitor')) rbSizerRow2.Add(self.rbCapacitor, 1, wx.ALL, 5) self.rbCapacitor.Bind(wx.EVT_RADIOBOX, self.OnCapacitorChange) - self.rbMisc = wx.RadioBox(panel, -1, "Misc", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, - wx.RA_SPECIFY_COLS) + self.rbMisc = wx.RadioBox(panel, -1, "Misc", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable full as we don't have a view for this yet self.rbMisc.EnableItem(2, False) self.rbMisc.SetSelection(self.settings.get('targetingmisc')) @@ -102,8 +95,7 @@ class PFStatViewPref(PreferenceView): rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL) - self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], - 1, wx.RA_SPECIFY_COLS) + self.rbPrice = wx.RadioBox(panel, -1, "Price", wx.DefaultPosition, wx.DefaultSize, ['None', 'Minimal', 'Full'], 1, wx.RA_SPECIFY_COLS) # Disable minimal as we don't have a view for this yet self.rbPrice.EnableItem(1, False) self.rbPrice.SetSelection(self.settings.get('price')) @@ -130,9 +122,6 @@ class PFStatViewPref(PreferenceView): panel.SetSizer(mainSizer) panel.Layout() - # serviceStatViewDefaultSettings = {"resources": 2, "resistances": 2, "recharge": 2, "firepower": 2, "capacitor": 1, - # "targetingmisc": 2, "price": 2, "miningyield": 0} - def OnResourcesChange(self, event): self.settings.set('resources', event.GetInt()) @@ -164,4 +153,4 @@ class PFStatViewPref(PreferenceView): return BitmapLoader.getBitmap("pref-gauges_big", "gui") -PFStatViewPref.register() \ No newline at end of file +PFStatViewPref.register() diff --git a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py index 4e3519e2f..cfc1bef11 100644 --- a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py +++ b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py @@ -44,7 +44,7 @@ class PFUpdatePref(PreferenceView): self.versionSizer = wx.BoxSizer(wx.VERTICAL) self.versionTitle = wx.StaticText(panel, wx.ID_ANY, "Suppressing {0} Notifications".format( - self.UpdateSettings.get('version')), wx.DefaultPosition, wx.DefaultSize, 0) + self.UpdateSettings.get('version')), wx.DefaultPosition, wx.DefaultSize, 0) self.versionTitle.Wrap(-1) self.versionTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py index e0564aaac..0c9ae5004 100644 --- a/gui/builtinStatsViews/targetingMiscViewMinimal.py +++ b/gui/builtinStatsViews/targetingMiscViewMinimal.py @@ -197,7 +197,7 @@ class TargetingMiscViewMinimal(StatsView): label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % fit.maxWarpDistance)) elif labelName == "labelSensorStr": if fit.jamChance > 0: - label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) + label.SetToolTip(wx.ToolTip("Type: %s\n%.1f%% Chance of Jam" % (fit.scanType, fit.jamChance))) else: label.SetToolTip(wx.ToolTip("Type: %s" % fit.scanType)) elif labelName == "labelFullAlignTime": diff --git a/gui/preferenceView.py b/gui/preferenceView.py index 662a2ff20..edd370542 100644 --- a/gui/preferenceView.py +++ b/gui/preferenceView.py @@ -41,8 +41,13 @@ class PreferenceView(object): # noinspection PyUnresolvedReferences from gui.builtinPreferenceViews import ( # noqa: E402, F401 pyfaGeneralPreferences, + pyfaContextMenuPreferences, + pyfaStatViewPreferences, pyfaNetworkPreferences, pyfaHTMLExportPreferences, pyfaCrestPreferences, - pyfaUpdatePreferences + pyfaDatabasePreferences, + pyfaLoggingPreferences, + pyfaEnginePreferences, + pyfaUpdatePreferences, ) diff --git a/gui/statsPane.py b/gui/statsPane.py index 9c3e9c698..c7d92bea3 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -21,7 +21,7 @@ import wx from service.fit import Fit -from service.settings import Settings +from service.settings import StatViewSettings import gui.mainFrame import gui.builtinStatsViews import gui.globalEvents as GE @@ -50,7 +50,7 @@ class StatsPane(wx.Panel): DEFAULT_VIEWS = [] - settings = Settings.statViewSettings.getInstance() + settings = StatViewSettings.getInstance() for aView in AVAILIBLE_VIEWS: if settings.get(aView) == 2: diff --git a/service/settings.py b/service/settings.py index 38abd422f..aa795e065 100644 --- a/service/settings.py +++ b/service/settings.py @@ -133,17 +133,17 @@ class NetworkSettings(object): def __init__(self): serviceNetworkDefaultSettings = { - "mode": self.PROXY_MODE_AUTODETECT, - "type": "https", - "address": "", - "port": "", - "access": 15, - "login": None, + "mode" : self.PROXY_MODE_AUTODETECT, + "type" : "https", + "address" : "", + "port" : "", + "access" : 15, + "login" : None, "password": None } self.serviceNetworkSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceNetworkSettings", serviceNetworkDefaultSettings) + "pyfaServiceNetworkSettings", serviceNetworkDefaultSettings) def isEnabled(self, type): if type & self.serviceNetworkSettings["access"]: @@ -256,12 +256,12 @@ class HTMLExportSettings(object): def __init__(self): serviceHTMLExportDefaultSettings = { "enabled": False, - "path": config.pyfaPath + os.sep + 'pyfaFits.html', + "path" : config.pyfaPath + os.sep + 'pyfaFits.html', "minimal": False } self.serviceHTMLExportSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceHTMLExportSettings", - serviceHTMLExportDefaultSettings + "pyfaServiceHTMLExportSettings", + serviceHTMLExportDefaultSettings ) def getEnabled(self): @@ -303,8 +303,8 @@ class UpdateSettings(object): # version - Set to release tag that user does not want notifications for serviceUpdateDefaultSettings = {"prerelease": True, 'version': None} self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceUpdateSettings", - serviceUpdateDefaultSettings + "pyfaServiceUpdateSettings", + serviceUpdateDefaultSettings ) def get(self, type): @@ -331,8 +331,8 @@ class CRESTSettings(object): serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": "", "timeout": 60} self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings( - "pyfaServiceCRESTSettings", - serviceCRESTDefaultSettings + "pyfaServiceCRESTSettings", + serviceCRESTDefaultSettings ) def get(self, type): @@ -341,13 +341,14 @@ class CRESTSettings(object): def set(self, type, value): self.serviceCRESTSettings[type] = value -class statViewSettings(object): + +class StatViewSettings(object): _instance = None @classmethod def getInstance(cls): if cls._instance is None: - cls._instance = statViewSettings() + cls._instance = StatViewSettings() return cls._instance @@ -357,15 +358,15 @@ class statViewSettings(object): # 1 - Minimal/Text Only View # 2 - Full View serviceStatViewDefaultSettings = { - "resources": 2, - "resistances": 2, - "recharge": 2, - "firepower": 2, - "capacitor": 2, + "resources" : 2, + "resistances" : 2, + "recharge" : 2, + "firepower" : 2, + "capacitor" : 2, "targetingmisc": 1, - "price": 2, - "miningyield": 2, - "drones": 2 + "price" : 2, + "miningyield" : 2, + "drones" : 2 } # We don't have these....yet @@ -382,4 +383,52 @@ class statViewSettings(object): def set(self, type, value): self.serviceStatViewDefaultSettings[type] = value + +class ContextMenuSettings(object): + _instance = None + + @classmethod + def getInstance(cls): + if cls._instance is None: + cls._instance = ContextMenuSettings() + + return cls._instance + + def __init__(self): + # mode + # 0 - Do not show + # 1 - Show + ContextMenuDefaultSettings = { + "ammoPattern" : 1, + "amount" : 1, + "cargo" : 1, + "changeAffectingSkills" : 1, + "damagePattern" : 1, + "droneRemoveStack" : 1, + "droneSplit" : 1, + "factorReload" : 1, + "fighterAbilities" : 1, + "implantSet" : 1, + "itemStats" : 1, + "marketJump" : 1, + "metaSwap" : 1, + "moduleAmmoPicker" : 1, + "moduleGlobalAmmoPicker": 1, + "openFit" : 1, + "priceClear" : 1, + "project" : 1, + "shipJump" : 1, + "tacticalMode" : 1, + "targetResists" : 1, + "whProjector" : 1, + } + + self.ContextMenuDefaultSettings = SettingsProvider.getInstance().getSettings("pyfaContextMenuSettings", ContextMenuDefaultSettings) + + def get(self, type): + return self.ContextMenuDefaultSettings[type] + + def set(self, type, value): + self.ContextMenuDefaultSettings[type] = value + # @todo: migrate fit settings (from fit service) here? From 949144ab2597edccbb601ba31f880a5657b7812a Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Thu, 16 Feb 2017 10:45:28 -0800 Subject: [PATCH 12/15] Embiggen the preference pane window. Change text, and clean up some unused imports. --- gui/builtinPreferenceViews/pyfaContextMenuPreferences.py | 2 ++ gui/builtinPreferenceViews/pyfaDatabasePreferences.py | 4 +--- gui/builtinPreferenceViews/pyfaLoggingPreferences.py | 5 +---- gui/preferenceDialog.py | 6 +++--- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py index 29ce587d3..f9f92d4e9 100644 --- a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -62,10 +62,12 @@ class PFContextMenuPref(PreferenceView): rbSizerRow2.Add(self.rbBox4, 1, wx.TOP | wx.RIGHT, 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.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')) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index 1460599a1..2ef248d18 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -3,7 +3,6 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader -from gui.mainFrame import MainFrame import config import logging @@ -15,7 +14,6 @@ class PFGeneralPref(PreferenceView): title = "Database" def populatePanel(self, panel): - self.mainFrame = MainFrame.getInstance() self.dirtySettings = False # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) @@ -26,7 +24,7 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index ecc0a6140..286aa9966 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -2,8 +2,6 @@ import wx from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader - -from gui.mainFrame import MainFrame import config @@ -11,7 +9,6 @@ class PFGeneralPref(PreferenceView): title = "Logging" def populatePanel(self, panel): - self.mainFrame = MainFrame.getInstance() self.dirtySettings = False # self.openFitsSettings = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) @@ -22,7 +19,7 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/gui/preferenceDialog.py b/gui/preferenceDialog.py index e6c5f12af..2ed0f829a 100644 --- a/gui/preferenceDialog.py +++ b/gui/preferenceDialog.py @@ -66,12 +66,12 @@ class PreferenceDialog(wx.Dialog): # Set the height based on a condition. Can all the panels fit in the current height? # If not, use the .GetBestVirtualSize() to ensure that all content is available. - minHeight = 360 + minHeight = 550 bestFit = self.GetBestVirtualSize() if minHeight > bestFit[1]: - self.SetSizeWH(450, minHeight) + self.SetSizeWH(650, minHeight) else: - self.SetSizeWH(450, bestFit[1]) + self.SetSizeWH(650, bestFit[1]) self.Layout() From a43de001538d27352b413ed9f65d9e306fec5953 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Sun, 26 Feb 2017 08:50:13 -0800 Subject: [PATCH 13/15] Tox fixes --- gui/builtinPreferenceViews/pyfaDatabasePreferences.py | 3 ++- gui/builtinPreferenceViews/pyfaLoggingPreferences.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index 2ef248d18..5451840e6 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -24,7 +24,8 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", + wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) diff --git a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py index 286aa9966..9f2ff6df5 100644 --- a/gui/builtinPreferenceViews/pyfaLoggingPreferences.py +++ b/gui/builtinPreferenceViews/pyfaLoggingPreferences.py @@ -19,7 +19,8 @@ class PFGeneralPref(PreferenceView): self.stTitle.SetFont(wx.Font(12, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stTitle, 0, wx.ALL, 5) - self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", wx.DefaultPosition, wx.DefaultSize, 0) + self.stSubTitle = wx.StaticText(panel, wx.ID_ANY, u"(Cannot be changed while Pyfa is running. Set via command line switches.)", + wx.DefaultPosition, wx.DefaultSize, 0) self.stSubTitle.Wrap(-1) self.stSubTitle.SetFont(wx.Font(10, 70, 90, 90, False, wx.EmptyString)) mainSizer.Add(self.stSubTitle, 0, wx.ALL, 5) From fbf35edae2f9417bb2b044760b479888fce50b27 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Sun, 26 Feb 2017 11:09:56 -0800 Subject: [PATCH 14/15] Fix capitalization and set up some logging to help catch errors. --- .../targetingMiscViewMinimal.py | 2 +- gui/statsPane.py | 23 +++++++++++-------- gui/statsView.py | 2 +- service/settings.py | 8 +++++-- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gui/builtinStatsViews/targetingMiscViewMinimal.py b/gui/builtinStatsViews/targetingMiscViewMinimal.py index 0c9ae5004..458a3ab64 100644 --- a/gui/builtinStatsViews/targetingMiscViewMinimal.py +++ b/gui/builtinStatsViews/targetingMiscViewMinimal.py @@ -29,7 +29,7 @@ except ImportError: class TargetingMiscViewMinimal(StatsView): - name = "targetingmiscViewMinimal" + name = "targetingMiscViewMinimal" def __init__(self, parent): StatsView.__init__(self) diff --git a/gui/statsPane.py b/gui/statsPane.py index c7d92bea3..59aa0aea0 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -29,6 +29,9 @@ import gui.globalEvents as GE from gui.statsView import StatsView from gui.contextMenu import ContextMenu from gui.pyfatogglepanel import TogglePanel +from logbook import Logger + +pyfalog = Logger(__name__) class StatsPane(wx.Panel): @@ -38,7 +41,7 @@ class StatsPane(wx.Panel): "recharge", "firepower", "capacitor", - "targetingmisc", + "targetingMisc", "price", ] @@ -55,14 +58,14 @@ class StatsPane(wx.Panel): for aView in AVAILIBLE_VIEWS: if settings.get(aView) == 2: DEFAULT_VIEWS.extend(["%sViewFull" % aView]) - - if settings.get(aView) == 1: + pyfalog.debug("Setting full view for: {0}", aView) + elif settings.get(aView) == 1: DEFAULT_VIEWS.extend(["%sViewMinimal" % aView]) - - # If it's 0, it's disabled and we don't do anything. - - # TODO - # Add logging + pyfalog.debug("Setting minimal view for: {0}", aView) + elif settings.get(aView) == 0: + pyfalog.debug("Setting disabled view for: {0}", aView) + else: + pyfalog.error("Unknown setting for view: {0}", aView) def fitChanged(self, event): sFit = Fit.getInstance() @@ -97,9 +100,9 @@ class StatsPane(wx.Panel): try: view = StatsView.getView(viewName)(self) + pyfalog.debug("Load view: {0}", viewName) except KeyError: - # View doesn't exist. Skip to next view - continue + pyfalog.error("Attempted to load an invalid view: {0}", viewName) self.nameViewMap[viewName] = view self.views.append(view) diff --git a/gui/statsView.py b/gui/statsView.py index 773063ca4..1be2d8b8d 100644 --- a/gui/statsView.py +++ b/gui/statsView.py @@ -50,6 +50,6 @@ from gui.builtinStatsViews import ( # noqa: E402, F401 miningyieldViewFull, capacitorViewFull, rechargeViewFull, - targetingMiscViewFull, + targetingMiscViewMinimal, priceViewFull, ) diff --git a/service/settings.py b/service/settings.py index aa795e065..8c058e203 100644 --- a/service/settings.py +++ b/service/settings.py @@ -22,6 +22,9 @@ import os.path import urllib2 import config +from logbook import Logger + +pyfalog = Logger(__name__) class SettingsProvider(object): @@ -87,7 +90,8 @@ class Settings(object): def __getitem__(self, k): try: return self.info[k] - except KeyError: + except KeyError as e: + pyfalog.warning("Failed to get setting for '{0}'. Exception: {1}", k, e) return None def __setitem__(self, k, v): @@ -363,7 +367,7 @@ class StatViewSettings(object): "recharge" : 2, "firepower" : 2, "capacitor" : 2, - "targetingmisc": 1, + "targetingMisc": 1, "price" : 2, "miningyield" : 2, "drones" : 2 From 712b1811b35d0ba72a10936aa467d14b94b5dcd2 Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Sun, 26 Feb 2017 11:30:23 -0800 Subject: [PATCH 15/15] Tox fixes --- gui/builtinPreferenceViews/pyfaContextMenuPreferences.py | 1 - gui/builtinPreferenceViews/pyfaEnginePreferences.py | 4 ++-- gui/builtinPreferenceViews/pyfaStatViewPreferences.py | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py index 618538825..ca87d3de0 100644 --- a/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py +++ b/gui/builtinPreferenceViews/pyfaContextMenuPreferences.py @@ -14,7 +14,6 @@ class PFContextMenuPref(PreferenceView): self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.dirtySettings = False - dlgWidth = panel.GetParent().GetParent().ClientSize.width mainSizer = wx.BoxSizer(wx.VERTICAL) self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0) diff --git a/gui/builtinPreferenceViews/pyfaEnginePreferences.py b/gui/builtinPreferenceViews/pyfaEnginePreferences.py index b14776914..a98aec127 100644 --- a/gui/builtinPreferenceViews/pyfaEnginePreferences.py +++ b/gui/builtinPreferenceViews/pyfaEnginePreferences.py @@ -5,7 +5,6 @@ import wx from service.fit import Fit from gui.bitmapLoader import BitmapLoader from gui.preferenceView import PreferenceView -import gui.utils.fonts as fonts logger = logging.getLogger(__name__) @@ -33,7 +32,8 @@ class PFFittingEnginePref(PreferenceView): self.m_staticline1 = wx.StaticLine(panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) mainSizer.Add(self.m_staticline1, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) - self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time when calculating capacitor usage, damage, and tank.", wx.DefaultPosition, wx.DefaultSize, 0) + self.cbGlobalForceReload = wx.CheckBox(panel, wx.ID_ANY, u"Factor in reload time when calculating capacitor usage, damage, and tank.", + wx.DefaultPosition, wx.DefaultSize, 0) mainSizer.Add(self.cbGlobalForceReload, 0, wx.ALL | wx.EXPAND, 5) # Future code once new cap sim is implemented diff --git a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py index fbb7596c4..601e135f6 100644 --- a/gui/builtinPreferenceViews/pyfaStatViewPreferences.py +++ b/gui/builtinPreferenceViews/pyfaStatViewPreferences.py @@ -18,7 +18,6 @@ class PFStatViewPref(PreferenceView): # noinspection PyAttributeOutsideInit def populatePanel(self, panel): - dlgWidth = panel.GetParent().GetParent().ClientSize.width mainSizer = wx.BoxSizer(wx.VERTICAL) self.stTitle = wx.StaticText(panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0)