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:
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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("*", "")
|
||||
|
||||
@@ -74,6 +74,7 @@ class Fit(object):
|
||||
"openFitInNew": False,
|
||||
"priceSystem": "Jita",
|
||||
"showShipBrowserTooltip": True,
|
||||
"marketSearchDelay": 250
|
||||
}
|
||||
|
||||
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(
|
||||
|
||||
Reference in New Issue
Block a user