Drop code for pre Qt 5.15 versions
This commit is contained in:
@@ -370,17 +370,7 @@ class DocSearch:
|
||||
def _buildPattern(self, search: str) -> str:
|
||||
"""Build the search pattern string."""
|
||||
if self._escape:
|
||||
if CONFIG.verQtValue >= 0x050f00:
|
||||
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
|
||||
search = QRegularExpression.escape(search)
|
||||
if self._words:
|
||||
search = f"(?:^|\\b){search}(?:$|\\b)"
|
||||
return search
|
||||
|
||||
@@ -39,8 +39,8 @@ from time import time
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
pyqtSignal, pyqtSlot, QObject, QPoint, QRegExp, QRegularExpression,
|
||||
QRunnable, Qt, QTimer
|
||||
pyqtSignal, pyqtSlot, QObject, QPoint, QRegularExpression, QRunnable, Qt,
|
||||
QTimer
|
||||
)
|
||||
from PyQt5.QtGui import (
|
||||
QColor, QCursor, QFont, QKeyEvent, QKeySequence, QMouseEvent, QPalette,
|
||||
@@ -2538,32 +2538,18 @@ class GuiDocEditSearch(QFrame):
|
||||
# Getters
|
||||
##
|
||||
|
||||
def getSearchObject(self) -> str | QRegularExpression | QRegExp:
|
||||
def getSearchObject(self) -> str | QRegularExpression:
|
||||
"""Return the current search text either as text or as a regular
|
||||
expression object.
|
||||
"""
|
||||
text = self.searchBox.text()
|
||||
if CONFIG.searchRegEx:
|
||||
# Using the Unicode-capable QRegularExpression class was
|
||||
# only added in Qt 5.13. Otherwise, 5.3 and up supports
|
||||
# only the QRegExp class.
|
||||
if CONFIG.verQtValue >= 0x050d00:
|
||||
rxOpt = QRegularExpression.PatternOption.UseUnicodePropertiesOption
|
||||
if not CONFIG.searchCase:
|
||||
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
|
||||
|
||||
rxOpt = QRegularExpression.PatternOption.UseUnicodePropertiesOption
|
||||
if not CONFIG.searchCase:
|
||||
rxOpt |= QRegularExpression.PatternOption.CaseInsensitiveOption
|
||||
regEx = QRegularExpression(text, rxOpt)
|
||||
self._alertSearchValid(regEx.isValid())
|
||||
return regEx
|
||||
return text
|
||||
|
||||
##
|
||||
|
||||
@@ -209,9 +209,8 @@ class GuiDocViewerPanel(QWidget):
|
||||
|
||||
def _updateTabVisibility(self) -> None:
|
||||
"""Hide class tabs with no content."""
|
||||
if CONFIG.verQtValue >= 0x050f00:
|
||||
for tClass, cTab in self.kwTabs.items():
|
||||
self.mainTabs.setTabVisible(self.idTabs[tClass], cTab.countEntries() > 0)
|
||||
for tClass, cTab in self.kwTabs.items():
|
||||
self.mainTabs.setTabVisible(self.idTabs[tClass], cTab.countEntries() > 0)
|
||||
return
|
||||
|
||||
def _loadAllTags(self) -> None:
|
||||
|
||||
@@ -427,14 +427,7 @@ def testCoreTools_DocSearch(monkeypatch, mockGUI, fncPath, mockRnd, ipsumText):
|
||||
# ========
|
||||
|
||||
# Escape Using QRegularExpression
|
||||
with monkeypatch.context() as mp:
|
||||
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_\]\+"
|
||||
assert search._buildPattern("[A-Za-z0-9_]+") == r"\[A\-Za\-z0\-9_\]\+"
|
||||
|
||||
# Whole Words
|
||||
search.setWholeWords(True)
|
||||
|
||||
@@ -26,7 +26,7 @@ from tools import C, buildTestProject
|
||||
|
||||
from PyQt5.QtGui import QIcon
|
||||
|
||||
from novelwriter import CONFIG, SHARED
|
||||
from novelwriter import SHARED
|
||||
from novelwriter.constants import nwLists
|
||||
from novelwriter.core.item import NWItem
|
||||
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)
|
||||
|
||||
# Check Panel Tab Visibility
|
||||
if CONFIG.verQtValue >= 0x050f00:
|
||||
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["CHARACTER"]) is True
|
||||
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["PLOT"]) 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["OBJECT"]) 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["CHARACTER"]) is True
|
||||
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["PLOT"]) 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["OBJECT"]) is False
|
||||
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["ENTITY"]) is False
|
||||
assert viewPanel.mainTabs.isTabVisible(viewPanel.idTabs["CUSTOM"]) is False
|
||||
|
||||
# Check Character Tab
|
||||
charTab = viewPanel.kwTabs["CHARACTER"]
|
||||
|
||||
Reference in New Issue
Block a user