Drop code for pre Qt 5.15 versions

This commit is contained in:
Veronica Berglyd Olsen
2024-04-16 23:45:59 +02:00
parent 1733938eb4
commit ac7b0bc9a2
5 changed files with 21 additions and 54 deletions
+1 -11
View File
@@ -370,17 +370,7 @@ class DocSearch:
def _buildPattern(self, search: str) -> str: def _buildPattern(self, search: str) -> str:
"""Build the search pattern string.""" """Build the search pattern string."""
if self._escape: if self._escape:
if CONFIG.verQtValue >= 0x050f00: search = QRegularExpression.escape(search)
search = QRegularExpression.escape(search)
else:
# For older Qt versions, we escape manually
escaped = ""
for c in search:
if c.isalnum() or c == "_":
escaped += c
else:
escaped += f"\\{c}"
search = escaped
if self._words: if self._words:
search = f"(?:^|\\b){search}(?:$|\\b)" search = f"(?:^|\\b){search}(?:$|\\b)"
return search return search
+9 -23
View File
@@ -39,8 +39,8 @@ from time import time
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import ( from PyQt5.QtCore import (
pyqtSignal, pyqtSlot, QObject, QPoint, QRegExp, QRegularExpression, pyqtSignal, pyqtSlot, QObject, QPoint, QRegularExpression, QRunnable, Qt,
QRunnable, Qt, QTimer QTimer
) )
from PyQt5.QtGui import ( from PyQt5.QtGui import (
QColor, QCursor, QFont, QKeyEvent, QKeySequence, QMouseEvent, QPalette, QColor, QCursor, QFont, QKeyEvent, QKeySequence, QMouseEvent, QPalette,
@@ -2538,32 +2538,18 @@ class GuiDocEditSearch(QFrame):
# Getters # Getters
## ##
def getSearchObject(self) -> str | QRegularExpression | QRegExp: def getSearchObject(self) -> str | QRegularExpression:
"""Return the current search text either as text or as a regular """Return the current search text either as text or as a regular
expression object. expression object.
""" """
text = self.searchBox.text() text = self.searchBox.text()
if CONFIG.searchRegEx: if CONFIG.searchRegEx:
# Using the Unicode-capable QRegularExpression class was rxOpt = QRegularExpression.PatternOption.UseUnicodePropertiesOption
# only added in Qt 5.13. Otherwise, 5.3 and up supports if not CONFIG.searchCase:
# only the QRegExp class. rxOpt |= QRegularExpression.PatternOption.CaseInsensitiveOption
if CONFIG.verQtValue >= 0x050d00: regEx = QRegularExpression(text, rxOpt)
rxOpt = QRegularExpression.PatternOption.UseUnicodePropertiesOption self._alertSearchValid(regEx.isValid())
if not CONFIG.searchCase: return regEx
rxOpt |= QRegularExpression.PatternOption.CaseInsensitiveOption
regEx = QRegularExpression(text, rxOpt)
self._alertSearchValid(regEx.isValid())
return regEx
else: # pragma: no cover
# >= 50300 to < 51300
if CONFIG.searchCase:
rxOpt = Qt.CaseSensitivity.CaseSensitive
else:
rxOpt = Qt.CaseSensitivity.CaseInsensitive
regEx = QRegExp(text, rxOpt)
self._alertSearchValid(regEx.isValid())
return regEx
return text return text
## ##
+2 -3
View File
@@ -209,9 +209,8 @@ class GuiDocViewerPanel(QWidget):
def _updateTabVisibility(self) -> None: def _updateTabVisibility(self) -> None:
"""Hide class tabs with no content.""" """Hide class tabs with no content."""
if CONFIG.verQtValue >= 0x050f00: for tClass, cTab in self.kwTabs.items():
for tClass, cTab in self.kwTabs.items(): self.mainTabs.setTabVisible(self.idTabs[tClass], cTab.countEntries() > 0)
self.mainTabs.setTabVisible(self.idTabs[tClass], cTab.countEntries() > 0)
return return
def _loadAllTags(self) -> None: def _loadAllTags(self) -> None:
+1 -8
View File
@@ -427,14 +427,7 @@ def testCoreTools_DocSearch(monkeypatch, mockGUI, fncPath, mockRnd, ipsumText):
# ======== # ========
# Escape Using QRegularExpression # Escape Using QRegularExpression
with monkeypatch.context() as mp: assert search._buildPattern("[A-Za-z0-9_]+") == r"\[A\-Za\-z0\-9_\]\+"
mp.setattr(CONFIG, "verQtValue", 0x050f00)
assert search._buildPattern("[A-Za-z0-9_]+") == r"\[A\-Za\-z0\-9_\]\+"
# Escape Using Custom Implementation
with monkeypatch.context() as mp:
mp.setattr(CONFIG, "verQtValue", 0x050d00)
assert search._buildPattern("[A-Za-z0-9_]+") == r"\[A\-Za\-z0\-9_\]\+"
# Whole Words # Whole Words
search.setWholeWords(True) search.setWholeWords(True)
+8 -9
View File
@@ -26,7 +26,7 @@ from tools import C, buildTestProject
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from novelwriter import CONFIG, SHARED from novelwriter import SHARED
from novelwriter.constants import nwLists from novelwriter.constants import nwLists
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.dialogs.editlabel import GuiEditLabel
@@ -151,14 +151,13 @@ def testGuiViewerPanel_Tags(qtbot, monkeypatch, caplog, nwGUI, projPath, mockRnd
nwGUI.docEditor._processTag(cursor, create=True) nwGUI.docEditor._processTag(cursor, create=True)
# Check Panel Tab Visibility # Check Panel Tab Visibility
if CONFIG.verQtValue >= 0x050f00: assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["CHARACTER"]) is True
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["CHARACTER"]) is True assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["PLOT"]) is False
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["PLOT"]) is False assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["WORLD"]) is False
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["WORLD"]) is False assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["TIMELINE"]) is False
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["TIMELINE"]) is False assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["OBJECT"]) is False
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["OBJECT"]) is False assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["ENTITY"]) is False
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["ENTITY"]) is False assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["CUSTOM"]) is False
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["CUSTOM"]) is False
# Check Character Tab # Check Character Tab
charTab = viewPanel.kwTabs["CHARACTER"] charTab = viewPanel.kwTabs["CHARACTER"]