diff --git a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py index 68c877444..ab93d4655 100644 --- a/gui/builtinPreferenceViews/pyfaDatabasePreferences.py +++ b/gui/builtinPreferenceViews/pyfaDatabasePreferences.py @@ -72,14 +72,6 @@ class PFGeneralPref(PreferenceView): # self.inputFitDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) # self.inputGameDB.Bind(wx.EVT_LEAVE_WINDOW, self.OnWindowLeave) - 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) - - self.stSubTitleTwo = wx.StaticText(panel, wx.ID_ANY, u"DANGER ZONE!\nUsing these options will permanantly delete data out of the database.", - wx.DefaultPosition, wx.DefaultSize, 0) - self.stSubTitleTwo.Wrap(-1) - mainSizer.Add(self.stSubTitleTwo, 0, wx.ALL, 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) diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py index 10699e8f0..e75ef55ce 100644 --- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py +++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py @@ -1,5 +1,6 @@ # noinspection PyPackageRequirements import wx +from wx.lib.intctrl import IntCtrl from gui.preferenceView import PreferenceView from gui.bitmapLoader import BitmapLoader @@ -92,6 +93,20 @@ class PFGeneralPref(PreferenceView): mainSizer.Add(priceSizer, 0, wx.ALL | wx.EXPAND, 0) + delayTimer = wx.BoxSizer(wx.HORIZONTAL) + + self.stMarketDelay = wx.StaticText(panel, wx.ID_ANY, u"Market Search Delay (ms):", wx.DefaultPosition, wx.DefaultSize, 0) + self.stMarketDelay.Wrap(-1) + self.stMarketDelay.SetToolTip( + wx.ToolTip('The delay between a keystroke and the market search. Can help reduce lag when typing fast in the market search box.')) + + delayTimer.Add(self.stMarketDelay, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) + + self.intDelay = IntCtrl(panel, max=1000, limited=True) + delayTimer.Add(self.intDelay, 0, wx.ALL, 5) + + mainSizer.Add(delayTimer, 0, wx.ALL | wx.EXPAND, 0) + self.sFit = Fit.getInstance() self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"]) @@ -108,6 +123,7 @@ class PFGeneralPref(PreferenceView): self.cbOpenFitInNew.SetValue(self.sFit.serviceFittingOptions["openFitInNew"]) self.chPriceSystem.SetStringSelection(self.sFit.serviceFittingOptions["priceSystem"]) self.cbShowShipBrowserTooltip.SetValue(self.sFit.serviceFittingOptions["showShipBrowserTooltip"]) + self.intDelay.SetValue(self.sFit.serviceFittingOptions["marketSearchDelay"]) self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange) self.cbGlobalDmgPattern.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalDmgPatternStateChange) @@ -123,12 +139,17 @@ class PFGeneralPref(PreferenceView): self.cbOpenFitInNew.Bind(wx.EVT_CHECKBOX, self.onCBOpenFitInNew) self.chPriceSystem.Bind(wx.EVT_CHOICE, self.onPriceSelection) self.cbShowShipBrowserTooltip.Bind(wx.EVT_CHECKBOX, self.onCBShowShipBrowserTooltip) + self.intDelay.Bind(wx.lib.intctrl.EVT_INT, self.onMarketDelayChange) self.cbRackLabels.Enable(self.sFit.serviceFittingOptions["rackSlots"] or False) panel.SetSizer(mainSizer) panel.Layout() + def onMarketDelayChange(self, event): + self.sFit.serviceFittingOptions["marketSearchDelay"] = self.intDelay.GetValue() + event.Skip() + def onCBGlobalColorBySlot(self, event): self.sFit.serviceFittingOptions["colorFitBySlot"] = self.cbFitColorSlots.GetValue() fitID = self.mainFrame.getActiveFit() diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py index 4047507da..154228b6f 100644 --- a/gui/marketBrowser.py +++ b/gui/marketBrowser.py @@ -20,6 +20,7 @@ # noinspection PyPackageRequirements import wx from service.market import Market +from service.fit import Fit from service.attribute import Attribute from gui.display import Display import gui.PFSearchBox as SBox @@ -245,11 +246,15 @@ class ItemView(Display): self.marketBrowser = marketBrowser self.marketView = marketBrowser.marketView + # Set up timer for delaying search on every EVT_TEXT + self.searchTimer = wx.Timer(self) + self.Bind(wx.EVT_TIMER, self.scheduleSearch, self.searchTimer) + # Make sure our search actually does interesting stuff self.marketBrowser.search.Bind(SBox.EVT_TEXT_ENTER, self.scheduleSearch) self.marketBrowser.search.Bind(SBox.EVT_SEARCH_BTN, self.scheduleSearch) self.marketBrowser.search.Bind(SBox.EVT_CANCEL_BTN, self.clearSearch) - self.marketBrowser.search.Bind(SBox.EVT_TEXT, self.scheduleSearch) + self.marketBrowser.search.Bind(SBox.EVT_TEXT, self.delaySearch) # Make sure WE do interesting stuff too self.Bind(wx.EVT_CONTEXT_MENU, self.contextMenu) @@ -264,6 +269,11 @@ class ItemView(Display): for itemID in self.sMkt.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]: self.recentlyUsedModules.add(self.sMkt.getItem(itemID)) + def delaySearch(self, evt): + sFit = Fit.getInstance() + self.searchTimer.Stop() + self.searchTimer.Start(sFit.serviceFittingOptions["marketSearchDelay"], True) # 150ms + def startDrag(self, event): row = self.GetFirstSelected() @@ -361,6 +371,7 @@ class ItemView(Display): btn.setMetaAvailable(False) def scheduleSearch(self, event=None): + self.searchTimer.Stop() # Cancel any pending timers search = self.marketBrowser.search.GetLineText(0) # Make sure we do not count wildcard as search symbol realsearch = search.replace("*", "") diff --git a/service/fit.py b/service/fit.py index 823e4393f..529a8bcb4 100644 --- a/service/fit.py +++ b/service/fit.py @@ -74,6 +74,7 @@ class Fit(object): "openFitInNew": False, "priceSystem": "Jita", "showShipBrowserTooltip": True, + "marketSearchDelay": 250 } self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(