From 7e280b23713141ad0e0efb95f94a3609c1a0e675 Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Mon, 13 Jan 2025 02:53:55 +0100
Subject: [PATCH] Clean up warnings and deprecations in gui tools
---
novelwriter/config.py | 8 --
novelwriter/tools/dictionaries.py | 17 ++--
novelwriter/tools/lipsum.py | 21 +++--
novelwriter/tools/manusbuild.py | 59 +++++--------
novelwriter/tools/manuscript.py | 135 +++++++++++++----------------
novelwriter/tools/manussettings.py | 98 ++++++++++-----------
novelwriter/tools/noveldetails.py | 82 +++++++-----------
novelwriter/tools/welcome.py | 63 ++++++--------
novelwriter/tools/writingstats.py | 75 +++++++---------
9 files changed, 236 insertions(+), 322 deletions(-)
diff --git a/novelwriter/config.py b/novelwriter/config.py
index b5d09e2d..bf32577e 100644
--- a/novelwriter/config.py
+++ b/novelwriter/config.py
@@ -399,14 +399,6 @@ class Config:
# Methods
##
- def pxInt(self, value: int) -> int:
- """Deprecated. Do not use."""
- return value
-
- def rpxInt(self, value: int) -> int:
- """Deprecated. Do not use."""
- return value
-
def homePath(self) -> Path:
"""The user's home folder."""
return self._homePath
diff --git a/novelwriter/tools/dictionaries.py b/novelwriter/tools/dictionaries.py
index ddb371e1..c956846c 100644
--- a/novelwriter/tools/dictionaries.py
+++ b/novelwriter/tools/dictionaries.py
@@ -57,12 +57,9 @@ class GuiDictionaries(NNonBlockingDialog):
self._currDicts = set()
iSz = SHARED.theme.baseIconSize
- iPx = CONFIG.pxInt(4)
- mPx = CONFIG.pxInt(8)
- sPx = CONFIG.pxInt(16)
- self.setMinimumWidth(CONFIG.pxInt(500))
- self.setMinimumHeight(CONFIG.pxInt(300))
+ self.setMinimumWidth(500)
+ self.setMinimumHeight(300)
# Hunspell Dictionaries
foUrl = "https://www.freeoffice.com/en/download/dictionaries"
@@ -84,7 +81,7 @@ class GuiDictionaries(NNonBlockingDialog):
self.huPathBox = QHBoxLayout()
self.huPathBox.addWidget(self.huInput)
self.huPathBox.addWidget(self.huBrowse)
- self.huPathBox.setSpacing(iPx)
+ self.huPathBox.setSpacing(4)
self.huAddBox = QHBoxLayout()
self.huAddBox.addStretch(1)
self.huAddBox.addWidget(self.huImport)
@@ -99,7 +96,7 @@ class GuiDictionaries(NNonBlockingDialog):
self.inBox = QHBoxLayout()
self.inBox.addWidget(self.inPath)
self.inBox.addWidget(self.inBrowse)
- self.inBox.setSpacing(iPx)
+ self.inBox.setSpacing(4)
# Info Box
self.infoBox = QPlainTextEdit(self)
@@ -116,17 +113,17 @@ class GuiDictionaries(NNonBlockingDialog):
self.innerBox.addWidget(self.huInfo)
self.innerBox.addLayout(self.huPathBox)
self.innerBox.addLayout(self.huAddBox)
- self.innerBox.addSpacing(mPx)
+ self.innerBox.addSpacing(8)
self.innerBox.addWidget(self.inInfo)
self.innerBox.addLayout(self.inBox)
self.innerBox.addWidget(self.infoBox)
- self.innerBox.setSpacing(iPx)
+ self.innerBox.setSpacing(4)
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.innerBox, 0)
self.outerBox.addStretch(1)
self.outerBox.addWidget(self.buttonBox, 0)
- self.outerBox.setSpacing(sPx)
+ self.outerBox.setSpacing(16)
self.setLayout(self.outerBox)
diff --git a/novelwriter/tools/lipsum.py b/novelwriter/tools/lipsum.py
index f9144d49..48aefa2d 100644
--- a/novelwriter/tools/lipsum.py
+++ b/novelwriter/tools/lipsum.py
@@ -52,18 +52,15 @@ class GuiLipsum(NDialog):
self._lipsumText = ""
- vSp = CONFIG.pxInt(4)
- nPx = CONFIG.pxInt(64)
-
self.innerBox = QHBoxLayout()
- self.innerBox.setSpacing(CONFIG.pxInt(16))
+ self.innerBox.setSpacing(16)
# Icon
self.docIcon = QLabel(self)
- self.docIcon.setPixmap(SHARED.theme.getPixmap("text", (nPx, nPx), "blue"))
+ self.docIcon.setPixmap(SHARED.theme.getPixmap("text", (64, 64), "blue"))
self.leftBox = QVBoxLayout()
- self.leftBox.setSpacing(vSp)
+ self.leftBox.setSpacing(4)
self.leftBox.addWidget(self.docIcon)
self.leftBox.addStretch(1)
self.innerBox.addLayout(self.leftBox)
@@ -87,7 +84,7 @@ class GuiLipsum(NDialog):
self.formBox.addWidget(self.paraCount, 1, 1, 1, 1, QtAlignRight)
self.formBox.addWidget(self.randLabel, 2, 0, 1, 1, QtAlignLeft)
self.formBox.addWidget(self.randSwitch, 2, 1, 1, 1, QtAlignRight)
- self.formBox.setVerticalSpacing(vSp)
+ self.formBox.setVerticalSpacing(4)
self.formBox.setRowStretch(3, 1)
self.innerBox.addLayout(self.formBox)
@@ -96,17 +93,19 @@ class GuiLipsum(NDialog):
self.buttonBox.rejected.connect(self.reject)
self.btnClose = self.buttonBox.addButton(QtDialogClose)
- self.btnClose.setAutoDefault(False)
+ if self.btnClose:
+ self.btnClose.setAutoDefault(False)
self.btnInsert = self.buttonBox.addButton(self.tr("Insert"), QtRoleAction)
- self.btnInsert.clicked.connect(self._doInsert)
- self.btnInsert.setAutoDefault(False)
+ if self.btnInsert:
+ self.btnInsert.clicked.connect(self._doInsert)
+ self.btnInsert.setAutoDefault(False)
# Assemble
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox)
- self.outerBox.setSpacing(CONFIG.pxInt(16))
+ self.outerBox.setSpacing(16)
self.setLayout(self.outerBox)
logger.debug("Ready: GuiLipsum")
diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py
index 40e6eefc..f45d7a1f 100644
--- a/novelwriter/tools/manusbuild.py
+++ b/novelwriter/tools/manusbuild.py
@@ -35,7 +35,7 @@ from PyQt6.QtWidgets import (
QPushButton, QSplitter, QVBoxLayout, QWidget
)
-from novelwriter import CONFIG, SHARED
+from novelwriter import SHARED
from novelwriter.common import makeFileNameSafe, openExternalPath
from novelwriter.constants import nwLabels
from novelwriter.core.buildsettings import BuildSettings
@@ -68,21 +68,16 @@ class GuiManuscriptBuild(NDialog):
self._build = build
self.setWindowTitle(self.tr("Build Manuscript"))
- self.setMinimumWidth(CONFIG.pxInt(500))
- self.setMinimumHeight(CONFIG.pxInt(300))
+ self.setMinimumWidth(500)
+ self.setMinimumHeight(300)
iSz = SHARED.theme.baseIconSize
bSz = SHARED.theme.buttonIconSize
- sp4 = CONFIG.pxInt(4)
- sp8 = CONFIG.pxInt(8)
- sp16 = CONFIG.pxInt(16)
- wWin = CONFIG.pxInt(620)
- hWin = CONFIG.pxInt(360)
pOptions = SHARED.project.options
self.resize(
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "winWidth", wWin)),
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "winHeight", hWin))
+ pOptions.getInt("GuiManuscriptBuild", "winWidth", 620),
+ pOptions.getInt("GuiManuscriptBuild", "winHeight", 360),
)
# Output Format
@@ -149,7 +144,7 @@ class GuiManuscriptBuild(NDialog):
self.pathBox = QHBoxLayout()
self.pathBox.addWidget(self.buildPath)
self.pathBox.addWidget(self.btnBrowse)
- self.pathBox.setSpacing(sp8)
+ self.pathBox.setSpacing(8)
# Build Name
self.lblName = QLabel(self.tr("File Name"), self)
@@ -160,14 +155,14 @@ class GuiManuscriptBuild(NDialog):
self.nameBox = QHBoxLayout()
self.nameBox.addWidget(self.buildName)
self.nameBox.addWidget(self.btnReset)
- self.nameBox.setSpacing(sp8)
+ self.nameBox.setSpacing(8)
# Build Progress
self.buildProgress = NProgressSimple(self)
self.buildProgress.setMinimum(0)
self.buildProgress.setValue(0)
self.buildProgress.setTextVisible(False)
- self.buildProgress.setFixedHeight(sp8)
+ self.buildProgress.setFixedHeight(8)
# Build Box
self.buildBox = QGridLayout()
@@ -175,8 +170,8 @@ class GuiManuscriptBuild(NDialog):
self.buildBox.addLayout(self.pathBox, 0, 1)
self.buildBox.addWidget(self.lblName, 1, 0)
self.buildBox.addLayout(self.nameBox, 1, 1)
- self.buildBox.setHorizontalSpacing(sp8)
- self.buildBox.setVerticalSpacing(sp4)
+ self.buildBox.setHorizontalSpacing(8)
+ self.buildBox.setVerticalSpacing(4)
# Dialog Buttons
self.buttonBox = QDialogButtonBox(self)
@@ -196,7 +191,8 @@ class GuiManuscriptBuild(NDialog):
self.buttonBox.addButton(self.btnBuild, QtRoleAction)
self.btnClose = self.buttonBox.addButton(QtDialogClose)
- self.btnClose.setAutoDefault(False)
+ if self.btnClose:
+ self.btnClose.setAutoDefault(False)
# Assemble GUI
# ============
@@ -204,25 +200,25 @@ class GuiManuscriptBuild(NDialog):
self.mainSplit = QSplitter(self)
self.mainSplit.addWidget(self.formatWidget)
self.mainSplit.addWidget(self.contentWidget)
- self.mainSplit.setHandleWidth(sp16)
+ self.mainSplit.setHandleWidth(16)
self.mainSplit.setCollapsible(0, False)
self.mainSplit.setCollapsible(1, False)
self.mainSplit.setStretchFactor(0, 0)
self.mainSplit.setStretchFactor(1, 1)
self.mainSplit.setSizes([
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "fmtWidth", wWin//2)),
- CONFIG.pxInt(pOptions.getInt("GuiManuscriptBuild", "sumWidth", wWin//2)),
+ pOptions.getInt("GuiManuscriptBuild", "fmtWidth", 360),
+ pOptions.getInt("GuiManuscriptBuild", "sumWidth", 360),
])
self.outerBox = QVBoxLayout()
self.outerBox.addWidget(self.lblMain, 0, QtAlignCenter)
- self.outerBox.addSpacing(sp16)
+ self.outerBox.addSpacing(16)
self.outerBox.addWidget(self.mainSplit, 1)
- self.outerBox.addSpacing(sp4)
+ self.outerBox.addSpacing(4)
self.outerBox.addWidget(self.buildProgress, 0)
- self.outerBox.addSpacing(sp4)
+ self.outerBox.addSpacing(4)
self.outerBox.addLayout(self.buildBox, 0)
- self.outerBox.addSpacing(sp16)
+ self.outerBox.addSpacing(16)
self.outerBox.addWidget(self.buttonBox, 0)
self.outerBox.setSpacing(0)
@@ -363,21 +359,14 @@ class GuiManuscriptBuild(NDialog):
def _saveSettings(self) -> None:
"""Save the user GUI settings."""
- winWidth = CONFIG.rpxInt(self.width())
- winHeight = CONFIG.rpxInt(self.height())
-
- mainSplit = self.mainSplit.sizes()
- fmtWidth = CONFIG.rpxInt(mainSplit[0])
- sumWidth = CONFIG.rpxInt(mainSplit[1])
-
logger.debug("Saving State: GuiManuscriptBuild")
+ mainSplit = self.mainSplit.sizes()
pOptions = SHARED.project.options
- pOptions.setValue("GuiManuscriptBuild", "winWidth", winWidth)
- pOptions.setValue("GuiManuscriptBuild", "winHeight", winHeight)
- pOptions.setValue("GuiManuscriptBuild", "fmtWidth", fmtWidth)
- pOptions.setValue("GuiManuscriptBuild", "sumWidth", sumWidth)
+ pOptions.setValue("GuiManuscriptBuild", "winWidth", self.width())
+ pOptions.setValue("GuiManuscriptBuild", "winHeight", self.height())
+ pOptions.setValue("GuiManuscriptBuild", "fmtWidth", mainSplit[0])
+ pOptions.setValue("GuiManuscriptBuild", "sumWidth", mainSplit[1])
pOptions.saveSettings()
-
return
def _populateContentList(self) -> None:
diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py
index 448b8db2..d0d0708c 100644
--- a/novelwriter/tools/manuscript.py
+++ b/novelwriter/tools/manuscript.py
@@ -85,18 +85,16 @@ class GuiManuscript(NToolDialog):
self._buildMap: dict[str, QListWidgetItem] = {}
self.setWindowTitle(self.tr("Build Manuscript"))
- self.setMinimumWidth(CONFIG.pxInt(600))
- self.setMinimumHeight(CONFIG.pxInt(500))
+ self.setMinimumWidth(600)
+ self.setMinimumHeight(500)
iPx = SHARED.theme.baseIconHeight
iSz = SHARED.theme.baseIconSize
- wWin = CONFIG.pxInt(900)
- hWin = CONFIG.pxInt(600)
pOptions = SHARED.project.options
self.resize(
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "winWidth", wWin)),
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "winHeight", hWin))
+ pOptions.getInt("GuiManuscript", "winWidth", 900),
+ pOptions.getInt("GuiManuscript", "winHeight", 600),
)
# Build Controls
@@ -153,9 +151,7 @@ class GuiManuscript(NToolDialog):
# ============
self.buildDetails = _DetailsWidget(self)
- self.buildDetails.setColumnWidth(
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "detailsWidth", 100)),
- )
+ self.buildDetails.setColumnWidth(pOptions.getInt("GuiManuscript", "detailsWidth", 100))
self.buildOutline = _OutlineWidget(self)
@@ -168,8 +164,8 @@ class GuiManuscript(NToolDialog):
self.buildSplit.addWidget(self.buildList)
self.buildSplit.addWidget(self.detailsTabs)
self.buildSplit.setSizes([
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "listHeight", 50)),
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "detailsHeight", 50)),
+ pOptions.getInt("GuiManuscript", "listHeight", 50),
+ pOptions.getInt("GuiManuscript", "detailsHeight", 50),
])
# Process Controls
@@ -240,8 +236,8 @@ class GuiManuscript(NToolDialog):
self.mainSplit.setStretchFactor(0, 0)
self.mainSplit.setStretchFactor(1, 1)
self.mainSplit.setSizes([
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "optsWidth", wWin//4)),
- CONFIG.pxInt(pOptions.getInt("GuiManuscript", "viewWidth", 3*wWin//4)),
+ pOptions.getInt("GuiManuscript", "optsWidth", 225),
+ pOptions.getInt("GuiManuscript", "viewWidth", 675),
])
self.outerBox = QVBoxLayout()
@@ -441,28 +437,20 @@ class GuiManuscript(NToolDialog):
self._builds.setBuildsState(lastBuild, buildOrder)
- winWidth = CONFIG.rpxInt(self.width())
- winHeight = CONFIG.rpxInt(self.height())
-
mainSplit = self.mainSplit.sizes()
- optsWidth = CONFIG.rpxInt(mainSplit[0])
- viewWidth = CONFIG.rpxInt(mainSplit[1])
-
buildSplit = self.buildSplit.sizes()
- listHeight = CONFIG.rpxInt(buildSplit[0])
- detailsHeight = CONFIG.rpxInt(buildSplit[1])
- detailsWidth = CONFIG.rpxInt(self.buildDetails.getColumnWidth())
+ detailsWidth = self.buildDetails.getColumnWidth()
detailsExpanded = self.buildDetails.getExpandedState()
showNewPage = self.swtNewPage.isChecked()
logger.debug("Saving State: GuiManuscript")
pOptions = SHARED.project.options
- pOptions.setValue("GuiManuscript", "winWidth", winWidth)
- pOptions.setValue("GuiManuscript", "winHeight", winHeight)
- pOptions.setValue("GuiManuscript", "optsWidth", optsWidth)
- pOptions.setValue("GuiManuscript", "viewWidth", viewWidth)
- pOptions.setValue("GuiManuscript", "listHeight", listHeight)
- pOptions.setValue("GuiManuscript", "detailsHeight", detailsHeight)
+ pOptions.setValue("GuiManuscript", "winWidth", self.width())
+ pOptions.setValue("GuiManuscript", "winHeight", self.height())
+ pOptions.setValue("GuiManuscript", "optsWidth", mainSplit[0])
+ pOptions.setValue("GuiManuscript", "viewWidth", mainSplit[1])
+ pOptions.setValue("GuiManuscript", "listHeight", buildSplit[0])
+ pOptions.setValue("GuiManuscript", "detailsHeight", buildSplit[1])
pOptions.setValue("GuiManuscript", "detailsWidth", detailsWidth)
pOptions.setValue("GuiManuscript", "detailsExpanded", detailsExpanded)
pOptions.setValue("GuiManuscript", "showNewPage", showNewPage)
@@ -693,33 +681,31 @@ class _OutlineWidget(QWidget):
hFont.setBold(True)
hFont.setUnderline(True)
- root = self.listView.invisibleRootItem()
- parent = root
- indent = False
- for anchor, entry in data.items():
- prefix, _, text = entry.partition("|")
- if prefix in ("TT", "PT", "CH", "SC", "H1", "H2"):
- item = QTreeWidgetItem([text])
- item.setData(0, self.D_LINE, anchor)
- if prefix == "TT":
- item.setFont(0, tFont)
- item.setForeground(0, tBrush)
- root.addChild(item)
- parent = root
- elif prefix == "PT":
- item.setFont(0, hFont)
- root.addChild(item)
- parent = root
- elif prefix in ("CH", "H1"):
- root.addChild(item)
- parent = item
- elif prefix in ("SC", "H2"):
- parent.addChild(item)
- indent = True
+ if root := self.listView.invisibleRootItem():
+ parent = root
+ indent = False
+ for anchor, entry in data.items():
+ prefix, _, text = entry.partition("|")
+ if prefix in ("TT", "PT", "CH", "SC", "H1", "H2"):
+ item = QTreeWidgetItem([text])
+ item.setData(0, self.D_LINE, anchor)
+ if prefix == "TT":
+ item.setFont(0, tFont)
+ item.setForeground(0, tBrush)
+ root.addChild(item)
+ parent = root
+ elif prefix == "PT":
+ item.setFont(0, hFont)
+ root.addChild(item)
+ parent = root
+ elif prefix in ("CH", "H1"):
+ root.addChild(item)
+ parent = item
+ elif prefix in ("SC", "H2"):
+ parent.addChild(item)
+ indent = True
- self.listView.setIndentation(
- SHARED.theme.baseIconHeight if indent else CONFIG.pxInt(4)
- )
+ self.listView.setIndentation(SHARED.theme.baseIconHeight if indent else 4)
self._outline = data
return
@@ -754,7 +740,9 @@ class _PreviewWidget(QTextBrowser):
self.setOpenExternalLinks(False)
self.setOpenLinks(False)
- self.document().setDocumentMargin(CONFIG.textMargin)
+ if document := self.document():
+ document.setDocumentMargin(CONFIG.textMargin)
+
self.setPlaceholderText(self.tr(
"Press the \"Preview\" button to generate ..."
))
@@ -781,7 +769,7 @@ class _PreviewWidget(QTextBrowser):
self.ageLabel.setFixedHeight(int(2.1*SHARED.theme.fontPixelSize))
# Progress
- self.buildProgress = NProgressCircle(self, CONFIG.pxInt(160), CONFIG.pxInt(16))
+ self.buildProgress = NProgressCircle(self, 160, 16)
self.buildProgress.setVisible(False)
self.buildProgress.setMaximum(1)
self.buildProgress.setValue(0)
@@ -834,7 +822,8 @@ class _PreviewWidget(QTextBrowser):
self.buildProgress.setValue(0)
self.buildProgress.setCentreText(None)
self.buildProgress.setVisible(True)
- self._scrollPos = self.verticalScrollBar().value()
+ if vBar := self.verticalScrollBar():
+ self._scrollPos = vBar.value()
self.setPlaceholderText("")
self.clear()
return
@@ -883,10 +872,11 @@ class _PreviewWidget(QTextBrowser):
@pyqtSlot("QPrinter*")
def printPreview(self, printer: QPrinter) -> None:
"""Connect the print preview painter to the document viewer."""
- QApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor))
- printer.setPageOrientation(QPageLayout.Orientation.Portrait)
- self.document().print(printer)
- QApplication.restoreOverrideCursor()
+ if document := self.document():
+ QApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor))
+ printer.setPageOrientation(QPageLayout.Orientation.Portrait)
+ document.print(printer)
+ QApplication.restoreOverrideCursor()
return
@pyqtSlot(str)
@@ -928,7 +918,8 @@ class _PreviewWidget(QTextBrowser):
def _postUpdate(self) -> None:
"""Run tasks after content update."""
self.buildProgress.setVisible(False)
- self.verticalScrollBar().setValue(self._scrollPos)
+ if vBar := self.verticalScrollBar():
+ vBar.setValue(self._scrollPos)
return
##
@@ -941,7 +932,7 @@ class _PreviewWidget(QTextBrowser):
"""
vBar = self.verticalScrollBar()
tB = self.frameWidth()
- vW = self.width() - 2*tB - vBar.width()
+ vW = self.width() - 2*tB - (vBar.width() if vBar else 0)
vH = self.height() - 2*tB
tH = self.ageLabel.height()
pS = self.buildProgress.width()
@@ -1033,10 +1024,6 @@ class _StatsWidget(QWidget):
def _buildBottomPanel(self) -> None:
"""Build the bottom page."""
- mPx = CONFIG.pxInt(8)
- hPx = CONFIG.pxInt(12)
- vPx = CONFIG.pxInt(4)
-
trAllChars = trConst(nwLabels.STATS_NAME[nwStats.CHARS])
trTextChars = trConst(nwLabels.STATS_NAME[nwStats.CHARS_TEXT])
trTitleChars = trConst(nwLabels.STATS_NAME[nwStats.CHARS_TITLE])
@@ -1073,8 +1060,8 @@ class _StatsWidget(QWidget):
self.leftForm.addRow("", QLabel(self))
self.leftForm.addRow(trTitleCount, self.maxTitleCount)
self.leftForm.addRow(trParagraphCount, self.maxParCount)
- self.leftForm.setHorizontalSpacing(hPx)
- self.leftForm.setVerticalSpacing(vPx)
+ self.leftForm.setHorizontalSpacing(12)
+ self.leftForm.setVerticalSpacing(4)
# Maximal Form, Right Column
self.maxTotalChars = QLabel(self)
@@ -1098,25 +1085,25 @@ class _StatsWidget(QWidget):
self.rightForm.addRow(trAllWordChars, self.maxTotalWordChars)
self.rightForm.addRow(trTitleWordChars, self.maxHeadWordChars)
self.rightForm.addRow(trTextWordChars, self.maxTextWordChars)
- self.rightForm.setHorizontalSpacing(hPx)
- self.rightForm.setVerticalSpacing(vPx)
+ self.rightForm.setHorizontalSpacing(12)
+ self.rightForm.setVerticalSpacing(4)
# Assemble
self.minLayout = QHBoxLayout()
self.minLayout.addWidget(QLabel(trAllWords, self))
self.minLayout.addWidget(self.minWordCount)
- self.minLayout.addSpacing(mPx)
+ self.minLayout.addSpacing(8)
self.minLayout.addWidget(QLabel(trAllChars, self))
self.minLayout.addWidget(self.minCharCount)
self.minLayout.addStretch(1)
- self.minLayout.setSpacing(mPx)
+ self.minLayout.setSpacing(8)
self.minLayout.setContentsMargins(0, 0, 0, 0)
self.maxLayout = QHBoxLayout()
self.maxLayout.addLayout(self.leftForm)
self.maxLayout.addLayout(self.rightForm)
self.maxLayout.addStretch(1)
- self.maxLayout.setSpacing(CONFIG.pxInt(32))
+ self.maxLayout.setSpacing(32)
self.maxLayout.setContentsMargins(0, 0, 0, 0)
self.minWidget.setLayout(self.minLayout)
diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py
index 549d39d1..78d59725 100644
--- a/novelwriter/tools/manussettings.py
+++ b/novelwriter/tools/manussettings.py
@@ -37,7 +37,7 @@ from PyQt6.QtWidgets import (
)
from novelwriter import CONFIG, SHARED
-from novelwriter.common import describeFont, fontMatcher, qtLambda
+from novelwriter.common import describeFont, fontMatcher, qtAddAction, qtLambda
from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwStyles, trConst
from novelwriter.core.buildsettings import BuildSettings, FilterMode
from novelwriter.extensions.configlayout import (
@@ -83,21 +83,18 @@ class GuiBuildSettings(NToolDialog):
self._build = build
self.setWindowTitle(self.tr("Manuscript Build Settings"))
- self.setMinimumSize(CONFIG.pxInt(700), CONFIG.pxInt(400))
-
- wWin = CONFIG.pxInt(750)
- hWin = CONFIG.pxInt(550)
+ self.setMinimumSize(700, 400)
options = SHARED.project.options
self.resize(
- CONFIG.pxInt(options.getInt("GuiBuildSettings", "winWidth", wWin)),
- CONFIG.pxInt(options.getInt("GuiBuildSettings", "winHeight", hWin))
+ options.getInt("GuiBuildSettings", "winWidth", 750),
+ options.getInt("GuiBuildSettings", "winHeight", 550),
)
# Title
self.titleLabel = NColourLabel(
self.tr("Manuscript Build Settings"), self, color=SHARED.theme.helpText,
- scale=NColourLabel.HEADER_SCALE, indent=CONFIG.pxInt(4)
+ scale=NColourLabel.HEADER_SCALE, indent=4,
)
# Settings Name
@@ -145,7 +142,7 @@ class GuiBuildSettings(NToolDialog):
self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox)
- self.outerBox.setSpacing(CONFIG.pxInt(12))
+ self.outerBox.setSpacing(12)
self.setLayout(self.outerBox)
@@ -240,14 +237,11 @@ class GuiBuildSettings(NToolDialog):
def _saveSettings(self) -> None:
"""Save the various user settings."""
- winWidth = CONFIG.rpxInt(self.width())
- winHeight = CONFIG.rpxInt(self.height())
treeWidth, filterWidth = self.optTabSelect.mainSplitSizes()
-
logger.debug("Saving State: GuiBuildSettings")
pOptions = SHARED.project.options
- pOptions.setValue("GuiBuildSettings", "winWidth", winWidth)
- pOptions.setValue("GuiBuildSettings", "winHeight", winHeight)
+ pOptions.setValue("GuiBuildSettings", "winWidth", self.width())
+ pOptions.setValue("GuiBuildSettings", "winHeight", self.height())
pOptions.setValue("GuiBuildSettings", "treeWidth", treeWidth)
pOptions.setValue("GuiBuildSettings", "filterWidth", filterWidth)
pOptions.saveSettings()
@@ -300,7 +294,6 @@ class _FilterTab(NFixedPage):
iSz = SHARED.theme.baseIconSize
iPx = SHARED.theme.baseIconHeight
- cMg = CONFIG.pxInt(6)
# Tree Widget
self.optTree = QTreeWidget(self)
@@ -311,14 +304,14 @@ class _FilterTab(NFixedPage):
self.optTree.setIndentation(iPx)
self.optTree.setColumnCount(3)
- treeHeader = self.optTree.header()
- treeHeader.setStretchLastSection(False)
- treeHeader.setMinimumSectionSize(iPx + cMg) # See Issue #1551
- treeHeader.setSectionResizeMode(self.C_NAME, QtHeaderStretch)
- treeHeader.setSectionResizeMode(self.C_ACTIVE, QtHeaderFixed)
- treeHeader.setSectionResizeMode(self.C_STATUS, QtHeaderFixed)
- treeHeader.resizeSection(self.C_ACTIVE, iPx + cMg)
- treeHeader.resizeSection(self.C_STATUS, iPx + cMg)
+ if header := self.optTree.header():
+ header.setStretchLastSection(False)
+ header.setMinimumSectionSize(iPx + 6) # See Issue #1551
+ header.setSectionResizeMode(self.C_NAME, QtHeaderStretch)
+ header.setSectionResizeMode(self.C_ACTIVE, QtHeaderFixed)
+ header.setSectionResizeMode(self.C_STATUS, QtHeaderFixed)
+ header.resizeSection(self.C_ACTIVE, iPx + 6)
+ header.resizeSection(self.C_STATUS, iPx + 6)
self.optTree.setDragDropMode(QAbstractItemView.DragDropMode.NoDragDrop)
self.optTree.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
@@ -347,7 +340,7 @@ class _FilterTab(NFixedPage):
self.modeBox.addWidget(self.includedButton)
self.modeBox.addWidget(self.excludedButton)
self.modeBox.addWidget(self.resetButton)
- self.modeBox.setSpacing(CONFIG.pxInt(4))
+ self.modeBox.setSpacing(4)
# Filer Options
self.filterOpt = NSwitchBox(self, iPx)
@@ -375,8 +368,8 @@ class _FilterTab(NFixedPage):
self.mainSplit.setStretchFactor(0, 1)
self.mainSplit.setStretchFactor(1, 0)
self.mainSplit.setSizes([
- CONFIG.pxInt(pOptions.getInt("GuiBuildSettings", "treeWidth", 300)),
- CONFIG.pxInt(pOptions.getInt("GuiBuildSettings", "filterWidth", 300))
+ pOptions.getInt("GuiBuildSettings", "treeWidth", 300),
+ pOptions.getInt("GuiBuildSettings", "filterWidth", 300),
])
self.setCentralWidget(self.mainSplit)
@@ -393,7 +386,7 @@ class _FilterTab(NFixedPage):
"""Extract the sizes of the main splitter."""
sizes = self.mainSplit.sizes()
m, n = (sizes[0], sizes[1]) if len(sizes) >= 2 else (0, 0)
- return CONFIG.rpxInt(m), CONFIG.rpxInt(n)
+ return m, n
##
# Slots
@@ -558,15 +551,12 @@ class _HeadingsTab(NScrollablePage):
iPx = SHARED.theme.baseIconHeight
iSz = SHARED.theme.baseIconSize
- sSp = CONFIG.pxInt(16)
- vSp = CONFIG.pxInt(12)
- bSp = CONFIG.pxInt(6)
trHide = self.tr("Hide")
# Format Boxes
# ============
self.formatBox = QGridLayout()
- self.formatBox.setHorizontalSpacing(bSp)
+ self.formatBox.setHorizontalSpacing(6)
# Title Heading
self.lblPart = QLabel(self._build.getLabel("headings.fmtPart"), self)
@@ -575,7 +565,7 @@ class _HeadingsTab(NScrollablePage):
self.btnPart = NIconToolButton(self, iSz, "edit", "green")
self.btnPart.clicked.connect(qtLambda(self._editHeading, self.EDIT_TITLE))
self.hdePart = QLabel(trHide, self)
- self.hdePart.setIndent(bSp)
+ self.hdePart.setIndent(6)
self.swtPart = NSwitch(self, height=iPx)
self.formatBox.addWidget(self.lblPart, 0, 0)
@@ -591,7 +581,7 @@ class _HeadingsTab(NScrollablePage):
self.btnChapter = NIconToolButton(self, iSz, "edit", "green")
self.btnChapter.clicked.connect(qtLambda(self._editHeading, self.EDIT_CHAPTER))
self.hdeChapter = QLabel(trHide, self)
- self.hdeChapter.setIndent(bSp)
+ self.hdeChapter.setIndent(6)
self.swtChapter = NSwitch(self, height=iPx)
self.formatBox.addWidget(self.lblChapter, 1, 0)
@@ -607,7 +597,7 @@ class _HeadingsTab(NScrollablePage):
self.btnUnnumbered = NIconToolButton(self, iSz, "edit", "green")
self.btnUnnumbered.clicked.connect(qtLambda(self._editHeading, self.EDIT_UNNUM))
self.hdeUnnumbered = QLabel(trHide, self)
- self.hdeUnnumbered.setIndent(bSp)
+ self.hdeUnnumbered.setIndent(6)
self.swtUnnumbered = NSwitch(self, height=iPx)
self.formatBox.addWidget(self.lblUnnumbered, 2, 0)
@@ -623,7 +613,7 @@ class _HeadingsTab(NScrollablePage):
self.btnScene = NIconToolButton(self, iSz, "edit", "green")
self.btnScene.clicked.connect(qtLambda(self._editHeading, self.EDIT_SCENE))
self.hdeScene = QLabel(trHide, self)
- self.hdeScene.setIndent(bSp)
+ self.hdeScene.setIndent(6)
self.swtScene = NSwitch(self, height=iPx)
self.formatBox.addWidget(self.lblScene, 3, 0)
@@ -639,7 +629,7 @@ class _HeadingsTab(NScrollablePage):
self.btnAScene = NIconToolButton(self, iSz, "edit", "green")
self.btnAScene.clicked.connect(qtLambda(self._editHeading, self.EDIT_HSCENE))
self.hdeAScene = QLabel(trHide, self)
- self.hdeAScene.setIndent(bSp)
+ self.hdeAScene.setIndent(6)
self.swtAScene = NSwitch(self, height=iPx)
self.formatBox.addWidget(self.lblAScene, 4, 0)
@@ -655,7 +645,7 @@ class _HeadingsTab(NScrollablePage):
self.btnSection = NIconToolButton(self, iSz, "edit", "green")
self.btnSection.clicked.connect(qtLambda(self._editHeading, self.EDIT_SECTION))
self.hdeSection = QLabel(trHide, self)
- self.hdeSection.setIndent(bSp)
+ self.hdeSection.setIndent(6)
self.swtSection = NSwitch(self, height=iPx)
self.formatBox.addWidget(self.lblSection, 5, 0)
@@ -675,16 +665,16 @@ class _HeadingsTab(NScrollablePage):
self.formSyntax = _HeadingSyntaxHighlighter(self.editTextBox.document())
- self.menuInsert = QMenu(self)
- self.aInsTitle = self.menuInsert.addAction(self.tr("Title"))
- self.aInsChNum = self.menuInsert.addAction(self.tr("Chapter Number"))
- self.aInsChWord = self.menuInsert.addAction(self.tr("Chapter Number (Word)"))
- self.aInsChRomU = self.menuInsert.addAction(self.tr("Chapter Number (Upper Case Roman)"))
- self.aInsChRomL = self.menuInsert.addAction(self.tr("Chapter Number (Lower Case Roman)"))
- self.aInsScNum = self.menuInsert.addAction(self.tr("Scene Number (In Chapter)"))
- self.aInsScAbs = self.menuInsert.addAction(self.tr("Scene Number (Absolute)"))
- self.aInsCharPOV = self.menuInsert.addAction(self.tr("Point of View Character"))
- self.aInsCharFocus = self.menuInsert.addAction(self.tr("Focus Character"))
+ self.mInsert = QMenu(self)
+ self.aInsTitle = qtAddAction(self.mInsert, self.tr("Title"))
+ self.aInsChNum = qtAddAction(self.mInsert, self.tr("Chapter Number"))
+ self.aInsChWord = qtAddAction(self.mInsert, self.tr("Chapter Number (Word)"))
+ self.aInsChRomU = qtAddAction(self.mInsert, self.tr("Chapter Number (Upper Case Roman)"))
+ self.aInsChRomL = qtAddAction(self.mInsert, self.tr("Chapter Number (Lower Case Roman)"))
+ self.aInsScNum = qtAddAction(self.mInsert, self.tr("Scene Number (In Chapter)"))
+ self.aInsScAbs = qtAddAction(self.mInsert, self.tr("Scene Number (Absolute)"))
+ self.aInsCharPOV = qtAddAction(self.mInsert, self.tr("Point of View Character"))
+ self.aInsCharFocus = qtAddAction(self.mInsert, self.tr("Focus Character"))
self.aInsTitle.triggered.connect(qtLambda(self._insertIntoForm, nwHeadFmt.TITLE))
self.aInsChNum.triggered.connect(qtLambda(self._insertIntoForm, nwHeadFmt.CH_NUM))
@@ -697,7 +687,7 @@ class _HeadingsTab(NScrollablePage):
self.aInsCharFocus.triggered.connect(qtLambda(self._insertIntoForm, nwHeadFmt.CHAR_FOCUS))
self.btnInsert = QPushButton(self.tr("Insert"), self)
- self.btnInsert.setMenu(self.menuInsert)
+ self.btnInsert.setMenu(self.mInsert)
self.btnApply = QPushButton(self.tr("Apply"), self)
self.btnApply.clicked.connect(self._saveFormat)
@@ -715,8 +705,8 @@ class _HeadingsTab(NScrollablePage):
# Layout Matrix
# =============
self.layoutMatrix = QGridLayout()
- self.layoutMatrix.setVerticalSpacing(vSp)
- self.layoutMatrix.setHorizontalSpacing(vSp)
+ self.layoutMatrix.setVerticalSpacing(12)
+ self.layoutMatrix.setHorizontalSpacing(12)
self.layoutMatrix.addWidget(QLabel(self.tr("Centre"), self), 0, 1)
self.layoutMatrix.addWidget(QLabel(self.tr("Page Break"), self), 0, 2)
@@ -764,9 +754,9 @@ class _HeadingsTab(NScrollablePage):
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.formatBox)
- self.outerBox.addSpacing(sSp)
+ self.outerBox.addSpacing(16)
self.outerBox.addLayout(self.editFormBox)
- self.outerBox.addSpacing(sSp)
+ self.outerBox.addSpacing(16)
self.outerBox.addLayout(self.layoutMatrix)
self.outerBox.addStretch(1)
@@ -904,7 +894,7 @@ class _HeadingsTab(NScrollablePage):
class _HeadingSyntaxHighlighter(QSyntaxHighlighter):
- def __init__(self, document: QTextDocument) -> None:
+ def __init__(self, document: QTextDocument | None) -> None:
super().__init__(document)
syntax = SHARED.theme.syntaxTheme
self._fmtSymbol = QTextCharFormat()
@@ -1223,7 +1213,7 @@ class _FormattingTab(NScrollableForm):
# Header
self.odtPageHeader = QLineEdit(self)
- self.odtPageHeader.setMinimumWidth(CONFIG.pxInt(200))
+ self.odtPageHeader.setMinimumWidth(200)
self.btnPageHeader = NIconToolButton(self, iSz, "revert", "green")
self.btnPageHeader.clicked.connect(self._resetPageHeader)
self.addRow(
diff --git a/novelwriter/tools/noveldetails.py b/novelwriter/tools/noveldetails.py
index a71539e5..c23a513e 100644
--- a/novelwriter/tools/noveldetails.py
+++ b/novelwriter/tools/noveldetails.py
@@ -34,7 +34,7 @@ from PyQt6.QtWidgets import (
QVBoxLayout, QWidget
)
-from novelwriter import CONFIG, SHARED
+from novelwriter import SHARED
from novelwriter.common import formatTime, numberToRoman
from novelwriter.constants import nwUnicode
from novelwriter.extensions.configlayout import NColourLabel, NFixedPage, NScrollablePage
@@ -60,16 +60,16 @@ class GuiNovelDetails(NNonBlockingDialog):
self.setWindowTitle(self.tr("Novel Details"))
options = SHARED.project.options
- self.setMinimumSize(CONFIG.pxInt(500), CONFIG.pxInt(400))
+ self.setMinimumSize(500, 400)
self.resize(
- CONFIG.pxInt(options.getInt("GuiNovelDetails", "winWidth", CONFIG.pxInt(650))),
- CONFIG.pxInt(options.getInt("GuiNovelDetails", "winHeight", CONFIG.pxInt(500)))
+ options.getInt("GuiNovelDetails", "winWidth", 650),
+ options.getInt("GuiNovelDetails", "winHeight", 500),
)
# Title
self.titleLabel = NColourLabel(
self.tr("Novel Details"), self, color=SHARED.theme.helpText,
- scale=NColourLabel.HEADER_SCALE, indent=CONFIG.pxInt(4)
+ scale=NColourLabel.HEADER_SCALE, indent=4,
)
# Novel Selector
@@ -114,7 +114,7 @@ class GuiNovelDetails(NNonBlockingDialog):
self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.buttonBox)
- self.outerBox.setSpacing(CONFIG.pxInt(8))
+ self.outerBox.setSpacing(8)
self.setLayout(self.outerBox)
self.setSizeGripEnabled(True)
@@ -172,18 +172,13 @@ class GuiNovelDetails(NNonBlockingDialog):
def _saveSettings(self) -> None:
"""Save the user GUI settings."""
- winWidth = CONFIG.rpxInt(self.width())
- winHeight = CONFIG.rpxInt(self.height())
- novelRoot = self.novelSelector.handle
-
logger.debug("Saving State: GuiNovelDetails")
+ novelRoot = self.novelSelector.handle
options = SHARED.project.options
- options.setValue("GuiNovelDetails", "winWidth", winWidth)
- options.setValue("GuiNovelDetails", "winHeight", winHeight)
+ options.setValue("GuiNovelDetails", "winWidth", self.width())
+ options.setValue("GuiNovelDetails", "winHeight", self.height())
options.setValue("GuiNovelDetails", "novelRoot", novelRoot)
-
self.contentsPage.saveSettings()
-
return
@@ -192,11 +187,6 @@ class _OverviewPage(NScrollablePage):
def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent)
- mPx = CONFIG.pxInt(8)
- sPx = CONFIG.pxInt(16)
- hPx = CONFIG.pxInt(24)
- vPx = CONFIG.pxInt(4)
-
# Project Info
self.projLabel = NColourLabel(
self.tr("Project"), self, color=SHARED.theme.helpText,
@@ -217,9 +207,9 @@ class _OverviewPage(NScrollablePage):
self.projForm.addRow("{0}".format(self.tr("Word Count")), self.projWords)
self.projForm.addRow("\u2026 {0}".format(self.tr("In Novels")), self.projNovels)
self.projForm.addRow("\u2026 {0}".format(self.tr("In Notes")), self.projNotes)
- self.projForm.setContentsMargins(mPx, 0, 0, 0)
- self.projForm.setHorizontalSpacing(hPx)
- self.projForm.setVerticalSpacing(vPx)
+ self.projForm.setContentsMargins(8, 0, 0, 0)
+ self.projForm.setHorizontalSpacing(24)
+ self.projForm.setVerticalSpacing(4)
# Novel Info
self.novelLabel = NColourLabel(
@@ -237,9 +227,9 @@ class _OverviewPage(NScrollablePage):
self.novelForm.addRow("{0}".format(self.tr("Word Count")), self.novelWords)
self.novelForm.addRow("{0}".format(self.tr("Chapters")), self.novelChapters)
self.novelForm.addRow("{0}".format(self.tr("Scenes")), self.novelScenes)
- self.novelForm.setContentsMargins(mPx, 0, 0, 0)
- self.novelForm.setHorizontalSpacing(hPx)
- self.novelForm.setVerticalSpacing(vPx)
+ self.novelForm.setContentsMargins(8, 0, 0, 0)
+ self.novelForm.setHorizontalSpacing(24)
+ self.novelForm.setVerticalSpacing(4)
# Assemble
self.outerBox = QVBoxLayout()
@@ -247,7 +237,7 @@ class _OverviewPage(NScrollablePage):
self.outerBox.addLayout(self.projForm)
self.outerBox.addWidget(self.novelLabel)
self.outerBox.addLayout(self.novelForm)
- self.outerBox.setSpacing(sPx)
+ self.outerBox.setSpacing(16)
self.outerBox.addStretch(1)
self.setCentralLayout(self.outerBox)
@@ -309,8 +299,6 @@ class _ContentsPage(NFixedPage):
iPx = SHARED.theme.baseIconHeight
iSz = SHARED.theme.baseIconSize
- hPx = CONFIG.pxInt(12)
- vPx = CONFIG.pxInt(4)
options = SHARED.project.options
# Title
@@ -341,22 +329,22 @@ class _ContentsPage(NFixedPage):
treeHeadItem.setTextAlignment(self.C_PAGE, QtAlignRight)
treeHeadItem.setTextAlignment(self.C_PROG, QtAlignRight)
- treeHeader = self.tocTree.header()
- treeHeader.setStretchLastSection(True)
- treeHeader.setMinimumSectionSize(hPx)
+ if header := self.tocTree.header():
+ header.setStretchLastSection(True)
+ header.setMinimumSectionSize(12)
- wCol0 = CONFIG.pxInt(options.getInt("GuiNovelDetails", "widthCol0", 200))
- wCol1 = CONFIG.pxInt(options.getInt("GuiNovelDetails", "widthCol1", 60))
- wCol2 = CONFIG.pxInt(options.getInt("GuiNovelDetails", "widthCol2", 60))
- wCol3 = CONFIG.pxInt(options.getInt("GuiNovelDetails", "widthCol3", 60))
- wCol4 = CONFIG.pxInt(options.getInt("GuiNovelDetails", "widthCol4", 90))
+ wCol0 = options.getInt("GuiNovelDetails", "widthCol0", 200)
+ wCol1 = options.getInt("GuiNovelDetails", "widthCol1", 60)
+ wCol2 = options.getInt("GuiNovelDetails", "widthCol2", 60)
+ wCol3 = options.getInt("GuiNovelDetails", "widthCol3", 60)
+ wCol4 = options.getInt("GuiNovelDetails", "widthCol4", 90)
self.tocTree.setColumnWidth(0, wCol0)
self.tocTree.setColumnWidth(1, wCol1)
self.tocTree.setColumnWidth(2, wCol2)
self.tocTree.setColumnWidth(3, wCol3)
self.tocTree.setColumnWidth(4, wCol4)
- self.tocTree.setColumnWidth(5, hPx)
+ self.tocTree.setColumnWidth(5, 12)
# Options
wordsPerPage = options.getInt("GuiNovelDetails", "wordsPerPage", 350)
@@ -394,8 +382,8 @@ class _ContentsPage(NFixedPage):
self.optionsBox.addWidget(self.dblValue, 0, 4)
self.optionsBox.addWidget(self.poLabel, 1, 0)
self.optionsBox.addWidget(self.poValue, 1, 1)
- self.optionsBox.setHorizontalSpacing(hPx)
- self.optionsBox.setVerticalSpacing(vPx)
+ self.optionsBox.setHorizontalSpacing(12)
+ self.optionsBox.setVerticalSpacing(4)
self.optionsBox.setColumnStretch(2, 1)
# Assemble
@@ -410,18 +398,12 @@ class _ContentsPage(NFixedPage):
def saveSettings(self) -> None:
"""Save the user GUI settings."""
- widthCol0 = CONFIG.rpxInt(self.tocTree.columnWidth(0))
- widthCol1 = CONFIG.rpxInt(self.tocTree.columnWidth(1))
- widthCol2 = CONFIG.rpxInt(self.tocTree.columnWidth(2))
- widthCol3 = CONFIG.rpxInt(self.tocTree.columnWidth(3))
- widthCol4 = CONFIG.rpxInt(self.tocTree.columnWidth(4))
-
options = SHARED.project.options
- options.setValue("GuiNovelDetails", "widthCol0", widthCol0)
- options.setValue("GuiNovelDetails", "widthCol1", widthCol1)
- options.setValue("GuiNovelDetails", "widthCol2", widthCol2)
- options.setValue("GuiNovelDetails", "widthCol3", widthCol3)
- options.setValue("GuiNovelDetails", "widthCol4", widthCol4)
+ options.setValue("GuiNovelDetails", "widthCol0", self.tocTree.columnWidth(0))
+ options.setValue("GuiNovelDetails", "widthCol1", self.tocTree.columnWidth(1))
+ options.setValue("GuiNovelDetails", "widthCol2", self.tocTree.columnWidth(2))
+ options.setValue("GuiNovelDetails", "widthCol3", self.tocTree.columnWidth(3))
+ options.setValue("GuiNovelDetails", "widthCol4", self.tocTree.columnWidth(4))
options.setValue("GuiNovelDetails", "wordsPerPage", self.wpValue.value())
options.setValue("GuiNovelDetails", "countFrom", self.poValue.value())
options.setValue("GuiNovelDetails", "clearDouble", self.dblValue.isChecked())
diff --git a/novelwriter/tools/welcome.py b/novelwriter/tools/welcome.py
index 88126797..32791caf 100644
--- a/novelwriter/tools/welcome.py
+++ b/novelwriter/tools/welcome.py
@@ -40,7 +40,7 @@ from PyQt6.QtWidgets import (
)
from novelwriter import CONFIG, SHARED
-from novelwriter.common import cssCol, formatInt, makeFileNameSafe, qtLambda
+from novelwriter.common import cssCol, formatInt, makeFileNameSafe, qtAddAction, qtLambda
from novelwriter.constants import nwFiles
from novelwriter.core.coretools import ProjectBuilder
from novelwriter.enum import nwItemClass
@@ -66,29 +66,21 @@ class GuiWelcome(NDialog):
self.setObjectName("GuiWelcome")
self.setWindowTitle(self.tr("Welcome"))
- self.setMinimumWidth(CONFIG.pxInt(650))
- self.setMinimumHeight(CONFIG.pxInt(450))
-
- hA = CONFIG.pxInt(8)
- hB = CONFIG.pxInt(16)
- hC = CONFIG.pxInt(24)
- hD = CONFIG.pxInt(36)
- hE = CONFIG.pxInt(48)
- hF = CONFIG.pxInt(128)
- btnIconSize = SHARED.theme.buttonIconSize
-
- self._hPx = CONFIG.pxInt(600)
+ self.setMinimumWidth(650)
+ self.setMinimumHeight(450)
self.resize(*CONFIG.welcomeWinSize)
+ btnIconSize = SHARED.theme.buttonIconSize
+
# Elements
# ========
self.bgImage = SHARED.theme.loadDecoration("welcome")
- self.nwImage = SHARED.theme.loadDecoration("nw-text", h=hD)
+ self.nwImage = SHARED.theme.loadDecoration("nw-text", h=36)
self.bgColor = QColor(54, 54, 54) if SHARED.theme.isDarkTheme else QColor(255, 255, 255)
self.nwLogo = QLabel(self)
- self.nwLogo.setPixmap(SHARED.theme.getPixmap("novelwriter", (hF, hF)))
+ self.nwLogo.setPixmap(SHARED.theme.getPixmap("novelwriter", (128, 128)))
self.nwLabel = QLabel(self)
self.nwLabel.setPixmap(self.nwImage)
@@ -152,18 +144,18 @@ class GuiWelcome(NDialog):
# ========
self.innerBox = QVBoxLayout()
- self.innerBox.addSpacing(hB)
+ self.innerBox.addSpacing(16)
self.innerBox.addWidget(self.nwLabel)
self.innerBox.addWidget(self.nwInfo)
- self.innerBox.addSpacing(hA)
+ self.innerBox.addSpacing(8)
self.innerBox.addWidget(self.mainStack)
- self.innerBox.addSpacing(hB)
+ self.innerBox.addSpacing(16)
self.innerBox.addLayout(self.btnBox)
self.outerBox = QHBoxLayout()
self.outerBox.addWidget(self.nwLogo, 3, QtAlignRightTop)
self.outerBox.addLayout(self.innerBox, 9)
- self.outerBox.setContentsMargins(hF, hE, hC, hE)
+ self.outerBox.setContentsMargins(128, 48, 24, 48)
self.setLayout(self.outerBox)
self.setSizeGripEnabled(True)
@@ -183,7 +175,7 @@ class GuiWelcome(NDialog):
def paintEvent(self, event: QPaintEvent) -> None:
"""Overload the paint event to draw the background image."""
hWin = self.height()
- hPix = min(hWin, self._hPx)
+ hPix = min(hWin, 600)
tMode = Qt.TransformationMode.SmoothTransformation
painter = QPainter(self)
painter.fillRect(self.rect(), self.bgColor)
@@ -309,11 +301,10 @@ class _OpenProjectPage(QWidget):
self._selectFirstItem()
- mPx = CONFIG.pxInt(4)
baseCol = cssCol(self.palette().base().color(), PANEL_ALPHA)
self.setStyleSheet(
f"QListView {{border: none; background: {baseCol};}} "
- f"QLineEdit {{border: none; background: {baseCol}; padding: {mPx}px;}} "
+ f"QLineEdit {{border: none; background: {baseCol}; padding: 4px;}} "
)
return
@@ -370,9 +361,9 @@ class _OpenProjectPage(QWidget):
"""Open the custom context menu."""
ctxMenu = QMenu(self)
ctxMenu.setObjectName("ContextMenu") # Used for testing
- action = ctxMenu.addAction(self.tr("Open Project"))
+ action = qtAddAction(ctxMenu, self.tr("Open Project"))
action.triggered.connect(self.openSelectedItem)
- action = ctxMenu.addAction(self.tr("Remove Project"))
+ action = qtAddAction(ctxMenu, self.tr("Remove Project"))
action.triggered.connect(self._deleteSelectedItem)
ctxMenu.exec(self.mapToGlobal(pos))
ctxMenu.deleteLater()
@@ -400,11 +391,10 @@ class _ProjectListItem(QStyledItemDelegate):
fPx = SHARED.theme.fontPixelSize
fPt = SHARED.theme.fontPointSize
tPx = round(1.2 * fPx)
- mPx = CONFIG.pxInt(4)
iPx = tPx + fPx
- self._pPx = (mPx//2, 3*mPx//2, iPx + mPx, mPx, mPx + tPx) # Painter coordinates
- self._hPx = 2*mPx + tPx + fPx # Fixed height
+ self._pPx = (iPx + 4, tPx + 4) # Painter coordinates
+ self._hPx = 8 + tPx + fPx # Fixed height
self._tFont = QApplication.font()
self._tFont.setPointSizeF(1.2*fPt)
@@ -423,7 +413,7 @@ class _ProjectListItem(QStyledItemDelegate):
rect = opt.rect
title, _, details = index.data()
tFlag = Qt.TextFlag.TextSingleLine
- ix, iy, x, y1, y2 = self._pPx
+ x, y = self._pPx
painter.save()
if opt.state & QtSelected == QtSelected:
@@ -431,12 +421,12 @@ class _ProjectListItem(QStyledItemDelegate):
painter.fillRect(rect, QApplication.palette().highlight())
painter.setOpacity(1.0)
- painter.drawPixmap(ix, rect.top() + iy, self._icon)
+ painter.drawPixmap(2, rect.top() + 6, self._icon)
painter.setFont(self._tFont)
- painter.drawText(rect.adjusted(x, y1, 0, 0), tFlag, title)
+ painter.drawText(rect.adjusted(x, 4, 0, 0), tFlag, title)
painter.setFont(self._dFont)
painter.setPen(self._dPen)
- painter.drawText(rect.adjusted(x, y2, 0, 0), tFlag, details)
+ painter.drawText(rect.adjusted(x, y, 0, 0), tFlag, details)
painter.restore()
return
@@ -557,7 +547,6 @@ class _NewProjectForm(QWidget):
iPx = SHARED.theme.baseIconHeight
iSz = SHARED.theme.baseIconSize
- sPx = CONFIG.pxInt(16)
# Project Settings
# ================
@@ -592,15 +581,15 @@ class _NewProjectForm(QWidget):
self.fillMenu = QMenu(self.browseFill)
- self.fillBlank = self.fillMenu.addAction(self.tr("Create a fresh project"))
+ self.fillBlank = qtAddAction(self.fillMenu, self.tr("Create a fresh project"))
self.fillBlank.setIcon(SHARED.theme.getIcon("document"))
self.fillBlank.triggered.connect(self._setFillBlank)
- self.fillSample = self.fillMenu.addAction(self.tr("Create an example project"))
+ self.fillSample = qtAddAction(self.fillMenu, self.tr("Create an example project"))
self.fillSample.setIcon(SHARED.theme.getIcon("document_add", "blue"))
self.fillSample.triggered.connect(self._setFillSample)
- self.fillCopy = self.fillMenu.addAction(self.tr("Copy an existing project"))
+ self.fillCopy = qtAddAction(self.fillMenu, self.tr("Copy an existing project"))
self.fillCopy.setIcon(SHARED.theme.getIcon("project_copy", "green"))
self.fillCopy.triggered.connect(self._setFillCopy)
@@ -675,7 +664,7 @@ class _NewProjectForm(QWidget):
self.extraBox = QVBoxLayout()
self.extraBox.addWidget(QLabel("{0}".format(self.tr("Chapters and Scenes")), self))
self.extraBox.addLayout(self.novelForm)
- self.extraBox.addSpacing(sPx)
+ self.extraBox.addSpacing(16)
self.extraBox.addWidget(QLabel("{0}".format(self.tr("Project Notes")), self))
self.extraBox.addLayout(self.notesForm)
self.extraBox.setContentsMargins(0, 0, 0, 0)
@@ -687,7 +676,7 @@ class _NewProjectForm(QWidget):
self.formBox = QVBoxLayout()
self.formBox.addWidget(QLabel("{0}".format(self.tr("Create New Project")), self))
self.formBox.addLayout(self.projectForm)
- self.formBox.addSpacing(sPx)
+ self.formBox.addSpacing(16)
self.formBox.addWidget(self.extraWidget)
self.formBox.addStretch(1)
diff --git a/novelwriter/tools/writingstats.py b/novelwriter/tools/writingstats.py
index bc59ab62..acf8d308 100644
--- a/novelwriter/tools/writingstats.py
+++ b/novelwriter/tools/writingstats.py
@@ -82,26 +82,18 @@ class GuiWritingStats(NToolDialog):
pOptions = SHARED.project.options
self.setWindowTitle(self.tr("Writing Statistics"))
- self.setMinimumWidth(CONFIG.pxInt(420))
- self.setMinimumHeight(CONFIG.pxInt(400))
+ self.setMinimumWidth(420)
+ self.setMinimumHeight(400)
self.resize(
- CONFIG.pxInt(pOptions.getInt("GuiWritingStats", "winWidth", 550)),
- CONFIG.pxInt(pOptions.getInt("GuiWritingStats", "winHeight", 500))
+ pOptions.getInt("GuiWritingStats", "winWidth", 550),
+ pOptions.getInt("GuiWritingStats", "winHeight", 500),
)
# List Box
- wCol0 = CONFIG.pxInt(
- pOptions.getInt("GuiWritingStats", "widthCol0", 180)
- )
- wCol1 = CONFIG.pxInt(
- pOptions.getInt("GuiWritingStats", "widthCol1", 80)
- )
- wCol2 = CONFIG.pxInt(
- pOptions.getInt("GuiWritingStats", "widthCol2", 80)
- )
- wCol3 = CONFIG.pxInt(
- pOptions.getInt("GuiWritingStats", "widthCol3", 80)
- )
+ wCol0 = pOptions.getInt("GuiWritingStats", "widthCol0", 180)
+ wCol1 = pOptions.getInt("GuiWritingStats", "widthCol1", 80)
+ wCol2 = pOptions.getInt("GuiWritingStats", "widthCol2", 80)
+ wCol3 = pOptions.getInt("GuiWritingStats", "widthCol3", 80)
self.listBox = QTreeWidget(self)
self.listBox.setHeaderLabels([
@@ -133,7 +125,6 @@ class GuiWritingStats(NToolDialog):
# Word Bar
self.barHeight = int(round(0.5*SHARED.theme.fontPixelSize))
- self.barWidth = CONFIG.pxInt(200)
self.barImage = QPixmap(self.barHeight, self.barHeight)
self.barImage.fill(self.palette().highlight().color())
@@ -262,25 +253,27 @@ class GuiWritingStats(NToolDialog):
self.optsBox.addWidget(self.histMax, 0)
# Buttons
+ self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self)
+ self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
+
+ self.saveCSV = QAction(self.tr("CSV Data File (.csv)"), self)
+ self.saveCSV.triggered.connect(qtLambda(self._saveData, self.FMT_CSV))
+
+ self.saveMenu = QMenu(self)
+ self.saveMenu.addAction(self.saveJSON)
+ self.saveMenu.addAction(self.saveCSV)
+
self.buttonBox = QDialogButtonBox(self)
self.buttonBox.rejected.connect(self._doClose)
self.btnClose = self.buttonBox.addButton(QtDialogClose)
- self.btnClose.setAutoDefault(False)
+ if self.btnClose:
+ self.btnClose.setAutoDefault(False)
self.btnSave = self.buttonBox.addButton(self.tr("Save As"), QtRoleAction)
- self.btnSave.setAutoDefault(False)
-
- self.saveMenu = QMenu(self)
- self.btnSave.setMenu(self.saveMenu)
-
- self.saveJSON = QAction(self.tr("JSON Data File (.json)"), self)
- self.saveJSON.triggered.connect(qtLambda(self._saveData, self.FMT_JSON))
- self.saveMenu.addAction(self.saveJSON)
-
- self.saveCSV = QAction(self.tr("CSV Data File (.csv)"), self)
- self.saveCSV.triggered.connect(qtLambda(self._saveData, self.FMT_CSV))
- self.saveMenu.addAction(self.saveCSV)
+ if self.btnSave:
+ self.btnSave.setAutoDefault(False)
+ self.btnSave.setMenu(self.saveMenu)
# Assemble
self.outerBox = QGridLayout()
@@ -328,14 +321,10 @@ class GuiWritingStats(NToolDialog):
"""Save the state of the window, clear cache, end close."""
self.logData = []
- winWidth = CONFIG.rpxInt(self.width())
- winHeight = CONFIG.rpxInt(self.height())
- widthCol0 = CONFIG.rpxInt(self.listBox.columnWidth(0))
- widthCol1 = CONFIG.rpxInt(self.listBox.columnWidth(1))
- widthCol2 = CONFIG.rpxInt(self.listBox.columnWidth(2))
- widthCol3 = CONFIG.rpxInt(self.listBox.columnWidth(3))
+ header = self.listBox.header()
+
sortCol = self.listBox.sortColumn()
- sortOrder = self.listBox.header().sortIndicatorOrder()
+ sortOrder = header.sortIndicatorOrder() if header else 0
incNovel = self.incNovel.isChecked()
incNotes = self.incNotes.isChecked()
hideZeros = self.hideZeros.isChecked()
@@ -346,12 +335,12 @@ class GuiWritingStats(NToolDialog):
logger.debug("Saving State: GuiWritingStats")
pOptions = SHARED.project.options
- pOptions.setValue("GuiWritingStats", "winWidth", winWidth)
- pOptions.setValue("GuiWritingStats", "winHeight", winHeight)
- pOptions.setValue("GuiWritingStats", "widthCol0", widthCol0)
- pOptions.setValue("GuiWritingStats", "widthCol1", widthCol1)
- pOptions.setValue("GuiWritingStats", "widthCol2", widthCol2)
- pOptions.setValue("GuiWritingStats", "widthCol3", widthCol3)
+ pOptions.setValue("GuiWritingStats", "winWidth", self.width())
+ pOptions.setValue("GuiWritingStats", "winHeight", self.height())
+ pOptions.setValue("GuiWritingStats", "widthCol0", self.listBox.columnWidth(0))
+ pOptions.setValue("GuiWritingStats", "widthCol1", self.listBox.columnWidth(1))
+ pOptions.setValue("GuiWritingStats", "widthCol2", self.listBox.columnWidth(2))
+ pOptions.setValue("GuiWritingStats", "widthCol3", self.listBox.columnWidth(3))
pOptions.setValue("GuiWritingStats", "sortCol", sortCol)
pOptions.setValue("GuiWritingStats", "sortOrder", sortOrder)
pOptions.setValue("GuiWritingStats", "incNovel", incNovel)