Mon, 30 Apr 2012 19:19:17 +0200
Added the capability to search in the recorded log of the log viewer.
# -*- coding: utf-8 -*- # Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing the search box for the shel, terminal and log viewer. """ from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt from PyQt4.QtGui import QWidget from .Ui_SearchWidget import Ui_SearchWidget import UI.PixmapCache class SearchWidget(QWidget, Ui_SearchWidget): """ Class implementing the search box for the shel, terminal and log viewer. @signal searchNext(text, caseSensitive, wholeWord) emitted when the user pressed the next button (string, boolean, boolean) @signal searchPrevious(text, caseSensitive, wholeWord) emitted when the user pressed the previous button (string, boolean, boolean) """ searchNext = pyqtSignal(str, bool, bool) searchPrevious = pyqtSignal(str, bool, bool) def __init__(self, mainWindow, parent=None): """ Constructor @param parent reference to the parent widget (QWidget) """ super().__init__(parent) self.setupUi(self) self.__mainWindow = mainWindow self.__findBackwards = True self.closeButton.setIcon(UI.PixmapCache.getIcon("close.png")) self.findPrevButton.setIcon(UI.PixmapCache.getIcon("1leftarrow.png")) self.findNextButton.setIcon(UI.PixmapCache.getIcon("1rightarrow.png")) self.findHistory = [] self.findtextCombo.lineEdit().returnPressed.connect(self.__findByReturnPressed) @pyqtSlot() def on_closeButton_clicked(self): """ Private slot to close the widget. """ self.close() def keyPressEvent(self, event): """ Protected slot to handle key press events. @param event reference to the key press event (QKeyEvent) """ if event.key() == Qt.Key_Escape: self.__mainWindow.setFocus(Qt.ActiveWindowFocusReason) event.accept() self.close() @pyqtSlot() def on_findNextButton_clicked(self): """ Private slot to find the next occurrence. """ txt = self.findtextCombo.currentText() self.__findBackwards = False # This moves any previous occurrence of this statement to the head # of the list and updates the combobox if txt in self.findHistory: self.findHistory.remove(txt) self.findHistory.insert(0, txt) self.findtextCombo.clear() self.findtextCombo.addItems(self.findHistory) self.searchNext.emit(txt, self.caseCheckBox.isChecked(), self.wordCheckBox.isChecked()) @pyqtSlot() def on_findPrevButton_clicked(self): """ Private slot to find the previous occurrence. """ txt = self.findtextCombo.currentText() self.__findBackwards = True # This moves any previous occurrence of this statement to the head # of the list and updates the combobox if txt in self.findHistory: self.findHistory.remove(txt) self.findHistory.insert(0, txt) self.findtextCombo.clear() self.findtextCombo.addItems(self.findHistory) self.searchPrevious.emit(txt, self.caseCheckBox.isChecked(), self.wordCheckBox.isChecked()) @pyqtSlot(str) def on_findtextCombo_editTextChanged(self, txt): """ Private slot to enable/disable the find buttons. @param txt text of the combobox (string) """ self.__setSearchButtons(txt != "") def __setSearchButtons(self, enabled): """ Private slot to set the state of the search buttons. @param enabled flag indicating the state (boolean) """ self.findPrevButton.setEnabled(enabled) self.findNextButton.setEnabled(enabled) def __findByReturnPressed(self): """ Private slot to handle the returnPressed signal of the findtext combobox. """ if self.__findBackwards: self.on_findPrevButton_clicked() else: self.on_findNextButton_clicked() def showFind(self, txt=""): """ Public method to display this widget. @param txt text to be shown in the combo (string) """ self.findtextCombo.clear() self.findtextCombo.addItems(self.findHistory) self.findtextCombo.setEditText(txt) self.findtextCombo.setFocus() self.__setSearchButtons(txt != "") self.show()