diff --git a/eos/db/migration.py b/eos/db/migration.py index 7d1e889d9..b04df38ae 100644 --- a/eos/db/migration.py +++ b/eos/db/migration.py @@ -4,13 +4,8 @@ import time import re import os -def getVersion(db): - cursor = db.execute('PRAGMA user_version') - return cursor.fetchone()[0] - -def update(saveddata_engine): - dbVersion = getVersion(saveddata_engine) - +def getAppVersion(): + # calculate app version based on upgrade files we have appVersion = 0 for fname in os.listdir(os.path.join(os.path.dirname(__file__), "migrations")): m = re.match("^upgrade(?P\d+)\.py$", fname) @@ -18,6 +13,15 @@ def update(saveddata_engine): continue index = int(m.group("index")) appVersion = max(appVersion, index) + return appVersion + +def getVersion(db): + cursor = db.execute('PRAGMA user_version') + return cursor.fetchone()[0] + +def update(saveddata_engine): + dbVersion = getVersion(saveddata_engine) + appVersion = getAppVersion() if dbVersion == appVersion: return diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py index 60468ec9a..87f506ba6 100644 --- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py +++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py @@ -56,6 +56,9 @@ class PFGeneralPref ( PreferenceView): self.cbShowTooltip = wx.CheckBox( panel, wx.ID_ANY, u"Show tab tooltips", wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add( self.cbShowTooltip, 0, wx.ALL|wx.EXPAND, 5 ) + self.cbMarketShortcuts = wx.CheckBox( panel, wx.ID_ANY, u"Show market shortcuts", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbMarketShortcuts, 0, wx.ALL|wx.EXPAND, 5 ) + defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) self.sFit = service.Fit.getInstance() @@ -69,6 +72,7 @@ class PFGeneralPref ( PreferenceView): self.cbCompactSkills.SetValue(self.sFit.serviceFittingOptions["compactSkills"] or False) self.cbReopenFits.SetValue(self.openFitsSettings["enabled"]) self.cbShowTooltip.SetValue(self.sFit.serviceFittingOptions["showTooltip"] or False) + self.cbMarketShortcuts.SetValue(self.sFit.serviceFittingOptions["showMarketShortcuts"] or False) self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange) self.cbGlobalDmgPattern.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalDmgPatternStateChange) @@ -79,6 +83,7 @@ class PFGeneralPref ( PreferenceView): self.cbCompactSkills.Bind(wx.EVT_CHECKBOX, self.onCBCompactSkills) self.cbReopenFits.Bind(wx.EVT_CHECKBOX, self.onCBReopenFits) self.cbShowTooltip.Bind(wx.EVT_CHECKBOX, self.onCBShowTooltip) + self.cbMarketShortcuts.Bind(wx.EVT_CHECKBOX, self.onCBShowShortcuts) self.cbRackLabels.Enable(self.sFit.serviceFittingOptions["rackSlots"] or False) @@ -135,6 +140,9 @@ class PFGeneralPref ( PreferenceView): def onCBShowTooltip(self, event): self.sFit.serviceFittingOptions["showTooltip"] = self.cbShowTooltip.GetValue() + def onCBShowShortcuts(self, event): + self.sFit.serviceFittingOptions["showMarketShortcuts"] = self.cbMarketShortcuts.GetValue() + def getImage(self): return bitmapLoader.getBitmap("prefs_settings", "icons") diff --git a/gui/builtinViewColumns/baseName.py b/gui/builtinViewColumns/baseName.py index 0966c9c7d..a6b3fe49f 100644 --- a/gui/builtinViewColumns/baseName.py +++ b/gui/builtinViewColumns/baseName.py @@ -55,6 +55,15 @@ class BaseName(ViewColumn): return stuff.item.name else: item = getattr(stuff, "item", stuff) + + if service.Fit.getInstance().serviceFittingOptions["showMarketShortcuts"]: + marketShortcut = getattr(item, "marketShortcut", None) + + if marketShortcut: + # use unicode subscript to display shortcut value + shortcut = unichr(marketShortcut+8320)+u" " + return shortcut+item.name + return item.name BaseName.register() diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 634a22f01..82c33791b 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -39,7 +39,7 @@ import gui.globalEvents as GE from gui import bitmapLoader from gui.mainMenuBar import MainMenuBar from gui.additionsPane import AdditionsPane -from gui.marketBrowser import MarketBrowser +from gui.marketBrowser import MarketBrowser, ItemSelected from gui.multiSwitch import MultiSwitch from gui.statsPane import StatsPane from gui.shipBrowser import ShipBrowser, FitSelected, ImportSelected, Stage3Selected @@ -423,12 +423,6 @@ class MainFrame(wx.Frame): ctabnext = wx.NewId() ctabprev = wx.NewId() - self.additionstab1 = wx.NewId() - self.additionstab2 = wx.NewId() - self.additionstab3 = wx.NewId() - self.additionstab4 = wx.NewId() - self.additionstab5 = wx.NewId() - # Close Page self.Bind(wx.EVT_MENU, self.CloseCurrentPage, id=self.closePageId) self.Bind(wx.EVT_MENU, self.HAddPage, id = self.addPageId) @@ -437,12 +431,6 @@ class MainFrame(wx.Frame): self.Bind(wx.EVT_MENU, self.CTabNext, id = ctabnext) self.Bind(wx.EVT_MENU, self.CTabPrev, id = ctabprev) - self.Bind(wx.EVT_MENU, self.AdditionsTabSelect, id = self.additionstab1) - self.Bind(wx.EVT_MENU, self.AdditionsTabSelect, id = self.additionstab2) - self.Bind(wx.EVT_MENU, self.AdditionsTabSelect, id = self.additionstab3) - self.Bind(wx.EVT_MENU, self.AdditionsTabSelect, id = self.additionstab4) - self.Bind(wx.EVT_MENU, self.AdditionsTabSelect, id = self.additionstab5) - actb = [(wx.ACCEL_CTRL, ord('T'), self.addPageId), (wx.ACCEL_CMD, ord('T'), self.addPageId), @@ -462,41 +450,43 @@ class MainFrame(wx.Frame): (wx.ACCEL_CMD, wx.WXK_TAB, ctabnext), (wx.ACCEL_CMD | wx.ACCEL_SHIFT, wx.WXK_TAB, ctabprev), - # Ctrl+age(Up/Down) + # Ctrl+Page(Up/Down) (wx.ACCEL_CTRL, wx.WXK_PAGEDOWN, ctabnext), (wx.ACCEL_CTRL, wx.WXK_PAGEUP, ctabprev), (wx.ACCEL_CMD, wx.WXK_PAGEDOWN, ctabnext), - (wx.ACCEL_CMD, wx.WXK_PAGEUP, ctabprev), - - (wx.ACCEL_CTRL, ord('1'), self.additionstab1), - (wx.ACCEL_CTRL, ord('2'), self.additionstab2), - (wx.ACCEL_CTRL, ord('3'), self.additionstab3), - (wx.ACCEL_CTRL, ord('4'), self.additionstab4), - (wx.ACCEL_CTRL, ord('5'), self.additionstab5), - (wx.ACCEL_CMD, ord('1'), self.additionstab1), - (wx.ACCEL_CMD, ord('2'), self.additionstab2), - (wx.ACCEL_CMD, ord('3'), self.additionstab3), - (wx.ACCEL_CMD, ord('4'), self.additionstab4), - (wx.ACCEL_CMD, ord('5'), self.additionstab5) + (wx.ACCEL_CMD, wx.WXK_PAGEUP, ctabprev) ] + + # Ctrl/Cmd+# for addition pane selection + self.additionsSelect = [] + for i in range(0, self.additionsPane.notebook.GetPageCount()): + self.additionsSelect.append(wx.NewId()) + self.Bind(wx.EVT_MENU, self.AdditionsTabSelect, id=self.additionsSelect[i]) + actb.append((wx.ACCEL_CMD, i+49, self.additionsSelect[i])) + actb.append((wx.ACCEL_CTRL, i+49, self.additionsSelect[i])) + + # Alt+1-9 for market item selection + self.itemSelect = [] + for i in range(0, 9): + self.itemSelect.append(wx.NewId()) + self.Bind(wx.EVT_MENU, self.ItemSelect, id = self.itemSelect[i]) + actb.append((wx.ACCEL_ALT, i + 49, self.itemSelect[i])) + atable = wx.AcceleratorTable(actb) self.SetAcceleratorTable(atable) def AdditionsTabSelect(self, event): - selTab = None - if event.GetId() == self.additionstab1: - selTab = 0 - if event.GetId() == self.additionstab2: - selTab = 1 - if event.GetId() == self.additionstab3: - selTab = 2 - if event.GetId() == self.additionstab4: - selTab = 3 - if event.GetId() == self.additionstab5: - selTab = 4 - if selTab is not None: + selTab = self.additionsSelect.index(event.GetId()) + + if selTab <= self.additionsPane.notebook.GetPageCount(): self.additionsPane.notebook.SetSelection(selTab) + def ItemSelect(self, event): + selItem = self.itemSelect.index(event.GetId()) + + if selItem < len(self.marketBrowser.itemView.active): + wx.PostEvent(self, ItemSelected(itemID=self.marketBrowser.itemView.active[selItem].ID)) + def CTabNext(self, event): self.fitMultiSwitch.NextPage() diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py index 771c7ab8a..1c8329a1b 100644 --- a/gui/marketBrowser.py +++ b/gui/marketBrowser.py @@ -438,6 +438,11 @@ class ItemView(d.Display): self.metalvls = sMkt.directAttrRequest(items, attrs) # Re-sort stuff items.sort(key=self.itemSort) + + for i, item in enumerate(items[:9]): + # set shortcut info for first 9 modules + item.marketShortcut = i+1 + d.Display.refresh(self, items) def makeReverseMetaMap(self): diff --git a/service/fit.py b/service/fit.py index 5360a376a..8a55fb5b4 100644 --- a/service/fit.py +++ b/service/fit.py @@ -97,7 +97,8 @@ class Fit(object): "rackSlots": True, "rackLabels": True, "compactSkills": True, - "showTooltip": True} + "showTooltip": True, + "showMarketShortcuts": False} self.serviceFittingOptions = SettingsProvider.getInstance().getSettings( "pyfaServiceFittingOptions", serviceFittingDefaultOptions) @@ -893,7 +894,7 @@ class Fit(object): State.ONLINE: State.ACTIVE} # Just in case def __getProposedState(self, mod, click, proposedState=None): - if mod.slot in (Slot.RIG, Slot.SUBSYSTEM) or mod.isEmpty: + if mod.slot is Slot.SUBSYSTEM or mod.isEmpty: return State.ONLINE currState = mod.state diff --git a/service/prefetch.py b/service/prefetch.py index 56c8b5684..664e5168c 100644 --- a/service/prefetch.py +++ b/service/prefetch.py @@ -55,4 +55,4 @@ else: # If database does not exist, do not worry about migration. Simply # create and set version eos.db.saveddata_meta.create_all() - eos.db.saveddata_engine.execute('PRAGMA user_version = %d'%config.dbversion) + eos.db.saveddata_engine.execute('PRAGMA user_version = {}'.format(migration.getAppVersion()))