Source code for editor.widgets.basic.search_edit

from PySide6.QtCore import Qt, QRect, Property
from PySide6.QtGui import QGuiApplication, QCursor, QPixmap, QPainter, QPen, QColor
from PySide6.QtWidgets import QLineEdit
from editor.common.icon_cache import getThemePixmap

[docs]class SearchEdit(QLineEdit): def __init__(self, parent=None): super().__init__(parent) self._pixmapSearch = getThemePixmap('search.png') # self._pixmapClear = getThemePixmap('close.png') self.margin = 0 # self.setContentsMargins(self.margin, 0, self.margin, 0) self.textChanged.connect(self.onTextChange) self.returnPressed.connect(self.clearFocus) self.showClearButton = False self.hoverClearButton = False self.setMouseTracking(True) self.setFocusPolicy(Qt.ClickFocus)
[docs] def resizeEvent(self, event): super().resizeEvent(event) w, h = self.width(), self.height() self.searchRect = QRect(self.margin, 0, h, h) self.closeRect = QRect(w - h - self.margin, 0, h, h) self.searchRect.adjust(2, 2, -2, -2) self.closeRect.adjust(2, 2, -2, -2)
[docs] def onTextChange(self): showClearBtn = bool(self.text()) if self.showClearButton != showClearBtn: self.showClearButton = showClearBtn self.update()
[docs] def keyPressEvent(self, evt): if evt.key() == Qt.Key_Escape: self.clear() self.clearFocus() else: super().keyPressEvent(evt)
[docs] def mouseMoveEvent(self, evt): super().mouseMoveEvent(evt) if not self.showClearButton: return hover = self.closeRect.contains(evt.pos()) if hover == self.hoverClearButton: return if hover: QGuiApplication.setOverrideCursor(Qt.ArrowCursor) else: QGuiApplication.restoreOverrideCursor() self.hoverClearButton = hover
[docs] def mousePressEvent(self, evt): super().mousePressEvent(evt) if self.hoverClearButton: self.clear() QGuiApplication.restoreOverrideCursor()
[docs] def leaveEvent(self, evt): super().leaveEvent(evt) if self.hoverClearButton: QGuiApplication.restoreOverrideCursor()
[docs] def paintEvent(self, event): super().paintEvent(event) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.drawPixmap(self.searchRect, self._pixmapSearch) if self.showClearButton: # painter.drawPixmap(self.closeRect, self._pixmapClear) painter.setPen(QPen(QColor(200, 200, 200), 1.5)) rect = self.closeRect.adjusted(4, 4, -4, -4) painter.drawLine(rect.topLeft(), rect.bottomRight()) painter.drawLine(rect.topRight(), rect.bottomLeft())
@Property(QPixmap)
[docs] def searchIcon(self): return self._pixmapSearch
@searchIcon.setter def searchIcon(self, value): self._pixmapSearch = value self.update()
# @Property(QPixmap) # def clearIcon(self): # return self._pixmapClear # @clearIcon.setter # def clearIcon(self, value): # self._pixmapClear = value # self.update()