98 lines
3.2 KiB
Python
98 lines
3.2 KiB
Python
from PySide import QtGui
|
|
from PySide import QtCore
|
|
|
|
|
|
# This is a "light" version of the SearchBox implementation, which loads the actual implementation on first click
|
|
class SearchBoxLight(QtGui.QLineEdit):
|
|
resultSelected = QtCore.Signal(int, int)
|
|
|
|
def __init__(
|
|
self, getItemGroups, getToolTip, getItemDelegate, maxVisibleRows=20, parent=None
|
|
):
|
|
self.isInitialized = False
|
|
|
|
# Store arguments
|
|
self.getItemGroups = getItemGroups
|
|
self.getToolTip = getToolTip
|
|
self.getItemDelegate = getItemDelegate
|
|
self.maxVisibleRows = maxVisibleRows
|
|
|
|
# Call parent constructor
|
|
super(SearchBoxLight, self).__init__(parent)
|
|
# Connect signals and slots
|
|
self.textChanged.connect(self.filterModel)
|
|
# Thanks to https://saurabhg.com/programming/search-box-using-qlineedit/ for indicating a few useful options
|
|
ico = QtGui.QIcon(":/icons/help-browser.svg")
|
|
# ico = QtGui.QIcon(':/icons/WhatsThis.svg')
|
|
self.addAction(ico, QtGui.QLineEdit.LeadingPosition)
|
|
self.setClearButtonEnabled(True)
|
|
self.setPlaceholderText("Search tools, prefs & tree")
|
|
self.setFixedWidth(
|
|
200
|
|
) # needed to avoid a change of width when the clear button appears/disappears
|
|
|
|
def lazyInit(self):
|
|
pass
|
|
|
|
def __getattr__(self, name):
|
|
import types
|
|
|
|
def f(*args, **kwargs):
|
|
import SearchBox
|
|
|
|
SearchBox.SearchBox.lazyInit(self)
|
|
return getattr(SearchBox.SearchBox, name)(*args, **kwargs)
|
|
|
|
return types.MethodType(f, self)
|
|
|
|
def MousePressEvent(self, *args, **kwargs):
|
|
return self.proxyMousePressEvent(*args, **kwargs)
|
|
|
|
def MouseMoveEvent(self, *args, **kwargs):
|
|
return self.proxyMouseMoveEvent(*args, **kwargs)
|
|
|
|
def LeaveEvent(self, *args, **kwargs):
|
|
return self.proxyLeaveEvent(*args, **kwargs)
|
|
|
|
def focusInEvent(self, *args, **kwargs):
|
|
return self.proxyFocusInEvent(*args, **kwargs)
|
|
|
|
def focusOutEvent(self, *args, **kwargs):
|
|
return self.proxyFocusOutEvent(*args, **kwargs)
|
|
|
|
def keyPressEvent(self, *args, **kwargs):
|
|
return self.proxyKeyPressEvent(*args, **kwargs)
|
|
|
|
def onSelectionChanged(self, *args, **kwargs):
|
|
return self.proxyOnSelectionChanged(*args, **kwargs)
|
|
|
|
def filterModel(self, *args, **kwargs):
|
|
return self.proxyFilterModel(*args, **kwargs)
|
|
|
|
def listDown(self, *args, **kwargs):
|
|
return self.proxyListDown(*args, **kwargs)
|
|
|
|
def listUp(self, *args, **kwargs):
|
|
return self.proxyListUp(*args, **kwargs)
|
|
|
|
def listPageDown(self, *args, **kwargs):
|
|
return self.proxyListPageDown(*args, **kwargs)
|
|
|
|
def listPageUp(self, *args, **kwargs):
|
|
return self.proxyListPageUp(*args, **kwargs)
|
|
|
|
def listEnd(self, *args, **kwargs):
|
|
return self.proxyListEnd(*args, **kwargs)
|
|
|
|
def listStart(self, *args, **kwargs):
|
|
return self.proxyListStart(*args, **kwargs)
|
|
|
|
def listAccept(self, *args, **kwargs):
|
|
return self.proxyListAccept(*args, **kwargs)
|
|
|
|
def listAcceptToggle(self, *args, **kwargs):
|
|
return self.proxyListAcceptToggle(*args, **kwargs)
|
|
|
|
def listCancel(self, *args, **kwargs):
|
|
return self.proxyListCancel(*args, **kwargs)
|