From 23ded19d5890900b5e6e7e698d6f36fa468cf733 Mon Sep 17 00:00:00 2001 From: Jonathan Pietkiewicz Date: Tue, 25 Jan 2022 21:57:54 -0600 Subject: [PATCH] Change text color to red when the regex is not correct updated everytime the text changes in the lineedit --- manuskript/ui/search.py | 44 ++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/manuskript/ui/search.py b/manuskript/ui/search.py index a1d448fb..c4e2edca 100644 --- a/manuskript/ui/search.py +++ b/manuskript/ui/search.py @@ -1,5 +1,7 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- +import re + from PyQt5.QtCore import Qt, QRect, QEvent, QCoreApplication from PyQt5.QtGui import QPalette, QFontMetrics, QKeySequence from PyQt5.QtWidgets import QWidget, qApp, QListWidgetItem, QStyledItemDelegate, QStyle, QLabel, QToolTip, QShortcut @@ -25,6 +27,7 @@ class search(QWidget, Ui_search): self.setupUi(self) self.searchTextInput.returnPressed.connect(self.search) + self.searchTextInput.textChanged.connect(self.updateSearchFeedback) self.searchMenu = searchMenu() self.btnOptions.setMenu(self.searchMenu) @@ -70,23 +73,20 @@ class search(QWidget, Ui_search): if 0 < self.result.currentRow() < self.result.count(): self.openItem(self.result.currentItem()) + def updateSearchFeedback(self, search_string): + palette = QPalette() + try: + self.compileRegex(search_string) + except Exception as e: + # From https://stackoverflow.com/questions/27432456/python-qlineedit-text-color + palette.setColor(QPalette.Text, Qt.red) + + self.searchTextInput.setPalette(palette) + def prepareRegex(self, searchText): - import re rtn = None try: - flags = re.UNICODE - - if self.searchMenu.caseSensitive() is False: - flags |= re.IGNORECASE - - if self.searchMenu.regex() is False: - searchText = re.escape(searchText) - - if self.searchMenu.matchWords() is True: - # Source: https://stackoverflow.com/a/15863102 - searchText = r'\b' + searchText + r'\b' - - rtn = re.compile(searchText, flags) + rtn = self.compileRegex(searchText) except re.error as e: LOGGER.info("Problem preparing regular expression: " + e.msg) rtn = None @@ -95,6 +95,22 @@ class search(QWidget, Ui_search): rtn = None return rtn + def compileRegex(self, searchText): + # Intentionally throws exceptions for use elsewhere + flags = re.UNICODE + + if self.searchMenu.caseSensitive() is False: + flags |= re.IGNORECASE + + if self.searchMenu.regex() is False: + searchText = re.escape(searchText) + + if self.searchMenu.matchWords() is True: + # Source: https://stackoverflow.com/a/15863102 + searchText = r'\b' + searchText + r'\b' + + return re.compile(searchText, flags) + def search(self): self.result.clear() self.result.setCurrentRow(0)