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:
|
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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
Reference in New Issue
Block a user