class SearchScreen(QtGui.QWidget): def __init__(self, messages, width, *args): super().__init__(*args) self.setMaximumSize(width, 40) self.setMinimumSize(width, 40) self._messages = messages self.search_text = LineEdit(self) self.search_text.setGeometry(0, 0, width - 160, 40) self.search_button = ClickableLabel(self) self.search_button.setGeometry(width - 160, 0, 40, 40) pixmap = QtGui.QPixmap() pixmap.load(util.curr_directory() + '/images/search.png') self.search_button.setScaledContents(False) self.search_button.setAlignment(QtCore.Qt.AlignCenter) self.search_button.setPixmap(pixmap) self.connect(self.search_button, QtCore.SIGNAL('clicked()'), self.search) font = QtGui.QFont() font.setPointSize(32) font.setBold(True) self.prev_button = QtGui.QPushButton(self) self.prev_button.setGeometry(width - 120, 0, 40, 40) self.prev_button.clicked.connect(self.prev) self.prev_button.setText('\u25B2') self.next_button = QtGui.QPushButton(self) self.next_button.setGeometry(width - 80, 0, 40, 40) self.next_button.clicked.connect(self.next) self.next_button.setText('\u25BC') self.close_button = QtGui.QPushButton(self) self.close_button.setGeometry(width - 40, 0, 40, 40) self.close_button.clicked.connect(self.close) self.close_button.setText('×') self.close_button.setFont(font) font.setPointSize(18) self.next_button.setFont(font) self.prev_button.setFont(font) self.retranslateUi() def retranslateUi(self): self.search_text.setPlaceholderText( QtGui.QApplication.translate("MainWindow", "Search", None, QtGui.QApplication.UnicodeUTF8)) def show(self): super().show() self.search_text.setFocus() def search(self): Profile.get_instance().update() text = self.search_text.text() friend = Profile.get_instance().get_curr_friend() if text and friend and util.is_re_valid(text): index = friend.search_string(text) self.load_messages(index) def prev(self): friend = Profile.get_instance().get_curr_friend() if friend is not None: index = friend.search_prev() self.load_messages(index) def next(self): friend = Profile.get_instance().get_curr_friend() text = self.search_text.text() if friend is not None: index = friend.search_next() if index is not None: count = self._messages.count() index += count item = self._messages.item(index) self._messages.scrollToItem(item) self._messages.itemWidget(item).select_text(text) else: self.not_found(text) def load_messages(self, index): text = self.search_text.text() if index is not None: profile = Profile.get_instance() count = self._messages.count() while count + index < 0: profile.load_history() count = self._messages.count() index += count item = self._messages.item(index) self._messages.scrollToItem(item) self._messages.itemWidget(item).select_text(text) else: self.not_found(text) def closeEvent(self, *args): Profile.get_instance().update() self._messages.setGeometry(0, 0, self._messages.width(), self._messages.height() + 40) super().closeEvent(*args) @staticmethod def not_found(text): mbox = QtGui.QMessageBox() mbox_text = QtGui.QApplication.translate( "MainWindow", 'Text "{}" was not found', None, QtGui.QApplication.UnicodeUTF8) mbox.setText(mbox_text.format(text)) mbox.setWindowTitle( QtGui.QApplication.translate("MainWindow", 'Not found', None, QtGui.QApplication.UnicodeUTF8)) mbox.exec_()
class SearchScreen(QtGui.QWidget): def __init__(self, messages, width, *args): super().__init__(*args) self.setMaximumSize(width, 40) self.setMinimumSize(width, 40) self._messages = messages self.search_text = LineEdit(self) self.search_text.setGeometry(0, 0, width - 160, 40) self.search_button = ClickableLabel(self) self.search_button.setGeometry(width - 160, 0, 40, 40) pixmap = QtGui.QPixmap() pixmap.load(util.curr_directory() + '/images/search.png') self.search_button.setScaledContents(False) self.search_button.setAlignment(QtCore.Qt.AlignCenter) self.search_button.setPixmap(pixmap) self.connect(self.search_button, QtCore.SIGNAL('clicked()'), self.search) font = QtGui.QFont() font.setPointSize(32) font.setBold(True) self.prev_button = QtGui.QPushButton(self) self.prev_button.setGeometry(width - 120, 0, 40, 40) self.prev_button.clicked.connect(self.prev) self.prev_button.setText('\u25B2') self.next_button = QtGui.QPushButton(self) self.next_button.setGeometry(width - 80, 0, 40, 40) self.next_button.clicked.connect(self.next) self.next_button.setText('\u25BC') self.close_button = QtGui.QPushButton(self) self.close_button.setGeometry(width - 40, 0, 40, 40) self.close_button.clicked.connect(self.close) self.close_button.setText('×') self.close_button.setFont(font) font.setPointSize(18) self.next_button.setFont(font) self.prev_button.setFont(font) self.retranslateUi() def retranslateUi(self): self.search_text.setPlaceholderText(QtGui.QApplication.translate("MainWindow", "Search", None, QtGui.QApplication.UnicodeUTF8)) def show(self): super().show() self.search_text.setFocus() def search(self): Profile.get_instance().update() text = self.search_text.text() friend = Profile.get_instance().get_curr_friend() if text and friend and util.is_re_valid(text): index = friend.search_string(text) self.load_messages(index) def prev(self): friend = Profile.get_instance().get_curr_friend() if friend is not None: index = friend.search_prev() self.load_messages(index) def next(self): friend = Profile.get_instance().get_curr_friend() text = self.search_text.text() if friend is not None: index = friend.search_next() if index is not None: count = self._messages.count() index += count item = self._messages.item(index) self._messages.scrollToItem(item) self._messages.itemWidget(item).select_text(text) else: self.not_found(text) def load_messages(self, index): text = self.search_text.text() if index is not None: profile = Profile.get_instance() count = self._messages.count() while count + index < 0: profile.load_history() count = self._messages.count() index += count item = self._messages.item(index) self._messages.scrollToItem(item) self._messages.itemWidget(item).select_text(text) else: self.not_found(text) def closeEvent(self, *args): Profile.get_instance().update() self._messages.setGeometry(0, 0, self._messages.width(), self._messages.height() + 40) super().closeEvent(*args) @staticmethod def not_found(text): mbox = QtGui.QMessageBox() mbox_text = QtGui.QApplication.translate("MainWindow", 'Text "{}" was not found', None, QtGui.QApplication.UnicodeUTF8) mbox.setText(mbox_text.format(text)) mbox.setWindowTitle(QtGui.QApplication.translate("MainWindow", 'Not found', None, QtGui.QApplication.UnicodeUTF8)) mbox.exec_()