Switch app code to PyQt6

This commit is contained in:
Veronica Berglyd Olsen
2025-01-11 20:15:32 +01:00
parent 3ec210df9b
commit 40c4e74d48
64 changed files with 218 additions and 223 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ If a qtbase_xx.qm file already exists, do not add a translation for the
entries generated from this file. entries generated from this file.
""" """
from PyQt5.QtCore import QT_TRANSLATE_NOOP from PyQt6.QtCore import QT_TRANSLATE_NOOP
# QDialogButtonBox # QDialogButtonBox
# ================ # ================
+4 -4
View File
@@ -7,11 +7,11 @@ import os
import sys import sys
try: try:
import PyQt5.QtWidgets # noqa: F401 import PyQt6.QtCore # noqa: F401
import PyQt5.QtGui # noqa: F401 import PyQt6.QtGui # noqa: F401
import PyQt5.QtCore # noqa: F401 import PyQt6.QtWidgets # noqa: F401
except Exception: except Exception:
print("ERROR: Failed to load dependency PyQt5") print("ERROR: Failed to load dependency PyQt6")
sys.exit(1) sys.exit(1)
os.curdir = os.path.abspath(os.path.dirname(__file__)) os.curdir = os.path.abspath(os.path.dirname(__file__))
+16 -16
View File
@@ -29,7 +29,7 @@ import sys
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtWidgets import QApplication, QErrorMessage from PyQt6.QtWidgets import QApplication, QErrorMessage
from novelwriter.config import Config from novelwriter.config import Config
from novelwriter.error import exceptionHandler from novelwriter.error import exceptionHandler
@@ -201,21 +201,21 @@ def main(sysArgs: list | None = None) -> GuiMain | None:
# Check Packages and Versions # Check Packages and Versions
errorData = [] errorData = []
errorCode = 0 errorCode = 0
if sys.hexversion < 0x030a00f0: # if sys.hexversion < 0x030a00f0:
errorData.append( # errorData.append(
"At least Python 3.10 is required, found %s" % CONFIG.verPyString # "At least Python 3.10 is required, found %s" % CONFIG.verPyString
) # )
errorCode |= 0x04 # errorCode |= 0x04
if CONFIG.verQtValue < 0x050f00: # if CONFIG.verQtValue < 0x060000:
errorData.append( # errorData.append(
"At least Qt5 version 5.15.0 is required, found %s" % CONFIG.verQtString # "At least Qt6 version 6.0 is required, found %s" % CONFIG.verQtString
) # )
errorCode |= 0x08 # errorCode |= 0x08
if CONFIG.verPyQtValue < 0x050f00: # if CONFIG.verPyQtValue < 0x060000:
errorData.append( # errorData.append(
"At least PyQt5 version 5.15.0 is required, found %s" % CONFIG.verPyQtString # "At least PyQt6 version 6.0 is required, found %s" % CONFIG.verPyQtString
) # )
errorCode |= 0x10 # errorCode |= 0x10
if errorData: if errorData:
errApp = QApplication([]) errApp = QApplication([])
+4 -5
View File
@@ -37,8 +37,8 @@ from typing import Any, Literal, TypeGuard, TypeVar
from urllib.parse import urljoin from urllib.parse import urljoin
from urllib.request import pathname2url from urllib.request import pathname2url
from PyQt5.QtCore import QCoreApplication, QMimeData, QUrl from PyQt6.QtCore import QCoreApplication, QMimeData, QUrl
from PyQt5.QtGui import QColor, QDesktopServices, QFont, QFontDatabase, QFontInfo from PyQt6.QtGui import QColor, QDesktopServices, QFont, QFontDatabase, QFontInfo
from novelwriter.constants import nwConst, nwLabels, nwUnicode, trConst from novelwriter.constants import nwConst, nwLabels, nwUnicode, trConst
from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType
@@ -440,11 +440,10 @@ def fontMatcher(font: QFont) -> QFont:
info = QFontInfo(font) info = QFontInfo(font)
if (famRequest := font.family()) != (famActual := info.family()): if (famRequest := font.family()) != (famActual := info.family()):
logger.warning("Font mismatch: Requested '%s', but got '%s'", famRequest, famActual) logger.warning("Font mismatch: Requested '%s', but got '%s'", famRequest, famActual)
db = QFontDatabase() if famRequest in QFontDatabase.families():
if famRequest in db.families():
styleRequest, sizeRequest = font.styleName(), font.pointSize() styleRequest, sizeRequest = font.styleName(), font.pointSize()
logger.info("Lookup: %s, %s, %d pt", famRequest, styleRequest, sizeRequest) logger.info("Lookup: %s, %s, %d pt", famRequest, styleRequest, sizeRequest)
temp = db.font(famRequest, styleRequest, sizeRequest) temp = QFontDatabase.font(famRequest, styleRequest, sizeRequest)
temp.setPointSize(sizeRequest) # Make sure it isn't changed temp.setPointSize(sizeRequest) # Make sure it isn't changed
famFound, styleFound, sizeFound = temp.family(), temp.styleName(), temp.pointSize() famFound, styleFound, sizeFound = temp.family(), temp.styleName(), temp.pointSize()
if famFound == famRequest: if famFound == famRequest:
+8 -10
View File
@@ -33,12 +33,12 @@ from datetime import datetime
from pathlib import Path from pathlib import Path
from time import time from time import time
from PyQt5.QtCore import ( from PyQt6.QtCore import (
PYQT_VERSION, PYQT_VERSION_STR, QT_VERSION, QT_VERSION_STR, QLibraryInfo, PYQT_VERSION, PYQT_VERSION_STR, QT_VERSION, QT_VERSION_STR, QLibraryInfo,
QLocale, QStandardPaths, QSysInfo, QTranslator QLocale, QStandardPaths, QSysInfo, QTranslator
) )
from PyQt5.QtGui import QFont, QFontDatabase from PyQt6.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import QApplication from PyQt6.QtWidgets import QApplication
from novelwriter.common import ( from novelwriter.common import (
NWConfigParser, checkInt, checkPath, describeFont, fontMatcher, NWConfigParser, checkInt, checkPath, describeFont, fontMatcher,
@@ -91,7 +91,7 @@ class Config:
# Localisation # Localisation
# Note that these paths must be strings # Note that these paths must be strings
self._nwLangPath = self._appPath / "assets" / "i18n" self._nwLangPath = self._appPath / "assets" / "i18n"
self._qtLangPath = QLibraryInfo.location(QLibraryInfo.LibraryLocation.TranslationsPath) self._qtLangPath = QLibraryInfo.path(QLibraryInfo.LibraryPath.TranslationsPath)
hasLocale = (self._nwLangPath / f"nw_{QLocale.system().name()}.qm").exists() hasLocale = (self._nwLangPath / f"nw_{QLocale.system().name()}.qm").exists()
self._qLocale = QLocale.system() if hasLocale else QLocale("en_GB") self._qLocale = QLocale.system() if hasLocale else QLocale("en_GB")
@@ -385,13 +385,12 @@ class Config:
self.guiFont = fontMatcher(font) self.guiFont = fontMatcher(font)
else: else:
font = QFont() font = QFont()
fontDB = QFontDatabase() if self.osWindows and "Arial" in QFontDatabase.families():
if self.osWindows and "Arial" in fontDB.families():
# On Windows we default to Arial if possible # On Windows we default to Arial if possible
font.setFamily("Arial") font.setFamily("Arial")
font.setPointSize(10) font.setPointSize(10)
else: else:
font = fontDB.systemFont(QFontDatabase.SystemFont.GeneralFont) font = QFontDatabase.systemFont(QFontDatabase.SystemFont.GeneralFont)
self.guiFont = fontMatcher(font) self.guiFont = fontMatcher(font)
logger.debug("GUI font set to: %s", describeFont(font)) logger.debug("GUI font set to: %s", describeFont(font))
QApplication.setFont(self.guiFont) QApplication.setFont(self.guiFont)
@@ -408,8 +407,7 @@ class Config:
font.fromString(value) font.fromString(value)
self.textFont = fontMatcher(font) self.textFont = fontMatcher(font)
else: else:
fontDB = QFontDatabase() fontFam = QFontDatabase.families()
fontFam = fontDB.families()
if self.osWindows and "Arial" in fontFam: if self.osWindows and "Arial" in fontFam:
font = QFont() font = QFont()
font.setFamily("Arial") font.setFamily("Arial")
@@ -419,7 +417,7 @@ class Config:
font.setFamily("Helvetica") font.setFamily("Helvetica")
font.setPointSize(12) font.setPointSize(12)
else: else:
font = fontDB.systemFont(QFontDatabase.SystemFont.GeneralFont) font = QFontDatabase.systemFont(QFontDatabase.SystemFont.GeneralFont)
self.textFont = fontMatcher(font) self.textFont = fontMatcher(font)
logger.debug("Text font set to: %s", describeFont(self.textFont)) logger.debug("Text font set to: %s", describeFont(self.textFont))
return return
+1 -1
View File
@@ -23,7 +23,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtCore import QT_TRANSLATE_NOOP, QCoreApplication from PyQt6.QtCore import QT_TRANSLATE_NOOP, QCoreApplication
from novelwriter.enum import ( from novelwriter.enum import (
nwBuildFmt, nwComment, nwItemClass, nwItemLayout, nwOutline, nwStatusShape nwBuildFmt, nwComment, nwItemClass, nwItemLayout, nwOutline, nwStatusShape
+1 -1
View File
@@ -32,7 +32,7 @@ from collections.abc import Iterable
from enum import Enum from enum import Enum
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import QT_TRANSLATE_NOOP, QCoreApplication from PyQt6.QtCore import QT_TRANSLATE_NOOP, QCoreApplication
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.common import checkUuid, isHandle, jsonEncode from novelwriter.common import checkUuid, isHandle, jsonEncode
+1 -1
View File
@@ -35,7 +35,7 @@ from functools import partial
from pathlib import Path from pathlib import Path
from zipfile import ZipFile, is_zipfile from zipfile import ZipFile, is_zipfile
from PyQt5.QtCore import QCoreApplication from PyQt6.QtCore import QCoreApplication
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import isHandle, minmax, simplified from novelwriter.common import isHandle, minmax, simplified
+1 -1
View File
@@ -28,7 +28,7 @@ import logging
from collections.abc import Iterable from collections.abc import Iterable
from pathlib import Path from pathlib import Path
from PyQt5.QtGui import QFont from PyQt6.QtGui import QFont
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
+1 -1
View File
@@ -27,7 +27,7 @@ import logging
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from PyQt5.QtGui import QFont, QIcon from PyQt6.QtGui import QFont, QIcon
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import ( from novelwriter.common import (
+2 -2
View File
@@ -28,8 +28,8 @@ import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import QAbstractItemModel, QMimeData, QModelIndex, Qt from PyQt6.QtCore import QAbstractItemModel, QMimeData, QModelIndex, Qt
from PyQt5.QtGui import QFont, QIcon from PyQt6.QtGui import QFont, QIcon
from novelwriter.common import decodeMimeHandles, encodeMimeHandles, minmax from novelwriter.common import decodeMimeHandles, encodeMimeHandles, minmax
from novelwriter.constants import nwConst from novelwriter.constants import nwConst
+1 -1
View File
@@ -31,7 +31,7 @@ from functools import partial
from pathlib import Path from pathlib import Path
from time import time from time import time
from PyQt5.QtCore import QCoreApplication from PyQt6.QtCore import QCoreApplication
from novelwriter import CONFIG, SHARED, __hexversion__, __version__ from novelwriter import CONFIG, SHARED, __hexversion__, __version__
from novelwriter.common import ( from novelwriter.common import (
+1 -1
View File
@@ -31,7 +31,7 @@ from collections.abc import Iterator
from pathlib import Path from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import QLocale from PyQt6.QtCore import QLocale
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
from novelwriter.error import logException from novelwriter.error import logException
+2 -2
View File
@@ -31,8 +31,8 @@ import random
from collections.abc import Iterable from collections.abc import Iterable
from typing import Literal, TypeGuard from typing import Literal, TypeGuard
from PyQt5.QtCore import QPointF, Qt from PyQt6.QtCore import QPointF, Qt
from PyQt5.QtGui import QColor, QIcon, QPainter, QPainterPath, QPixmap, QPolygonF from PyQt6.QtGui import QColor, QIcon, QPainter, QPainterPath, QPixmap, QPolygonF
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.common import simplified from novelwriter.common import simplified
+1 -1
View File
@@ -31,7 +31,7 @@ from collections.abc import Iterable, Iterator
from pathlib import Path from pathlib import Path
from typing import TYPE_CHECKING, Literal, overload from typing import TYPE_CHECKING, Literal, overload
from PyQt5.QtCore import QModelIndex from PyQt6.QtCore import QModelIndex
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.constants import nwFiles, nwLabels, trConst from novelwriter.constants import nwFiles, nwLabels, trConst
+2 -2
View File
@@ -25,8 +25,8 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtGui import QCloseEvent, QColor from PyQt6.QtGui import QCloseEvent, QColor
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QDialogButtonBox, QHBoxLayout, QLabel, QTextBrowser, QVBoxLayout, QWidget QDialogButtonBox, QHBoxLayout, QLabel, QTextBrowser, QVBoxLayout, QWidget
) )
+2 -2
View File
@@ -26,8 +26,8 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import Qt, pyqtSlot from PyQt6.QtCore import Qt, pyqtSlot
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QDialogButtonBox, QGridLayout, QLabel, QListWidget, QAbstractItemView, QDialogButtonBox, QGridLayout, QLabel, QListWidget,
QListWidgetItem, QVBoxLayout, QWidget QListWidgetItem, QVBoxLayout, QWidget
) )
+2 -2
View File
@@ -26,8 +26,8 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import pyqtSlot from PyQt6.QtCore import pyqtSlot
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QComboBox, QDialogButtonBox, QGridLayout, QLabel, QAbstractItemView, QComboBox, QDialogButtonBox, QGridLayout, QLabel,
QListWidget, QListWidgetItem, QVBoxLayout, QWidget QListWidget, QListWidgetItem, QVBoxLayout, QWidget
) )
+1 -1
View File
@@ -25,7 +25,7 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget from PyQt6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit, QVBoxLayout, QWidget
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.extensions.modified import NDialog from novelwriter.extensions.modified import NDialog
+3 -3
View File
@@ -26,9 +26,9 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QKeyEvent, QKeySequence from PyQt6.QtGui import QCloseEvent, QKeyEvent, QKeySequence
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QCompleter, QDialogButtonBox, QFileDialog, QHBoxLayout, QLineEdit, QCompleter, QDialogButtonBox, QFileDialog, QHBoxLayout, QLineEdit,
QPushButton, QVBoxLayout, QWidget QPushButton, QVBoxLayout, QWidget
) )
+3 -3
View File
@@ -29,9 +29,9 @@ import logging
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QColor from PyQt6.QtGui import QCloseEvent, QColor
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QApplication, QColorDialog, QDialogButtonBox, QAbstractItemView, QApplication, QColorDialog, QDialogButtonBox,
QFileDialog, QGridLayout, QHBoxLayout, QLineEdit, QMenu, QStackedWidget, QFileDialog, QGridLayout, QHBoxLayout, QLineEdit, QMenu, QStackedWidget,
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
+3 -3
View File
@@ -25,9 +25,9 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import QSize, pyqtSlot from PyQt6.QtCore import QSize, pyqtSlot
from PyQt5.QtGui import QFontMetrics from PyQt6.QtGui import QFontMetrics
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QDialogButtonBox, QFrame, QHBoxLayout, QLabel, QListWidget, QDialogButtonBox, QFrame, QHBoxLayout, QLabel, QListWidget,
QListWidgetItem, QVBoxLayout, QWidget QListWidgetItem, QVBoxLayout, QWidget
) )
+3 -3
View File
@@ -27,9 +27,9 @@ import logging
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QApplication, QDialogButtonBox, QFileDialog, QAbstractItemView, QApplication, QDialogButtonBox, QFileDialog,
QHBoxLayout, QLineEdit, QListWidget, QVBoxLayout, QWidget QHBoxLayout, QLineEdit, QListWidget, QVBoxLayout, QWidget
) )
+5 -5
View File
@@ -29,9 +29,9 @@ import sys
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import Qt, pyqtSlot from PyQt6.QtCore import Qt, pyqtSlot
from PyQt5.QtGui import QFont, QFontDatabase from PyQt6.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QDialog, QDialogButtonBox, QGridLayout, QLabel, QApplication, QDialog, QDialogButtonBox, QGridLayout, QLabel,
QPlainTextEdit, QStyle, QWidget QPlainTextEdit, QStyle, QWidget
) )
@@ -118,7 +118,7 @@ class NWErrorMessage(QDialog):
""" """
from traceback import format_tb from traceback import format_tb
from PyQt5.QtCore import PYQT_VERSION_STR, QT_VERSION_STR, QSysInfo from PyQt6.QtCore import PYQT_VERSION_STR, QT_VERSION_STR, QSysInfo
from novelwriter import __version__ from novelwriter import __version__
from novelwriter.constants import nwConst from novelwriter.constants import nwConst
@@ -174,7 +174,7 @@ def exceptionHandler(exType: type, exValue: BaseException, exTrace: TracebackTyp
"""Function to catch unhandled global exceptions.""" """Function to catch unhandled global exceptions."""
from traceback import print_tb from traceback import print_tb
from PyQt5.QtWidgets import QApplication from PyQt6.QtWidgets import QApplication
logger.critical("%s: %s", exType.__name__, str(exValue)) logger.critical("%s: %s", exType.__name__, str(exValue))
print_tb(exTrace) print_tb(exTrace)
+2 -2
View File
@@ -27,8 +27,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtGui import QColor, QFont, QPalette, QPixmap from PyQt6.QtGui import QColor, QFont, QPalette, QPixmap
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractButton, QFrame, QHBoxLayout, QLabel, QLayout, QScrollArea, QAbstractButton, QFrame, QHBoxLayout, QLabel, QLayout, QScrollArea,
QVBoxLayout, QWidget QVBoxLayout, QWidget
) )
+3 -3
View File
@@ -24,9 +24,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtCore import QEvent, QObject from PyQt6.QtCore import QEvent, QObject
from PyQt5.QtGui import QStatusTipEvent, QWheelEvent from PyQt6.QtGui import QStatusTipEvent, QWheelEvent
from PyQt5.QtWidgets import QWidget from PyQt6.QtWidgets import QWidget
class WheelEventFilter(QObject): class WheelEventFilter(QObject):
+3 -3
View File
@@ -30,9 +30,9 @@ from __future__ import annotations
from enum import Enum from enum import Enum
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import QSize, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QSize, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QMouseEvent, QWheelEvent from PyQt6.QtGui import QMouseEvent, QWheelEvent
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QComboBox, QDialog, QDoubleSpinBox, QLabel, QSpinBox, QApplication, QComboBox, QDialog, QDoubleSpinBox, QLabel, QSpinBox,
QToolButton, QWidget QToolButton, QWidget
) )
+2 -2
View File
@@ -25,8 +25,8 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import pyqtSignal, pyqtSlot from PyQt6.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QComboBox, QWidget from PyQt6.QtWidgets import QComboBox, QWidget
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.constants import nwLabels from novelwriter.constants import nwLabels
+5 -5
View File
@@ -25,11 +25,11 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtCore import QPoint, QRectF, QSize, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QPoint, QRectF, QSize, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QColor, QPainter, QPaintEvent, QPolygon from PyQt6.QtGui import QAction, QColor, QPainter, QPaintEvent, QPolygon
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractButton, QAction, QButtonGroup, QLabel, QStyle, QAbstractButton, QButtonGroup, QLabel, QStyle, QStyleOptionToolButton,
QStyleOptionToolButton, QToolBar, QToolButton, QWidget QToolBar, QToolButton, QWidget
) )
from novelwriter.types import ( from novelwriter.types import (
+3 -3
View File
@@ -26,9 +26,9 @@ from __future__ import annotations
from math import ceil from math import ceil
from PyQt5.QtCore import QRect from PyQt6.QtCore import QRect
from PyQt5.QtGui import QBrush, QColor, QPainter, QPaintEvent, QPen from PyQt6.QtGui import QBrush, QColor, QPainter, QPaintEvent, QPen
from PyQt5.QtWidgets import QProgressBar, QWidget from PyQt6.QtWidgets import QProgressBar, QWidget
from novelwriter.types import ( from novelwriter.types import (
QtAlignCenter, QtPaintAntiAlias, QtRoundCap, QtSizeFixed, QtSolidLine, QtAlignCenter, QtPaintAntiAlias, QtRoundCap, QtSizeFixed, QtSolidLine,
+2 -2
View File
@@ -25,8 +25,8 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtGui import QColor, QPainter, QPaintEvent from PyQt6.QtGui import QColor, QPainter, QPaintEvent
from PyQt5.QtWidgets import QAbstractButton, QWidget from PyQt6.QtWidgets import QAbstractButton, QWidget
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.enum import nwTrinary from novelwriter.enum import nwTrinary
+8 -6
View File
@@ -23,13 +23,15 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtCore import QEvent, QPropertyAnimation, Qt, pyqtProperty from PyQt6.QtCore import QByteArray, QPropertyAnimation, Qt
from PyQt5.QtGui import QMouseEvent, QPainter, QPaintEvent, QResizeEvent from PyQt6.QtGui import QEnterEvent, QMouseEvent, QPainter, QPaintEvent, QResizeEvent
from PyQt5.QtWidgets import QAbstractButton, QWidget from PyQt6.QtWidgets import QAbstractButton, QWidget
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.types import QtMouseLeft, QtNoPen, QtPaintAntiAlias, QtSizeFixed from novelwriter.types import QtMouseLeft, QtNoPen, QtPaintAntiAlias, QtSizeFixed
OFFSET = QByteArray(b"offset") # type: ignore
class NSwitch(QAbstractButton): class NSwitch(QAbstractButton):
@@ -57,7 +59,7 @@ class NSwitch(QAbstractButton):
# Properties # Properties
## ##
@pyqtProperty(int) # type: ignore @property
def offset(self) -> int: # type: ignore def offset(self) -> int: # type: ignore
return self._offset return self._offset
@@ -121,14 +123,14 @@ class NSwitch(QAbstractButton):
"""Animate the switch on mouse release.""" """Animate the switch on mouse release."""
super().mouseReleaseEvent(event) super().mouseReleaseEvent(event)
if event.button() == QtMouseLeft: if event.button() == QtMouseLeft:
anim = QPropertyAnimation(self, b"offset", self) anim = QPropertyAnimation(self, OFFSET, self)
anim.setDuration(120) anim.setDuration(120)
anim.setStartValue(self._offset) anim.setStartValue(self._offset)
anim.setEndValue((self._xW - self._xR) if self.isChecked() else self._xR) anim.setEndValue((self._xW - self._xR) if self.isChecked() else self._xR)
anim.start() anim.start()
return return
def enterEvent(self, event: QEvent) -> None: def enterEvent(self, event: QEnterEvent) -> None:
"""Change the cursor when hovering the button.""" """Change the cursor when hovering the button."""
self.setCursor(Qt.CursorShape.PointingHandCursor) self.setCursor(Qt.CursorShape.PointingHandCursor)
super().enterEvent(event) super().enterEvent(event)
+3 -3
View File
@@ -23,9 +23,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtCore import pyqtSignal from PyQt6.QtCore import pyqtSignal
from PyQt5.QtGui import QIcon from PyQt6.QtGui import QIcon
from PyQt5.QtWidgets import QGridLayout, QLabel, QScrollArea, QWidget from PyQt6.QtWidgets import QGridLayout, QLabel, QScrollArea, QWidget
from novelwriter.extensions.switch import NSwitch from novelwriter.extensions.switch import NSwitch
from novelwriter.types import ( from novelwriter.types import (
+3 -3
View File
@@ -31,9 +31,9 @@ from time import sleep
from urllib.error import HTTPError from urllib.error import HTTPError
from urllib.request import Request, urlopen from urllib.request import Request, urlopen
from PyQt5.QtCore import QObject, QRunnable, QUrl, pyqtSignal, pyqtSlot from PyQt6.QtCore import QObject, QRunnable, QUrl, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QDesktopServices from PyQt6.QtGui import QDesktopServices
from PyQt5.QtWidgets import QLabel, QVBoxLayout, QWidget from PyQt6.QtWidgets import QLabel, QVBoxLayout, QWidget
from novelwriter import CONFIG, SHARED, __date__, __domain__, __version__ from novelwriter import CONFIG, SHARED, __date__, __domain__, __version__
from novelwriter.common import formatVersion from novelwriter.common import formatVersion
+1 -1
View File
@@ -27,7 +27,7 @@ import re
from enum import Flag, IntEnum from enum import Flag, IntEnum
from PyQt5.QtGui import QColor from PyQt6.QtGui import QColor
ESCAPES = {r"\*": "*", r"\~": "~", r"\_": "_", r"\[": "[", r"\]": "]", r"\ ": ""} ESCAPES = {r"\*": "*", r"\~": "~", r"\_": "_", r"\[": "[", r"\]": "]", r"\ ": ""}
RX_ESC = re.compile("|".join([re.escape(k) for k in ESCAPES.keys()]), flags=re.DOTALL) RX_ESC = re.compile("|".join([re.escape(k) for k in ESCAPES.keys()]), flags=re.DOTALL)
+2 -2
View File
@@ -33,8 +33,8 @@ from pathlib import Path
from typing import NamedTuple from typing import NamedTuple
from zipfile import ZIP_DEFLATED, ZipFile from zipfile import ZIP_DEFLATED, ZipFile
from PyQt5.QtCore import QMargins, QSize from PyQt6.QtCore import QMargins, QSize
from PyQt5.QtGui import QColor from PyQt6.QtGui import QColor
from novelwriter import __version__ from novelwriter import __version__
from novelwriter.common import firstFloat, xmlElement, xmlSubElem from novelwriter.common import firstFloat, xmlElement, xmlSubElem
+2 -2
View File
@@ -31,8 +31,8 @@ from abc import ABC, abstractmethod
from pathlib import Path from pathlib import Path
from typing import NamedTuple from typing import NamedTuple
from PyQt5.QtCore import QLocale from PyQt6.QtCore import QLocale
from PyQt5.QtGui import QColor, QFont from PyQt6.QtGui import QColor, QFont
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.common import checkInt, fontMatcher, numberToRoman from novelwriter.common import checkInt, fontMatcher, numberToRoman
+1 -1
View File
@@ -35,7 +35,7 @@ from hashlib import sha256
from pathlib import Path from pathlib import Path
from zipfile import ZIP_DEFLATED, ZipFile from zipfile import ZIP_DEFLATED, ZipFile
from PyQt5.QtGui import QColor, QFont from PyQt6.QtGui import QColor, QFont
from novelwriter import __version__ from novelwriter import __version__
from novelwriter.common import xmlElement, xmlIndent, xmlSubElem from novelwriter.common import xmlElement, xmlIndent, xmlSubElem
+8 -10
View File
@@ -27,12 +27,12 @@ import logging
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import QMarginsF, QSizeF from PyQt6.QtCore import QMarginsF, QSizeF
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QColor, QFont, QFontDatabase, QPageSize, QTextBlockFormat, QTextCharFormat, QColor, QFont, QFontDatabase, QPageLayout, QPageSize, QTextBlockFormat,
QTextCursor, QTextDocument, QTextFrameFormat QTextCharFormat, QTextCursor, QTextDocument, QTextFrameFormat
) )
from PyQt5.QtPrintSupport import QPrinter from PyQt6.QtPrintSupport import QPrinter
from novelwriter import __version__ from novelwriter import __version__
from novelwriter.constants import nwStyles, nwUnicode from novelwriter.constants import nwStyles, nwUnicode
@@ -129,10 +129,9 @@ class ToQTextDocument(Tokenizer):
super().initDocument() super().initDocument()
if pdf: if pdf:
fontDB = QFontDatabase()
family = self._textFont.family() family = self._textFont.family()
style = self._textFont.styleName() style = self._textFont.styleName()
self._dpi = 1200 if fontDB.isScalable(family, style) else 72 self._dpi = 1200 if QFontDatabase.isScalable(family, style) else 72
self._document.setUndoRedoEnabled(False) self._document.setUndoRedoEnabled(False)
self._document.blockSignals(True) self._document.blockSignals(True)
@@ -268,7 +267,6 @@ class ToQTextDocument(Tokenizer):
def saveDocument(self, path: Path) -> None: def saveDocument(self, path: Path) -> None:
"""Save the document as a PDF file.""" """Save the document as a PDF file."""
m = self._pageMargins
logger.info("Writing PDF at %d DPI", self._dpi) logger.info("Writing PDF at %d DPI", self._dpi)
printer = QPrinter(QPrinter.PrinterMode.HighResolution) printer = QPrinter(QPrinter.PrinterMode.HighResolution)
@@ -277,11 +275,11 @@ class ToQTextDocument(Tokenizer):
printer.setResolution(self._dpi) printer.setResolution(self._dpi)
printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat) printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat)
printer.setPageSize(self._pageSize) printer.setPageSize(self._pageSize)
printer.setPageMargins(m.left(), m.top(), m.right(), m.bottom(), QPrinter.Unit.Millimeter) printer.setPageMargins(self._pageMargins, QPageLayout.Unit.Millimeter)
printer.setOutputFileName(str(path)) printer.setOutputFileName(str(path))
self._document.documentLayout().setPaintDevice(printer) self._document.documentLayout().setPaintDevice(printer)
self._document.setPageSize(QSizeF(printer.pageRect().size())) self._document.setPageSize(printer.pageRect(QPrinter.Unit.Millimeter).size())
self._document.print(printer) self._document.print(printer)
return return
+8 -8
View File
@@ -37,18 +37,18 @@ import logging
from enum import Enum from enum import Enum
from time import time from time import time
from PyQt5.QtCore import ( from PyQt6.QtCore import (
QObject, QPoint, QRegularExpression, QRunnable, Qt, QTimer, pyqtSignal, QObject, QPoint, QRegularExpression, QRunnable, Qt, QTimer, pyqtSignal,
pyqtSlot pyqtSlot
) )
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QColor, QCursor, QDragEnterEvent, QDragMoveEvent, QDropEvent, QKeyEvent, QAction, QColor, QCursor, QDragEnterEvent, QDragMoveEvent, QDropEvent,
QKeySequence, QMouseEvent, QPalette, QPixmap, QResizeEvent, QTextBlock, QKeyEvent, QKeySequence, QMouseEvent, QPalette, QPixmap, QResizeEvent,
QTextCursor, QTextDocument, QTextOption QShortcut, QTextBlock, QTextCursor, QTextDocument, QTextOption
) )
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAction, QApplication, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QApplication, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QMenu,
QMenu, QPlainTextEdit, QShortcut, QToolBar, QVBoxLayout, QWidget QPlainTextEdit, QToolBar, QVBoxLayout, QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
+2 -2
View File
@@ -29,8 +29,8 @@ import re
from time import time from time import time
from PyQt5.QtCore import Qt from PyQt6.QtCore import Qt
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QBrush, QColor, QFont, QSyntaxHighlighter, QTextBlockUserData, QBrush, QColor, QFont, QSyntaxHighlighter, QTextBlockUserData,
QTextCharFormat, QTextDocument QTextCharFormat, QTextDocument
) )
+7 -7
View File
@@ -30,14 +30,14 @@ import logging
from enum import Enum from enum import Enum
from PyQt5.QtCore import QPoint, Qt, QUrl, pyqtSignal, pyqtSlot from PyQt6.QtCore import QPoint, Qt, QUrl, pyqtSignal, pyqtSlot
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QCursor, QDesktopServices, QDragEnterEvent, QDragMoveEvent, QDropEvent, QAction, QCursor, QDesktopServices, QDragEnterEvent, QDragMoveEvent,
QMouseEvent, QPalette, QResizeEvent, QTextCursor QDropEvent, QMouseEvent, QPalette, QResizeEvent, QTextCursor
) )
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAction, QApplication, QFrame, QHBoxLayout, QMenu, QTextBrowser, QApplication, QFrame, QHBoxLayout, QMenu, QTextBrowser, QToolButton,
QToolButton, QWidget QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
+2 -2
View File
@@ -27,8 +27,8 @@ import logging
from enum import Enum from enum import Enum
from PyQt5.QtCore import QModelIndex, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QModelIndex, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QFrame, QMenu, QTabWidget, QToolButton, QTreeWidget, QAbstractItemView, QFrame, QMenu, QTabWidget, QToolButton, QTreeWidget,
QTreeWidgetItem, QVBoxLayout, QWidget QTreeWidgetItem, QVBoxLayout, QWidget
) )
+3 -3
View File
@@ -28,9 +28,9 @@ import logging
from collections.abc import Iterable from collections.abc import Iterable
from time import time from time import time
from PyQt5.QtCore import QObject, pyqtSlot from PyQt6.QtCore import QObject, pyqtSlot
from PyQt5.QtGui import QTextBlock, QTextCursor, QTextDocument from PyQt6.QtGui import QTextBlock, QTextCursor, QTextDocument
from PyQt5.QtWidgets import QApplication, QPlainTextDocumentLayout from PyQt6.QtWidgets import QApplication, QPlainTextDocumentLayout
from novelwriter import SHARED from novelwriter import SHARED
from novelwriter.gui.dochighlight import GuiDocHighlighter, TextBlockData from novelwriter.gui.dochighlight import GuiDocHighlighter, TextBlockData
+2 -2
View File
@@ -27,8 +27,8 @@ import logging
from enum import Enum from enum import Enum
from PyQt5.QtCore import pyqtSlot from PyQt6.QtCore import pyqtSlot
from PyQt5.QtWidgets import QGridLayout, QLabel, QWidget from PyQt6.QtWidgets import QGridLayout, QLabel, QWidget
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import elide from novelwriter.common import elide
+3 -2
View File
@@ -28,8 +28,9 @@ import logging
from pathlib import Path from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QAction, QMenuBar from PyQt6.QtGui import QAction
from PyQt6.QtWidgets import QMenuBar
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import openExternalPath, qtLambda from novelwriter.common import openExternalPath, qtLambda
+5 -5
View File
@@ -30,11 +30,11 @@ import logging
from enum import Enum from enum import Enum
from time import time from time import time
from PyQt5.QtCore import QModelIndex, QPoint, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QModelIndex, QPoint, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QFocusEvent, QFont, QMouseEvent, QPalette, QResizeEvent from PyQt6.QtGui import QActionGroup, QFocusEvent, QFont, QMouseEvent, QPalette, QResizeEvent
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QActionGroup, QFrame, QHBoxLayout, QInputDialog, QMenu, QAbstractItemView, QFrame, QHBoxLayout, QInputDialog, QMenu, QToolTip,
QToolTip, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
+4 -4
View File
@@ -33,10 +33,10 @@ import logging
from enum import Enum from enum import Enum
from time import time from time import time
from PyQt5.QtCore import QT_TRANSLATE_NOOP, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QT_TRANSLATE_NOOP, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QIcon from PyQt6.QtGui import QAction, QIcon
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QAction, QFileDialog, QFrame, QGridLayout, QGroupBox, QAbstractItemView, QFileDialog, QFrame, QGridLayout, QGroupBox,
QHBoxLayout, QLabel, QMenu, QScrollArea, QSplitter, QToolBar, QToolButton, QHBoxLayout, QLabel, QMenu, QScrollArea, QSplitter, QToolBar, QToolButton,
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
) )
+4 -4
View File
@@ -32,10 +32,10 @@ import logging
from enum import Enum from enum import Enum
from PyQt5.QtCore import QModelIndex, QPoint, Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import QModelIndex, QPoint, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QIcon, QMouseEvent, QPainter, QPalette from PyQt6.QtGui import QAction, QIcon, QMouseEvent, QPainter, QPalette, QShortcut
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QAction, QFrame, QHBoxLayout, QLabel, QMenu, QShortcut, QAbstractItemView, QFrame, QHBoxLayout, QLabel, QMenu,
QStyleOptionViewItem, QTreeView, QVBoxLayout, QWidget QStyleOptionViewItem, QTreeView, QVBoxLayout, QWidget
) )
+3 -3
View File
@@ -27,9 +27,9 @@ import logging
from time import time from time import time
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QCursor, QKeyEvent from PyQt6.QtGui import QCursor, QKeyEvent
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QFrame, QHBoxLayout, QLabel, QLineEdit, QToolBar, QApplication, QFrame, QHBoxLayout, QLabel, QLineEdit, QToolBar,
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
) )
+3 -3
View File
@@ -27,9 +27,9 @@ import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import QEvent, QPoint, QSize, pyqtSignal from PyQt6.QtCore import QEvent, QPoint, QSize, pyqtSignal
from PyQt5.QtGui import QPalette from PyQt6.QtGui import QPalette
from PyQt5.QtWidgets import QMenu, QVBoxLayout, QWidget from PyQt6.QtWidgets import QMenu, QVBoxLayout, QWidget
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import qtLambda from novelwriter.common import qtLambda
+2 -2
View File
@@ -28,8 +28,8 @@ import logging
from datetime import datetime from datetime import datetime
from time import time from time import time
from PyQt5.QtCore import QLocale, pyqtSlot from PyQt6.QtCore import QLocale, pyqtSlot
from PyQt5.QtWidgets import QApplication, QLabel, QStatusBar, QWidget from PyQt6.QtWidgets import QApplication, QLabel, QStatusBar, QWidget
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import formatTime from novelwriter.common import formatTime
+3 -3
View File
@@ -29,12 +29,12 @@ import logging
from math import ceil from math import ceil
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import QSize, Qt from PyQt6.QtCore import QSize, Qt
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QColor, QFont, QFontDatabase, QFontMetrics, QIcon, QPainter, QPainterPath, QColor, QFont, QFontDatabase, QFontMetrics, QIcon, QPainter, QPainterPath,
QPalette, QPixmap QPalette, QPixmap
) )
from PyQt5.QtWidgets import QApplication from PyQt6.QtWidgets import QApplication
from novelwriter import CONFIG from novelwriter import CONFIG
from novelwriter.common import NWConfigParser, cssCol, minmax from novelwriter.common import NWConfigParser, cssCol, minmax
+4 -4
View File
@@ -30,11 +30,11 @@ from datetime import datetime
from pathlib import Path from pathlib import Path
from time import time from time import time
from PyQt5.QtCore import Qt, QTimer, pyqtSlot from PyQt6.QtCore import Qt, QTimer, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QCursor, QIcon from PyQt6.QtGui import QCloseEvent, QCursor, QIcon, QShortcut
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QFileDialog, QHBoxLayout, QMainWindow, QMessageBox, QApplication, QFileDialog, QHBoxLayout, QMainWindow, QMessageBox,
QShortcut, QSplitter, QStackedWidget, QVBoxLayout, QWidget QSplitter, QStackedWidget, QVBoxLayout, QWidget
) )
from novelwriter import CONFIG, SHARED, __hexversion__, __version__ from novelwriter import CONFIG, SHARED, __hexversion__, __version__
+3 -3
View File
@@ -31,9 +31,9 @@ from pathlib import Path
from time import time from time import time
from typing import TYPE_CHECKING, TypeVar from typing import TYPE_CHECKING, TypeVar
from PyQt5.QtCore import QObject, QRunnable, QThreadPool, QTimer, QUrl, pyqtSignal, pyqtSlot from PyQt6.QtCore import QObject, QRunnable, QThreadPool, QTimer, QUrl, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QDesktopServices, QFont from PyQt6.QtGui import QDesktopServices, QFont
from PyQt5.QtWidgets import QFileDialog, QFontDialog, QMessageBox, QWidget from PyQt6.QtWidgets import QFileDialog, QFontDialog, QMessageBox, QWidget
from novelwriter.common import formatFileFilter from novelwriter.common import formatFileFilter
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
+3 -3
View File
@@ -28,9 +28,9 @@ import logging
from pathlib import Path from pathlib import Path
from zipfile import ZipFile from zipfile import ZipFile
from PyQt5.QtCore import pyqtSlot from PyQt6.QtCore import pyqtSlot
from PyQt5.QtGui import QCloseEvent, QTextCursor from PyQt6.QtGui import QCloseEvent, QTextCursor
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QApplication, QDialogButtonBox, QFileDialog, QFrame, QHBoxLayout, QLabel, QApplication, QDialogButtonBox, QFileDialog, QFrame, QHBoxLayout, QLabel,
QLineEdit, QPlainTextEdit, QPushButton, QVBoxLayout, QWidget QLineEdit, QPlainTextEdit, QPushButton, QVBoxLayout, QWidget
) )
+2 -2
View File
@@ -26,8 +26,8 @@ from __future__ import annotations
import logging import logging
import random import random
from PyQt5.QtCore import pyqtSlot from PyQt6.QtCore import pyqtSlot
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel, QSpinBox, QVBoxLayout, QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel, QSpinBox, QVBoxLayout,
QWidget QWidget
) )
+3 -3
View File
@@ -27,9 +27,9 @@ import logging
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import QTimer, pyqtSlot from PyQt6.QtCore import QTimer, pyqtSlot
from PyQt5.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog, QAbstractButton, QAbstractItemView, QDialogButtonBox, QFileDialog,
QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem,
QPushButton, QSplitter, QVBoxLayout, QWidget QPushButton, QSplitter, QVBoxLayout, QWidget
+9 -9
View File
@@ -28,13 +28,13 @@ import logging
from time import time from time import time
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot from PyQt6.QtCore import Qt, QTimer, QUrl, pyqtSignal, pyqtSlot
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QCloseEvent, QColor, QCursor, QDesktopServices, QFont, QPalette, QCloseEvent, QColor, QCursor, QDesktopServices, QFont, QPageLayout,
QResizeEvent, QTextDocument QPalette, QResizeEvent, QTextDocument
) )
from PyQt5.QtPrintSupport import QPrinter, QPrintPreviewDialog from PyQt6.QtPrintSupport import QPrinter, QPrintPreviewDialog
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout, QAbstractItemView, QApplication, QFormLayout, QGridLayout, QHBoxLayout,
QLabel, QListWidget, QListWidgetItem, QPushButton, QSplitter, QLabel, QListWidget, QListWidgetItem, QPushButton, QSplitter,
QStackedWidget, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem, QStackedWidget, QTabWidget, QTextBrowser, QTreeWidget, QTreeWidgetItem,
@@ -42,7 +42,7 @@ from PyQt5.QtWidgets import (
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import fuzzyTime from novelwriter.common import fuzzyTime, qtLambda
from novelwriter.constants import nwLabels, nwStats, trConst from novelwriter.constants import nwLabels, nwStats, trConst
from novelwriter.core.buildsettings import BuildCollection, BuildSettings from novelwriter.core.buildsettings import BuildCollection, BuildSettings
from novelwriter.core.docbuild import NWBuildDocument from novelwriter.core.docbuild import NWBuildDocument
@@ -185,7 +185,7 @@ class GuiManuscript(NToolDialog):
self.btnBuild.clicked.connect(self._buildManuscript) self.btnBuild.clicked.connect(self._buildManuscript)
self.btnClose = QPushButton(self.tr("Close"), self) self.btnClose = QPushButton(self.tr("Close"), self)
self.btnClose.clicked.connect(self.close) self.btnClose.clicked.connect(qtLambda(self.close))
self.processBox = QGridLayout() self.processBox = QGridLayout()
self.processBox.addWidget(self.btnPreview, 0, 0) self.processBox.addWidget(self.btnPreview, 0, 0)
@@ -884,7 +884,7 @@ class _PreviewWidget(QTextBrowser):
def printPreview(self, printer: QPrinter) -> None: def printPreview(self, printer: QPrinter) -> None:
"""Connect the print preview painter to the document viewer.""" """Connect the print preview painter to the document viewer."""
QApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor)) QApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor))
printer.setOrientation(QPrinter.Orientation.Portrait) printer.setPageOrientation(QPageLayout.Orientation.Portrait)
self.document().print(printer) self.document().print(printer)
QApplication.restoreOverrideCursor() QApplication.restoreOverrideCursor()
return return
+3 -3
View File
@@ -27,9 +27,9 @@ import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import QEvent, pyqtSignal, pyqtSlot from PyQt6.QtCore import QEvent, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument from PyQt6.QtGui import QFont, QIcon, QSyntaxHighlighter, QTextCharFormat, QTextDocument
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractButton, QAbstractItemView, QDialogButtonBox, QFrame, QGridLayout, QAbstractButton, QAbstractItemView, QDialogButtonBox, QFrame, QGridLayout,
QHBoxLayout, QLabel, QLineEdit, QMenu, QPlainTextEdit, QPushButton, QHBoxLayout, QLabel, QLineEdit, QMenu, QPlainTextEdit, QPushButton,
QSplitter, QStackedWidget, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QSplitter, QStackedWidget, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
+3 -3
View File
@@ -26,9 +26,9 @@ from __future__ import annotations
import logging import logging
import math import math
from PyQt5.QtCore import pyqtSlot from PyQt6.QtCore import pyqtSlot
from PyQt5.QtGui import QCloseEvent from PyQt6.QtGui import QCloseEvent
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAbstractItemView, QDialogButtonBox, QFormLayout, QGridLayout, QHBoxLayout, QAbstractItemView, QDialogButtonBox, QFormLayout, QGridLayout, QHBoxLayout,
QLabel, QSpinBox, QStackedWidget, QTreeWidget, QTreeWidgetItem, QLabel, QSpinBox, QStackedWidget, QTreeWidget, QTreeWidgetItem,
QVBoxLayout, QWidget QVBoxLayout, QWidget
+8 -9
View File
@@ -28,20 +28,19 @@ import logging
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from PyQt5.QtCore import ( from PyQt6.QtCore import (
QAbstractListModel, QEvent, QModelIndex, QObject, QPoint, QSize, Qt, QAbstractListModel, QEvent, QModelIndex, QObject, QPoint, QSize, Qt,
pyqtSignal, pyqtSlot pyqtSignal, pyqtSlot
) )
from PyQt5.QtGui import QCloseEvent, QColor, QFont, QPainter, QPaintEvent, QPen from PyQt6.QtGui import QAction, QCloseEvent, QColor, QFont, QPainter, QPaintEvent, QPen, QShortcut
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAction, QApplication, QFileDialog, QFormLayout, QHBoxLayout, QLabel, QApplication, QFileDialog, QFormLayout, QHBoxLayout, QLabel, QLineEdit,
QLineEdit, QListView, QMenu, QPushButton, QScrollArea, QShortcut, QListView, QMenu, QPushButton, QScrollArea, QStackedWidget,
QStackedWidget, QStyledItemDelegate, QStyleOptionViewItem, QVBoxLayout, QStyledItemDelegate, QStyleOptionViewItem, QVBoxLayout, QWidget
QWidget
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.common import cssCol, formatInt, makeFileNameSafe from novelwriter.common import cssCol, formatInt, makeFileNameSafe, qtLambda
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
from novelwriter.core.coretools import ProjectBuilder from novelwriter.core.coretools import ProjectBuilder
from novelwriter.enum import nwItemClass from novelwriter.enum import nwItemClass
@@ -127,7 +126,7 @@ class GuiWelcome(NDialog):
self.btnCancel = QPushButton(self.tr("Cancel"), self) self.btnCancel = QPushButton(self.tr("Cancel"), self)
self.btnCancel.setIcon(SHARED.theme.getIcon("cancel", "red")) self.btnCancel.setIcon(SHARED.theme.getIcon("cancel", "red"))
self.btnCancel.setIconSize(btnIconSize) self.btnCancel.setIconSize(btnIconSize)
self.btnCancel.clicked.connect(self.close) self.btnCancel.clicked.connect(qtLambda(self.close))
self.btnCreate = QPushButton(self.tr("Create"), self) self.btnCreate = QPushButton(self.tr("Create"), self)
self.btnCreate.setIcon(SHARED.theme.getIcon("star", "yellow")) self.btnCreate.setIcon(SHARED.theme.getIcon("star", "yellow"))
+8 -10
View File
@@ -29,12 +29,11 @@ import logging
from datetime import datetime from datetime import datetime
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from PyQt5.QtCore import Qt, pyqtSlot from PyQt6.QtCore import Qt, pyqtSlot
from PyQt5.QtGui import QCloseEvent, QCursor, QPixmap from PyQt6.QtGui import QAction, QCloseEvent, QCursor, QPixmap
from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import (
QAction, QApplication, QDialogButtonBox, QFileDialog, QGridLayout, QApplication, QDialogButtonBox, QFileDialog, QGridLayout, QGroupBox,
QGroupBox, QHBoxLayout, QLabel, QMenu, QSpinBox, QTreeWidget, QHBoxLayout, QLabel, QMenu, QSpinBox, QTreeWidget, QTreeWidgetItem
QTreeWidgetItem
) )
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
@@ -124,13 +123,12 @@ class GuiWritingStats(NToolDialog):
hHeader.setTextAlignment(self.C_IDLE, QtAlignRight) hHeader.setTextAlignment(self.C_IDLE, QtAlignRight)
hHeader.setTextAlignment(self.C_COUNT, QtAlignRight) hHeader.setTextAlignment(self.C_COUNT, QtAlignRight)
sDec = Qt.SortOrder.DescendingOrder
sAsc = Qt.SortOrder.AscendingOrder
sortCol = minmax(pOptions.getInt("GuiWritingStats", "sortCol", 0), 0, 2) sortCol = minmax(pOptions.getInt("GuiWritingStats", "sortCol", 0), 0, 2)
sortOrder = checkIntTuple( sortOrder = checkIntTuple(
pOptions.getInt("GuiWritingStats", "sortOrder", sDec), (sAsc, sDec), sDec pOptions.getInt("GuiWritingStats", "sortOrder", 1), (0, 1), 1
) )
self.listBox.sortByColumn(sortCol, sortOrder) # type: ignore sortOrders = (Qt.SortOrder.AscendingOrder, Qt.SortOrder.DescendingOrder)
self.listBox.sortByColumn(sortCol, sortOrders[sortOrder])
self.listBox.setSortingEnabled(True) self.listBox.setSortingEnabled(True)
# Word Bar # Word Bar
+4 -4
View File
@@ -23,12 +23,12 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from __future__ import annotations from __future__ import annotations
from PyQt5.QtCore import Qt from PyQt6.QtCore import Qt
from PyQt5.QtGui import ( from PyQt6.QtGui import (
QColor, QFont, QPainter, QTextBlockFormat, QTextCharFormat, QTextCursor, QColor, QFont, QPainter, QTextBlockFormat, QTextCharFormat, QTextCursor,
QTextFormat QTextFormat
) )
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QHeaderView, QSizePolicy, QStyle from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QHeaderView, QSizePolicy, QStyle
# Qt Alignment Flags # Qt Alignment Flags
@@ -56,7 +56,7 @@ QtVAlignSuper = QTextCharFormat.VerticalAlignment.AlignSuperScript
QtPageBreakBefore = QTextFormat.PageBreakFlag.PageBreak_AlwaysBefore QtPageBreakBefore = QTextFormat.PageBreakFlag.PageBreak_AlwaysBefore
QtPageBreakAfter = QTextFormat.PageBreakFlag.PageBreak_AlwaysAfter QtPageBreakAfter = QTextFormat.PageBreakFlag.PageBreak_AlwaysAfter
QtPropLineHeight = QTextBlockFormat.LineHeightTypes.ProportionalHeight QtPropLineHeight = 1 # QTextBlockFormat.LineHeightTypes.ProportionalHeight
# Qt Painter Types # Qt Painter Types