Add a small delay on key down for market search (#1123)

* Add a small delay on key down for market search

* prevent a double search if user does something like hit enter in the middle of a timer
This commit is contained in:
Ryan Holmes
2017-04-11 23:30:38 -04:00
committed by GitHub
parent 45a8aaf387
commit ebda1349cf
4 changed files with 34 additions and 9 deletions

View File

@@ -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)

View File

@@ -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()

View File

@@ -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("*", "")

View File

@@ -74,6 +74,7 @@ class Fit(object):
"openFitInNew": False,
"priceSystem": "Jita",
"showShipBrowserTooltip": True,
"marketSearchDelay": 250
}
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(