From 324b204eaa731665d5983246d52c294b61f24d15 Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Tue, 16 May 2023 23:00:30 +0200
Subject: [PATCH] Drop all mappings of config object into classes now that
tests don't need that
---
novelwriter/config.py | 8 +-
novelwriter/core/coretools.py | 8 +-
novelwriter/core/project.py | 21 +-
novelwriter/core/projectxml.py | 6 +-
novelwriter/core/status.py | 10 +-
novelwriter/core/storage.py | 7 +-
novelwriter/core/tohtml.py | 5 +-
novelwriter/core/tokenizer.py | 2 -
novelwriter/core/toodt.py | 4 +-
novelwriter/custom.py | 16 +-
novelwriter/dialogs/about.py | 26 +--
novelwriter/dialogs/docmerge.py | 13 +-
novelwriter/dialogs/docsplit.py | 13 +-
novelwriter/dialogs/editlabel.py | 7 +-
novelwriter/dialogs/preferences.py | 274 ++++++++++++------------
novelwriter/dialogs/projdetails.py | 47 ++--
novelwriter/dialogs/projload.py | 23 +-
novelwriter/dialogs/projsettings.py | 30 ++-
novelwriter/dialogs/quotes.py | 8 +-
novelwriter/dialogs/updates.py | 19 +-
novelwriter/dialogs/wordlist.py | 21 +-
novelwriter/gui/doceditor.py | 136 ++++++------
novelwriter/gui/dochighlight.py | 23 +-
novelwriter/gui/docviewer.py | 56 +++--
novelwriter/gui/itemdetails.py | 9 +-
novelwriter/gui/mainmenu.py | 22 +-
novelwriter/gui/noveltree.py | 16 +-
novelwriter/gui/outline.py | 32 ++-
novelwriter/gui/projtree.py | 18 +-
novelwriter/gui/sidebar.py | 7 +-
novelwriter/gui/statusbar.py | 11 +-
novelwriter/gui/theme.py | 40 ++--
novelwriter/guimain.py | 81 ++++---
novelwriter/tools/build.py | 56 +++--
novelwriter/tools/lipsum.py | 13 +-
novelwriter/tools/projwizard.py | 38 ++--
novelwriter/tools/writingstats.py | 37 ++--
tests/test_base/test_base_init.py | 49 ++---
tests/test_core/test_core_projectxml.py | 4 +-
39 files changed, 578 insertions(+), 638 deletions(-)
diff --git a/novelwriter/config.py b/novelwriter/config.py
index 6d2c9fb1..89019ce4 100644
--- a/novelwriter/config.py
+++ b/novelwriter/config.py
@@ -776,8 +776,8 @@ class Config:
class RecentProjects:
- def __init__(self, mainConf):
- self.mainConf = mainConf
+ def __init__(self, config):
+ self._conf = config
self._data = {}
return
@@ -786,7 +786,7 @@ class RecentProjects:
"""
self._data = {}
- cacheFile = self.mainConf.dataPath(nwFiles.RECENT_FILE)
+ cacheFile = self._conf.dataPath(nwFiles.RECENT_FILE)
if not cacheFile.is_file():
return True
@@ -809,7 +809,7 @@ class RecentProjects:
def saveCache(self):
"""Save the cache dictionary of recent projects.
"""
- cacheFile = self.mainConf.dataPath(nwFiles.RECENT_FILE)
+ cacheFile = self._conf.dataPath(nwFiles.RECENT_FILE)
cacheTemp = cacheFile.with_suffix(".tmp")
try:
with open(cacheTemp, mode="w+", encoding="utf-8") as outFile:
diff --git a/novelwriter/core/coretools.py b/novelwriter/core/coretools.py
index 864487ce..627e6f75 100644
--- a/novelwriter/core/coretools.py
+++ b/novelwriter/core/coretools.py
@@ -27,13 +27,13 @@ along with this program. If not, see .
import shutil
import logging
-import novelwriter
from time import time
from functools import partial
from PyQt5.QtCore import QCoreApplication
+from novelwriter import CONFIG
from novelwriter.enum import nwAlert
from novelwriter.common import minmax, simplified
from novelwriter.constants import nwItemClass
@@ -268,12 +268,8 @@ class ProjectBuilder:
"""
def __init__(self, mainGui):
-
self.mainGui = mainGui
- self.mainConf = novelwriter.CONFIG
-
self.tr = partial(QCoreApplication.translate, "NWProject")
-
return
##
@@ -431,7 +427,7 @@ class ProjectBuilder:
logger.error("No project path set for the example project")
return False
- pkgSample = self.mainConf.assetPath("sample.zip")
+ pkgSample = CONFIG.assetPath("sample.zip")
if pkgSample.is_file():
try:
shutil.unpack_archive(pkgSample, projPath)
diff --git a/novelwriter/core/project.py b/novelwriter/core/project.py
index dea9737d..badeba21 100644
--- a/novelwriter/core/project.py
+++ b/novelwriter/core/project.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import json
import logging
-import novelwriter
from time import time
from pathlib import Path
@@ -33,6 +32,7 @@ from functools import partial
from PyQt5.QtCore import QCoreApplication, QObject, pyqtSignal
+from novelwriter import CONFIG, __version__, __hexversion__
from novelwriter.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert
from novelwriter.error import logException
from novelwriter.constants import trConst, nwFiles, nwLabels
@@ -58,8 +58,7 @@ class NWProject(QObject):
super().__init__(parent=mainGui)
# Internal
- self.mainConf = novelwriter.CONFIG
- self.mainGui = mainGui
+ self.mainGui = mainGui
# Core Elements
self._options = OptionState(self) # Project-specific GUI options
@@ -328,7 +327,7 @@ class NWProject(QObject):
# Check novelWriter Version
# =========================
- if xmlReader.hexVersion > hexToInt(novelwriter.__hexversion__):
+ if xmlReader.hexVersion > hexToInt(__hexversion__):
msgYes = self.mainGui.askQuestion(
self.tr("Version Conflict"),
self.tr(
@@ -337,7 +336,7 @@ class NWProject(QObject):
"continue to open the project, some attributes and "
"settings may not be preserved, but the overall project "
"should be fine. Continue opening the project?"
- ).format(appVersion, novelwriter.__version__)
+ ).format(appVersion, __version__)
)
if not msgYes:
self.clearProject()
@@ -351,7 +350,7 @@ class NWProject(QObject):
self._loadProjectLocalisation()
# Update recent projects
- self.mainConf.recentProjects.update(
+ CONFIG.recentProjects.update(
self._storage.storagePath, self._data.name, sum(self._data.initCounts), time()
)
@@ -422,7 +421,7 @@ class NWProject(QObject):
self._storage.runPostSaveTasks(autoSave=autoSave)
# Update recent projects
- self.mainConf.recentProjects.update(
+ CONFIG.recentProjects.update(
self._storage.storagePath, self._data.name, sum(self._data.currCounts), saveTime
)
@@ -455,7 +454,7 @@ class NWProject(QObject):
logger.info("Backing up project")
self.mainGui.setStatus(self.tr("Backing up project ..."))
- backupPath = self.mainConf.backupPath()
+ backupPath = CONFIG.backupPath()
if not isinstance(backupPath, Path):
self.mainGui.makeAlert(self.tr(
"Cannot backup project because no valid backup path is set. "
@@ -677,13 +676,13 @@ class NWProject(QObject):
def _loadProjectLocalisation(self):
"""Load the language data for the current project language.
"""
- if self._data.language is None or self.mainConf._nwLangPath is None:
+ if self._data.language is None or CONFIG._nwLangPath is None:
self._langData = {}
return False
- langFile = Path(self.mainConf._nwLangPath) / f"project_{self._data.language}.json"
+ langFile = Path(CONFIG._nwLangPath) / f"project_{self._data.language}.json"
if not langFile.is_file():
- langFile = Path(self.mainConf._nwLangPath) / "project_en_GB.json"
+ langFile = Path(CONFIG._nwLangPath) / "project_en_GB.json"
try:
with open(langFile, mode="r", encoding="utf-8") as inFile:
diff --git a/novelwriter/core/projectxml.py b/novelwriter/core/projectxml.py
index d3855cf0..581a0ef7 100644
--- a/novelwriter/core/projectxml.py
+++ b/novelwriter/core/projectxml.py
@@ -26,13 +26,13 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from enum import Enum
from lxml import etree
from time import time
from pathlib import Path
+from novelwriter import __version__, __hexversion__
from novelwriter.common import (
checkBool, checkInt, checkString, checkStringNone, formatTimeStamp,
hexToInt, simplified, yesNo
@@ -501,8 +501,8 @@ class ProjectXMLWriter:
logger.debug("Writing project XML")
xRoot = etree.Element("novelWriterXML", attrib={
- "appVersion": str(novelwriter.__version__),
- "hexVersion": str(novelwriter.__hexversion__),
+ "appVersion": str(__version__),
+ "hexVersion": str(__hexversion__),
"fileVersion": FILE_VERSION,
"timeStamp": formatTimeStamp(saveTime),
})
diff --git a/novelwriter/core/status.py b/novelwriter/core/status.py
index edfede2c..a1e99899 100644
--- a/novelwriter/core/status.py
+++ b/novelwriter/core/status.py
@@ -26,11 +26,11 @@ along with this program. If not, see .
import random
import logging
-import novelwriter
from PyQt5.QtGui import QIcon, QPainter, QPainterPath, QPixmap, QColor
from PyQt5.QtCore import QRectF, Qt
+from novelwriter import CONFIG
from novelwriter.common import minmax, simplified
logger = logging.getLogger(__name__)
@@ -47,11 +47,11 @@ class NWStatus:
self._store = {}
self._default = None
- self._iPX = novelwriter.CONFIG.pxInt(24)
+ self._iPX = CONFIG.pxInt(24)
- pA = novelwriter.CONFIG.pxInt(2)
- pB = novelwriter.CONFIG.pxInt(20)
- pR = float(novelwriter.CONFIG.pxInt(4))
+ pA = CONFIG.pxInt(2)
+ pB = CONFIG.pxInt(20)
+ pR = float(CONFIG.pxInt(4))
self._iconPath = QPainterPath()
self._iconPath.addRoundedRect(QRectF(pA, pA, pB, pB), pR, pR)
diff --git a/novelwriter/core/storage.py b/novelwriter/core/storage.py
index 2cd4c3d9..a203cf9b 100644
--- a/novelwriter/core/storage.py
+++ b/novelwriter/core/storage.py
@@ -24,12 +24,12 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from time import time
from pathlib import Path
from zipfile import ZIP_DEFLATED, ZIP_STORED, ZipFile
+from novelwriter import CONFIG
from novelwriter.error import logException
from novelwriter.common import minmax
from novelwriter.constants import nwFiles
@@ -47,7 +47,6 @@ class NWStorage:
def __init__(self, theProject):
- self.mainConf = novelwriter.CONFIG
self.theProject = theProject
self._storagePath = None
@@ -220,8 +219,8 @@ class NWStorage:
return False
data = [
- self.mainConf.hostName, self.mainConf.osType,
- self.mainConf.kernelVer, str(int(time()))
+ CONFIG.hostName, CONFIG.osType,
+ CONFIG.kernelVer, str(int(time()))
]
try:
self._lockFilePath.write_text(";".join(data), encoding="utf-8")
diff --git a/novelwriter/core/tohtml.py b/novelwriter/core/tohtml.py
index 30fb63dc..cca296a6 100644
--- a/novelwriter/core/tohtml.py
+++ b/novelwriter/core/tohtml.py
@@ -25,6 +25,7 @@ along with this program. If not, see .
import logging
+from novelwriter import CONFIG
from novelwriter.constants import nwKeyWords, nwLabels, nwHtmlUnicode
from novelwriter.core.tokenizer import Tokenizer, stripEscape
@@ -204,9 +205,9 @@ class ToHtml(Tokenizer):
aStyle.append("margin-top: 0;")
if tStyle & self.A_IND_L:
- aStyle.append(f"margin-left: {self.mainConf.tabWidth:d}px;")
+ aStyle.append(f"margin-left: {CONFIG.tabWidth:d}px;")
if tStyle & self.A_IND_R:
- aStyle.append(f"margin-right: {self.mainConf.tabWidth:d}px;")
+ aStyle.append(f"margin-right: {CONFIG.tabWidth:d}px;")
if len(aStyle) > 0:
stVals = " ".join(aStyle)
diff --git a/novelwriter/core/tokenizer.py b/novelwriter/core/tokenizer.py
index 56886657..ffd697c4 100644
--- a/novelwriter/core/tokenizer.py
+++ b/novelwriter/core/tokenizer.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import re
import logging
-import novelwriter
from abc import ABC, abstractmethod
from operator import itemgetter
@@ -92,7 +91,6 @@ class Tokenizer(ABC):
def __init__(self, theProject):
self.theProject = theProject
- self.mainConf = novelwriter.CONFIG
# Data Variables
self._theText = "" # The raw text to be tokenized
diff --git a/novelwriter/core/toodt.py b/novelwriter/core/toodt.py
index 6170c7a2..4251d066 100644
--- a/novelwriter/core/toodt.py
+++ b/novelwriter/core/toodt.py
@@ -24,13 +24,13 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from lxml import etree
from hashlib import sha256
from zipfile import ZipFile
from datetime import datetime
+from novelwriter import __version__
from novelwriter.constants import nwKeyWords, nwLabels
from novelwriter.core.tokenizer import Tokenizer, stripEscape
@@ -336,7 +336,7 @@ class ToOdt(Tokenizer):
xMeta.text = timeStamp
xMeta = etree.SubElement(self._xMeta, _mkTag("meta", "generator"))
- xMeta.text = f"novelWriter/{novelwriter.__version__}"
+ xMeta.text = f"novelWriter/{__version__}"
xMeta = etree.SubElement(self._xMeta, _mkTag("meta", "initial-creator"))
xMeta.text = self.theProject.data.author
diff --git a/novelwriter/custom.py b/novelwriter/custom.py
index 46bd081d..030cdc6a 100644
--- a/novelwriter/custom.py
+++ b/novelwriter/custom.py
@@ -26,7 +26,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtGui import QColor, QPalette, QPainter
from PyQt5.QtCore import (
@@ -38,6 +37,7 @@ from PyQt5.QtWidgets import (
QStyleOptionTab, QLineEdit
)
+from novelwriter import CONFIG
from novelwriter.constants import nwUnicode
logger = logging.getLogger(__name__)
@@ -58,7 +58,7 @@ class QConfigLayout(QGridLayout):
self._itemMap = {}
- wSp = novelwriter.CONFIG.pxInt(8)
+ wSp = CONFIG.pxInt(8)
self.setHorizontalSpacing(wSp)
self.setVerticalSpacing(wSp)
self.setColumnStretch(0, 1)
@@ -108,7 +108,7 @@ class QConfigLayout(QGridLayout):
qLabel = None
raise ValueError("theLabel must be a QLabel")
- hM = novelwriter.CONFIG.pxInt(4)
+ hM = CONFIG.pxInt(4)
qLabel.setContentsMargins(0, hM, 0, hM)
self.addWidget(qLabel, self._nextRow, 0, 1, 2, Qt.AlignLeft)
@@ -142,7 +142,7 @@ class QConfigLayout(QGridLayout):
qWidget = None
raise ValueError("theWidget must be a QWidget")
- wSp = novelwriter.CONFIG.pxInt(8)
+ wSp = CONFIG.pxInt(8)
qLabel.setIndent(wSp)
if helpText is not None:
qHelp = QHelpLabel(str(helpText), self._helpCol, self._fontScale)
@@ -235,18 +235,18 @@ class QSwitch(QAbstractButton):
super().__init__(parent=parent)
if width is None:
- self._xW = novelwriter.CONFIG.pxInt(40)
+ self._xW = CONFIG.pxInt(40)
else:
self._xW = width
if height is None:
- self._xH = novelwriter.CONFIG.pxInt(20)
+ self._xH = CONFIG.pxInt(20)
else:
self._xH = height
self._xR = int(self._xH*0.5)
self._xT = int(self._xH*0.6)
- self._rB = int(novelwriter.CONFIG.guiScale*2)
+ self._rB = int(CONFIG.guiScale*2)
self._rH = self._xH - 2*self._rB
self._rR = self._xR - self._rB
@@ -434,7 +434,7 @@ class VerticalTabBar(QTabBar):
def __init__(self, parent=None):
super().__init__(parent=parent)
- self._mW = novelwriter.CONFIG.pxInt(150)
+ self._mW = CONFIG.pxInt(150)
return
def tabSizeHint(self, index):
diff --git a/novelwriter/dialogs/about.py b/novelwriter/dialogs/about.py
index e482b897..626c8328 100644
--- a/novelwriter/dialogs/about.py
+++ b/novelwriter/dialogs/about.py
@@ -35,6 +35,7 @@ from PyQt5.QtWidgets import (
QTextBrowser, QLabel
)
+from novelwriter import CONFIG
from novelwriter.common import readTextFile
logger = logging.getLogger(__name__)
@@ -48,19 +49,18 @@ class GuiAbout(QDialog):
logger.debug("Initialising GuiAbout ...")
self.setObjectName("GuiAbout")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.outerBox = QVBoxLayout()
self.innerBox = QHBoxLayout()
- self.innerBox.setSpacing(self.mainConf.pxInt(16))
+ self.innerBox.setSpacing(CONFIG.pxInt(16))
self.setWindowTitle(self.tr("About novelWriter"))
- self.setMinimumWidth(self.mainConf.pxInt(650))
- self.setMinimumHeight(self.mainConf.pxInt(600))
+ self.setMinimumWidth(CONFIG.pxInt(650))
+ self.setMinimumHeight(CONFIG.pxInt(600))
- nPx = self.mainConf.pxInt(96)
+ nPx = CONFIG.pxInt(96)
self.nwIcon = QLabel()
self.nwIcon.setPixmap(self.mainGui.mainTheme.getPixmap("novelwriter", (nPx, nPx)))
self.lblName = QLabel("novelWriter")
@@ -68,7 +68,7 @@ class GuiAbout(QDialog):
self.lblDate = QLabel(datetime.strptime(novelwriter.__date__, "%Y-%m-%d").strftime("%x"))
self.leftBox = QVBoxLayout()
- self.leftBox.setSpacing(self.mainConf.pxInt(4))
+ self.leftBox.setSpacing(CONFIG.pxInt(4))
self.leftBox.addWidget(self.nwIcon, 0, Qt.AlignCenter)
self.leftBox.addWidget(self.lblName, 0, Qt.AlignCenter)
self.leftBox.addWidget(self.lblVers, 0, Qt.AlignCenter)
@@ -79,19 +79,19 @@ class GuiAbout(QDialog):
# Pages
self.pageAbout = QTextBrowser()
self.pageAbout.setOpenExternalLinks(True)
- self.pageAbout.document().setDocumentMargin(self.mainConf.pxInt(16))
+ self.pageAbout.document().setDocumentMargin(CONFIG.pxInt(16))
self.pageNotes = QTextBrowser()
self.pageNotes.setOpenExternalLinks(True)
- self.pageNotes.document().setDocumentMargin(self.mainConf.pxInt(16))
+ self.pageNotes.document().setDocumentMargin(CONFIG.pxInt(16))
self.pageCredits = QTextBrowser()
self.pageCredits.setOpenExternalLinks(True)
- self.pageCredits.document().setDocumentMargin(self.mainConf.pxInt(16))
+ self.pageCredits.document().setDocumentMargin(CONFIG.pxInt(16))
self.pageLicense = QTextBrowser()
self.pageLicense.setOpenExternalLinks(True)
- self.pageLicense.document().setDocumentMargin(self.mainConf.pxInt(16))
+ self.pageLicense.document().setDocumentMargin(CONFIG.pxInt(16))
# Main Tab Area
self.tabBox = QTabWidget()
@@ -182,7 +182,7 @@ class GuiAbout(QDialog):
def _fillNotesPage(self):
"""Load the content for the Release Notes page.
"""
- docPath = self.mainConf.assetPath("text") / "release_notes.htm"
+ docPath = CONFIG.assetPath("text") / "release_notes.htm"
docText = readTextFile(docPath)
if docText:
self.pageNotes.setHtml(docText)
@@ -193,7 +193,7 @@ class GuiAbout(QDialog):
def _fillCreditsPage(self):
"""Load the content for the Credits page.
"""
- docPath = self.mainConf.assetPath("text") / "credits_en.htm"
+ docPath = CONFIG.assetPath("text") / "credits_en.htm"
docText = readTextFile(docPath)
if docText:
self.pageCredits.setHtml(docText)
@@ -204,7 +204,7 @@ class GuiAbout(QDialog):
def _fillLicensePage(self):
"""Load the content for the Licence page.
"""
- docPath = self.mainConf.assetPath("text") / "gplv3_en.htm"
+ docPath = CONFIG.assetPath("text") / "gplv3_en.htm"
docText = readTextFile(docPath)
if docText:
self.pageLicense.setHtml(docText)
diff --git a/novelwriter/dialogs/docmerge.py b/novelwriter/dialogs/docmerge.py
index 25c8676f..0a35e527 100644
--- a/novelwriter/dialogs/docmerge.py
+++ b/novelwriter/dialogs/docmerge.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtWidgets import (
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QListWidget, QListWidgetItem, QVBoxLayout,
)
+from novelwriter import CONFIG
from novelwriter.custom import QHelpLabel, QSwitch
logger = logging.getLogger(__name__)
@@ -46,7 +46,6 @@ class GuiDocMerge(QDialog):
logger.debug("Initialising GuiDocMerge ...")
self.setObjectName("GuiDocMerge")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
@@ -61,14 +60,14 @@ class GuiDocMerge(QDialog):
), self.mainTheme.helpText)
iPx = self.mainTheme.baseIconSize
- hSp = self.mainConf.pxInt(12)
- vSp = self.mainConf.pxInt(8)
- bSp = self.mainConf.pxInt(12)
+ hSp = CONFIG.pxInt(12)
+ vSp = CONFIG.pxInt(8)
+ bSp = CONFIG.pxInt(12)
self.listBox = QListWidget()
self.listBox.setIconSize(QSize(iPx, iPx))
- self.listBox.setMinimumWidth(self.mainConf.pxInt(400))
- self.listBox.setMinimumHeight(self.mainConf.pxInt(180))
+ self.listBox.setMinimumWidth(CONFIG.pxInt(400))
+ self.listBox.setMinimumHeight(CONFIG.pxInt(180))
self.listBox.setSelectionBehavior(QAbstractItemView.SelectRows)
self.listBox.setSelectionMode(QAbstractItemView.SingleSelection)
self.listBox.setDragDropMode(QAbstractItemView.InternalMove)
diff --git a/novelwriter/dialogs/docsplit.py b/novelwriter/dialogs/docsplit.py
index 0db6d6c2..8e543be7 100644
--- a/novelwriter/dialogs/docsplit.py
+++ b/novelwriter/dialogs/docsplit.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QListWidgetItem, QDialogButtonBox, QLabel, QGridLayout
)
+from novelwriter import CONFIG
from novelwriter.custom import QHelpLabel, QSwitch
logger = logging.getLogger(__name__)
@@ -50,7 +50,6 @@ class GuiDocSplit(QDialog):
logger.debug("Initialising GuiDocSplit ...")
self.setObjectName("GuiDocSplit")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
@@ -68,9 +67,9 @@ class GuiDocSplit(QDialog):
# Values
iPx = self.mainTheme.baseIconSize
- hSp = self.mainConf.pxInt(12)
- vSp = self.mainConf.pxInt(8)
- bSp = self.mainConf.pxInt(12)
+ hSp = CONFIG.pxInt(12)
+ vSp = CONFIG.pxInt(8)
+ bSp = CONFIG.pxInt(12)
pOptions = self.theProject.options
spLevel = pOptions.getInt("GuiDocSplit", "spLevel", 3)
@@ -80,8 +79,8 @@ class GuiDocSplit(QDialog):
# Header Selection
self.listBox = QListWidget()
self.listBox.setDragDropMode(QAbstractItemView.NoDragDrop)
- self.listBox.setMinimumWidth(self.mainConf.pxInt(400))
- self.listBox.setMinimumHeight(self.mainConf.pxInt(180))
+ self.listBox.setMinimumWidth(CONFIG.pxInt(400))
+ self.listBox.setMinimumHeight(CONFIG.pxInt(180))
self.splitLevel = QComboBox(self)
self.splitLevel.addItem(self.tr("Split on Header Level 1 (Title)"), 1)
diff --git a/novelwriter/dialogs/editlabel.py b/novelwriter/dialogs/editlabel.py
index d2551441..58c72890 100644
--- a/novelwriter/dialogs/editlabel.py
+++ b/novelwriter/dialogs/editlabel.py
@@ -24,12 +24,13 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtWidgets import (
QDialog, QVBoxLayout, QLineEdit, QLabel, QDialogButtonBox, QHBoxLayout
)
+from novelwriter import CONFIG
+
logger = logging.getLogger(__name__)
@@ -41,8 +42,8 @@ class GuiEditLabel(QDialog):
self.setObjectName("GuiEditLabel")
self.setWindowTitle(self.tr("Item Label"))
- mVd = novelwriter.CONFIG.pxInt(220)
- mSp = novelwriter.CONFIG.pxInt(12)
+ mVd = CONFIG.pxInt(220)
+ mSp = CONFIG.pxInt(12)
# Item Label
self.labelValue = QLineEdit()
diff --git a/novelwriter/dialogs/preferences.py b/novelwriter/dialogs/preferences.py
index 41f4a032..7a66e2c6 100644
--- a/novelwriter/dialogs/preferences.py
+++ b/novelwriter/dialogs/preferences.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, QLocale
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QLineEdit, QFileDialog, QFontDialog, QDoubleSpinBox
)
+from novelwriter import CONFIG
from novelwriter.custom import QSwitch, QConfigLayout, PagedDialog
from novelwriter.dialogs.quotes import GuiQuoteSelect
@@ -47,7 +47,6 @@ class GuiPreferences(PagedDialog):
logger.debug("Initialising GuiPreferences ...")
self.setObjectName("GuiPreferences")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
@@ -74,7 +73,7 @@ class GuiPreferences(PagedDialog):
self.buttonBox.rejected.connect(self._doClose)
self.addControls(self.buttonBox)
- self.resize(*self.mainConf.preferencesWinSize)
+ self.resize(*CONFIG.preferencesWinSize)
# Settings
self._updateTheme = False
@@ -125,7 +124,7 @@ class GuiPreferences(PagedDialog):
self.tabQuote.saveValues()
self._saveWindowSize()
- self.mainConf.saveConfig()
+ CONFIG.saveConfig()
self.accept()
return
@@ -144,7 +143,7 @@ class GuiPreferences(PagedDialog):
def _saveWindowSize(self):
"""Save the dialog window size.
"""
- self.mainConf.setPreferencesWinSize(self.width(), self.height())
+ CONFIG.setPreferencesWinSize(self.width(), self.height())
return
# END Class GuiPreferences
@@ -155,7 +154,6 @@ class GuiPreferencesGeneral(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.prefsGui = prefsGui
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -168,15 +166,15 @@ class GuiPreferencesGeneral(QWidget):
# Look and Feel
# =============
self.mainForm.addGroupLabel(self.tr("Look and Feel"))
- minWidth = self.mainConf.pxInt(200)
+ minWidth = CONFIG.pxInt(200)
# Select Locale
self.guiLocale = QComboBox()
self.guiLocale.setMinimumWidth(minWidth)
- theLangs = self.mainConf.listLanguages(self.mainConf.LANG_NW)
+ theLangs = CONFIG.listLanguages(CONFIG.LANG_NW)
for lang, langName in theLangs:
self.guiLocale.addItem(langName, lang)
- langIdx = self.guiLocale.findData(self.mainConf.guiLocale)
+ langIdx = self.guiLocale.findData(CONFIG.guiLocale)
if langIdx != -1:
self.guiLocale.setCurrentIndex(langIdx)
@@ -192,7 +190,7 @@ class GuiPreferencesGeneral(QWidget):
self.theThemes = self.mainTheme.listThemes()
for themeDir, themeName in self.theThemes:
self.guiTheme.addItem(themeName, themeDir)
- themeIdx = self.guiTheme.findData(self.mainConf.guiTheme)
+ themeIdx = self.guiTheme.findData(CONFIG.guiTheme)
if themeIdx != -1:
self.guiTheme.setCurrentIndex(themeIdx)
@@ -204,11 +202,11 @@ class GuiPreferencesGeneral(QWidget):
# Editor Theme
self.guiSyntax = QComboBox()
- self.guiSyntax.setMinimumWidth(self.mainConf.pxInt(200))
+ self.guiSyntax.setMinimumWidth(CONFIG.pxInt(200))
self.theSyntaxes = self.mainTheme.listSyntax()
for syntaxFile, syntaxName in self.theSyntaxes:
self.guiSyntax.addItem(syntaxName, syntaxFile)
- syntaxIdx = self.guiSyntax.findData(self.mainConf.guiSyntax)
+ syntaxIdx = self.guiSyntax.findData(CONFIG.guiSyntax)
if syntaxIdx != -1:
self.guiSyntax.setCurrentIndex(syntaxIdx)
@@ -221,8 +219,8 @@ class GuiPreferencesGeneral(QWidget):
# Font Family
self.guiFont = QLineEdit()
self.guiFont.setReadOnly(True)
- self.guiFont.setFixedWidth(self.mainConf.pxInt(162))
- self.guiFont.setText(self.mainConf.guiFont)
+ self.guiFont.setFixedWidth(CONFIG.pxInt(162))
+ self.guiFont.setText(CONFIG.guiFont)
self.fontButton = QPushButton("...")
self.fontButton.setMaximumWidth(int(2.5*self.mainTheme.getTextWidth("...")))
self.fontButton.clicked.connect(self._selectFont)
@@ -238,7 +236,7 @@ class GuiPreferencesGeneral(QWidget):
self.guiFontSize.setMinimum(8)
self.guiFontSize.setMaximum(60)
self.guiFontSize.setSingleStep(1)
- self.guiFontSize.setValue(self.mainConf.guiFontSize)
+ self.guiFontSize.setValue(CONFIG.guiFontSize)
self.mainForm.addRow(
self.tr("Font size"),
self.guiFontSize,
@@ -251,7 +249,7 @@ class GuiPreferencesGeneral(QWidget):
self.mainForm.addGroupLabel(self.tr("GUI Settings"))
self.emphLabels = QSwitch()
- self.emphLabels.setChecked(self.mainConf.emphLabels)
+ self.emphLabels.setChecked(CONFIG.emphLabels)
self.mainForm.addRow(
self.tr("Emphasise partition and chapter labels"),
self.emphLabels,
@@ -259,7 +257,7 @@ class GuiPreferencesGeneral(QWidget):
)
self.showFullPath = QSwitch()
- self.showFullPath.setChecked(self.mainConf.showFullPath)
+ self.showFullPath.setChecked(CONFIG.showFullPath)
self.mainForm.addRow(
self.tr("Show full path in document header"),
self.showFullPath,
@@ -267,7 +265,7 @@ class GuiPreferencesGeneral(QWidget):
)
self.hideVScroll = QSwitch()
- self.hideVScroll.setChecked(self.mainConf.hideVScroll)
+ self.hideVScroll.setChecked(CONFIG.hideVScroll)
self.mainForm.addRow(
self.tr("Hide vertical scroll bars in main windows"),
self.hideVScroll,
@@ -275,7 +273,7 @@ class GuiPreferencesGeneral(QWidget):
)
self.hideHScroll = QSwitch()
- self.hideHScroll.setChecked(self.mainConf.hideHScroll)
+ self.hideHScroll.setChecked(CONFIG.hideHScroll)
self.mainForm.addRow(
self.tr("Hide horizontal scroll bars in main windows"),
self.hideHScroll,
@@ -295,22 +293,22 @@ class GuiPreferencesGeneral(QWidget):
emphLabels = self.emphLabels.isChecked()
# Update Flags
- self.prefsGui._updateTheme |= self.mainConf.guiTheme != guiTheme
- self.prefsGui._updateSyntax |= self.mainConf.guiSyntax != guiSyntax
- self.prefsGui._needsRestart |= self.mainConf.guiLocale != guiLocale
- self.prefsGui._needsRestart |= self.mainConf.guiFont != guiFont
- self.prefsGui._needsRestart |= self.mainConf.guiFontSize != guiFontSize
- self.prefsGui._refreshTree |= self.mainConf.emphLabels != emphLabels
+ self.prefsGui._updateTheme |= CONFIG.guiTheme != guiTheme
+ self.prefsGui._updateSyntax |= CONFIG.guiSyntax != guiSyntax
+ self.prefsGui._needsRestart |= CONFIG.guiLocale != guiLocale
+ self.prefsGui._needsRestart |= CONFIG.guiFont != guiFont
+ self.prefsGui._needsRestart |= CONFIG.guiFontSize != guiFontSize
+ self.prefsGui._refreshTree |= CONFIG.emphLabels != emphLabels
- self.mainConf.guiLocale = guiLocale
- self.mainConf.guiTheme = guiTheme
- self.mainConf.guiSyntax = guiSyntax
- self.mainConf.guiFont = guiFont
- self.mainConf.guiFontSize = guiFontSize
- self.mainConf.emphLabels = emphLabels
- self.mainConf.showFullPath = self.showFullPath.isChecked()
- self.mainConf.hideVScroll = self.hideVScroll.isChecked()
- self.mainConf.hideHScroll = self.hideHScroll.isChecked()
+ CONFIG.guiLocale = guiLocale
+ CONFIG.guiTheme = guiTheme
+ CONFIG.guiSyntax = guiSyntax
+ CONFIG.guiFont = guiFont
+ CONFIG.guiFontSize = guiFontSize
+ CONFIG.emphLabels = emphLabels
+ CONFIG.showFullPath = self.showFullPath.isChecked()
+ CONFIG.hideVScroll = self.hideVScroll.isChecked()
+ CONFIG.hideHScroll = self.hideHScroll.isChecked()
return
@@ -322,8 +320,8 @@ class GuiPreferencesGeneral(QWidget):
"""Open the QFontDialog and set a font for the font style.
"""
currFont = QFont()
- currFont.setFamily(self.mainConf.guiFont)
- currFont.setPointSize(self.mainConf.guiFontSize)
+ currFont.setFamily(CONFIG.guiFont)
+ currFont.setPointSize(CONFIG.guiFontSize)
theFont, theStatus = QFontDialog.getFont(currFont, self)
if theStatus:
self.guiFont.setText(theFont.family())
@@ -338,7 +336,6 @@ class GuiPreferencesProjects(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -356,7 +353,7 @@ class GuiPreferencesProjects(QWidget):
self.autoSaveDoc.setMinimum(5)
self.autoSaveDoc.setMaximum(600)
self.autoSaveDoc.setSingleStep(1)
- self.autoSaveDoc.setValue(self.mainConf.autoSaveDoc)
+ self.autoSaveDoc.setValue(CONFIG.autoSaveDoc)
self.mainForm.addRow(
self.tr("Save document interval"),
self.autoSaveDoc,
@@ -369,7 +366,7 @@ class GuiPreferencesProjects(QWidget):
self.autoSaveProj.setMinimum(5)
self.autoSaveProj.setMaximum(600)
self.autoSaveProj.setSingleStep(1)
- self.autoSaveProj.setValue(self.mainConf.autoSaveProj)
+ self.autoSaveProj.setValue(CONFIG.autoSaveProj)
self.mainForm.addRow(
self.tr("Save project interval"),
self.autoSaveProj,
@@ -382,7 +379,7 @@ class GuiPreferencesProjects(QWidget):
self.mainForm.addGroupLabel(self.tr("Project Backup"))
# Backup Path
- self.backupPath = self.mainConf.backupPath()
+ self.backupPath = CONFIG.backupPath()
self.backupGetPath = QPushButton(self.tr("Browse"))
self.backupGetPath.clicked.connect(self._backupFolder)
self.backupPathRow = self.mainForm.addRow(
@@ -393,7 +390,7 @@ class GuiPreferencesProjects(QWidget):
# Run when closing
self.backupOnClose = QSwitch()
- self.backupOnClose.setChecked(self.mainConf.backupOnClose)
+ self.backupOnClose.setChecked(CONFIG.backupOnClose)
self.backupOnClose.toggled.connect(self._toggledBackupOnClose)
self.mainForm.addRow(
self.tr("Run backup when the project is closed"),
@@ -404,8 +401,8 @@ class GuiPreferencesProjects(QWidget):
# Ask before backup
# Only enabled when "Run when closing" is checked
self.askBeforeBackup = QSwitch()
- self.askBeforeBackup.setChecked(self.mainConf.askBeforeBackup)
- self.askBeforeBackup.setEnabled(self.mainConf.backupOnClose)
+ self.askBeforeBackup.setChecked(CONFIG.askBeforeBackup)
+ self.askBeforeBackup.setEnabled(CONFIG.backupOnClose)
self.mainForm.addRow(
self.tr("Ask before running backup"),
self.askBeforeBackup,
@@ -418,7 +415,7 @@ class GuiPreferencesProjects(QWidget):
# Pause when idle
self.stopWhenIdle = QSwitch()
- self.stopWhenIdle.setChecked(self.mainConf.stopWhenIdle)
+ self.stopWhenIdle.setChecked(CONFIG.stopWhenIdle)
self.mainForm.addRow(
self.tr("Pause the session timer when not writing"),
self.stopWhenIdle,
@@ -431,7 +428,7 @@ class GuiPreferencesProjects(QWidget):
self.userIdleTime.setMaximum(600.0)
self.userIdleTime.setSingleStep(0.5)
self.userIdleTime.setDecimals(1)
- self.userIdleTime.setValue(self.mainConf.userIdleTime/60.0)
+ self.userIdleTime.setValue(CONFIG.userIdleTime/60.0)
self.mainForm.addRow(
self.tr("Editor inactive time before pausing timer"),
self.userIdleTime,
@@ -445,17 +442,17 @@ class GuiPreferencesProjects(QWidget):
"""Save the values set for this tab.
"""
# Automatic Save
- self.mainConf.autoSaveDoc = self.autoSaveDoc.value()
- self.mainConf.autoSaveProj = self.autoSaveProj.value()
+ CONFIG.autoSaveDoc = self.autoSaveDoc.value()
+ CONFIG.autoSaveProj = self.autoSaveProj.value()
# Project Backup
- self.mainConf.setBackupPath(self.backupPath)
- self.mainConf.backupOnClose = self.backupOnClose.isChecked()
- self.mainConf.askBeforeBackup = self.askBeforeBackup.isChecked()
+ CONFIG.setBackupPath(self.backupPath)
+ CONFIG.backupOnClose = self.backupOnClose.isChecked()
+ CONFIG.askBeforeBackup = self.askBeforeBackup.isChecked()
# Session Timer
- self.mainConf.stopWhenIdle = self.stopWhenIdle.isChecked()
- self.mainConf.userIdleTime = round(self.userIdleTime.value() * 60)
+ CONFIG.stopWhenIdle = self.stopWhenIdle.isChecked()
+ CONFIG.userIdleTime = round(self.userIdleTime.value() * 60)
return
@@ -494,7 +491,6 @@ class GuiPreferencesDocuments(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -510,8 +506,8 @@ class GuiPreferencesDocuments(QWidget):
# Font Family
self.textFont = QLineEdit()
self.textFont.setReadOnly(True)
- self.textFont.setFixedWidth(self.mainConf.pxInt(162))
- self.textFont.setText(self.mainConf.textFont)
+ self.textFont.setFixedWidth(CONFIG.pxInt(162))
+ self.textFont.setText(CONFIG.textFont)
self.fontButton = QPushButton("...")
self.fontButton.setMaximumWidth(int(2.5*self.mainTheme.getTextWidth("...")))
self.fontButton.clicked.connect(self._selectFont)
@@ -527,7 +523,7 @@ class GuiPreferencesDocuments(QWidget):
self.textSize.setMinimum(8)
self.textSize.setMaximum(60)
self.textSize.setSingleStep(1)
- self.textSize.setValue(self.mainConf.textSize)
+ self.textSize.setValue(CONFIG.textSize)
self.mainForm.addRow(
self.tr("Font size"),
self.textSize,
@@ -544,7 +540,7 @@ class GuiPreferencesDocuments(QWidget):
self.textWidth.setMinimum(0)
self.textWidth.setMaximum(10000)
self.textWidth.setSingleStep(10)
- self.textWidth.setValue(self.mainConf.textWidth)
+ self.textWidth.setValue(CONFIG.textWidth)
self.mainForm.addRow(
self.tr("Maximum text width in \"Normal Mode\""),
self.textWidth,
@@ -557,7 +553,7 @@ class GuiPreferencesDocuments(QWidget):
self.focusWidth.setMinimum(200)
self.focusWidth.setMaximum(10000)
self.focusWidth.setSingleStep(10)
- self.focusWidth.setValue(self.mainConf.focusWidth)
+ self.focusWidth.setValue(CONFIG.focusWidth)
self.mainForm.addRow(
self.tr("Maximum text width in \"Focus Mode\""),
self.focusWidth,
@@ -567,7 +563,7 @@ class GuiPreferencesDocuments(QWidget):
# Focus Mode Footer
self.hideFocusFooter = QSwitch()
- self.hideFocusFooter.setChecked(self.mainConf.hideFocusFooter)
+ self.hideFocusFooter.setChecked(CONFIG.hideFocusFooter)
self.mainForm.addRow(
self.tr("Hide document footer in \"Focus Mode\""),
self.hideFocusFooter,
@@ -576,7 +572,7 @@ class GuiPreferencesDocuments(QWidget):
# Justify Text
self.doJustify = QSwitch()
- self.doJustify.setChecked(self.mainConf.doJustify)
+ self.doJustify.setChecked(CONFIG.doJustify)
self.mainForm.addRow(
self.tr("Justify the text margins"),
self.doJustify,
@@ -588,7 +584,7 @@ class GuiPreferencesDocuments(QWidget):
self.textMargin.setMinimum(0)
self.textMargin.setMaximum(900)
self.textMargin.setSingleStep(1)
- self.textMargin.setValue(self.mainConf.textMargin)
+ self.textMargin.setValue(CONFIG.textMargin)
self.mainForm.addRow(
self.tr("Minimum text margin"),
self.textMargin,
@@ -601,7 +597,7 @@ class GuiPreferencesDocuments(QWidget):
self.tabWidth.setMinimum(0)
self.tabWidth.setMaximum(200)
self.tabWidth.setSingleStep(1)
- self.tabWidth.setValue(self.mainConf.tabWidth)
+ self.tabWidth.setValue(CONFIG.tabWidth)
self.mainForm.addRow(
self.tr("Tab width"),
self.tabWidth,
@@ -615,16 +611,16 @@ class GuiPreferencesDocuments(QWidget):
"""Save the values set for this tab.
"""
# Text Style
- self.mainConf.textFont = self.textFont.text()
- self.mainConf.textSize = self.textSize.value()
+ CONFIG.textFont = self.textFont.text()
+ CONFIG.textSize = self.textSize.value()
# Text Flow
- self.mainConf.textWidth = self.textWidth.value()
- self.mainConf.focusWidth = self.focusWidth.value()
- self.mainConf.hideFocusFooter = self.hideFocusFooter.isChecked()
- self.mainConf.doJustify = self.doJustify.isChecked()
- self.mainConf.textMargin = self.textMargin.value()
- self.mainConf.tabWidth = self.tabWidth.value()
+ CONFIG.textWidth = self.textWidth.value()
+ CONFIG.focusWidth = self.focusWidth.value()
+ CONFIG.hideFocusFooter = self.hideFocusFooter.isChecked()
+ CONFIG.doJustify = self.doJustify.isChecked()
+ CONFIG.textMargin = self.textMargin.value()
+ CONFIG.tabWidth = self.tabWidth.value()
return
@@ -636,8 +632,8 @@ class GuiPreferencesDocuments(QWidget):
"""Open the QFontDialog and set a font for the font style.
"""
currFont = QFont()
- currFont.setFamily(self.mainConf.textFont)
- currFont.setPointSize(self.mainConf.textSize)
+ currFont.setFamily(CONFIG.textFont)
+ currFont.setPointSize(CONFIG.textSize)
theFont, theStatus = QFontDialog.getFont(currFont, self)
if theStatus:
self.textFont.setText(theFont.family())
@@ -653,7 +649,6 @@ class GuiPreferencesEditor(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -662,7 +657,7 @@ class GuiPreferencesEditor(QWidget):
self.mainForm.setHelpTextStyle(self.mainTheme.helpText)
self.setLayout(self.mainForm)
- mW = self.mainConf.pxInt(250)
+ mW = CONFIG.pxInt(250)
# Spell Checking
# ==============
@@ -673,7 +668,7 @@ class GuiPreferencesEditor(QWidget):
self.spellLanguage.setMaximumWidth(mW)
langAvail = self.mainGui.docEditor.spEnchant.listDictionaries()
- if self.mainConf.hasEnchant:
+ if CONFIG.hasEnchant:
if langAvail:
for spTag, spProv in langAvail:
qLocal = QLocale(spTag)
@@ -686,7 +681,7 @@ class GuiPreferencesEditor(QWidget):
self.spellLanguage.addItem(self.tr("Not installed"), "")
self.spellLanguage.setEnabled(False)
- spellIdx = self.spellLanguage.findData(self.mainConf.spellLanguage)
+ spellIdx = self.spellLanguage.findData(CONFIG.spellLanguage)
if spellIdx != -1:
self.spellLanguage.setCurrentIndex(spellIdx)
@@ -701,7 +696,7 @@ class GuiPreferencesEditor(QWidget):
self.bigDocLimit.setMinimum(10)
self.bigDocLimit.setMaximum(10000)
self.bigDocLimit.setSingleStep(10)
- self.bigDocLimit.setValue(self.mainConf.bigDocLimit)
+ self.bigDocLimit.setValue(CONFIG.bigDocLimit)
self.mainForm.addRow(
self.tr("Big document limit"),
self.bigDocLimit,
@@ -719,7 +714,7 @@ class GuiPreferencesEditor(QWidget):
self.wordCountTimer.setMinimum(2.0)
self.wordCountTimer.setMaximum(600.0)
self.wordCountTimer.setSingleStep(0.1)
- self.wordCountTimer.setValue(self.mainConf.wordCountTimer)
+ self.wordCountTimer.setValue(CONFIG.wordCountTimer)
self.mainForm.addRow(
self.tr("Word count interval"),
self.wordCountTimer,
@@ -728,7 +723,7 @@ class GuiPreferencesEditor(QWidget):
# Include Notes in Word Count
self.incNotesWCount = QSwitch()
- self.incNotesWCount.setChecked(self.mainConf.incNotesWCount)
+ self.incNotesWCount.setChecked(CONFIG.incNotesWCount)
self.mainForm.addRow(
self.tr("Include project notes in status bar word count"),
self.incNotesWCount
@@ -740,7 +735,7 @@ class GuiPreferencesEditor(QWidget):
# Show Tabs and Spaces
self.showTabsNSpaces = QSwitch()
- self.showTabsNSpaces.setChecked(self.mainConf.showTabsNSpaces)
+ self.showTabsNSpaces.setChecked(CONFIG.showTabsNSpaces)
self.mainForm.addRow(
self.tr("Show tabs and spaces"),
self.showTabsNSpaces
@@ -748,7 +743,7 @@ class GuiPreferencesEditor(QWidget):
# Show Line Endings
self.showLineEndings = QSwitch()
- self.showLineEndings.setChecked(self.mainConf.showLineEndings)
+ self.showLineEndings.setChecked(CONFIG.showLineEndings)
self.mainForm.addRow(
self.tr("Show line endings"),
self.showLineEndings
@@ -763,7 +758,7 @@ class GuiPreferencesEditor(QWidget):
self.scrollPastEnd.setMinimum(0)
self.scrollPastEnd.setMaximum(100)
self.scrollPastEnd.setSingleStep(1)
- self.scrollPastEnd.setValue(int(self.mainConf.scrollPastEnd))
+ self.scrollPastEnd.setValue(int(CONFIG.scrollPastEnd))
self.mainForm.addRow(
self.tr("Scroll past end of the document"),
self.scrollPastEnd,
@@ -773,7 +768,7 @@ class GuiPreferencesEditor(QWidget):
# Typewriter Scrolling
self.autoScroll = QSwitch()
- self.autoScroll.setChecked(self.mainConf.autoScroll)
+ self.autoScroll.setChecked(CONFIG.autoScroll)
self.mainForm.addRow(
self.tr("Typewriter style scrolling when you type"),
self.autoScroll,
@@ -785,7 +780,7 @@ class GuiPreferencesEditor(QWidget):
self.autoScrollPos.setMinimum(10)
self.autoScrollPos.setMaximum(90)
self.autoScrollPos.setSingleStep(1)
- self.autoScrollPos.setValue(int(self.mainConf.autoScrollPos))
+ self.autoScrollPos.setValue(int(CONFIG.autoScrollPos))
self.mainForm.addRow(
self.tr("Minimum position for Typewriter scrolling"),
self.autoScrollPos,
@@ -799,21 +794,21 @@ class GuiPreferencesEditor(QWidget):
"""Save the values set for this tab.
"""
# Spell Checking
- self.mainConf.spellLanguage = self.spellLanguage.currentData()
- self.mainConf.bigDocLimit = self.bigDocLimit.value()
+ CONFIG.spellLanguage = self.spellLanguage.currentData()
+ CONFIG.bigDocLimit = self.bigDocLimit.value()
# Word Count
- self.mainConf.wordCountTimer = self.wordCountTimer.value()
- self.mainConf.incNotesWCount = self.incNotesWCount.isChecked()
+ CONFIG.wordCountTimer = self.wordCountTimer.value()
+ CONFIG.incNotesWCount = self.incNotesWCount.isChecked()
# Writing Guides
- self.mainConf.showTabsNSpaces = self.showTabsNSpaces.isChecked()
- self.mainConf.showLineEndings = self.showLineEndings.isChecked()
+ CONFIG.showTabsNSpaces = self.showTabsNSpaces.isChecked()
+ CONFIG.showLineEndings = self.showLineEndings.isChecked()
# Scroll Behaviour
- self.mainConf.scrollPastEnd = self.scrollPastEnd.value()
- self.mainConf.autoScroll = self.autoScroll.isChecked()
- self.mainConf.autoScrollPos = self.autoScrollPos.value()
+ CONFIG.scrollPastEnd = self.scrollPastEnd.value()
+ CONFIG.autoScroll = self.autoScroll.isChecked()
+ CONFIG.autoScrollPos = self.autoScrollPos.value()
return
@@ -825,7 +820,6 @@ class GuiPreferencesSyntax(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.prefsGui = prefsGui
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -840,7 +834,7 @@ class GuiPreferencesSyntax(QWidget):
self.mainForm.addGroupLabel(self.tr("Quotes & Dialogue"))
self.highlightQuotes = QSwitch()
- self.highlightQuotes.setChecked(self.mainConf.highlightQuotes)
+ self.highlightQuotes.setChecked(CONFIG.highlightQuotes)
self.highlightQuotes.toggled.connect(self._toggleHighlightQuotes)
self.mainForm.addRow(
self.tr("Highlight text wrapped in quotes"),
@@ -849,7 +843,7 @@ class GuiPreferencesSyntax(QWidget):
)
self.allowOpenSQuote = QSwitch()
- self.allowOpenSQuote.setChecked(self.mainConf.allowOpenSQuote)
+ self.allowOpenSQuote.setChecked(CONFIG.allowOpenSQuote)
self.mainForm.addRow(
self.tr("Allow open-ended single quotes"),
self.allowOpenSQuote,
@@ -857,7 +851,7 @@ class GuiPreferencesSyntax(QWidget):
)
self.allowOpenDQuote = QSwitch()
- self.allowOpenDQuote.setChecked(self.mainConf.allowOpenDQuote)
+ self.allowOpenDQuote.setChecked(CONFIG.allowOpenDQuote)
self.mainForm.addRow(
self.tr("Allow open-ended double quotes"),
self.allowOpenDQuote,
@@ -869,7 +863,7 @@ class GuiPreferencesSyntax(QWidget):
self.mainForm.addGroupLabel(self.tr("Text Emphasis"))
self.highlightEmph = QSwitch()
- self.highlightEmph.setChecked(self.mainConf.highlightEmph)
+ self.highlightEmph.setChecked(CONFIG.highlightEmph)
self.mainForm.addRow(
self.tr("Add highlight colour to emphasised text"),
self.highlightEmph,
@@ -882,7 +876,7 @@ class GuiPreferencesSyntax(QWidget):
self.mainForm.addGroupLabel(self.tr("Text Errors"))
self.showMultiSpaces = QSwitch()
- self.showMultiSpaces.setChecked(self.mainConf.showMultiSpaces)
+ self.showMultiSpaces.setChecked(CONFIG.showMultiSpaces)
self.mainForm.addRow(
self.tr("Highlight multiple or trailing spaces"),
self.showMultiSpaces,
@@ -900,15 +894,15 @@ class GuiPreferencesSyntax(QWidget):
highlightEmph = self.highlightEmph.isChecked()
showMultiSpaces = self.showMultiSpaces.isChecked()
- self.prefsGui._updateSyntax |= self.mainConf.highlightQuotes != highlightQuotes
- self.prefsGui._updateSyntax |= self.mainConf.highlightEmph != highlightEmph
- self.prefsGui._updateSyntax |= self.mainConf.showMultiSpaces != showMultiSpaces
+ self.prefsGui._updateSyntax |= CONFIG.highlightQuotes != highlightQuotes
+ self.prefsGui._updateSyntax |= CONFIG.highlightEmph != highlightEmph
+ self.prefsGui._updateSyntax |= CONFIG.showMultiSpaces != showMultiSpaces
- self.mainConf.highlightQuotes = highlightQuotes
- self.mainConf.allowOpenSQuote = allowOpenSQuote
- self.mainConf.allowOpenDQuote = allowOpenDQuote
- self.mainConf.highlightEmph = highlightEmph
- self.mainConf.showMultiSpaces = showMultiSpaces
+ CONFIG.highlightQuotes = highlightQuotes
+ CONFIG.allowOpenSQuote = allowOpenSQuote
+ CONFIG.allowOpenDQuote = allowOpenDQuote
+ CONFIG.highlightEmph = highlightEmph
+ CONFIG.showMultiSpaces = showMultiSpaces
return
@@ -932,7 +926,6 @@ class GuiPreferencesAutomation(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -947,7 +940,7 @@ class GuiPreferencesAutomation(QWidget):
# Auto-Select Word Under Cursor
self.autoSelect = QSwitch()
- self.autoSelect.setChecked(self.mainConf.autoSelect)
+ self.autoSelect.setChecked(CONFIG.autoSelect)
self.mainForm.addRow(
self.tr("Auto-select word under cursor"),
self.autoSelect,
@@ -956,7 +949,7 @@ class GuiPreferencesAutomation(QWidget):
# Auto-Replace as You Type Main Switch
self.doReplace = QSwitch()
- self.doReplace.setChecked(self.mainConf.doReplace)
+ self.doReplace.setChecked(CONFIG.doReplace)
self.doReplace.toggled.connect(self._toggleAutoReplaceMain)
self.mainForm.addRow(
self.tr("Auto-replace text as you type"),
@@ -970,8 +963,8 @@ class GuiPreferencesAutomation(QWidget):
# Auto-Replace Single Quotes
self.doReplaceSQuote = QSwitch()
- self.doReplaceSQuote.setChecked(self.mainConf.doReplaceSQuote)
- self.doReplaceSQuote.setEnabled(self.mainConf.doReplace)
+ self.doReplaceSQuote.setChecked(CONFIG.doReplaceSQuote)
+ self.doReplaceSQuote.setEnabled(CONFIG.doReplace)
self.mainForm.addRow(
self.tr("Auto-replace single quotes"),
self.doReplaceSQuote,
@@ -980,8 +973,8 @@ class GuiPreferencesAutomation(QWidget):
# Auto-Replace Double Quotes
self.doReplaceDQuote = QSwitch()
- self.doReplaceDQuote.setChecked(self.mainConf.doReplaceDQuote)
- self.doReplaceDQuote.setEnabled(self.mainConf.doReplace)
+ self.doReplaceDQuote.setChecked(CONFIG.doReplaceDQuote)
+ self.doReplaceDQuote.setEnabled(CONFIG.doReplace)
self.mainForm.addRow(
self.tr("Auto-replace double quotes"),
self.doReplaceDQuote,
@@ -990,8 +983,8 @@ class GuiPreferencesAutomation(QWidget):
# Auto-Replace Hyphens
self.doReplaceDash = QSwitch()
- self.doReplaceDash.setChecked(self.mainConf.doReplaceDash)
- self.doReplaceDash.setEnabled(self.mainConf.doReplace)
+ self.doReplaceDash.setChecked(CONFIG.doReplaceDash)
+ self.doReplaceDash.setEnabled(CONFIG.doReplace)
self.mainForm.addRow(
self.tr("Auto-replace dashes"),
self.doReplaceDash,
@@ -1000,8 +993,8 @@ class GuiPreferencesAutomation(QWidget):
# Auto-Replace Dots
self.doReplaceDots = QSwitch()
- self.doReplaceDots.setChecked(self.mainConf.doReplaceDots)
- self.doReplaceDots.setEnabled(self.mainConf.doReplace)
+ self.doReplaceDots.setChecked(CONFIG.doReplaceDots)
+ self.doReplaceDots.setEnabled(CONFIG.doReplace)
self.mainForm.addRow(
self.tr("Auto-replace dots"),
self.doReplaceDots,
@@ -1015,7 +1008,7 @@ class GuiPreferencesAutomation(QWidget):
# Pad Before
self.fmtPadBefore = QLineEdit()
self.fmtPadBefore.setMaxLength(32)
- self.fmtPadBefore.setText(self.mainConf.fmtPadBefore)
+ self.fmtPadBefore.setText(CONFIG.fmtPadBefore)
self.mainForm.addRow(
self.tr("Insert non-breaking space before"),
self.fmtPadBefore,
@@ -1025,7 +1018,7 @@ class GuiPreferencesAutomation(QWidget):
# Pad After
self.fmtPadAfter = QLineEdit()
self.fmtPadAfter.setMaxLength(32)
- self.fmtPadAfter.setText(self.mainConf.fmtPadAfter)
+ self.fmtPadAfter.setText(CONFIG.fmtPadAfter)
self.mainForm.addRow(
self.tr("Insert non-breaking space after"),
self.fmtPadAfter,
@@ -1034,8 +1027,8 @@ class GuiPreferencesAutomation(QWidget):
# Use Thin Space
self.fmtPadThin = QSwitch()
- self.fmtPadThin.setChecked(self.mainConf.fmtPadThin)
- self.fmtPadThin.setEnabled(self.mainConf.doReplace)
+ self.fmtPadThin.setChecked(CONFIG.fmtPadThin)
+ self.fmtPadThin.setEnabled(CONFIG.doReplace)
self.mainForm.addRow(
self.tr("Use thin space instead"),
self.fmtPadThin,
@@ -1048,19 +1041,19 @@ class GuiPreferencesAutomation(QWidget):
"""Save the values set for this tab.
"""
# Automatic Features
- self.mainConf.autoSelect = self.autoSelect.isChecked()
- self.mainConf.doReplace = self.doReplace.isChecked()
+ CONFIG.autoSelect = self.autoSelect.isChecked()
+ CONFIG.doReplace = self.doReplace.isChecked()
# Replace as You Type
- self.mainConf.doReplaceSQuote = self.doReplaceSQuote.isChecked()
- self.mainConf.doReplaceDQuote = self.doReplaceDQuote.isChecked()
- self.mainConf.doReplaceDash = self.doReplaceDash.isChecked()
- self.mainConf.doReplaceDots = self.doReplaceDots.isChecked()
+ CONFIG.doReplaceSQuote = self.doReplaceSQuote.isChecked()
+ CONFIG.doReplaceDQuote = self.doReplaceDQuote.isChecked()
+ CONFIG.doReplaceDash = self.doReplaceDash.isChecked()
+ CONFIG.doReplaceDots = self.doReplaceDots.isChecked()
# Automatic Padding
- self.mainConf.fmtPadBefore = self.fmtPadBefore.text().strip()
- self.mainConf.fmtPadAfter = self.fmtPadAfter.text().strip()
- self.mainConf.fmtPadThin = self.fmtPadThin.isChecked()
+ CONFIG.fmtPadBefore = self.fmtPadBefore.text().strip()
+ CONFIG.fmtPadAfter = self.fmtPadAfter.text().strip()
+ CONFIG.fmtPadThin = self.fmtPadThin.isChecked()
return
@@ -1087,7 +1080,6 @@ class GuiPreferencesQuotes(QWidget):
def __init__(self, prefsGui):
super().__init__(parent=prefsGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = prefsGui.mainGui
self.mainTheme = prefsGui.mainGui.mainTheme
@@ -1100,7 +1092,7 @@ class GuiPreferencesQuotes(QWidget):
# ===============
self.mainForm.addGroupLabel(self.tr("Quotation Style"))
- qWidth = self.mainConf.pxInt(40)
+ qWidth = CONFIG.pxInt(40)
bWidth = int(2.5*self.mainTheme.getTextWidth("..."))
self.quoteSym = {}
@@ -1110,7 +1102,7 @@ class GuiPreferencesQuotes(QWidget):
self.quoteSym["SO"].setReadOnly(True)
self.quoteSym["SO"].setFixedWidth(qWidth)
self.quoteSym["SO"].setAlignment(Qt.AlignCenter)
- self.quoteSym["SO"].setText(self.mainConf.fmtSQuoteOpen)
+ self.quoteSym["SO"].setText(CONFIG.fmtSQuoteOpen)
self.btnSingleStyleO = QPushButton("...")
self.btnSingleStyleO.setMaximumWidth(bWidth)
self.btnSingleStyleO.clicked.connect(lambda: self._getQuote("SO"))
@@ -1126,7 +1118,7 @@ class GuiPreferencesQuotes(QWidget):
self.quoteSym["SC"].setReadOnly(True)
self.quoteSym["SC"].setFixedWidth(qWidth)
self.quoteSym["SC"].setAlignment(Qt.AlignCenter)
- self.quoteSym["SC"].setText(self.mainConf.fmtSQuoteClose)
+ self.quoteSym["SC"].setText(CONFIG.fmtSQuoteClose)
self.btnSingleStyleC = QPushButton("...")
self.btnSingleStyleC.setMaximumWidth(bWidth)
self.btnSingleStyleC.clicked.connect(lambda: self._getQuote("SC"))
@@ -1143,7 +1135,7 @@ class GuiPreferencesQuotes(QWidget):
self.quoteSym["DO"].setReadOnly(True)
self.quoteSym["DO"].setFixedWidth(qWidth)
self.quoteSym["DO"].setAlignment(Qt.AlignCenter)
- self.quoteSym["DO"].setText(self.mainConf.fmtDQuoteOpen)
+ self.quoteSym["DO"].setText(CONFIG.fmtDQuoteOpen)
self.btnDoubleStyleO = QPushButton("...")
self.btnDoubleStyleO.setMaximumWidth(bWidth)
self.btnDoubleStyleO.clicked.connect(lambda: self._getQuote("DO"))
@@ -1159,7 +1151,7 @@ class GuiPreferencesQuotes(QWidget):
self.quoteSym["DC"].setReadOnly(True)
self.quoteSym["DC"].setFixedWidth(qWidth)
self.quoteSym["DC"].setAlignment(Qt.AlignCenter)
- self.quoteSym["DC"].setText(self.mainConf.fmtDQuoteClose)
+ self.quoteSym["DC"].setText(CONFIG.fmtDQuoteClose)
self.btnDoubleStyleC = QPushButton("...")
self.btnDoubleStyleC.setMaximumWidth(bWidth)
self.btnDoubleStyleC.clicked.connect(lambda: self._getQuote("DC"))
@@ -1176,10 +1168,10 @@ class GuiPreferencesQuotes(QWidget):
"""Save the values set for this tab.
"""
# Quotation Style
- self.mainConf.fmtSQuoteOpen = self.quoteSym["SO"].text()
- self.mainConf.fmtSQuoteClose = self.quoteSym["SC"].text()
- self.mainConf.fmtDQuoteOpen = self.quoteSym["DO"].text()
- self.mainConf.fmtDQuoteClose = self.quoteSym["DC"].text()
+ CONFIG.fmtSQuoteOpen = self.quoteSym["SO"].text()
+ CONFIG.fmtSQuoteClose = self.quoteSym["SC"].text()
+ CONFIG.fmtDQuoteOpen = self.quoteSym["DO"].text()
+ CONFIG.fmtDQuoteClose = self.quoteSym["DC"].text()
return
##
diff --git a/novelwriter/dialogs/projdetails.py b/novelwriter/dialogs/projdetails.py
index 35d52345..fcb40fb2 100644
--- a/novelwriter/dialogs/projdetails.py
+++ b/novelwriter/dialogs/projdetails.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import math
import logging
-import novelwriter
from PyQt5.QtCore import Qt, QSize, pyqtSlot
from PyQt5.QtGui import QFont
@@ -34,6 +33,7 @@ from PyQt5.QtWidgets import (
QLineEdit, QSpinBox, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
)
+from novelwriter import CONFIG
from novelwriter.common import formatTime, numberToRoman
from novelwriter.custom import PagedDialog, QSwitch
from novelwriter.constants import nwUnicode
@@ -50,21 +50,20 @@ class GuiProjectDetails(PagedDialog):
logger.debug("Initialising GuiProjectDetails ...")
self.setObjectName("GuiProjectDetails")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
self.setWindowTitle(self.tr("Project Details"))
- wW = self.mainConf.pxInt(600)
- wH = self.mainConf.pxInt(400)
+ wW = CONFIG.pxInt(600)
+ wH = CONFIG.pxInt(400)
pOptions = self.theProject.options
self.setMinimumWidth(wW)
self.setMinimumHeight(wH)
self.resize(
- self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "winWidth", wW)),
- self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "winHeight", wH))
+ CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "winWidth", wW)),
+ CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "winHeight", wH))
)
self.tabMain = GuiProjectDetailsMain(self.mainGui, self.theProject)
@@ -107,15 +106,15 @@ class GuiProjectDetails(PagedDialog):
def _saveGuiSettings(self):
"""Save GUI settings.
"""
- winWidth = self.mainConf.rpxInt(self.width())
- winHeight = self.mainConf.rpxInt(self.height())
+ winWidth = CONFIG.rpxInt(self.width())
+ winHeight = CONFIG.rpxInt(self.height())
cColWidth = self.tabContents.getColumnSizes()
- widthCol0 = self.mainConf.rpxInt(cColWidth[0])
- widthCol1 = self.mainConf.rpxInt(cColWidth[1])
- widthCol2 = self.mainConf.rpxInt(cColWidth[2])
- widthCol3 = self.mainConf.rpxInt(cColWidth[3])
- widthCol4 = self.mainConf.rpxInt(cColWidth[4])
+ widthCol0 = CONFIG.rpxInt(cColWidth[0])
+ widthCol1 = CONFIG.rpxInt(cColWidth[1])
+ widthCol2 = CONFIG.rpxInt(cColWidth[2])
+ widthCol3 = CONFIG.rpxInt(cColWidth[3])
+ widthCol4 = CONFIG.rpxInt(cColWidth[4])
wordsPerPage = self.tabContents.wpValue.value()
countFrom = self.tabContents.poValue.value()
@@ -143,15 +142,14 @@ class GuiProjectDetailsMain(QWidget):
def __init__(self, mainGui, theProject):
super().__init__(parent=mainGui)
- self.mainConf = novelwriter.CONFIG
self.theProject = theProject
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
fPx = self.mainTheme.fontPixelSize
fPt = self.mainTheme.fontPointSize
- vPx = self.mainConf.pxInt(4)
- hPx = self.mainConf.pxInt(12)
+ vPx = CONFIG.pxInt(4)
+ hPx = CONFIG.pxInt(12)
# Header
# ======
@@ -277,7 +275,6 @@ class GuiProjectDetailsContents(QWidget):
def __init__(self, mainGui, theProject):
super().__init__(parent=mainGui)
- self.mainConf = novelwriter.CONFIG
self.theProject = theProject
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
@@ -287,8 +284,8 @@ class GuiProjectDetailsContents(QWidget):
self._currentRoot = None
iPx = self.mainTheme.baseIconSize
- hPx = self.mainConf.pxInt(12)
- vPx = self.mainConf.pxInt(4)
+ hPx = CONFIG.pxInt(12)
+ vPx = CONFIG.pxInt(4)
pOptions = self.theProject.options
# Header
@@ -297,7 +294,7 @@ class GuiProjectDetailsContents(QWidget):
self.tocLabel = QLabel("%s" % self.tr("Table of Contents"))
self.novelValue = NovelSelector(self, self.theProject, self.mainGui)
- self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
+ self.novelValue.setMinimumWidth(CONFIG.pxInt(200))
self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
self.headBox = QHBoxLayout()
@@ -331,11 +328,11 @@ class GuiProjectDetailsContents(QWidget):
treeHeader.setStretchLastSection(True)
treeHeader.setMinimumSectionSize(hPx)
- wCol0 = self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol0", 200))
- wCol1 = self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol1", 60))
- wCol2 = self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol2", 60))
- wCol3 = self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol3", 60))
- wCol4 = self.mainConf.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol4", 90))
+ wCol0 = CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol0", 200))
+ wCol1 = CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol1", 60))
+ wCol2 = CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol2", 60))
+ wCol3 = CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol3", 60))
+ wCol4 = CONFIG.pxInt(pOptions.getInt("GuiProjectDetails", "widthCol4", 90))
self.tocTree.setColumnWidth(0, wCol0)
self.tocTree.setColumnWidth(1, wCol1)
diff --git a/novelwriter/dialogs/projload.py b/novelwriter/dialogs/projload.py
index d6f876c4..2dfd41f6 100644
--- a/novelwriter/dialogs/projload.py
+++ b/novelwriter/dialogs/projload.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from pathlib import Path
from datetime import datetime
@@ -37,6 +36,7 @@ from PyQt5.QtWidgets import (
QFileDialog, QLineEdit
)
+from novelwriter import CONFIG
from novelwriter.common import formatInt
from novelwriter.constants import nwFiles
@@ -59,14 +59,13 @@ class GuiProjectLoad(QDialog):
logger.debug("Initialising GuiProjectLoad ...")
self.setObjectName("GuiProjectLoad")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.openState = self.NONE_STATE
self.openPath = None
- sPx = self.mainConf.pxInt(16)
- nPx = self.mainConf.pxInt(96)
+ sPx = CONFIG.pxInt(16)
+ nPx = CONFIG.pxInt(96)
iPx = self.mainTheme.baseIconSize
self.outerBox = QVBoxLayout()
@@ -75,8 +74,8 @@ class GuiProjectLoad(QDialog):
self.innerBox.setSpacing(sPx)
self.setWindowTitle(self.tr("Open Project"))
- self.setMinimumWidth(self.mainConf.pxInt(650))
- self.setMinimumHeight(self.mainConf.pxInt(400))
+ self.setMinimumWidth(CONFIG.pxInt(650))
+ self.setMinimumHeight(CONFIG.pxInt(400))
self.nwIcon = QLabel()
self.nwIcon.setPixmap(self.mainGui.mainTheme.getPixmap("novelwriter", (nPx, nPx)))
@@ -120,8 +119,8 @@ class GuiProjectLoad(QDialog):
self.projectForm.setColumnStretch(0, 0)
self.projectForm.setColumnStretch(1, 1)
self.projectForm.setColumnStretch(2, 0)
- self.projectForm.setVerticalSpacing(self.mainConf.pxInt(4))
- self.projectForm.setHorizontalSpacing(self.mainConf.pxInt(8))
+ self.projectForm.setVerticalSpacing(CONFIG.pxInt(4))
+ self.projectForm.setHorizontalSpacing(CONFIG.pxInt(8))
self.innerBox.addLayout(self.projectForm)
@@ -228,7 +227,7 @@ class GuiProjectLoad(QDialog):
).format(projName)
)
if msgYes:
- self.mainConf.recentProjects.remove(
+ CONFIG.recentProjects.remove(
selList[0].data(self.C_NAME, Qt.UserRole)
)
self._populateList()
@@ -257,14 +256,14 @@ class GuiProjectLoad(QDialog):
colWidths[self.C_NAME] = self.listBox.columnWidth(self.C_NAME)
colWidths[self.C_COUNT] = self.listBox.columnWidth(self.C_COUNT)
colWidths[self.C_TIME] = self.listBox.columnWidth(self.C_TIME)
- self.mainConf.setProjLoadColWidths(colWidths)
+ CONFIG.setProjLoadColWidths(colWidths)
return
def _populateList(self):
"""Populate the list box with recent project data.
"""
self.listBox.clear()
- dataList = self.mainConf.recentProjects.listEntries()
+ dataList = CONFIG.recentProjects.listEntries()
sortList = sorted(dataList, key=lambda x: x[3], reverse=True)
nwxIcon = self.mainGui.mainTheme.getIcon("proj_nwx")
for path, title, words, time in sortList:
@@ -283,7 +282,7 @@ class GuiProjectLoad(QDialog):
if self.listBox.topLevelItemCount() > 0:
self.listBox.topLevelItem(0).setSelected(True)
- projColWidth = self.mainConf.projLoadColWidths
+ projColWidth = CONFIG.projLoadColWidths
if len(projColWidth) == 3:
self.listBox.setColumnWidth(self.C_NAME, projColWidth[self.C_NAME])
self.listBox.setColumnWidth(self.C_COUNT, projColWidth[self.C_COUNT])
diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py
index 23fb28c5..c220b5e9 100644
--- a/novelwriter/dialogs/projsettings.py
+++ b/novelwriter/dialogs/projsettings.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtGui import QIcon, QPixmap, QColor
from PyQt5.QtCore import Qt, QLocale, pyqtSlot
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
)
+from novelwriter import CONFIG
from novelwriter.enum import nwAlert
from novelwriter.common import simplified
from novelwriter.custom import QSwitch, PagedDialog, QConfigLayout
@@ -53,22 +53,21 @@ class GuiProjectSettings(PagedDialog):
logger.debug("Initialising GuiProjectSettings ...")
self.setObjectName("GuiProjectSettings")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
self.theProject.countStatus()
self.setWindowTitle(self.tr("Project Settings"))
- wW = self.mainConf.pxInt(570)
- wH = self.mainConf.pxInt(375)
+ wW = CONFIG.pxInt(570)
+ wH = CONFIG.pxInt(375)
pOptions = self.theProject.options
self.setMinimumWidth(wW)
self.setMinimumHeight(wH)
self.resize(
- self.mainConf.pxInt(pOptions.getInt("GuiProjectSettings", "winWidth", wW)),
- self.mainConf.pxInt(pOptions.getInt("GuiProjectSettings", "winHeight", wH))
+ CONFIG.pxInt(pOptions.getInt("GuiProjectSettings", "winWidth", wW)),
+ CONFIG.pxInt(pOptions.getInt("GuiProjectSettings", "winHeight", wH))
)
self.tabMain = GuiProjectEditMain(self)
@@ -168,11 +167,11 @@ class GuiProjectSettings(PagedDialog):
def _saveGuiSettings(self):
"""Save GUI settings.
"""
- winWidth = self.mainConf.rpxInt(self.width())
- winHeight = self.mainConf.rpxInt(self.height())
- replaceColW = self.mainConf.rpxInt(self.tabReplace.listBox.columnWidth(0))
- statusColW = self.mainConf.rpxInt(self.tabStatus.listBox.columnWidth(0))
- importColW = self.mainConf.rpxInt(self.tabImport.listBox.columnWidth(0))
+ winWidth = CONFIG.rpxInt(self.width())
+ winHeight = CONFIG.rpxInt(self.height())
+ replaceColW = CONFIG.rpxInt(self.tabReplace.listBox.columnWidth(0))
+ statusColW = CONFIG.rpxInt(self.tabStatus.listBox.columnWidth(0))
+ importColW = CONFIG.rpxInt(self.tabImport.listBox.columnWidth(0))
pOptions = self.theProject.options
pOptions.setValue("GuiProjectSettings", "winWidth", winWidth)
@@ -191,7 +190,6 @@ class GuiProjectEditMain(QWidget):
def __init__(self, projGui):
super().__init__(parent=projGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = projGui.mainGui
self.theProject = projGui.theProject
@@ -202,7 +200,7 @@ class GuiProjectEditMain(QWidget):
self.mainForm.addGroupLabel(self.tr("Project Settings"))
- xW = self.mainConf.pxInt(250)
+ xW = CONFIG.pxInt(250)
self.editName = QLineEdit()
self.editName.setMaxLength(200)
@@ -280,7 +278,6 @@ class GuiProjectEditStatus(QWidget):
def __init__(self, projGui, isStatus):
super().__init__(parent=projGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = projGui.mainGui
self.theProject = projGui.theProject
self.mainTheme = projGui.mainGui.mainTheme
@@ -294,7 +291,7 @@ class GuiProjectEditStatus(QWidget):
pageLabel = self.tr("Note File Importance Levels")
colSetting = "importColW"
- wCol0 = self.mainConf.pxInt(
+ wCol0 = CONFIG.pxInt(
self.theProject.options.getInt("GuiProjectSettings", colSetting, 130)
)
@@ -569,13 +566,12 @@ class GuiProjectEditReplace(QWidget):
def __init__(self, projGui):
super().__init__(parent=projGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = projGui.mainGui
self.mainTheme = projGui.mainGui.mainTheme
self.theProject = projGui.theProject
self.arChanged = False
- wCol0 = self.mainConf.pxInt(
+ wCol0 = CONFIG.pxInt(
self.theProject.options.getInt("GuiProjectSettings", "replaceColW", 130)
)
pageLabel = self.tr("Text Replace List for Preview and Export")
diff --git a/novelwriter/dialogs/quotes.py b/novelwriter/dialogs/quotes.py
index ffd169da..256888ce 100644
--- a/novelwriter/dialogs/quotes.py
+++ b/novelwriter/dialogs/quotes.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtGui import QFontMetrics
from PyQt5.QtCore import Qt, QSize
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QListWidget, QListWidgetItem, QFrame
)
+from novelwriter import CONFIG
from novelwriter.constants import trConst, nwQuotes
logger = logging.getLogger(__name__)
@@ -45,8 +45,6 @@ class GuiQuoteSelect(QDialog):
def __init__(self, parent=None, currentQuote='"'):
super().__init__(parent=parent)
- self.mainConf = novelwriter.CONFIG
-
self.outerBox = QVBoxLayout()
self.innerBox = QHBoxLayout()
self.labelBox = QVBoxLayout()
@@ -82,8 +80,8 @@ class GuiQuoteSelect(QDialog):
if sKey == currentQuote:
self.listBox.setCurrentItem(qtItem)
- self.listBox.setMinimumWidth(minSize + self.mainConf.pxInt(40))
- self.listBox.setMinimumHeight(self.mainConf.pxInt(150))
+ self.listBox.setMinimumWidth(minSize + CONFIG.pxInt(40))
+ self.listBox.setMinimumHeight(CONFIG.pxInt(150))
# Buttons
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
diff --git a/novelwriter/dialogs/updates.py b/novelwriter/dialogs/updates.py
index 685f8698..284842d5 100644
--- a/novelwriter/dialogs/updates.py
+++ b/novelwriter/dialogs/updates.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import json
import logging
-import novelwriter
from datetime import datetime
from urllib.request import Request, urlopen
@@ -36,6 +35,7 @@ from PyQt5.QtWidgets import (
qApp, QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox, QLabel
)
+from novelwriter import CONFIG, __version__, __date__, __url__
from novelwriter.common import logException
logger = logging.getLogger(__name__)
@@ -49,15 +49,14 @@ class GuiUpdates(QDialog):
logger.debug("Initialising GuiUpdates ...")
self.setObjectName("GuiUpdates")
- self.mainConf = novelwriter.CONFIG
- self.mainGui = mainGui
+ self.mainGui = mainGui
self.setWindowTitle(self.tr("Check for Updates"))
- nPx = self.mainConf.pxInt(96)
- sPx = self.mainConf.pxInt(16)
- tPx = self.mainConf.pxInt(8)
- mPx = self.mainConf.pxInt(4)
+ nPx = CONFIG.pxInt(96)
+ sPx = CONFIG.pxInt(16)
+ tPx = CONFIG.pxInt(8)
+ mPx = CONFIG.pxInt(4)
# Left Box
self.nwIcon = QLabel()
@@ -72,8 +71,8 @@ class GuiUpdates(QDialog):
self.currentValue = QLabel(self.tr(
"novelWriter {0} released on {1}"
).format(
- "v%s" % novelwriter.__version__,
- datetime.strptime(novelwriter.__date__, "%Y-%m-%d").strftime("%x"))
+ "v%s" % __version__,
+ datetime.strptime(__date__, "%Y-%m-%d").strftime("%x"))
)
self.latestLabel = QLabel(self.tr("Latest Release"))
@@ -152,7 +151,7 @@ class GuiUpdates(QDialog):
self.latestLink.setText(self.tr(
"Download: {0}"
).format(
- f'{novelwriter.__url__}'
+ f'{__url__}'
))
qApp.restoreOverrideCursor()
diff --git a/novelwriter/dialogs/wordlist.py b/novelwriter/dialogs/wordlist.py
index ca667ed2..73886bab 100644
--- a/novelwriter/dialogs/wordlist.py
+++ b/novelwriter/dialogs/wordlist.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from pathlib import Path
@@ -34,6 +33,7 @@ from PyQt5.QtWidgets import (
QAbstractItemView, QPushButton, QLineEdit, QLabel
)
+from novelwriter import CONFIG
from novelwriter.enum import nwAlert
from novelwriter.error import logException
from novelwriter.constants import nwFiles
@@ -49,23 +49,22 @@ class GuiWordList(QDialog):
logger.debug("Initialising GuiWordList ...")
self.setObjectName("GuiWordList")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
self.setWindowTitle(self.tr("Project Word List"))
- mS = self.mainConf.pxInt(250)
- wW = self.mainConf.pxInt(320)
- wH = self.mainConf.pxInt(340)
+ mS = CONFIG.pxInt(250)
+ wW = CONFIG.pxInt(320)
+ wH = CONFIG.pxInt(340)
pOptions = self.theProject.options
self.setMinimumWidth(mS)
self.setMinimumHeight(mS)
self.resize(
- self.mainConf.pxInt(pOptions.getInt("GuiWordList", "winWidth", wW)),
- self.mainConf.pxInt(pOptions.getInt("GuiWordList", "winHeight", wH))
+ CONFIG.pxInt(pOptions.getInt("GuiWordList", "winWidth", wW)),
+ CONFIG.pxInt(pOptions.getInt("GuiWordList", "winHeight", wH))
)
# Main Widgets
@@ -99,10 +98,10 @@ class GuiWordList(QDialog):
self.outerBox = QVBoxLayout()
self.outerBox.addWidget(self.headLabel)
- self.outerBox.addSpacing(self.mainConf.pxInt(8))
+ self.outerBox.addSpacing(CONFIG.pxInt(8))
self.outerBox.addWidget(self.listBox, 1)
self.outerBox.addLayout(self.editBox, 0)
- self.outerBox.addSpacing(self.mainConf.pxInt(12))
+ self.outerBox.addSpacing(CONFIG.pxInt(12))
self.outerBox.addWidget(self.buttonBox, 0)
self.setLayout(self.outerBox)
@@ -210,8 +209,8 @@ class GuiWordList(QDialog):
def _saveGuiSettings(self):
"""Save GUI settings.
"""
- winWidth = self.mainConf.rpxInt(self.width())
- winHeight = self.mainConf.rpxInt(self.height())
+ winWidth = CONFIG.rpxInt(self.width())
+ winHeight = CONFIG.rpxInt(self.height())
pOptions = self.theProject.options
pOptions.setValue("GuiWordList", "winWidth", winWidth)
diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py
index 90a671ce..c7681759 100644
--- a/novelwriter/gui/doceditor.py
+++ b/novelwriter/gui/doceditor.py
@@ -31,7 +31,6 @@ along with this program. If not, see .
import bisect
import logging
-import novelwriter
from enum import Enum
from time import time
@@ -50,6 +49,7 @@ from PyQt5.QtWidgets import (
QFrame
)
+from novelwriter import CONFIG
from novelwriter.enum import nwAlert, nwDocAction, nwDocInsert, nwDocMode, nwItemClass
from novelwriter.common import minmax, transferCase
from novelwriter.constants import nwConst, nwFiles, nwKeyWords, nwUnicode
@@ -81,7 +81,6 @@ class GuiDocEditor(QTextEdit):
logger.debug("Initialising GuiDocEditor ...")
# Class Variables
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
@@ -140,7 +139,7 @@ class GuiDocEditor(QTextEdit):
self.customContextMenuRequested.connect(self._openContextMenu)
# Editor Settings
- self.setMinimumWidth(self.mainConf.pxInt(300))
+ self.setMinimumWidth(CONFIG.pxInt(300))
self.setAcceptRichText(False)
self.setAutoFillBackground(True)
self.setFrameStyle(QFrame.NoFrame)
@@ -169,7 +168,7 @@ class GuiDocEditor(QTextEdit):
self.wCounterDoc.setAutoDelete(False)
self.wCounterDoc.signals.countsReady.connect(self._updateDocCounts)
- self.wcInterval = self.mainConf.wordCountTimer
+ self.wcInterval = CONFIG.wordCountTimer
# Set Up Selection Word Counter
self.wcTimerSel = QTimer()
@@ -252,26 +251,26 @@ class GuiDocEditor(QTextEdit):
# Some Constants
self._nonWord = (
"\"'"
- f"{self.mainConf.fmtSQuoteOpen}{self.mainConf.fmtSQuoteClose}"
- f"{self.mainConf.fmtDQuoteOpen}{self.mainConf.fmtDQuoteClose}"
+ f"{CONFIG.fmtSQuoteOpen}{CONFIG.fmtSQuoteClose}"
+ f"{CONFIG.fmtDQuoteOpen}{CONFIG.fmtDQuoteClose}"
)
# Typography
- if self.mainConf.fmtPadThin:
+ if CONFIG.fmtPadThin:
self._typPadChar = nwUnicode.U_THNBSP
else:
self._typPadChar = nwUnicode.U_NBSP
- self._typSQuoteO = self.mainConf.fmtSQuoteOpen
- self._typSQuoteC = self.mainConf.fmtSQuoteClose
- self._typDQuoteO = self.mainConf.fmtDQuoteOpen
- self._typDQuoteC = self.mainConf.fmtDQuoteClose
- self._typRepDQuote = self.mainConf.doReplaceDQuote
- self._typRepSQuote = self.mainConf.doReplaceSQuote
- self._typRepDash = self.mainConf.doReplaceDash
- self._typRepDots = self.mainConf.doReplaceDots
- self._typPadBefore = self.mainConf.fmtPadBefore
- self._typPadAfter = self.mainConf.fmtPadAfter
+ self._typSQuoteO = CONFIG.fmtSQuoteOpen
+ self._typSQuoteC = CONFIG.fmtSQuoteClose
+ self._typDQuoteO = CONFIG.fmtDQuoteOpen
+ self._typDQuoteC = CONFIG.fmtDQuoteClose
+ self._typRepDQuote = CONFIG.doReplaceDQuote
+ self._typRepSQuote = CONFIG.doReplaceSQuote
+ self._typRepDash = CONFIG.doReplaceDash
+ self._typRepDots = CONFIG.doReplaceDots
+ self._typPadBefore = CONFIG.fmtPadBefore
+ self._typPadAfter = CONFIG.fmtPadAfter
# Reload spell check and dictionaries
self.setDictionaries()
@@ -279,23 +278,23 @@ class GuiDocEditor(QTextEdit):
# Set font
theFont = QFont()
qDoc = self.document()
- if self.mainConf.textFont is None:
+ if CONFIG.textFont is None:
# If none is defined, set a default font
theFont = QFont()
- if self.mainConf.osWindows and "Arial" in self.mainTheme.guiFontDB.families():
+ if CONFIG.osWindows and "Arial" in self.mainTheme.guiFontDB.families():
theFont.setFamily("Arial")
theFont.setPointSize(12)
- elif self.mainConf.osDarwin and "Courier" in self.mainTheme.guiFontDB.families():
+ elif CONFIG.osDarwin and "Courier" in self.mainTheme.guiFontDB.families():
theFont.setFamily("Courier")
theFont.setPointSize(12)
else:
theFont = qDoc.defaultFont()
- self.mainConf.textFont = theFont.family()
- self.mainConf.textSize = theFont.pointSize()
+ CONFIG.textFont = theFont.family()
+ CONFIG.textSize = theFont.pointSize()
- theFont.setFamily(self.mainConf.textFont)
- theFont.setPointSize(self.mainConf.textSize)
+ theFont.setFamily(CONFIG.textFont)
+ theFont.setPointSize(CONFIG.textSize)
self.setFont(theFont)
# Set default text margins
@@ -303,37 +302,37 @@ class GuiDocEditor(QTextEdit):
# allocated to the document itself. See issue #1112.
cW = self.cursorWidth()
qDoc.setDocumentMargin(cW)
- self._vpMargin = max(self.mainConf.getTextMargin() - cW, 0)
+ self._vpMargin = max(CONFIG.getTextMargin() - cW, 0)
self.setViewportMargins(self._vpMargin, self._vpMargin, self._vpMargin, self._vpMargin)
# Also set the document text options for the document text flow
theOpt = QTextOption()
- if self.mainConf.doJustify:
+ if CONFIG.doJustify:
theOpt.setAlignment(Qt.AlignJustify)
- if self.mainConf.showTabsNSpaces:
+ if CONFIG.showTabsNSpaces:
theOpt.setFlags(theOpt.flags() | QTextOption.ShowTabsAndSpaces)
- if self.mainConf.showLineEndings:
+ if CONFIG.showLineEndings:
theOpt.setFlags(theOpt.flags() | QTextOption.ShowLineAndParagraphSeparators)
qDoc.setDefaultTextOption(theOpt)
# Scroll bars
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
# Refresh the tab stops
- self.setTabStopDistance(self.mainConf.getTabWidth())
+ self.setTabStopDistance(CONFIG.getTabWidth())
# Configure word count timer
- self.wcInterval = self.mainConf.wordCountTimer
+ self.wcInterval = CONFIG.wordCountTimer
self.wcTimerDoc.setInterval(int(self.wcInterval*1000))
# If we have a document open, we should reload it in case the
@@ -420,10 +419,10 @@ class GuiDocEditor(QTextEdit):
elif isinstance(tLine, int):
self.setCursorLine(tLine)
- if self.mainConf.scrollPastEnd > 0:
+ if CONFIG.scrollPastEnd > 0:
fSize = QFontMetrics(self.font()).lineSpacing()
docFrame = self.document().rootFrame().frameFormat()
- docFrame.setBottomMargin(round(self.mainConf.scrollPastEnd * fSize))
+ docFrame.setBottomMargin(round(CONFIG.scrollPastEnd * fSize))
self.document().rootFrame().setFrameFormat(docFrame)
self.docFooter.updateLineCount()
@@ -571,8 +570,8 @@ class GuiDocEditor(QTextEdit):
sH = hBar.height() if hBar.isVisible() else 0
tM = self._vpMargin
- if self.mainConf.textWidth > 0 or self.mainGui.isFocusMode:
- tW = self.mainConf.getTextWidth(self.mainGui.isFocusMode)
+ if CONFIG.textWidth > 0 or self.mainGui.isFocusMode:
+ tW = CONFIG.getTextWidth(self.mainGui.isFocusMode)
tM = max((wW - sW - tW)//2, self._vpMargin)
tB = self.frameWidth()
@@ -674,7 +673,7 @@ class GuiDocEditor(QTextEdit):
# when it is enabled. By default, it's 30% of viewport.
vPos = self.verticalScrollBar().value()
cPos = self.cursorRect().topLeft().y()
- mPos = int(self.mainConf.autoScrollPos*0.01 * self.viewport().height())
+ mPos = int(CONFIG.autoScrollPos*0.01 * self.viewport().height())
if cPos > mPos:
# Only scroll if the cursor is past the auto-scroll limit
self.verticalScrollBar().setValue(max(0, vPos + cPos - mPos))
@@ -715,7 +714,7 @@ class GuiDocEditor(QTextEdit):
dictionary changed signal.
"""
if self.theProject.data.spellLang is None:
- theLang = self.mainConf.spellLanguage
+ theLang = CONFIG.spellLanguage
else:
theLang = self.theProject.data.spellLang
@@ -738,7 +737,7 @@ class GuiDocEditor(QTextEdit):
if theMode is None:
theMode = not self._spellCheck
- if not self.mainConf.hasEnchant:
+ if not CONFIG.hasEnchant:
if theMode:
self.mainGui.makeAlert(self.tr(
"Spell checking requires the package PyEnchant. "
@@ -1038,7 +1037,7 @@ class GuiDocEditor(QTextEdit):
self.docAction(nwDocAction.SEL_ALL)
return
- if self.mainConf.autoScroll:
+ if CONFIG.autoScroll:
cOld = self.cursorRect().center().y()
super().keyPressEvent(keyEvent)
@@ -1049,7 +1048,7 @@ class GuiDocEditor(QTextEdit):
if okMod and okKey:
cNew = self.cursorRect().center().y()
cMov = cNew - cOld
- mPos = self.mainConf.autoScrollPos*0.01 * self.viewport().height()
+ mPos = CONFIG.autoScrollPos*0.01 * self.viewport().height()
if abs(cMov) > 0 and cOld > mPos:
# Move the scroll bar
vBar = self.verticalScrollBar()
@@ -2090,7 +2089,7 @@ class GuiDocEditor(QTextEdit):
"""Check if document size crosses the big document limit set in
config. If so, we will set the big document flag to True.
"""
- bigLim = round(self.mainConf.bigDocLimit*1000)
+ bigLim = round(CONFIG.bigDocLimit*1000)
newState = theSize > bigLim
if newState != self._bigDoc:
@@ -2114,7 +2113,7 @@ class GuiDocEditor(QTextEdit):
on user settings and document action.
"""
theCursor = self.textCursor()
- if self.mainConf.autoSelect and not theCursor.hasSelection():
+ if CONFIG.autoSelect and not theCursor.hasSelection():
theCursor.select(QTextCursor.WordUnderCursor)
posS = theCursor.selectionStart()
posE = theCursor.selectionEnd()
@@ -2175,7 +2174,7 @@ class GuiDocEditor(QTextEdit):
"""Enable/disable the auto-replace feature temporarily.
"""
if theState:
- self._doReplace = self.mainConf.doReplace
+ self._doReplace = CONFIG.doReplace
else:
self._doReplace = False
return
@@ -2245,21 +2244,20 @@ class GuiDocEditSearch(QFrame):
logger.debug("Initialising GuiDocEditSearch ...")
- self.mainConf = novelwriter.CONFIG
self.docEditor = docEditor
self.mainGui = docEditor.mainGui
self.theProject = docEditor.theProject
self.mainTheme = docEditor.mainTheme
self.repVisible = False
- self.isCaseSense = self.mainConf.searchCase
- self.isWholeWord = self.mainConf.searchWord
- self.isRegEx = self.mainConf.searchRegEx
- self.doLoop = self.mainConf.searchLoop
- self.doNextFile = self.mainConf.searchNextFile
- self.doMatchCap = self.mainConf.searchMatchCap
+ self.isCaseSense = CONFIG.searchCase
+ self.isWholeWord = CONFIG.searchWord
+ self.isRegEx = CONFIG.searchRegEx
+ self.doLoop = CONFIG.searchLoop
+ self.doNextFile = CONFIG.searchNextFile
+ self.doMatchCap = CONFIG.searchMatchCap
- mPx = self.mainConf.pxInt(6)
+ mPx = CONFIG.pxInt(6)
tPx = int(0.8*self.mainTheme.fontPixelSize)
self.boxFont = self.mainTheme.guiFont
self.boxFont.setPointSizeF(0.9*self.mainTheme.fontPointSize)
@@ -2291,7 +2289,7 @@ class GuiDocEditSearch(QFrame):
self.searchLabel = QLabel(self.tr("Search"))
self.searchLabel.setFont(self.boxFont)
- self.searchLabel.setIndent(self.mainConf.pxInt(6))
+ self.searchLabel.setIndent(CONFIG.pxInt(6))
self.resultLabel = QLabel("?/?")
self.resultLabel.setFont(self.boxFont)
@@ -2376,10 +2374,10 @@ class GuiDocEditSearch(QFrame):
self.mainBox.setColumnStretch(3, 0)
self.mainBox.setColumnStretch(4, 0)
self.mainBox.setColumnStretch(5, 0)
- self.mainBox.setSpacing(self.mainConf.pxInt(2))
+ self.mainBox.setSpacing(CONFIG.pxInt(2))
self.mainBox.setContentsMargins(mPx, mPx, mPx, mPx)
- boxWidth = self.mainConf.pxInt(200)
+ boxWidth = CONFIG.pxInt(200)
self.searchBox.setFixedWidth(boxWidth)
self.replaceBox.setFixedWidth(boxWidth)
self.replaceBox.setVisible(False)
@@ -2438,12 +2436,12 @@ class GuiDocEditSearch(QFrame):
def closeSearch(self):
"""Close the search box.
"""
- self.mainConf.searchCase = self.isCaseSense
- self.mainConf.searchWord = self.isWholeWord
- self.mainConf.searchRegEx = self.isRegEx
- self.mainConf.searchLoop = self.doLoop
- self.mainConf.searchNextFile = self.doNextFile
- self.mainConf.searchMatchCap = self.doMatchCap
+ CONFIG.searchCase = self.isCaseSense
+ CONFIG.searchWord = self.isWholeWord
+ CONFIG.searchRegEx = self.isRegEx
+ CONFIG.searchLoop = self.doLoop
+ CONFIG.searchNextFile = self.doNextFile
+ CONFIG.searchMatchCap = self.doMatchCap
self.showReplace.setChecked(False)
self.setVisible(False)
@@ -2517,7 +2515,7 @@ class GuiDocEditSearch(QFrame):
# Using the Unicode-capable QRegularExpression class was
# only added in Qt 5.13. Otherwise, 5.3 and up supports
# only the QRegExp class.
- if self.mainConf.verQtValue >= 0x050d00:
+ if CONFIG.verQtValue >= 0x050d00:
rxOpt = QRegularExpression.UseUnicodePropertiesOption
if not self.isCaseSense:
rxOpt |= QRegularExpression.CaseInsensitiveOption
@@ -2661,7 +2659,6 @@ class GuiDocEditHeader(QWidget):
logger.debug("Initialising GuiDocEditHeader ...")
- self.mainConf = novelwriter.CONFIG
self.docEditor = docEditor
self.mainGui = docEditor.mainGui
self.theProject = docEditor.theProject
@@ -2670,7 +2667,7 @@ class GuiDocEditHeader(QWidget):
self._docHandle = None
fPx = int(0.9*self.mainTheme.fontPixelSize)
- hSp = self.mainConf.pxInt(6)
+ hSp = CONFIG.pxInt(6)
# Main Widget Settings
self.setAutoFillBackground(True)
@@ -2738,7 +2735,7 @@ class GuiDocEditHeader(QWidget):
# Fix Margins and Size
# This is needed for high DPI systems. See issue #499.
- cM = self.mainConf.pxInt(8)
+ cM = CONFIG.pxInt(8)
self.setContentsMargins(0, 0, 0, 0)
self.outerBox.setContentsMargins(cM, cM, cM, cM)
self.setMinimumHeight(fPx + 2*cM)
@@ -2802,7 +2799,7 @@ class GuiDocEditHeader(QWidget):
self.minmaxButton.setVisible(False)
return True
- if self.mainConf.showFullPath:
+ if CONFIG.showFullPath:
tTitle = []
tTree = self.theProject.tree.getItemPath(tHandle)
for aHandle in reversed(tTree):
@@ -2897,7 +2894,6 @@ class GuiDocEditFooter(QWidget):
logger.debug("Initialising GuiDocEditFooter ...")
- self.mainConf = novelwriter.CONFIG
self.docEditor = docEditor
self.mainGui = docEditor.mainGui
self.theProject = docEditor.theProject
@@ -2910,8 +2906,8 @@ class GuiDocEditFooter(QWidget):
self.sPx = int(round(0.9*self.mainTheme.baseIconSize))
fPx = int(0.9*self.mainTheme.fontPixelSize)
- bSp = self.mainConf.pxInt(4)
- hSp = self.mainConf.pxInt(6)
+ bSp = CONFIG.pxInt(4)
+ hSp = CONFIG.pxInt(6)
lblFont = self.font()
lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize)
@@ -2980,7 +2976,7 @@ class GuiDocEditFooter(QWidget):
# Fix Margins and Size
# This is needed for high DPI systems. See issue #499.
- cM = self.mainConf.pxInt(8)
+ cM = CONFIG.pxInt(8)
self.setContentsMargins(0, 0, 0, 0)
self.outerBox.setContentsMargins(cM, cM, cM, cM)
self.setMinimumHeight(fPx + 2*cM)
diff --git a/novelwriter/gui/dochighlight.py b/novelwriter/gui/dochighlight.py
index 3b527a64..a4d86c98 100644
--- a/novelwriter/gui/dochighlight.py
+++ b/novelwriter/gui/dochighlight.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from time import time
@@ -33,6 +32,7 @@ from PyQt5.QtGui import (
QColor, QTextCharFormat, QFont, QSyntaxHighlighter, QBrush
)
+from novelwriter import CONFIG
from novelwriter.common import checkInt
from novelwriter.constants import nwRegEx, nwUnicode
@@ -50,7 +50,6 @@ class GuiDocHighlighter(QSyntaxHighlighter):
super().__init__(theDoc)
logger.debug("Initialising GuiDocHighlighter ...")
- self.mainConf = novelwriter.CONFIG
self.theDoc = theDoc
self.spEnchant = spEnchant
self.mainGui = mainGui
@@ -103,7 +102,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
self.colBreak.setAlpha(64)
self.colEmph = None
- if self.mainConf.highlightEmph:
+ if CONFIG.highlightEmph:
self.colEmph = QColor(*self.mainTheme.colEmph)
self.hStyles = {
@@ -135,7 +134,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
self.hRules = []
# Multiple or Trailing Spaces
- if self.mainConf.showMultiSpaces:
+ if CONFIG.showMultiSpaces:
self.hRules.append((
r"[ ]{2,}|[ ]*$", {
0: self.hStyles["mspaces"],
@@ -150,11 +149,11 @@ class GuiDocHighlighter(QSyntaxHighlighter):
))
# Quoted Strings
- if self.mainConf.highlightQuotes:
- fmtDblO = self.mainConf.fmtDQuoteOpen
- fmtDblC = self.mainConf.fmtDQuoteClose
- fmtSngO = self.mainConf.fmtSQuoteOpen
- fmtSngC = self.mainConf.fmtSQuoteClose
+ if CONFIG.highlightQuotes:
+ fmtDblO = CONFIG.fmtDQuoteOpen
+ fmtDblC = CONFIG.fmtDQuoteClose
+ fmtSngO = CONFIG.fmtSQuoteOpen
+ fmtSngC = CONFIG.fmtSQuoteClose
# Straight Quotes
if not (fmtDblO == fmtDblC == "\""):
@@ -165,7 +164,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
))
# Double Quotes
- dblEnd = "|$" if self.mainConf.allowOpenDQuote else ""
+ dblEnd = "|$" if CONFIG.allowOpenDQuote else ""
self.hRules.append((
f"(\\B{fmtDblO})(.*?)({fmtDblC}\\B{dblEnd})", {
0: self.hStyles["dialogue2"],
@@ -173,7 +172,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
))
# Single Quotes
- sngEnd = "|$" if self.mainConf.allowOpenSQuote else ""
+ sngEnd = "|$" if CONFIG.allowOpenSQuote else ""
self.hRules.append((
f"(\\B{fmtSngO})(.*?)({fmtSngC}\\B{sngEnd})", {
0: self.hStyles["dialogue3"],
@@ -432,7 +431,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
theFormat.setBackground(QBrush(fmtCol, Qt.SolidPattern))
if fmtSize is not None:
- theFormat.setFontPointSize(int(round(fmtSize*self.mainConf.textSize)))
+ theFormat.setFontPointSize(int(round(fmtSize*CONFIG.textSize)))
return theFormat
diff --git a/novelwriter/gui/docviewer.py b/novelwriter/gui/docviewer.py
index 517b88f4..7cb8be4d 100644
--- a/novelwriter/gui/docviewer.py
+++ b/novelwriter/gui/docviewer.py
@@ -28,7 +28,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from enum import Enum
@@ -41,6 +40,7 @@ from PyQt5.QtWidgets import (
QAction, QMenu, QFrame
)
+from novelwriter import CONFIG
from novelwriter.enum import nwItemType, nwDocAction, nwDocMode
from novelwriter.error import logException
from novelwriter.constants import nwUnicode
@@ -59,7 +59,6 @@ class GuiDocViewer(QTextBrowser):
logger.debug("Initialising GuiDocViewer ...")
# Class Variables
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
@@ -68,7 +67,7 @@ class GuiDocViewer(QTextBrowser):
self._docHandle = None
# Settings
- self.setMinimumWidth(self.mainConf.pxInt(300))
+ self.setMinimumWidth(CONFIG.pxInt(300))
self.setAutoFillBackground(True)
self.setOpenExternalLinks(False)
self.setFocusPolicy(Qt.StrongFocus)
@@ -116,11 +115,11 @@ class GuiDocViewer(QTextBrowser):
# Set Font
theFont = QFont()
- if self.mainConf.textFont is None:
+ if CONFIG.textFont is None:
# If none is defined, set the default back to config
- self.mainConf.textFont = self.document().defaultFont().family()
- theFont.setFamily(self.mainConf.textFont)
- theFont.setPointSize(self.mainConf.textSize)
+ CONFIG.textFont = self.document().defaultFont().family()
+ theFont.setFamily(CONFIG.textFont)
+ theFont.setPointSize(CONFIG.textSize)
self.setFont(theFont)
# Set the widget colours to match syntax theme
@@ -141,23 +140,23 @@ class GuiDocViewer(QTextBrowser):
# Set default text margins
self.document().setDocumentMargin(0)
theOpt = QTextOption()
- if self.mainConf.doJustify:
+ if CONFIG.doJustify:
theOpt.setAlignment(Qt.AlignJustify)
self.document().setDefaultTextOption(theOpt)
# Scroll bars
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
# Refresh the tab stops
- self.setTabStopDistance(self.mainConf.getTabWidth())
+ self.setTabStopDistance(CONFIG.getTabWidth())
# If we have a document open, we should reload it in case the font changed
if self._docHandle is not None:
@@ -177,7 +176,7 @@ class GuiDocViewer(QTextBrowser):
sPos = self.verticalScrollBar().value()
aDoc = ToHtml(self.theProject)
- aDoc.setPreview(self.mainConf.viewComments, self.mainConf.viewSynopsis)
+ aDoc.setPreview(CONFIG.viewComments, CONFIG.viewSynopsis)
aDoc.setLinkHeaders(True)
# Be extra careful here to prevent crashes when first opening a
@@ -196,7 +195,7 @@ class GuiDocViewer(QTextBrowser):
return False
# Refresh the tab stops
- self.setTabStopDistance(self.mainConf.getTabWidth())
+ self.setTabStopDistance(CONFIG.getTabWidth())
# Must be before setHtml
if updateHistory:
@@ -297,7 +296,7 @@ class GuiDocViewer(QTextBrowser):
"""
wW = self.width()
wH = self.height()
- cM = self.mainConf.getTextMargin()
+ cM = CONFIG.getTextMargin()
vBar = self.verticalScrollBar()
sW = vBar.width() if vBar.isVisible() else 0
@@ -306,8 +305,8 @@ class GuiDocViewer(QTextBrowser):
sH = hBar.height() if hBar.isVisible() else 0
tM = cM
- if self.mainConf.textWidth > 0:
- tW = self.mainConf.getTextWidth()
+ if CONFIG.textWidth > 0:
+ tW = CONFIG.getTextWidth()
tM = max((wW - sW - tW)//2, cM)
tB = self.frameWidth()
@@ -685,7 +684,6 @@ class GuiDocViewHeader(QWidget):
logger.debug("Initialising GuiDocViewHeader ...")
- self.mainConf = novelwriter.CONFIG
self.docViewer = docViewer
self.mainGui = docViewer.mainGui
self.theProject = docViewer.theProject
@@ -695,7 +693,7 @@ class GuiDocViewHeader(QWidget):
self._docHandle = None
fPx = int(0.9*self.mainTheme.fontPixelSize)
- hSp = self.mainConf.pxInt(6)
+ hSp = CONFIG.pxInt(6)
# Main Widget Settings
self.setAutoFillBackground(True)
@@ -763,7 +761,7 @@ class GuiDocViewHeader(QWidget):
# Fix Margins and Size
# This is needed for high DPI systems. See issue #499.
- cM = self.mainConf.pxInt(8)
+ cM = CONFIG.pxInt(8)
self.setContentsMargins(0, 0, 0, 0)
self.outerBox.setContentsMargins(cM, cM, cM, cM)
self.setMinimumHeight(fPx + 2*cM)
@@ -828,7 +826,7 @@ class GuiDocViewHeader(QWidget):
self.refreshButton.setVisible(False)
return True
- if self.mainConf.showFullPath:
+ if CONFIG.showFullPath:
tTitle = []
tTree = self.theProject.tree.getItemPath(tHandle)
for aHandle in reversed(tTree):
@@ -903,7 +901,6 @@ class GuiDocViewFooter(QWidget):
logger.debug("Initialising GuiDocViewFooter ...")
- self.mainConf = novelwriter.CONFIG
self.docViewer = docViewer
self.mainGui = docViewer.mainGui
self.mainTheme = docViewer.mainTheme
@@ -913,8 +910,8 @@ class GuiDocViewFooter(QWidget):
self._docHandle = None
fPx = int(0.9*self.mainTheme.fontPixelSize)
- bSp = self.mainConf.pxInt(2)
- hSp = self.mainConf.pxInt(8)
+ bSp = CONFIG.pxInt(2)
+ hSp = CONFIG.pxInt(8)
# Main Widget Settings
self.setContentsMargins(0, 0, 0, 0)
@@ -942,7 +939,7 @@ class GuiDocViewFooter(QWidget):
# Show Comments
self.showComments = QToolButton(self)
self.showComments.setCheckable(True)
- self.showComments.setChecked(self.mainConf.viewComments)
+ self.showComments.setChecked(CONFIG.viewComments)
self.showComments.setToolButtonStyle(Qt.ToolButtonIconOnly)
self.showComments.setIconSize(QSize(fPx, fPx))
self.showComments.setFixedSize(QSize(fPx, fPx))
@@ -952,7 +949,7 @@ class GuiDocViewFooter(QWidget):
# Show Synopsis
self.showSynopsis = QToolButton(self)
self.showSynopsis.setCheckable(True)
- self.showSynopsis.setChecked(self.mainConf.viewSynopsis)
+ self.showSynopsis.setChecked(CONFIG.viewSynopsis)
self.showSynopsis.setToolButtonStyle(Qt.ToolButtonIconOnly)
self.showSynopsis.setIconSize(QSize(fPx, fPx))
self.showSynopsis.setFixedSize(QSize(fPx, fPx))
@@ -1021,7 +1018,7 @@ class GuiDocViewFooter(QWidget):
# Fix Margins and Size
# This is needed for high DPI systems. See issue #499.
- cM = self.mainConf.pxInt(8)
+ cM = CONFIG.pxInt(8)
self.setContentsMargins(0, 0, 0, 0)
self.outerBox.setContentsMargins(cM, cM, cM, cM)
self.setMinimumHeight(fPx + 2*cM)
@@ -1120,7 +1117,7 @@ class GuiDocViewFooter(QWidget):
def _doToggleComments(self, theState):
"""Toggle the view comment button and reload the document.
"""
- self.mainConf.viewComments = theState
+ CONFIG.viewComments = theState
self.docViewer.reloadText()
return
@@ -1128,7 +1125,7 @@ class GuiDocViewFooter(QWidget):
def _doToggleSynopsis(self, theState):
"""Toggle the view synopsis button and reload the document.
"""
- self.mainConf.viewSynopsis = theState
+ CONFIG.viewSynopsis = theState
self.docViewer.reloadText()
return
@@ -1146,7 +1143,6 @@ class GuiDocViewDetails(QScrollArea):
super().__init__(parent=mainGui)
logger.debug("Initialising GuiDocViewDetails ...")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
self.mainTheme = mainGui.mainTheme
@@ -1172,7 +1168,7 @@ class GuiDocViewDetails(QScrollArea):
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setWidgetResizable(True)
- self.setMinimumHeight(self.mainConf.pxInt(50))
+ self.setMinimumHeight(CONFIG.pxInt(50))
self.setFrameStyle(QFrame.NoFrame)
logger.debug("GuiDocViewDetails initialisation complete")
diff --git a/novelwriter/gui/itemdetails.py b/novelwriter/gui/itemdetails.py
index f36a78d3..e89ed7e2 100644
--- a/novelwriter/gui/itemdetails.py
+++ b/novelwriter/gui/itemdetails.py
@@ -24,12 +24,12 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtCore import Qt, pyqtSlot
from PyQt5.QtGui import QFont, QPixmap
from PyQt5.QtWidgets import QWidget, QGridLayout, QLabel
+from novelwriter import CONFIG
from novelwriter.constants import trConst, nwLabels
logger = logging.getLogger(__name__)
@@ -41,7 +41,6 @@ class GuiItemDetails(QWidget):
super().__init__(parent=mainGui)
logger.debug("Initialising GuiItemDetails ...")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
self.mainTheme = mainGui.mainTheme
@@ -50,9 +49,9 @@ class GuiItemDetails(QWidget):
self._itemHandle = None
# Sizes
- hSp = self.mainConf.pxInt(6)
- vSp = self.mainConf.pxInt(1)
- mPx = self.mainConf.pxInt(6)
+ hSp = CONFIG.pxInt(6)
+ vSp = CONFIG.pxInt(1)
+ mPx = CONFIG.pxInt(6)
fPt = self.mainTheme.fontPointSize
fntLabel = QFont()
diff --git a/novelwriter/gui/mainmenu.py b/novelwriter/gui/mainmenu.py
index 0da2d783..64b36e96 100644
--- a/novelwriter/gui/mainmenu.py
+++ b/novelwriter/gui/mainmenu.py
@@ -34,6 +34,7 @@ from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtWidgets import QMenuBar, QAction
+from novelwriter import CONFIG
from novelwriter.enum import nwDocAction, nwDocInsert, nwWidget
from novelwriter.constants import trConst, nwKeyWords, nwLabels, nwUnicode
@@ -50,7 +51,6 @@ class GuiMainMenu(QMenuBar):
super().__init__(parent=mainGui)
logger.debug("Initialising GuiMainMenu ...")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
@@ -105,9 +105,9 @@ class GuiMainMenu(QMenuBar):
def _openUserManualFile(self):
"""Open the documentation in PDF format.
"""
- if isinstance(self.mainConf.pdfDocs, Path):
+ if isinstance(CONFIG.pdfDocs, Path):
QDesktopServices.openUrl(
- QUrl(urljoin("file:", pathname2url(str(self.mainConf.pdfDocs))))
+ QUrl(urljoin("file:", pathname2url(str(CONFIG.pdfDocs))))
)
return
@@ -310,7 +310,7 @@ class GuiMainMenu(QMenuBar):
# View > TreeView
self.aFocusTree = QAction(self.tr("Go to Project Tree"), self)
- if self.mainConf.osWindows:
+ if CONFIG.osWindows:
self.aFocusTree.setShortcut("Ctrl+Alt+1")
else:
self.aFocusTree.setShortcut("Alt+1")
@@ -319,7 +319,7 @@ class GuiMainMenu(QMenuBar):
# View > Document Pane 1
self.aFocusEditor = QAction(self.tr("Go to Document Editor"), self)
- if self.mainConf.osWindows:
+ if CONFIG.osWindows:
self.aFocusEditor.setShortcut("Ctrl+Alt+2")
else:
self.aFocusEditor.setShortcut("Alt+2")
@@ -328,7 +328,7 @@ class GuiMainMenu(QMenuBar):
# View > Document Pane 2
self.aFocusView = QAction(self.tr("Go to Document Viewer"), self)
- if self.mainConf.osWindows:
+ if CONFIG.osWindows:
self.aFocusView.setShortcut("Ctrl+Alt+3")
else:
self.aFocusView.setShortcut("Alt+3")
@@ -337,7 +337,7 @@ class GuiMainMenu(QMenuBar):
# View > Outline
self.aFocusOutline = QAction(self.tr("Go to Outline"), self)
- if self.mainConf.osWindows:
+ if CONFIG.osWindows:
self.aFocusOutline.setShortcut("Ctrl+Alt+4")
else:
self.aFocusOutline.setShortcut("Alt+4")
@@ -754,7 +754,7 @@ class GuiMainMenu(QMenuBar):
# Search > Replace
self.aReplace = QAction(self.tr("Replace"), self)
- if self.mainConf.osDarwin:
+ if CONFIG.osDarwin:
self.aReplace.setShortcut("Ctrl+=")
else:
self.aReplace.setShortcut("Ctrl+H")
@@ -763,7 +763,7 @@ class GuiMainMenu(QMenuBar):
# Search > Find Next
self.aFindNext = QAction(self.tr("Find Next"), self)
- if self.mainConf.osDarwin:
+ if CONFIG.osDarwin:
self.aFindNext.setShortcuts(["Ctrl+G", "F3"])
else:
self.aFindNext.setShortcuts(["F3", "Ctrl+G"])
@@ -772,7 +772,7 @@ class GuiMainMenu(QMenuBar):
# Search > Find Prev
self.aFindPrev = QAction(self.tr("Find Previous"), self)
- if self.mainConf.osDarwin:
+ if CONFIG.osDarwin:
self.aFindPrev.setShortcuts(["Ctrl+Shift+G", "Shift+F3"])
else:
self.aFindPrev.setShortcuts(["Shift+F3", "Ctrl+Shift+G"])
@@ -883,7 +883,7 @@ class GuiMainMenu(QMenuBar):
self.helpMenu.addAction(self.aHelpDocs)
# Help > User Manual (PDF)
- if isinstance(self.mainConf.pdfDocs, Path):
+ if isinstance(CONFIG.pdfDocs, Path):
self.aPdfDocs = QAction(self.tr("User Manual (PDF)"), self)
self.aPdfDocs.setShortcut("Shift+F1")
self.aPdfDocs.triggered.connect(self._openUserManualFile)
diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py
index 920dccf2..d8fe310d 100644
--- a/novelwriter/gui/noveltree.py
+++ b/novelwriter/gui/noveltree.py
@@ -26,7 +26,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from enum import Enum
from time import time
@@ -39,6 +38,7 @@ from PyQt5.QtWidgets import (
QTreeWidgetItem, QVBoxLayout, QWidget
)
+from novelwriter import CONFIG
from novelwriter.enum import nwDocMode, nwItemClass, nwOutline
from novelwriter.common import minmax
from novelwriter.constants import nwHeaders, nwKeyWords, nwLabels, trConst
@@ -198,14 +198,13 @@ class GuiNovelToolBar(QWidget):
logger.debug("Initialising GuiNovelToolBar ...")
- self.mainConf = novelwriter.CONFIG
self.novelView = novelView
self.mainGui = novelView.mainGui
self.theProject = novelView.mainGui.theProject
self.mainTheme = novelView.mainGui.mainTheme
iPx = self.mainTheme.baseIconSize
- mPx = self.mainConf.pxInt(2)
+ mPx = CONFIG.pxInt(2)
self.setContentsMargins(0, 0, 0, 0)
self.setAutoFillBackground(True)
@@ -216,7 +215,7 @@ class GuiNovelToolBar(QWidget):
self.novelPrefix = self.tr("Outline of {0}")
self.novelValue = NovelSelector(self, self.theProject, self.mainGui)
self.novelValue.setFont(selFont)
- self.novelValue.setMinimumWidth(self.mainConf.pxInt(150))
+ self.novelValue.setMinimumWidth(CONFIG.pxInt(150))
self.novelValue.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.novelValue.novelSelectionChanged.connect(self.setCurrentRoot)
@@ -290,7 +289,7 @@ class GuiNovelToolBar(QWidget):
buttonStyle = (
"QToolButton {{padding: {0}px; border: none; background: transparent;}} "
"QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}"
- ).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
+ ).format(CONFIG.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
self.tbNovel.setStyleSheet(buttonStyle)
self.tbRefresh.setStyleSheet(buttonStyle)
@@ -398,7 +397,6 @@ class GuiNovelTree(QTreeWidget):
logger.debug("Initialising GuiNovelTree ...")
- self.mainConf = novelwriter.CONFIG
self.novelView = novelView
self.mainGui = novelView.mainGui
self.mainTheme = novelView.mainGui.mainTheme
@@ -420,7 +418,7 @@ class GuiNovelTree(QTreeWidget):
# =========
iPx = self.mainTheme.baseIconSize
- cMg = self.mainConf.pxInt(6)
+ cMg = CONFIG.pxInt(6)
self.setIconSize(QSize(iPx, iPx))
self.setFrameStyle(QFrame.NoFrame)
@@ -470,12 +468,12 @@ class GuiNovelTree(QTreeWidget):
"""Set or update tree widget settings.
"""
# Scroll bars
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py
index 1d90ab89..fd288a11 100644
--- a/novelwriter/gui/outline.py
+++ b/novelwriter/gui/outline.py
@@ -28,7 +28,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from time import time
from enum import Enum
@@ -42,6 +41,7 @@ from PyQt5.QtWidgets import (
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
)
+from novelwriter import CONFIG
from novelwriter.enum import (
nwDocMode, nwItemClass, nwItemLayout, nwItemType, nwOutline
)
@@ -61,7 +61,6 @@ class GuiOutlineView(QWidget):
def __init__(self, mainGui):
super().__init__(parent=mainGui)
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
@@ -75,7 +74,7 @@ class GuiOutlineView(QWidget):
self.splitOutline.addWidget(self.outlineTree)
self.splitOutline.addWidget(self.outlineData)
self.splitOutline.setOpaqueResize(False)
- self.splitOutline.setSizes(self.mainConf.outlinePanePos)
+ self.splitOutline.setSizes(CONFIG.outlinePanePos)
# Assemble
self.outerBox = QVBoxLayout()
@@ -215,13 +214,12 @@ class GuiOutlineToolBar(QToolBar):
logger.debug("Initialising GuiOutlineToolBar ...")
- self.mainConf = novelwriter.CONFIG
self.mainGui = theOutline.mainGui
self.theProject = theOutline.mainGui.theProject
self.mainTheme = theOutline.mainGui.mainTheme
- iPx = self.mainConf.pxInt(22)
- mPx = self.mainConf.pxInt(12)
+ iPx = CONFIG.pxInt(22)
+ mPx = CONFIG.pxInt(12)
self.setMovable(False)
self.setIconSize(QSize(iPx, iPx))
@@ -235,7 +233,7 @@ class GuiOutlineToolBar(QToolBar):
self.novelLabel.setContentsMargins(0, 0, mPx, 0)
self.novelValue = NovelSelector(self, self.theProject, self.mainGui)
- self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
+ self.novelValue.setMinimumWidth(CONFIG.pxInt(200))
self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
# Actions
@@ -373,7 +371,6 @@ class GuiOutlineTree(QTreeWidget):
logger.debug("Initialising GuiOutlineTree ...")
- self.mainConf = novelwriter.CONFIG
self.outlineView = outlineView
self.mainGui = outlineView.mainGui
self.theProject = outlineView.mainGui.theProject
@@ -446,12 +443,12 @@ class GuiOutlineTree(QTreeWidget):
"""Set or update outline settings.
"""
# Scroll bars
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
@@ -610,7 +607,7 @@ class GuiOutlineTree(QTreeWidget):
tmpWidth = pOptions.getValue("GuiOutline", "columnWidth", {})
for hName in tmpWidth:
try:
- self._colWidth[nwOutline[hName]] = self.mainConf.pxInt(tmpWidth[hName])
+ self._colWidth[nwOutline[hName]] = CONFIG.pxInt(tmpWidth[hName])
except Exception:
logger.warning("Ignored unknown outline column '%s'", str(hName))
@@ -640,7 +637,7 @@ class GuiOutlineTree(QTreeWidget):
colHidden = {}
for hItem in nwOutline:
- colWidth[hItem.name] = self.mainConf.rpxInt(self._colWidth[hItem])
+ colWidth[hItem.name] = CONFIG.rpxInt(self._colWidth[hItem])
colHidden[hItem.name] = self._colHidden[hItem]
for iCol in range(self.columnCount()):
@@ -648,7 +645,7 @@ class GuiOutlineTree(QTreeWidget):
treeOrder.append(hName)
iLog = self.treeHead.logicalIndex(iCol)
- logWidth = self.mainConf.rpxInt(self.columnWidth(iLog))
+ logWidth = CONFIG.rpxInt(self.columnWidth(iLog))
logHidden = self.isColumnHidden(iLog)
colHidden[hName] = logHidden
@@ -801,7 +798,6 @@ class GuiOutlineDetails(QScrollArea):
logger.debug("Initialising GuiOutlineDetails ...")
- self.mainConf = novelwriter.CONFIG
self.theOutline = theOutline
self.mainGui = theOutline.mainGui
self.theProject = theOutline.mainGui.theProject
@@ -811,8 +807,8 @@ class GuiOutlineDetails(QScrollArea):
minTitle = 30*self.mainTheme.textNWidth
maxTitle = 40*self.mainTheme.textNWidth
wCount = self.mainTheme.getTextWidth("999,999")
- hSpace = int(self.mainConf.pxInt(10))
- vSpace = int(self.mainConf.pxInt(4))
+ hSpace = int(CONFIG.pxInt(10))
+ vSpace = int(CONFIG.pxInt(4))
# Details Area
self.titleLabel = QLabel("%s" % self.tr("Title"))
@@ -994,12 +990,12 @@ class GuiOutlineDetails(QScrollArea):
"""Set or update outline settings.
"""
# Scroll bars
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py
index 82b3c3a1..292cbfef 100644
--- a/novelwriter/gui/projtree.py
+++ b/novelwriter/gui/projtree.py
@@ -26,7 +26,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from enum import Enum
from time import time
@@ -38,10 +37,11 @@ from PyQt5.QtWidgets import (
QMenu, QShortcut, QSizePolicy, QToolButton, QTreeWidget, QTreeWidgetItem,
QVBoxLayout, QWidget
)
-from novelwriter.core.item import NWItem
+from novelwriter import CONFIG
from novelwriter.enum import nwDocMode, nwItemType, nwItemClass, nwItemLayout, nwAlert, nwWidget
from novelwriter.constants import nwHeaders, nwUnicode, trConst, nwLabels
+from novelwriter.core.item import NWItem
from novelwriter.core.coretools import DocMerger, DocSplitter
from novelwriter.dialogs.docmerge import GuiDocMerge
from novelwriter.dialogs.docsplit import GuiDocSplit
@@ -217,7 +217,6 @@ class GuiProjectToolBar(QWidget):
logger.debug("Initialising GuiProjectToolBar ...")
- self.mainConf = novelwriter.CONFIG
self.projView = projView
self.projTree = projView.projTree
self.mainGui = projView.mainGui
@@ -225,7 +224,7 @@ class GuiProjectToolBar(QWidget):
self.mainTheme = projView.mainGui.mainTheme
iPx = self.mainTheme.baseIconSize
- mPx = self.mainConf.pxInt(2)
+ mPx = CONFIG.pxInt(2)
self.setContentsMargins(0, 0, 0, 0)
self.setAutoFillBackground(True)
@@ -348,7 +347,7 @@ class GuiProjectToolBar(QWidget):
buttonStyle = (
"QToolButton {{padding: {0}px; border: none; background: transparent;}} "
"QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}"
- ).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
+ ).format(CONFIG.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
self.tbQuick.setStyleSheet(buttonStyle)
self.tbMoveU.setStyleSheet(buttonStyle)
@@ -458,7 +457,6 @@ class GuiProjectTree(QTreeWidget):
logger.debug("Initialising GuiProjectTree ...")
- self.mainConf = novelwriter.CONFIG
self.projView = projView
self.mainGui = projView.mainGui
self.mainTheme = projView.mainGui.mainTheme
@@ -478,7 +476,7 @@ class GuiProjectTree(QTreeWidget):
# Tree Settings
iPx = self.mainTheme.baseIconSize
- cMg = self.mainConf.pxInt(6)
+ cMg = CONFIG.pxInt(6)
self.setIconSize(QSize(iPx, iPx))
self.setFrameStyle(QFrame.NoFrame)
@@ -532,12 +530,12 @@ class GuiProjectTree(QTreeWidget):
"""Set or update tree widget settings.
"""
# Scroll bars
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
@@ -987,7 +985,7 @@ class GuiProjectTree(QTreeWidget):
trItem.setIcon(self.C_ACTIVE, self.mainTheme.getIcon(iconName))
- if self.mainConf.emphLabels and nwItem.isDocumentLayout():
+ if CONFIG.emphLabels and nwItem.isDocumentLayout():
trFont = trItem.font(self.C_NAME)
trFont.setBold(hLevel == "H1" or hLevel == "H2")
trFont.setUnderline(hLevel == "H1")
diff --git a/novelwriter/gui/sidebar.py b/novelwriter/gui/sidebar.py
index c27c8311..ec7093cb 100644
--- a/novelwriter/gui/sidebar.py
+++ b/novelwriter/gui/sidebar.py
@@ -24,13 +24,13 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from PyQt5.QtCore import Qt, QSize, pyqtSignal
from PyQt5.QtWidgets import (
QToolBar, QWidget, QSizePolicy, QAction, QMenu, QToolButton
)
+from novelwriter import CONFIG
from novelwriter.enum import nwView
logger = logging.getLogger(__name__)
@@ -45,13 +45,12 @@ class GuiSideBar(QToolBar):
logger.debug("Initialising GuiSideBar ...")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
# Style
- iPx = self.mainConf.pxInt(22)
- mPx = self.mainConf.pxInt(60)
+ iPx = CONFIG.pxInt(22)
+ mPx = CONFIG.pxInt(60)
lblFont = self.mainTheme.guiFont
lblFont.setPointSizeF(0.65*self.mainTheme.fontPointSize)
diff --git a/novelwriter/gui/statusbar.py b/novelwriter/gui/statusbar.py
index b811f80b..5d90dcd3 100644
--- a/novelwriter/gui/statusbar.py
+++ b/novelwriter/gui/statusbar.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from time import time
@@ -33,6 +32,7 @@ from PyQt5.QtCore import pyqtSlot, QLocale
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import qApp, QStatusBar, QLabel
+from novelwriter import CONFIG
from novelwriter.common import formatTime
from novelwriter.gui.components import StatusLED
@@ -46,7 +46,6 @@ class GuiMainStatus(QStatusBar):
logger.debug("Initialising GuiMainStatus ...")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.refTime = None
@@ -61,7 +60,7 @@ class GuiMainStatus(QStatusBar):
# Permanent Widgets
# =================
- xM = self.mainConf.pxInt(8)
+ xM = CONFIG.pxInt(8)
# The Spell Checker Language
self.langIcon = QLabel("")
@@ -174,7 +173,7 @@ class GuiMainStatus(QStatusBar):
def setUserIdle(self, userIdle):
"""Change the idle status icon.
"""
- if not self.mainConf.stopWhenIdle:
+ if not CONFIG.stopWhenIdle:
userIdle = False
if self.userIdle != userIdle:
@@ -191,7 +190,7 @@ class GuiMainStatus(QStatusBar):
"""Update the current project statistics.
"""
self.statsText.setText(self.tr("Words: {0} ({1})").format(f"{pWC:n}", f"{sWC:+n}"))
- if self.mainConf.incNotesWCount:
+ if CONFIG.incNotesWCount:
self.statsText.setToolTip(self.tr("Project word count (session change)"))
else:
self.statsText.setToolTip(self.tr("Novel word count (session change)"))
@@ -203,7 +202,7 @@ class GuiMainStatus(QStatusBar):
if self.refTime is None:
self.timeText.setText("00:00:00")
else:
- if self.mainConf.stopWhenIdle:
+ if CONFIG.stopWhenIdle:
sessTime = round(time() - self.refTime - idleTime)
else:
sessTime = round(time() - self.refTime)
diff --git a/novelwriter/gui/theme.py b/novelwriter/gui/theme.py
index 746cde06..81cfc172 100644
--- a/novelwriter/gui/theme.py
+++ b/novelwriter/gui/theme.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from math import ceil
@@ -35,6 +34,7 @@ from PyQt5.QtGui import (
QPalette, QColor, QIcon, QFont, QFontMetrics, QFontDatabase, QPixmap
)
+from novelwriter import CONFIG
from novelwriter.enum import nwItemLayout, nwItemType
from novelwriter.error import logException
from novelwriter.common import NWConfigParser, minmax
@@ -52,7 +52,6 @@ class GuiTheme:
def __init__(self):
- self.mainConf = novelwriter.CONFIG
self.iconCache = GuiIcons(self)
# Loaded Theme Settings
@@ -118,10 +117,10 @@ class GuiTheme:
self._availThemes = {}
self._availSyntax = {}
- self._listConf(self._availSyntax, self.mainConf.assetPath("syntax"))
- self._listConf(self._availThemes, self.mainConf.assetPath("themes"))
- self._listConf(self._availSyntax, self.mainConf.dataPath("syntax"))
- self._listConf(self._availThemes, self.mainConf.dataPath("themes"))
+ self._listConf(self._availSyntax, CONFIG.assetPath("syntax"))
+ self._listConf(self._availThemes, CONFIG.assetPath("themes"))
+ self._listConf(self._availSyntax, CONFIG.dataPath("syntax"))
+ self._listConf(self._availThemes, CONFIG.dataPath("themes"))
self.loadTheme()
self.loadSyntax()
@@ -136,7 +135,7 @@ class GuiTheme:
# Extract Other Info
self.guiDPI = qApp.primaryScreen().logicalDotsPerInchX()
self.guiScale = qApp.primaryScreen().logicalDotsPerInchX()/96.0
- self.mainConf.guiScale = self.guiScale
+ CONFIG.guiScale = self.guiScale
logger.debug("GUI DPI: %.1f", self.guiDPI)
logger.debug("GUI Scale: %.2f", self.guiScale)
@@ -184,11 +183,11 @@ class GuiTheme:
def loadTheme(self):
"""Load the currently specified GUI theme.
"""
- guiTheme = self.mainConf.guiTheme
+ guiTheme = CONFIG.guiTheme
if guiTheme not in self._availThemes:
logger.error("Could not find GUI theme '%s'", guiTheme)
guiTheme = "default"
- self.mainConf.guiTheme = guiTheme
+ CONFIG.guiTheme = guiTheme
themeFile = self._availThemes.get(guiTheme, None)
if themeFile is None:
@@ -270,11 +269,11 @@ class GuiTheme:
def loadSyntax(self):
"""Load the currently specified syntax highlighter theme.
"""
- guiSyntax = self.mainConf.guiSyntax
+ guiSyntax = CONFIG.guiSyntax
if guiSyntax not in self._availSyntax:
logger.error("Could not find syntax theme '%s'", guiSyntax)
guiSyntax = "default_light"
- self.mainConf.guiSyntax = guiSyntax
+ CONFIG.guiSyntax = guiSyntax
syntaxFile = self._availSyntax.get(guiSyntax, None)
if syntaxFile is None:
@@ -367,18 +366,18 @@ class GuiTheme:
"""Update the GUI's font style from settings.
"""
theFont = QFont()
- if self.mainConf.guiFont not in self.guiFontDB.families():
- if self.mainConf.osWindows and "Arial" in self.guiFontDB.families():
+ if CONFIG.guiFont not in self.guiFontDB.families():
+ if CONFIG.osWindows and "Arial" in self.guiFontDB.families():
# On Windows we default to Arial if possible
theFont.setFamily("Arial")
theFont.setPointSize(10)
else:
theFont = self.guiFontDB.systemFont(QFontDatabase.GeneralFont)
- self.mainConf.guiFont = theFont.family()
- self.mainConf.guiFontSize = theFont.pointSize()
+ CONFIG.guiFont = theFont.family()
+ CONFIG.guiFontSize = theFont.pointSize()
else:
- theFont.setFamily(self.mainConf.guiFont)
- theFont.setPointSize(self.mainConf.guiFontSize)
+ theFont.setFamily(CONFIG.guiFont)
+ theFont.setPointSize(CONFIG.guiFontSize)
qApp.setFont(theFont)
@@ -472,7 +471,6 @@ class GuiIcons:
def __init__(self, mainTheme):
- self.mainConf = novelwriter.CONFIG
self.mainTheme = mainTheme
# Storage
@@ -482,7 +480,7 @@ class GuiIcons:
self._confName = "icons.conf"
# Icon Theme Path
- self._iconPath = self.mainConf.assetPath("icons")
+ self._iconPath = CONFIG.assetPath("icons")
# Icon Theme Meta
self.themeName = ""
@@ -507,7 +505,7 @@ class GuiIcons:
self._themeMap = {}
themePath = self._iconPath / iconTheme
if not themePath.is_dir():
- themePath = self.mainConf.dataPath("icons") / iconTheme
+ themePath = CONFIG.dataPath("icons") / iconTheme
if not themePath.is_dir():
logger.warning("No icons loaded for '%s'", iconTheme)
return False
@@ -580,7 +578,7 @@ class GuiIcons:
if decoKey in self._themeMap:
imgPath = self._themeMap[decoKey]
elif decoKey in self.IMAGE_MAP:
- imgPath = self.mainConf.assetPath("images") / self.IMAGE_MAP[decoKey]
+ imgPath = CONFIG.assetPath("images") / self.IMAGE_MAP[decoKey]
else:
logger.error("Decoration with name '%s' does not exist", decoKey)
return QPixmap()
diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py
index 7bcb600b..6add5bac 100644
--- a/novelwriter/guimain.py
+++ b/novelwriter/guimain.py
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-import novelwriter
from enum import Enum
from time import time
@@ -38,6 +37,7 @@ from PyQt5.QtWidgets import (
QMessageBox, QDialog, QStackedWidget
)
+from novelwriter import CONFIG, __hexversion__
from novelwriter.gui.theme import GuiTheme
from novelwriter.gui.sidebar import GuiSideBar
from novelwriter.gui.outline import GuiOutlineView
@@ -78,19 +78,18 @@ class GuiMain(QMainWindow):
logger.debug("Initialising GUI ...")
self.setObjectName("GuiMain")
- self.mainConf = novelwriter.CONFIG
self.threadPool = QThreadPool()
# System Info
# ===========
- logger.info("OS: %s", self.mainConf.osType)
- logger.info("Kernel: %s", self.mainConf.kernelVer)
- logger.info("Host: %s", self.mainConf.hostName)
- logger.info("Qt5: %s (0x%06x)", self.mainConf.verQtString, self.mainConf.verQtValue)
- logger.info("PyQt5: %s (0x%06x)", self.mainConf.verPyQtString, self.mainConf.verPyQtValue)
- logger.info("Python: %s (0x%08x)", self.mainConf.verPyString, self.mainConf.verPyHexVal)
- logger.info("GUI Language: %s", self.mainConf.guiLocale)
+ logger.info("OS: %s", CONFIG.osType)
+ logger.info("Kernel: %s", CONFIG.kernelVer)
+ logger.info("Host: %s", CONFIG.hostName)
+ logger.info("Qt5: %s (0x%06x)", CONFIG.verQtString, CONFIG.verQtValue)
+ logger.info("PyQt5: %s (0x%06x)", CONFIG.verPyQtString, CONFIG.verPyQtValue)
+ logger.info("Python: %s (0x%08x)", CONFIG.verPyString, CONFIG.verPyHexVal)
+ logger.info("GUI Language: %s", CONFIG.guiLocale)
# Core Classes
# ============
@@ -104,10 +103,10 @@ class GuiMain(QMainWindow):
self.idleTime = 0.0
# Prepare Main Window
- self.resize(*self.mainConf.mainWinSize)
+ self.resize(*CONFIG.mainWinSize)
self._updateWindowTitle()
- nwIcon = self.mainConf.assetPath("icons") / "novelwriter.svg"
+ nwIcon = CONFIG.assetPath("icons") / "novelwriter.svg"
self.nwIcon = QIcon(str(nwIcon)) if nwIcon.is_file() else QIcon()
self.setWindowIcon(self.nwIcon)
qApp.setWindowIcon(self.nwIcon)
@@ -116,8 +115,8 @@ class GuiMain(QMainWindow):
# =============
# Sizes
- mPx = self.mainConf.pxInt(4)
- hWd = self.mainConf.pxInt(4)
+ mPx = CONFIG.pxInt(4)
+ hWd = CONFIG.pxInt(4)
# Main GUI Elements
self.mainStatus = GuiMainStatus(self)
@@ -152,7 +151,7 @@ class GuiMain(QMainWindow):
self.splitView.addWidget(self.viewMeta)
self.splitView.setHandleWidth(hWd)
self.splitView.setOpaqueResize(False)
- self.splitView.setSizes(self.mainConf.viewPanePos)
+ self.splitView.setSizes(CONFIG.viewPanePos)
# Splitter : Document Editor / Document Viewer
self.splitDocs = QSplitter(Qt.Horizontal)
@@ -168,7 +167,7 @@ class GuiMain(QMainWindow):
self.splitMain.addWidget(self.splitDocs)
self.splitMain.setOpaqueResize(False)
self.splitMain.setHandleWidth(hWd)
- self.splitMain.setSizes(self.mainConf.mainPanePos)
+ self.splitMain.setSizes(CONFIG.mainPanePos)
# Main Stack : Editor / Outline
self.mainStack = QStackedWidget()
@@ -298,12 +297,12 @@ class GuiMain(QMainWindow):
# Handle Windows Mode
self.showNormal()
- if self.mainConf.isFullScreen:
+ if CONFIG.isFullScreen:
self.toggleFullScreenMode()
logger.debug("GUI initialisation complete")
- if novelwriter.__hexversion__[-2] == "a" and logger.getEffectiveLevel() > logging.DEBUG:
+ if __hexversion__[-2] == "a" and logger.getEffectiveLevel() > logging.DEBUG:
self.makeAlert(self.tr(
"You are running an untested development version of novelWriter. "
"Please be careful when working on a live project "
@@ -338,8 +337,8 @@ class GuiMain(QMainWindow):
def initMain(self):
"""Initialise elements that depend on user settings.
"""
- self.asProjTimer.setInterval(int(self.mainConf.autoSaveProj*1000))
- self.asDocTimer.setInterval(int(self.mainConf.autoSaveDoc*1000))
+ self.asProjTimer.setInterval(int(CONFIG.autoSaveProj*1000))
+ self.asDocTimer.setInterval(int(CONFIG.autoSaveDoc*1000))
return True
def postLaunchTasks(self, cmdOpen):
@@ -354,8 +353,8 @@ class GuiMain(QMainWindow):
self.showProjectLoadDialog()
# Determine whether release notes need to be shown or not
- if hexToInt(self.mainConf.lastNotes) < hexToInt(novelwriter.__hexversion__):
- self.mainConf.lastNotes = novelwriter.__hexversion__
+ if hexToInt(CONFIG.lastNotes) < hexToInt(__hexversion__):
+ CONFIG.lastNotes = __hexversion__
self.showAboutNWDialog(showNotes=True)
return
@@ -426,9 +425,9 @@ class GuiMain(QMainWindow):
saveOK = self.saveProject()
doBackup = False
- if self.theProject.data.doBackup and self.mainConf.backupOnClose:
+ if self.theProject.data.doBackup and CONFIG.backupOnClose:
doBackup = True
- if self.mainConf.askBeforeBackup:
+ if CONFIG.askBeforeBackup:
msgYes = self.askQuestion(
self.tr("Backup Project"),
self.tr("Backup the current project?")
@@ -712,7 +711,7 @@ class GuiMain(QMainWindow):
vPos[0] = int(bPos[1]/2)
vPos[1] = bPos[1] - vPos[0]
self.splitDocs.setSizes(vPos)
- self.viewMeta.setVisible(self.mainConf.showRefPanel)
+ self.viewMeta.setVisible(CONFIG.showRefPanel)
if sTitle:
self.docViewer.navigateTo(f"#{sTitle}")
@@ -727,7 +726,7 @@ class GuiMain(QMainWindow):
logger.error("No project open")
return False
- lastPath = self.mainConf.lastPath()
+ lastPath = CONFIG.lastPath()
extFilter = [
self.tr("Text files ({0})").format("*.txt"),
self.tr("Markdown files ({0})").format("*.md"),
@@ -747,7 +746,7 @@ class GuiMain(QMainWindow):
try:
with open(loadFile, mode="rt", encoding="utf-8") as inFile:
theText = inFile.read()
- self.mainConf.setLastPath(loadFile)
+ CONFIG.setLastPath(loadFile)
except Exception as exc:
self.makeAlert(self.tr(
"Could not read file. The file must be an existing text file."
@@ -1162,8 +1161,8 @@ class GuiMain(QMainWindow):
the user know if this is the case. The Config module caches
errors since it is initialised before the GUI itself.
"""
- if self.mainConf.hasError:
- self.makeAlert(self.mainConf.errorText(), nwAlert.ERROR)
+ if CONFIG.hasError:
+ self.makeAlert(CONFIG.errorText(), nwAlert.ERROR)
return True
return False
@@ -1188,19 +1187,19 @@ class GuiMain(QMainWindow):
logger.info("Exiting novelWriter")
if not self.isFocusMode:
- self.mainConf.setMainPanePos(self.splitMain.sizes())
- self.mainConf.setOutlinePanePos(self.outlineView.splitSizes())
+ CONFIG.setMainPanePos(self.splitMain.sizes())
+ CONFIG.setOutlinePanePos(self.outlineView.splitSizes())
if self.viewMeta.isVisible():
- self.mainConf.setViewPanePos(self.splitView.sizes())
+ CONFIG.setViewPanePos(self.splitView.sizes())
- self.mainConf.showRefPanel = self.viewMeta.isVisible()
- if not self.mainConf.isFullScreen:
- self.mainConf.setMainWinSize(self.width(), self.height())
+ CONFIG.showRefPanel = self.viewMeta.isVisible()
+ if not CONFIG.isFullScreen:
+ CONFIG.setMainWinSize(self.width(), self.height())
if self.hasProject:
self.closeProject(True)
- self.mainConf.saveConfig()
+ CONFIG.saveConfig()
self.reportConfErr()
qApp.quit()
@@ -1269,7 +1268,7 @@ class GuiMain(QMainWindow):
self.mainMenu.setVisible(isVisible)
self.viewsBar.setVisible(isVisible)
- hideDocFooter = self.isFocusMode and self.mainConf.hideFocusFooter
+ hideDocFooter = self.isFocusMode and CONFIG.hideFocusFooter
self.docEditor.docFooter.setVisible(not hideDocFooter)
self.docEditor.docHeader.updateFocusMode()
@@ -1295,7 +1294,7 @@ class GuiMain(QMainWindow):
else:
logger.debug("Deactivated full screen mode")
- self.mainConf.isFullScreen = winState
+ CONFIG.isFullScreen = winState
return
@@ -1390,7 +1389,7 @@ class GuiMain(QMainWindow):
# Help
self.addAction(self.mainMenu.aHelpDocs)
- if isinstance(self.mainConf.pdfDocs, Path):
+ if isinstance(CONFIG.pdfDocs, Path):
self.addAction(self.mainMenu.aPdfDocs)
return True
@@ -1398,7 +1397,7 @@ class GuiMain(QMainWindow):
def _updateWindowTitle(self, projName=None):
"""Set the window title and add the project's name.
"""
- winTitle = self.mainConf.appName
+ winTitle = CONFIG.appName
if projName is not None:
winTitle += " - %s" % projName
self.setWindowTitle(winTitle)
@@ -1549,7 +1548,7 @@ class GuiMain(QMainWindow):
return
currTime = time()
- editIdle = currTime - self.docEditor.lastActive() > self.mainConf.userIdleTime
+ editIdle = currTime - self.docEditor.lastActive() > CONFIG.userIdleTime
userIdle = qApp.applicationState() != Qt.ApplicationActive
if editIdle or userIdle:
@@ -1571,7 +1570,7 @@ class GuiMain(QMainWindow):
self.mainStatus.setProjectStats(0, 0)
self.theProject.updateWordCounts()
- if self.mainConf.incNotesWCount:
+ if CONFIG.incNotesWCount:
iTotal = sum(self.theProject.data.initCounts)
cTotal = sum(self.theProject.data.currCounts)
self.mainStatus.setProjectStats(cTotal, cTotal - iTotal)
diff --git a/novelwriter/tools/build.py b/novelwriter/tools/build.py
index f222ebdd..49035883 100644
--- a/novelwriter/tools/build.py
+++ b/novelwriter/tools/build.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import json
import logging
-import novelwriter
from time import time
from pathlib import Path
@@ -43,6 +42,7 @@ from PyQt5.QtWidgets import (
)
from PyQt5.QtPrintSupport import QPrinter, QPrintPreviewDialog
+from novelwriter import CONFIG
from novelwriter.enum import nwAlert, nwItemType, nwItemLayout, nwItemClass
from novelwriter.error import formatException, logException
from novelwriter.common import fuzzyTime, makeFileNameSafe
@@ -73,7 +73,6 @@ class GuiBuildNovel(QDialog):
logger.debug("Initialising GuiBuildNovel ...")
self.setObjectName("GuiBuildNovel")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
@@ -84,13 +83,13 @@ class GuiBuildNovel(QDialog):
self.buildTime = 0 # The timestamp of the last build
self.setWindowTitle(self.tr("Build Novel Project"))
- self.setMinimumWidth(self.mainConf.pxInt(700))
- self.setMinimumHeight(self.mainConf.pxInt(600))
+ self.setMinimumWidth(CONFIG.pxInt(700))
+ self.setMinimumHeight(CONFIG.pxInt(600))
pOptions = self.theProject.options
self.resize(
- self.mainConf.pxInt(pOptions.getInt("GuiBuildNovel", "winWidth", 900)),
- self.mainConf.pxInt(pOptions.getInt("GuiBuildNovel", "winHeight", 800))
+ CONFIG.pxInt(pOptions.getInt("GuiBuildNovel", "winWidth", 900)),
+ CONFIG.pxInt(pOptions.getInt("GuiBuildNovel", "winHeight", 800))
)
self.docView = GuiBuildNovelDocView(self, self.theProject)
@@ -121,7 +120,7 @@ class GuiBuildNovel(QDialog):
"be centred automatically and only appear between sections of "
"the same type."
).format("* * *")
- xFmt = self.mainConf.pxInt(100)
+ xFmt = CONFIG.pxInt(100)
self.fmtTitle = QLineEdit()
self.fmtTitle.setMaxLength(200)
@@ -165,7 +164,7 @@ class GuiBuildNovel(QDialog):
self.buildLang = QComboBox()
self.buildLang.setMinimumWidth(xFmt)
- theLangs = self.mainConf.listLanguages(self.mainConf.LANG_PROJ)
+ theLangs = CONFIG.listLanguages(CONFIG.LANG_PROJ)
self.buildLang.addItem("[%s]" % self.tr("Not Set"), "None")
for langID, langName in theLangs:
self.buildLang.addItem(langName, langID)
@@ -237,7 +236,7 @@ class GuiBuildNovel(QDialog):
self.textFont.setReadOnly(True)
self.textFont.setMinimumWidth(xFmt)
self.textFont.setText(
- pOptions.getString("GuiBuildNovel", "textFont", self.mainConf.textFont)
+ pOptions.getString("GuiBuildNovel", "textFont", CONFIG.textFont)
)
self.fontButton = QPushButton("...")
self.fontButton.setMaximumWidth(int(2.5*self.mainTheme.getTextWidth("...")))
@@ -249,7 +248,7 @@ class GuiBuildNovel(QDialog):
self.textSize.setMaximum(72)
self.textSize.setSingleStep(1)
self.textSize.setValue(
- pOptions.getInt("GuiBuildNovel", "textSize", self.mainConf.textSize)
+ pOptions.getInt("GuiBuildNovel", "textSize", CONFIG.textSize)
)
self.lineHeight = QDoubleSpinBox(self)
@@ -518,13 +517,13 @@ class GuiBuildNovel(QDialog):
self.buttonBox.addWidget(self.btnSave)
self.buttonBox.addWidget(self.btnPrint)
self.buttonBox.addWidget(self.btnClose)
- self.buttonBox.setSpacing(self.mainConf.pxInt(4))
+ self.buttonBox.setSpacing(CONFIG.pxInt(4))
# Assemble GUI
# ============
# Splitter Position
- boxWidth = self.mainConf.pxInt(350)
+ boxWidth = CONFIG.pxInt(350)
boxWidth = pOptions.getInt("GuiBuildNovel", "boxWidth", boxWidth)
docWidth = max(self.width() - boxWidth, 100)
docWidth = pOptions.getInt("GuiBuildNovel", "docWidth", docWidth)
@@ -547,22 +546,22 @@ class GuiBuildNovel(QDialog):
# Tool Box Scroll Area
self.toolsArea = QScrollArea()
- self.toolsArea.setMinimumWidth(self.mainConf.pxInt(250))
+ self.toolsArea.setMinimumWidth(CONFIG.pxInt(250))
self.toolsArea.setWidgetResizable(True)
self.toolsArea.setWidget(self.toolsWidget)
- if self.mainConf.hideVScroll:
+ if CONFIG.hideVScroll:
self.toolsArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.toolsArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- if self.mainConf.hideHScroll:
+ if CONFIG.hideHScroll:
self.toolsArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
else:
self.toolsArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
# Tools and Buttons Layout
- tSp = self.mainConf.pxInt(8)
+ tSp = CONFIG.pxInt(8)
self.innerBox = QVBoxLayout()
self.innerBox.addWidget(self.toolsArea)
self.innerBox.addSpacing(tSp)
@@ -891,14 +890,14 @@ class GuiBuildNovel(QDialog):
cleanName = makeFileNameSafe(self.theProject.data.name)
fileName = "%s.%s" % (cleanName, fileExt)
- savePath = self.mainConf.lastPath() / fileName
+ savePath = CONFIG.lastPath() / fileName
savePath, _ = QFileDialog.getSaveFileName(
self, self.tr("Save Document As"), str(savePath)
)
if not savePath:
return False
- self.mainConf.setLastPath(savePath)
+ CONFIG.setLastPath(savePath)
# Build and Write
# ===============
@@ -1173,8 +1172,8 @@ class GuiBuildNovel(QDialog):
buildLang = self.buildLang.currentData()
hideScene = self.hideScene.isChecked()
hideSection = self.hideSection.isChecked()
- winWidth = self.mainConf.rpxInt(self.width())
- winHeight = self.mainConf.rpxInt(self.height())
+ winWidth = CONFIG.rpxInt(self.width())
+ winHeight = CONFIG.rpxInt(self.height())
justifyText = self.justifyText.isChecked()
noStyling = self.noStyling.isChecked()
textFont = self.textFont.text()
@@ -1192,8 +1191,8 @@ class GuiBuildNovel(QDialog):
rootFilter = self._generateRootFilter()
mainSplit = self.mainSplit.sizes()
- boxWidth = self.mainConf.rpxInt(mainSplit[0])
- docWidth = self.mainConf.rpxInt(mainSplit[1])
+ boxWidth = CONFIG.rpxInt(mainSplit[0])
+ docWidth = CONFIG.rpxInt(mainSplit[1])
self.theProject.setProjectLang(buildLang)
@@ -1243,7 +1242,6 @@ class GuiBuildNovelDocView(QTextBrowser):
logger.debug("Initialising GuiBuildNovelDocView ...")
- self.mainConf = novelwriter.CONFIG
self.theProject = theProject
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
@@ -1252,7 +1250,7 @@ class GuiBuildNovelDocView(QTextBrowser):
self.setMinimumWidth(40*self.mainGui.mainTheme.textNWidth)
self.setOpenExternalLinks(False)
- self.document().setDocumentMargin(self.mainConf.getTextMargin())
+ self.document().setDocumentMargin(CONFIG.getTextMargin())
self.setPlaceholderText(self.tr(
"This area will show the content of the document to be "
"exported or printed. Press the \"Build Preview\" button "
@@ -1260,15 +1258,15 @@ class GuiBuildNovelDocView(QTextBrowser):
))
theFont = QFont()
- if self.mainConf.textFont is None:
+ if CONFIG.textFont is None:
# If none is defined, set the default back to config
- self.mainConf.textFont = self.document().defaultFont().family()
- theFont.setFamily(self.mainConf.textFont)
- theFont.setPointSize(self.mainConf.textSize)
+ CONFIG.textFont = self.document().defaultFont().family()
+ theFont.setFamily(CONFIG.textFont)
+ theFont.setPointSize(CONFIG.textSize)
self.setFont(theFont)
# Set the tab stops
- self.setTabStopDistance(self.mainConf.getTabWidth())
+ self.setTabStopDistance(CONFIG.getTabWidth())
docPalette = self.palette()
docPalette.setColor(QPalette.Base, QColor(255, 255, 255))
diff --git a/novelwriter/tools/lipsum.py b/novelwriter/tools/lipsum.py
index 9f0679c4..1e4ad7d3 100644
--- a/novelwriter/tools/lipsum.py
+++ b/novelwriter/tools/lipsum.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import random
import logging
-import novelwriter
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QSpinBox
)
+from novelwriter import CONFIG
from novelwriter.common import readTextFile
from novelwriter.custom import QSwitch
@@ -47,18 +47,17 @@ class GuiLipsum(QDialog):
logger.debug("Initialising GuiLipsum ...")
self.setObjectName("GuiLipsum")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.setWindowTitle(self.tr("Insert Placeholder Text"))
self.innerBox = QHBoxLayout()
- self.innerBox.setSpacing(self.mainConf.pxInt(16))
+ self.innerBox.setSpacing(CONFIG.pxInt(16))
# Icon
- nPx = self.mainConf.pxInt(64)
- vSp = self.mainConf.pxInt(4)
+ nPx = CONFIG.pxInt(64)
+ vSp = CONFIG.pxInt(4)
self.docIcon = QLabel()
self.docIcon.setPixmap(self.mainTheme.getPixmap("proj_document", (nPx, nPx)))
@@ -105,7 +104,7 @@ class GuiLipsum(QDialog):
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox)
- self.outerBox.setSpacing(self.mainConf.pxInt(16))
+ self.outerBox.setSpacing(CONFIG.pxInt(16))
self.setLayout(self.outerBox)
logger.debug("GuiLipsum initialisation complete")
@@ -119,7 +118,7 @@ class GuiLipsum(QDialog):
def _doInsert(self):
"""Load the text and insert it in the open document.
"""
- lipsumFile = self.mainConf.assetPath("text") / "lipsum.txt"
+ lipsumFile = CONFIG.assetPath("text") / "lipsum.txt"
lipsumText = readTextFile(lipsumFile).splitlines()
if self.randSwitch.isChecked():
diff --git a/novelwriter/tools/projwizard.py b/novelwriter/tools/projwizard.py
index 3dee4861..0bf0f99e 100644
--- a/novelwriter/tools/projwizard.py
+++ b/novelwriter/tools/projwizard.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import os
import logging
-import novelwriter
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
@@ -33,6 +32,7 @@ from PyQt5.QtWidgets import (
QPushButton, QRadioButton, QSpinBox, QVBoxLayout, QWizard, QWizardPage
)
+from novelwriter import CONFIG
from novelwriter.common import makeFileNameSafe
from novelwriter.custom import QSwitch
@@ -53,12 +53,11 @@ class GuiProjectWizard(QWizard):
logger.debug("Initialising GuiProjectWizard ...")
self.setObjectName("GuiProjectWizard")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.sideImage = self.mainTheme.loadDecoration(
- "wiz-back", None, self.mainConf.pxInt(370)
+ "wiz-back", None, CONFIG.pxInt(370)
)
self.setWizardStyle(QWizard.ModernStyle)
self.setPixmap(QWizard.WatermarkPixmap, self.sideImage)
@@ -89,7 +88,6 @@ class ProjWizardIntroPage(QWizardPage):
def __init__(self, theWizard):
super().__init__()
- self.mainConf = novelwriter.CONFIG
self.theWizard = theWizard
self.mainTheme = theWizard.mainTheme
@@ -109,9 +107,9 @@ class ProjWizardIntroPage(QWizardPage):
lblFont.setPointSizeF(0.6*self.mainTheme.fontPointSize)
self.imgCredit.setFont(lblFont)
- xW = self.mainConf.pxInt(300)
- vS = self.mainConf.pxInt(12)
- fS = self.mainConf.pxInt(4)
+ xW = CONFIG.pxInt(300)
+ vS = CONFIG.pxInt(12)
+ fS = CONFIG.pxInt(4)
# The Page Form
self.projName = QLineEdit()
@@ -158,7 +156,6 @@ class ProjWizardFolderPage(QWizardPage):
def __init__(self, theWizard):
super().__init__()
- self.mainConf = novelwriter.CONFIG
self.theWizard = theWizard
self.mainTheme = theWizard.mainTheme
@@ -169,9 +166,9 @@ class ProjWizardFolderPage(QWizardPage):
))
self.theText.setWordWrap(True)
- xW = self.mainConf.pxInt(300)
- vS = self.mainConf.pxInt(12)
- fS = self.mainConf.pxInt(8)
+ xW = CONFIG.pxInt(300)
+ vS = CONFIG.pxInt(12)
+ fS = CONFIG.pxInt(8)
self.projPath = QLineEdit("")
self.projPath.setFixedWidth(xW)
@@ -234,7 +231,7 @@ class ProjWizardFolderPage(QWizardPage):
def _doBrowse(self):
"""Select a project folder.
"""
- lastPath = self.mainConf.lastPath()
+ lastPath = CONFIG.lastPath()
projDir = QFileDialog.getExistingDirectory(
self, self.tr("Select Project Folder"), str(lastPath), options=QFileDialog.ShowDirsOnly
)
@@ -256,7 +253,6 @@ class ProjWizardPopulatePage(QWizardPage):
def __init__(self, theWizard):
super().__init__()
- self.mainConf = novelwriter.CONFIG
self.theWizard = theWizard
self.setTitle(self.tr("Populate Project"))
@@ -267,8 +263,8 @@ class ProjWizardPopulatePage(QWizardPage):
))
self.theText.setWordWrap(True)
- vS = self.mainConf.pxInt(12)
- fS = self.mainConf.pxInt(4)
+ vS = CONFIG.pxInt(12)
+ fS = CONFIG.pxInt(4)
self.popMinimal = QRadioButton(self.tr("Fill the project with a minimal set of items"))
self.popSample = QRadioButton(self.tr("Fill the project with example files"))
@@ -312,7 +308,6 @@ class ProjWizardCustomPage(QWizardPage):
def __init__(self, theWizard):
super().__init__()
- self.mainConf = novelwriter.CONFIG
self.theWizard = theWizard
self.setTitle(self.tr("Custom Project Options"))
@@ -323,9 +318,9 @@ class ProjWizardCustomPage(QWizardPage):
))
self.theText.setWordWrap(True)
- cM = self.mainConf.pxInt(12)
- mH = self.mainConf.pxInt(26)
- fS = self.mainConf.pxInt(4)
+ cM = CONFIG.pxInt(12)
+ mH = CONFIG.pxInt(26)
+ fS = CONFIG.pxInt(4)
# Root Folders
self.addPlot = QSwitch()
@@ -413,7 +408,6 @@ class ProjWizardFinalPage(QWizardPage):
def __init__(self, theWizard):
super().__init__()
- self.mainConf = novelwriter.CONFIG
self.theWizard = theWizard
self.setTitle(self.tr("Summary"))
@@ -422,7 +416,7 @@ class ProjWizardFinalPage(QWizardPage):
# Assemble
self.outerBox = QVBoxLayout()
- self.outerBox.setSpacing(self.mainConf.pxInt(12))
+ self.outerBox.setSpacing(CONFIG.pxInt(12))
self.outerBox.addWidget(self.theText)
self.outerBox.addStretch(1)
self.setLayout(self.outerBox)
@@ -470,7 +464,7 @@ class ProjWizardFinalPage(QWizardPage):
self.tr("You have selected the following:"),
"
• ".join(sumList),
self.tr("Press '{0}' to create the new project.").format(
- self.tr("Done") if self.mainConf.osDarwin else self.tr("Finish")
+ self.tr("Done") if CONFIG.osDarwin else self.tr("Finish")
)
)
)
diff --git a/novelwriter/tools/writingstats.py b/novelwriter/tools/writingstats.py
index a5981985..646b9a34 100644
--- a/novelwriter/tools/writingstats.py
+++ b/novelwriter/tools/writingstats.py
@@ -25,7 +25,6 @@ along with this program. If not, see .
import json
import logging
-import novelwriter
from pathlib import Path
from datetime import datetime
@@ -37,6 +36,7 @@ from PyQt5.QtWidgets import (
QLabel, QGroupBox, QMenu, QAction, QFileDialog, QSpinBox, QHBoxLayout
)
+from novelwriter import CONFIG
from novelwriter.enum import nwAlert
from novelwriter.error import formatException
from novelwriter.common import formatTime, checkInt, checkIntTuple, minmax
@@ -63,7 +63,6 @@ class GuiWritingStats(QDialog):
logger.debug("Initialising GuiWritingStats ...")
self.setObjectName("GuiWritingStats")
- self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainTheme = mainGui.mainTheme
self.theProject = mainGui.theProject
@@ -76,24 +75,24 @@ class GuiWritingStats(QDialog):
pOptions = self.theProject.options
self.setWindowTitle(self.tr("Writing Statistics"))
- self.setMinimumWidth(self.mainConf.pxInt(420))
- self.setMinimumHeight(self.mainConf.pxInt(400))
+ self.setMinimumWidth(CONFIG.pxInt(420))
+ self.setMinimumHeight(CONFIG.pxInt(400))
self.resize(
- self.mainConf.pxInt(pOptions.getInt("GuiWritingStats", "winWidth", 550)),
- self.mainConf.pxInt(pOptions.getInt("GuiWritingStats", "winHeight", 500))
+ CONFIG.pxInt(pOptions.getInt("GuiWritingStats", "winWidth", 550)),
+ CONFIG.pxInt(pOptions.getInt("GuiWritingStats", "winHeight", 500))
)
# List Box
- wCol0 = self.mainConf.pxInt(
+ wCol0 = CONFIG.pxInt(
pOptions.getInt("GuiWritingStats", "widthCol0", 180)
)
- wCol1 = self.mainConf.pxInt(
+ wCol1 = CONFIG.pxInt(
pOptions.getInt("GuiWritingStats", "widthCol1", 80)
)
- wCol2 = self.mainConf.pxInt(
+ wCol2 = CONFIG.pxInt(
pOptions.getInt("GuiWritingStats", "widthCol2", 80)
)
- wCol3 = self.mainConf.pxInt(
+ wCol3 = CONFIG.pxInt(
pOptions.getInt("GuiWritingStats", "widthCol3", 80)
)
@@ -127,7 +126,7 @@ class GuiWritingStats(QDialog):
# Word Bar
self.barHeight = int(round(0.5*self.mainTheme.fontPixelSize))
- self.barWidth = self.mainConf.pxInt(200)
+ self.barWidth = CONFIG.pxInt(200)
self.barImage = QPixmap(self.barHeight, self.barHeight)
self.barImage.fill(self.palette().highlight().color())
@@ -309,12 +308,12 @@ class GuiWritingStats(QDialog):
"""
self.logData = []
- winWidth = self.mainConf.rpxInt(self.width())
- winHeight = self.mainConf.rpxInt(self.height())
- widthCol0 = self.mainConf.rpxInt(self.listBox.columnWidth(0))
- widthCol1 = self.mainConf.rpxInt(self.listBox.columnWidth(1))
- widthCol2 = self.mainConf.rpxInt(self.listBox.columnWidth(2))
- widthCol3 = self.mainConf.rpxInt(self.listBox.columnWidth(3))
+ 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))
sortCol = self.listBox.sortColumn()
sortOrder = self.listBox.header().sortIndicatorOrder()
incNovel = self.incNovel.isChecked()
@@ -362,14 +361,14 @@ class GuiWritingStats(QDialog):
return False
# Generate the file name
- savePath = self.mainConf.lastPath() / f"sessionStats.{fileExt}"
+ savePath = CONFIG.lastPath() / f"sessionStats.{fileExt}"
savePath, _ = QFileDialog.getSaveFileName(
self, self.tr("Save Data As"), str(savePath), "%s (*.%s)" % (textFmt, fileExt)
)
if not savePath:
return False
- self.mainConf.setLastPath(savePath)
+ CONFIG.setLastPath(savePath)
# Do the actual writing
wSuccess = False
diff --git a/tests/test_base/test_base_init.py b/tests/test_base/test_base_init.py
index 4fab9108..71056fb7 100644
--- a/tests/test_base/test_base_init.py
+++ b/tests/test_base/test_base_init.py
@@ -22,10 +22,11 @@ along with this program. If not, see .
import sys
import pytest
import logging
-import novelwriter
from mock import MockGuiMain
+from novelwriter import CONFIG, main, logger
+
@pytest.mark.base
def testBaseInit_Launch(caplog, monkeypatch, fncPath):
@@ -34,34 +35,34 @@ def testBaseInit_Launch(caplog, monkeypatch, fncPath):
monkeypatch.setattr("novelwriter.guimain.GuiMain", MockGuiMain)
# TestMode Launch
- nwGUI = novelwriter.main(["--testmode", f"--config={fncPath}", f"--data={fncPath}"])
+ nwGUI = main(["--testmode", f"--config={fncPath}", f"--data={fncPath}"])
assert isinstance(nwGUI, MockGuiMain)
# Darwin Launch
caplog.clear()
- osDarwin = novelwriter.CONFIG.osDarwin
- novelwriter.CONFIG.osDarwin = True
+ osDarwin = CONFIG.osDarwin
+ CONFIG.osDarwin = True
with monkeypatch.context() as mp:
mp.setitem(sys.modules, "Foundation", None)
- nwGUI = novelwriter.main(["--testmode", f"--config={fncPath}", f"--data={fncPath}"])
+ nwGUI = main(["--testmode", f"--config={fncPath}", f"--data={fncPath}"])
assert isinstance(nwGUI, MockGuiMain)
assert "Failed" in caplog.text
- novelwriter.CONFIG.osDarwin = osDarwin
+ CONFIG.osDarwin = osDarwin
# Windows Launch
caplog.clear()
- osWindows = novelwriter.CONFIG.osWindows
- novelwriter.CONFIG.osWindows = True
+ osWindows = CONFIG.osWindows
+ CONFIG.osWindows = True
with monkeypatch.context() as mp:
mp.setitem(sys.modules, "ctypes", None)
- nwGUI = novelwriter.main(["--testmode", f"--config={fncPath}", f"--data={fncPath}"])
+ nwGUI = main(["--testmode", f"--config={fncPath}", f"--data={fncPath}"])
assert isinstance(nwGUI, MockGuiMain)
if not sys.platform.startswith("darwin"):
# For some reason, the test doesn't work on macOS
assert "Failed" in caplog.text
- novelwriter.CONFIG.osWindows = osWindows
+ CONFIG.osWindows = osWindows
# Normal Launch
monkeypatch.setattr("PyQt5.QtWidgets.QApplication.__init__", lambda *a: None)
@@ -71,7 +72,7 @@ def testBaseInit_Launch(caplog, monkeypatch, fncPath):
monkeypatch.setattr("PyQt5.QtWidgets.QApplication.setOrganizationDomain", lambda *a: None)
monkeypatch.setattr("PyQt5.QtWidgets.QApplication.exec_", lambda *a: 0)
with pytest.raises(SystemExit) as ex:
- novelwriter.main([f"--config={fncPath}", f"--data={fncPath}"])
+ main([f"--config={fncPath}", f"--data={fncPath}"])
assert ex.value.code == 0
# END Test testBaseInit_Launch
@@ -87,40 +88,40 @@ def testBaseInit_Options(monkeypatch, fncPath):
])
# Defaults w/None Args
- nwGUI = novelwriter.main()
- assert novelwriter.logger.getEffectiveLevel() == logging.WARNING
+ nwGUI = main()
+ assert logger.getEffectiveLevel() == logging.WARNING
assert nwGUI.closeMain() == "closeMain"
# Defaults
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", f"--config={fncPath}", f"--data={fncPath}", "--style=Fusion"]
)
- assert novelwriter.logger.getEffectiveLevel() == logging.WARNING
+ assert logger.getEffectiveLevel() == logging.WARNING
assert nwGUI.closeMain() == "closeMain"
# Log Levels
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", "--info", f"--config={fncPath}", f"--data={fncPath}"]
)
- assert novelwriter.logger.getEffectiveLevel() == logging.INFO
+ assert logger.getEffectiveLevel() == logging.INFO
assert nwGUI.closeMain() == "closeMain"
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", "--debug", f"--config={fncPath}", f"--data={fncPath}"]
)
- assert novelwriter.logger.getEffectiveLevel() == logging.DEBUG
+ assert logger.getEffectiveLevel() == logging.DEBUG
assert nwGUI.closeMain() == "closeMain"
# Help and Version
with pytest.raises(SystemExit) as ex:
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", "--help", f"--config={fncPath}", f"--data={fncPath}"]
)
assert nwGUI.closeMain() == "closeMain"
assert ex.value.code == 0
with pytest.raises(SystemExit) as ex:
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", "--version", f"--config={fncPath}", f"--data={fncPath}"]
)
assert nwGUI.closeMain() == "closeMain"
@@ -128,14 +129,14 @@ def testBaseInit_Options(monkeypatch, fncPath):
# Invalid options
with pytest.raises(SystemExit) as ex:
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", "--invalid", f"--config={fncPath}", f"--data={fncPath}"]
)
assert nwGUI.closeMain() == "closeMain"
assert ex.value.code == 2
# Project Path
- nwGUI = novelwriter.main(
+ nwGUI = main(
["--testmode", f"--config={fncPath}", f"--data={fncPath}", "sample/"]
)
assert nwGUI.closeMain() == "closeMain"
@@ -159,7 +160,7 @@ def testBaseInit_Imports(caplog, monkeypatch, fncPath):
monkeypatch.setattr("novelwriter.CONFIG.verPyQtValue", 0x050000)
with pytest.raises(SystemExit) as ex:
- _ = novelwriter.main(
+ _ = main(
["--testmode", f"--config={fncPath}", f"--data={fncPath}"]
)
diff --git a/tests/test_core/test_core_projectxml.py b/tests/test_core/test_core_projectxml.py
index 74c60c74..4d099632 100644
--- a/tests/test_core/test_core_projectxml.py
+++ b/tests/test_core/test_core_projectxml.py
@@ -40,8 +40,8 @@ class MockProject:
@pytest.fixture(scope="function", autouse=True)
def mockVersion(monkeypatch):
- monkeypatch.setattr("novelwriter.__version__", "2.0-rc1")
- monkeypatch.setattr("novelwriter.__hexversion__", "0x020000c1")
+ monkeypatch.setattr("novelwriter.core.projectxml.__version__", "2.0-rc1")
+ monkeypatch.setattr("novelwriter.core.projectxml.__hexversion__", "0x020000c1")
return