Annotate config class and extensions
This commit is contained in:
@@ -42,7 +42,7 @@ class NProgressCircle(QProgressBar):
|
||||
"_cPen", "_bPen", "_tColor"
|
||||
)
|
||||
|
||||
def __init__(self, parent: QWidget, size: int, point: int):
|
||||
def __init__(self, parent: QWidget, size: int, point: int) -> None:
|
||||
super().__init__(parent=parent)
|
||||
self._text = None
|
||||
self._point = point
|
||||
@@ -60,10 +60,8 @@ class NProgressCircle(QProgressBar):
|
||||
self.setFixedHeight(size)
|
||||
return
|
||||
|
||||
def setColours(
|
||||
self, back: QColor | None = None, track: QColor | None = None,
|
||||
bar: QColor | None = None, text: QColor | None = None
|
||||
):
|
||||
def setColours(self, back: QColor | None = None, track: QColor | None = None,
|
||||
bar: QColor | None = None, text: QColor | None = None) -> None:
|
||||
"""Set the colours of the widget."""
|
||||
if isinstance(back, QColor):
|
||||
self._dPen = QPen(back)
|
||||
@@ -76,13 +74,13 @@ class NProgressCircle(QProgressBar):
|
||||
self._tColor = text
|
||||
return
|
||||
|
||||
def setCentreText(self, text: str | None):
|
||||
def setCentreText(self, text: str | None) -> None:
|
||||
"""Replace the progress text with a custom string."""
|
||||
self._text = text
|
||||
self.setValue(self.value()) # Triggers a redraw
|
||||
return
|
||||
|
||||
def paintEvent(self, event: QPaintEvent):
|
||||
def paintEvent(self, event: QPaintEvent) -> None:
|
||||
"""Custom painter for the progress bar."""
|
||||
progress = 100.0*self.value()/self.maximum()
|
||||
angle = ceil(16*3.6*progress)
|
||||
|
||||
@@ -37,7 +37,7 @@ FONT_SCALE = 0.9
|
||||
|
||||
class NConfigLayout(QGridLayout):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
|
||||
self._nextRow = 0
|
||||
@@ -56,7 +56,8 @@ class NConfigLayout(QGridLayout):
|
||||
# Getters and Setters
|
||||
##
|
||||
|
||||
def setHelpTextStyle(self, color: QColor | list | tuple, fontScale: float = FONT_SCALE):
|
||||
def setHelpTextStyle(self, color: QColor | list | tuple,
|
||||
fontScale: float = FONT_SCALE) -> None:
|
||||
"""Set the text color for the help text."""
|
||||
if isinstance(color, QColor):
|
||||
self._helpCol = color
|
||||
@@ -65,7 +66,7 @@ class NConfigLayout(QGridLayout):
|
||||
self._fontScale = fontScale
|
||||
return
|
||||
|
||||
def setHelpText(self, row: int, text: str):
|
||||
def setHelpText(self, row: int, text: str) -> None:
|
||||
"""Set the text for the help label."""
|
||||
if row in self._itemMap:
|
||||
qHelp = self._itemMap[row][1]
|
||||
@@ -73,7 +74,7 @@ class NConfigLayout(QGridLayout):
|
||||
qHelp.setText(text)
|
||||
return
|
||||
|
||||
def setLabelText(self, row: int, text: str):
|
||||
def setLabelText(self, row: int, text: str) -> None:
|
||||
"""Set the text for the main label."""
|
||||
if row in self._itemMap:
|
||||
self._itemMap[row](0).setText(text)
|
||||
@@ -83,7 +84,7 @@ class NConfigLayout(QGridLayout):
|
||||
# Class Methods
|
||||
##
|
||||
|
||||
def addGroupLabel(self, label: str):
|
||||
def addGroupLabel(self, label: str) -> None:
|
||||
"""Add a text label to separate groups of settings."""
|
||||
hM = CONFIG.pxInt(4)
|
||||
qLabel = QLabel("<b>%s</b>" % label)
|
||||
@@ -94,10 +95,8 @@ class NConfigLayout(QGridLayout):
|
||||
self._nextRow += 1
|
||||
return
|
||||
|
||||
def addRow(
|
||||
self, label: str, widget: QWidget, helpText: str | None = None,
|
||||
unit: str | None = None, button: QWidget | None = None
|
||||
) -> int:
|
||||
def addRow(self, label: str, widget: QWidget, helpText: str | None = None,
|
||||
unit: str | None = None, button: QWidget | None = None) -> int:
|
||||
"""Add a label and a widget as a new row of the grid."""
|
||||
wSp = CONFIG.pxInt(8)
|
||||
qLabel = QLabel(label)
|
||||
@@ -155,7 +154,7 @@ class NSimpleLayout(QGridLayout):
|
||||
column layout.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self._nextRow = 0
|
||||
|
||||
@@ -170,7 +169,7 @@ class NSimpleLayout(QGridLayout):
|
||||
# Methods
|
||||
##
|
||||
|
||||
def addGroupLabel(self, label: str):
|
||||
def addGroupLabel(self, label: str) -> None:
|
||||
"""Add a text label to separate groups of settings."""
|
||||
hM = CONFIG.pxInt(4)
|
||||
qLabel = QLabel("<b>%s</b>" % label)
|
||||
@@ -181,7 +180,7 @@ class NSimpleLayout(QGridLayout):
|
||||
self._nextRow += 1
|
||||
return
|
||||
|
||||
def addRow(self, label: str, widget: QWidget):
|
||||
def addRow(self, label: str, widget: QWidget) -> None:
|
||||
"""Add a label and a widget as a new row of the grid."""
|
||||
wSp = CONFIG.pxInt(8)
|
||||
qLabel = QLabel(label)
|
||||
@@ -208,7 +207,8 @@ class NSimpleLayout(QGridLayout):
|
||||
|
||||
class NHelpLabel(QLabel):
|
||||
|
||||
def __init__(self, text: str, color: QColor | list | tuple, fontSize: float = FONT_SCALE):
|
||||
def __init__(self, text: str, color: QColor | list | tuple,
|
||||
fontSize: float = FONT_SCALE) -> None:
|
||||
super().__init__(text)
|
||||
|
||||
if isinstance(color, QColor):
|
||||
|
||||
@@ -23,10 +23,11 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from PyQt5.QtCore import QRect, QPoint
|
||||
from PyQt5.QtGui import QPaintEvent
|
||||
from PyQt5.QtCore import QRect, QPoint, QSize
|
||||
from PyQt5.QtWidgets import (
|
||||
QDialog, QHBoxLayout, QStyle, QStyleOptionTab, QStylePainter, QTabBar,
|
||||
QTabWidget, QVBoxLayout
|
||||
QTabWidget, QVBoxLayout, QWidget
|
||||
)
|
||||
|
||||
from novelwriter import CONFIG
|
||||
@@ -34,7 +35,7 @@ from novelwriter import CONFIG
|
||||
|
||||
class NPagedDialog(QDialog):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
def __init__(self, parent: QWidget) -> None:
|
||||
super().__init__(parent=parent)
|
||||
|
||||
self._tabBar = NVerticalTabBar(self)
|
||||
@@ -67,21 +68,18 @@ class NPagedDialog(QDialog):
|
||||
|
||||
return
|
||||
|
||||
def addTab(self, widget, label):
|
||||
"""Forward the adding of tabs to the QTabWidget.
|
||||
"""
|
||||
def addTab(self, widget: QWidget, label: str) -> None:
|
||||
"""Forward the adding of tabs to the QTabWidget."""
|
||||
self._tabBox.addTab(widget, label)
|
||||
return
|
||||
|
||||
def addControls(self, buttonBar):
|
||||
"""Add a button bar to the dialog.
|
||||
"""
|
||||
def addControls(self, buttonBar: QWidget) -> None:
|
||||
"""Add a button bar to the dialog."""
|
||||
self._buttonBox.addWidget(buttonBar)
|
||||
return
|
||||
|
||||
def setCurrentWidget(self, widget):
|
||||
"""Forward the changing of tab to the QTabWidget.
|
||||
"""
|
||||
def setCurrentWidget(self, widget: QWidget) -> None:
|
||||
"""Forward the changing of tab to the QTabWidget."""
|
||||
self._tabBox.setCurrentWidget(widget)
|
||||
return
|
||||
|
||||
@@ -90,20 +88,19 @@ class NPagedDialog(QDialog):
|
||||
|
||||
class NVerticalTabBar(QTabBar):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
def __init__(self, parent: QWidget) -> None:
|
||||
super().__init__(parent=parent)
|
||||
self._mW = CONFIG.pxInt(150)
|
||||
return
|
||||
|
||||
def tabSizeHint(self, index):
|
||||
"""Return a transposed size hint for the rotated bar.
|
||||
"""
|
||||
def tabSizeHint(self, index: int) -> QSize:
|
||||
"""Return a transposed size hint for the rotated bar."""
|
||||
tSize = super().tabSizeHint(index)
|
||||
tSize.transpose()
|
||||
tSize.setWidth(min(tSize.width(), self._mW))
|
||||
return tSize
|
||||
|
||||
def paintEvent(self, event):
|
||||
def paintEvent(self, event: QPaintEvent) -> None:
|
||||
"""Custom implementation of the label painter that rotates the
|
||||
label 90 degrees.
|
||||
"""
|
||||
|
||||
@@ -35,11 +35,11 @@ class NProgressSimple(QProgressBar):
|
||||
A custom widget that paints a plain bar with no other styling.
|
||||
"""
|
||||
|
||||
def __init__(self, parent: QWidget):
|
||||
def __init__(self, parent: QWidget) -> None:
|
||||
super().__init__(parent=parent)
|
||||
return
|
||||
|
||||
def paintEvent(self, event: QPaintEvent):
|
||||
def paintEvent(self, event: QPaintEvent) -> None:
|
||||
"""Custom painter for the progress bar."""
|
||||
if self.value() == 0:
|
||||
return
|
||||
|
||||
@@ -23,9 +23,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from PyQt5.QtGui import QPainter
|
||||
from PyQt5.QtCore import Qt, QRectF, QPropertyAnimation, pyqtProperty
|
||||
from PyQt5.QtWidgets import QSizePolicy, QAbstractButton
|
||||
from PyQt5.QtGui import QMouseEvent, QPainter, QPaintEvent, QResizeEvent
|
||||
from PyQt5.QtCore import QEvent, QPropertyAnimation, QRectF, Qt, pyqtProperty
|
||||
from PyQt5.QtWidgets import QAbstractButton, QSizePolicy, QWidget
|
||||
|
||||
from novelwriter import CONFIG
|
||||
from novelwriter.constants import nwUnicode
|
||||
@@ -33,7 +33,8 @@ from novelwriter.constants import nwUnicode
|
||||
|
||||
class NSwitch(QAbstractButton):
|
||||
|
||||
def __init__(self, parent=None, width=None, height=None):
|
||||
def __init__(self, parent: QWidget | None = None,
|
||||
width: int | None = None, height: int | None = None) -> None:
|
||||
super().__init__(parent=parent)
|
||||
|
||||
if width is None:
|
||||
@@ -64,12 +65,12 @@ class NSwitch(QAbstractButton):
|
||||
# Properties
|
||||
##
|
||||
|
||||
@pyqtProperty(int)
|
||||
def offset(self):
|
||||
@pyqtProperty(int) # type: ignore
|
||||
def offset(self) -> int: # type: ignore
|
||||
return self._offset
|
||||
|
||||
@offset.setter
|
||||
def offset(self, offset):
|
||||
@offset.setter # type: ignore
|
||||
def offset(self, offset: int):
|
||||
self._offset = offset
|
||||
self.update()
|
||||
return
|
||||
@@ -78,33 +79,30 @@ class NSwitch(QAbstractButton):
|
||||
# Getters and Setters
|
||||
##
|
||||
|
||||
def setChecked(self, checked):
|
||||
"""Overload setChecked to also alter the offset.
|
||||
"""
|
||||
def setChecked(self, checked: bool) -> None:
|
||||
"""Overload setChecked to also alter the offset."""
|
||||
super().setChecked(checked)
|
||||
if checked:
|
||||
self.offset = self._xW - self._xR
|
||||
self._offset = self._xW - self._xR
|
||||
else:
|
||||
self.offset = self._xR
|
||||
self._offset = self._xR
|
||||
return
|
||||
|
||||
##
|
||||
# Events
|
||||
##
|
||||
|
||||
def resizeEvent(self, event):
|
||||
"""Overload resize to ensure correct offset.
|
||||
"""
|
||||
def resizeEvent(self, event: QResizeEvent) -> None:
|
||||
"""Overload resize to ensure correct offset."""
|
||||
super().resizeEvent(event)
|
||||
if self.isChecked():
|
||||
self.offset = self._xW - self._xR
|
||||
self._offset = self._xW - self._xR
|
||||
else:
|
||||
self.offset = self._xR
|
||||
self._offset = self._xR
|
||||
return
|
||||
|
||||
def paintEvent(self, event):
|
||||
"""Drawing the switch itself.
|
||||
"""
|
||||
def paintEvent(self, event: QPaintEvent) -> None:
|
||||
"""Drawing the switch itself."""
|
||||
qPaint = QPainter(self)
|
||||
qPaint.setRenderHint(QPainter.Antialiasing, True)
|
||||
qPaint.setPen(Qt.NoPen)
|
||||
@@ -134,27 +132,26 @@ class NSwitch(QAbstractButton):
|
||||
qPaint.drawRoundedRect(0, 0, self._xW, self._xH, self._xR, self._xR)
|
||||
|
||||
qPaint.setBrush(thumbBrush)
|
||||
qPaint.drawEllipse(self.offset - self._rR, self._rB, self._rH, self._rH)
|
||||
qPaint.drawEllipse(self._offset - self._rR, self._rB, self._rH, self._rH)
|
||||
|
||||
theFont = qPaint.font()
|
||||
theFont.setPixelSize(self._xT)
|
||||
qPaint.setPen(textColor)
|
||||
qPaint.setFont(theFont)
|
||||
qPaint.drawText(
|
||||
QRectF(self.offset - self._rR, self._rB, self._rH, self._rH),
|
||||
QRectF(self._offset - self._rR, self._rB, self._rH, self._rH),
|
||||
Qt.AlignCenter, thumbText
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
"""Animate the switch on mouse release.
|
||||
"""
|
||||
def mouseReleaseEvent(self, event: QMouseEvent) -> None:
|
||||
"""Animate the switch on mouse release."""
|
||||
super().mouseReleaseEvent(event)
|
||||
if event.button() == Qt.LeftButton:
|
||||
doAnim = QPropertyAnimation(self, b"offset", self)
|
||||
doAnim.setDuration(120)
|
||||
doAnim.setStartValue(self.offset)
|
||||
doAnim.setStartValue(self._offset)
|
||||
if self.isChecked():
|
||||
doAnim.setEndValue(self._xW - self._xR)
|
||||
else:
|
||||
@@ -162,9 +159,8 @@ class NSwitch(QAbstractButton):
|
||||
doAnim.start()
|
||||
return
|
||||
|
||||
def enterEvent(self, event):
|
||||
"""Change the cursor when hovering the button.
|
||||
"""
|
||||
def enterEvent(self, event: QEvent) -> None:
|
||||
"""Change the cursor when hovering the button."""
|
||||
self.setCursor(Qt.PointingHandCursor)
|
||||
super().enterEvent(event)
|
||||
return
|
||||
|
||||
@@ -23,8 +23,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtWidgets import QGridLayout, QLabel, QScrollArea, QSizePolicy, QWidget
|
||||
|
||||
from novelwriter.extensions.switch import NSwitch
|
||||
@@ -39,7 +39,7 @@ class NSwitchBox(QScrollArea):
|
||||
|
||||
switchToggled = pyqtSignal(str, bool)
|
||||
|
||||
def __init__(self, parent: QWidget, baseSize: int):
|
||||
def __init__(self, parent: QWidget, baseSize: int) -> None:
|
||||
super().__init__(parent=parent)
|
||||
self._index = 0
|
||||
self._hSwitch = baseSize
|
||||
@@ -49,7 +49,7 @@ class NSwitchBox(QScrollArea):
|
||||
self.clear()
|
||||
return
|
||||
|
||||
def clear(self):
|
||||
def clear(self) -> None:
|
||||
"""Rebuild the content of the core widget."""
|
||||
self._index = 0
|
||||
self._widgets = []
|
||||
@@ -66,7 +66,7 @@ class NSwitchBox(QScrollArea):
|
||||
|
||||
return
|
||||
|
||||
def addLabel(self, text: str):
|
||||
def addLabel(self, text: str) -> None:
|
||||
"""Add a header label to the content box."""
|
||||
label = QLabel(text)
|
||||
font = label.font()
|
||||
@@ -77,7 +77,7 @@ class NSwitchBox(QScrollArea):
|
||||
self._bumpIndex()
|
||||
return
|
||||
|
||||
def addItem(self, qIcon: QIcon, text: str, identifier: str, default: bool = False):
|
||||
def addItem(self, qIcon: QIcon, text: str, identifier: str, default: bool = False) -> None:
|
||||
"""Add an item to the content box."""
|
||||
icon = QLabel("")
|
||||
icon.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
|
||||
@@ -97,7 +97,7 @@ class NSwitchBox(QScrollArea):
|
||||
|
||||
return
|
||||
|
||||
def addSeparator(self):
|
||||
def addSeparator(self) -> None:
|
||||
"""Add a blank entry in the content box."""
|
||||
spacer = QWidget()
|
||||
spacer.setFixedHeight(int(0.5*self._sIcon))
|
||||
@@ -106,7 +106,7 @@ class NSwitchBox(QScrollArea):
|
||||
self._bumpIndex()
|
||||
return
|
||||
|
||||
def setInnerContentsMargins(self, left: int, top: int, right: int, bottom: int):
|
||||
def setInnerContentsMargins(self, left: int, top: int, right: int, bottom: int) -> None:
|
||||
"""Set the contents margins of the inner layout."""
|
||||
self._content.setContentsMargins(left, top, right, bottom)
|
||||
return
|
||||
@@ -115,12 +115,12 @@ class NSwitchBox(QScrollArea):
|
||||
# Internal Functions
|
||||
##
|
||||
|
||||
def _emitSwitchSignal(self, identifier: str, state: bool):
|
||||
def _emitSwitchSignal(self, identifier: str, state: bool) -> None:
|
||||
"""Emit a signal for a switch toggle."""
|
||||
self.switchToggled.emit(identifier, state)
|
||||
return
|
||||
|
||||
def _bumpIndex(self):
|
||||
def _bumpIndex(self) -> None:
|
||||
"""Increase the index counter and make sure only the last
|
||||
columns is stretching.
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user