diff --git a/novelwriter/config.py b/novelwriter/config.py index 6bb94e52..9c96e1be 100644 --- a/novelwriter/config.py +++ b/novelwriter/config.py @@ -28,6 +28,7 @@ import json import logging from time import time +from typing import TYPE_CHECKING from pathlib import Path from PyQt5.QtGui import QFontDatabase @@ -40,6 +41,9 @@ from novelwriter.error import logException, formatException from novelwriter.common import checkPath, formatTimeStamp, NWConfigParser from novelwriter.constants import nwFiles, nwUnicode +if TYPE_CHECKING: # pragma: no cover + from novelwriter.gui.theme import GuiTheme + logger = logging.getLogger(__name__) @@ -90,7 +94,8 @@ class Config: # User Settings # ============= - self._recentProj = RecentProjects(self) + self._theme = None + self._recent = RecentProjects(self) # General GUI Settings self.guiLocale = self._qLocale.name() @@ -233,7 +238,13 @@ class Config: @property def recentProjects(self): - return self._recentProj + return self._recent + + @property + def theme(self) -> GuiTheme: + if self._theme is None: + raise Exception("Cannot access GUI theme before it is initialised") + return self._theme @property def mainWinSize(self): @@ -282,6 +293,11 @@ class Config: # Setters ## + def setThemeInstance(self, theme: GuiTheme) -> None: + """Set the applications theme instance.""" + self._theme = theme + return + def setMainWinSize(self, newWidth, newHeight): """Set the size of the main window, but only if the change is larger than 5 pixels. The OS window manager will sometimes @@ -479,7 +495,7 @@ class Config: else: self.saveConfig() - self._recentProj.loadCache() + self._recent.loadCache() self._checkOptionalPackages() logger.debug("Config initialisation complete") diff --git a/novelwriter/dialogs/about.py b/novelwriter/dialogs/about.py index 36b8bc99..7907882f 100644 --- a/novelwriter/dialogs/about.py +++ b/novelwriter/dialogs/about.py @@ -1,7 +1,6 @@ """ novelWriter – GUI About Box =========================== -The about novelWriter dialog box File History: Created: 2020-05-21 [0.5.2] @@ -22,6 +21,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ +from __future__ import annotations import logging import novelwriter @@ -31,8 +31,8 @@ from datetime import datetime from PyQt5.QtGui import QCursor from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - qApp, QDialog, QHBoxLayout, QVBoxLayout, QDialogButtonBox, QTabWidget, - QTextBrowser, QLabel + qApp, QDialog, QDialogButtonBox, QHBoxLayout, QLabel, QTabWidget, + QTextBrowser, QVBoxLayout, QWidget ) from novelwriter import CONFIG @@ -44,15 +44,12 @@ logger = logging.getLogger(__name__) class GuiAbout(QDialog): - def __init__(self, mainGui): - super().__init__(parent=mainGui) + def __init__(self, parent: QWidget): + super().__init__(parent=parent) logger.debug("Create: GuiAbout") self.setObjectName("GuiAbout") - self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme - self.outerBox = QVBoxLayout() self.innerBox = QHBoxLayout() self.innerBox.setSpacing(CONFIG.pxInt(16)) @@ -63,7 +60,7 @@ class GuiAbout(QDialog): nPx = CONFIG.pxInt(96) self.nwIcon = QLabel() - self.nwIcon.setPixmap(self.mainGui.mainTheme.getPixmap("novelwriter", (nPx, nPx))) + self.nwIcon.setPixmap(CONFIG.theme.getPixmap("novelwriter", (nPx, nPx))) self.lblName = QLabel("novelWriter") self.lblVers = QLabel(f"v{novelwriter.__version__}") self.lblDate = QLabel(datetime.strptime(novelwriter.__date__, "%Y-%m-%d").strftime("%x")) @@ -231,12 +228,12 @@ class GuiAbout(QDialog): " color: rgb({kColR},{kColG},{kColB});" "}}\n" ).format( - hColR=self.mainGui.mainTheme.colHead[0], - hColG=self.mainGui.mainTheme.colHead[1], - hColB=self.mainGui.mainTheme.colHead[2], - kColR=self.mainTheme.colKey[0], - kColG=self.mainTheme.colKey[1], - kColB=self.mainTheme.colKey[2], + hColR=CONFIG.theme.colHead[0], + hColG=CONFIG.theme.colHead[1], + hColB=CONFIG.theme.colHead[2], + kColR=CONFIG.theme.colKey[0], + kColG=CONFIG.theme.colKey[1], + kColB=CONFIG.theme.colKey[2], ) self.pageAbout.document().setDefaultStyleSheet(styleSheet) self.pageNotes.document().setDefaultStyleSheet(styleSheet) diff --git a/novelwriter/dialogs/docmerge.py b/novelwriter/dialogs/docmerge.py index 49e3d5f1..a7b3630b 100644 --- a/novelwriter/dialogs/docmerge.py +++ b/novelwriter/dialogs/docmerge.py @@ -50,7 +50,6 @@ class GuiDocMerge(QDialog): self.setObjectName("GuiDocMerge") self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._data = {} @@ -60,9 +59,9 @@ class GuiDocMerge(QDialog): self.headLabel = QLabel("{0}".format(self.tr("Documents to Merge"))) self.helpLabel = NHelpLabel(self.tr( "Drag and drop items to change the order, or uncheck to exclude." - ), self.mainTheme.helpText) + ), CONFIG.theme.helpText) - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize hSp = CONFIG.pxInt(12) vSp = CONFIG.pxInt(8) bSp = CONFIG.pxInt(12) @@ -161,7 +160,7 @@ class GuiDocMerge(QDialog): if nwItem is None or not nwItem.isFileType(): continue - itemIcon = self.mainTheme.getItemIcon( + itemIcon = CONFIG.theme.getItemIcon( nwItem.itemType, nwItem.itemClass, nwItem.itemLayout, nwItem.mainHeading ) diff --git a/novelwriter/dialogs/docsplit.py b/novelwriter/dialogs/docsplit.py index 58396879..a87658d9 100644 --- a/novelwriter/dialogs/docsplit.py +++ b/novelwriter/dialogs/docsplit.py @@ -52,7 +52,6 @@ class GuiDocSplit(QDialog): self.setObjectName("GuiDocSplit") self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._data = {} @@ -63,11 +62,11 @@ class GuiDocSplit(QDialog): self.headLabel = QLabel("{0}".format(self.tr("Document Headers"))) self.helpLabel = NHelpLabel( self.tr("Select the maximum level to split into files."), - self.mainGui.mainTheme.helpText + CONFIG.theme.helpText ) # Values - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize hSp = CONFIG.pxInt(12) vSp = CONFIG.pxInt(8) bSp = CONFIG.pxInt(12) diff --git a/novelwriter/dialogs/preferences.py b/novelwriter/dialogs/preferences.py index 9878ad51..d4c9819d 100644 --- a/novelwriter/dialogs/preferences.py +++ b/novelwriter/dialogs/preferences.py @@ -160,13 +160,11 @@ class GuiPreferencesGeneral(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.prefsGui = prefsGui - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme + self.prefsGui = prefsGui # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) # Look and Feel @@ -193,7 +191,7 @@ class GuiPreferencesGeneral(QWidget): # Select Theme self.guiTheme = QComboBox() self.guiTheme.setMinimumWidth(minWidth) - self.theThemes = self.mainTheme.listThemes() + self.theThemes = CONFIG.theme.listThemes() for themeDir, themeName in self.theThemes: self.guiTheme.addItem(themeName, themeDir) themeIdx = self.guiTheme.findData(CONFIG.guiTheme) @@ -209,7 +207,7 @@ class GuiPreferencesGeneral(QWidget): # Editor Theme self.guiSyntax = QComboBox() self.guiSyntax.setMinimumWidth(CONFIG.pxInt(200)) - self.theSyntaxes = self.mainTheme.listSyntax() + self.theSyntaxes = CONFIG.theme.listSyntax() for syntaxFile, syntaxName in self.theSyntaxes: self.guiSyntax.addItem(syntaxName, syntaxFile) syntaxIdx = self.guiSyntax.findData(CONFIG.guiSyntax) @@ -228,7 +226,7 @@ class GuiPreferencesGeneral(QWidget): 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.setMaximumWidth(int(2.5*CONFIG.theme.getTextWidth("..."))) self.fontButton.clicked.connect(self._selectFont) self.mainForm.addRow( self.tr("Font family"), @@ -342,12 +340,9 @@ class GuiPreferencesProjects(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme - # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) # Automatic Save @@ -497,12 +492,9 @@ class GuiPreferencesDocuments(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme - # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) # Text Style @@ -515,7 +507,7 @@ class GuiPreferencesDocuments(QWidget): 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.setMaximumWidth(int(2.5*CONFIG.theme.getTextWidth("..."))) self.fontButton.clicked.connect(self._selectFont) self.mainForm.addRow( self.tr("Font family"), @@ -654,12 +646,11 @@ class GuiPreferencesEditor(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme + self.mainGui = prefsGui.mainGui # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) mW = CONFIG.pxInt(250) @@ -825,13 +816,11 @@ class GuiPreferencesSyntax(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.prefsGui = prefsGui - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme + self.prefsGui = prefsGui # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) # Quotes & Dialogue @@ -931,12 +920,9 @@ class GuiPreferencesAutomation(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme - # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) # Automatic Features @@ -1085,12 +1071,9 @@ class GuiPreferencesQuotes(QWidget): def __init__(self, prefsGui): super().__init__(parent=prefsGui) - self.mainGui = prefsGui.mainGui - self.mainTheme = prefsGui.mainGui.mainTheme - # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) # Quotation Style @@ -1098,7 +1081,7 @@ class GuiPreferencesQuotes(QWidget): self.mainForm.addGroupLabel(self.tr("Quotation Style")) qWidth = CONFIG.pxInt(40) - bWidth = int(2.5*self.mainTheme.getTextWidth("...")) + bWidth = int(2.5*CONFIG.theme.getTextWidth("...")) self.quoteSym = {} # Single Quote Style diff --git a/novelwriter/dialogs/projdetails.py b/novelwriter/dialogs/projdetails.py index e4960b57..b28d0d8f 100644 --- a/novelwriter/dialogs/projdetails.py +++ b/novelwriter/dialogs/projdetails.py @@ -149,10 +149,9 @@ class GuiProjectDetailsMain(QWidget): self.theProject = theProject self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme - fPx = self.mainTheme.fontPixelSize - fPt = self.mainTheme.fontPointSize + fPx = CONFIG.theme.fontPixelSize + fPt = CONFIG.theme.fontPointSize vPx = CONFIG.pxInt(4) hPx = CONFIG.pxInt(12) @@ -282,13 +281,12 @@ class GuiProjectDetailsContents(QWidget): self.theProject = theProject self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme # Internal self._theToC = [] self._currentRoot = None - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize hPx = CONFIG.pxInt(12) vPx = CONFIG.pxInt(4) pOptions = self.theProject.options @@ -500,7 +498,7 @@ class GuiProjectDetailsContents(QWidget): progPage = f"{cPage:n}" progText = f"{pgProg:.1f}{nwUnicode.U_THSP}%" - hDec = self.mainTheme.getHeaderDecoration(tLevel) + hDec = CONFIG.theme.getHeaderDecoration(tLevel) if tTitle.strip() == "": tTitle = self.tr("Untitled") diff --git a/novelwriter/dialogs/projload.py b/novelwriter/dialogs/projload.py index 916ca820..f88e7130 100644 --- a/novelwriter/dialogs/projload.py +++ b/novelwriter/dialogs/projload.py @@ -62,13 +62,12 @@ class GuiProjectLoad(QDialog): self.setObjectName("GuiProjectLoad") self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.openState = self.NONE_STATE self.openPath = None sPx = CONFIG.pxInt(16) nPx = CONFIG.pxInt(96) - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize self.outerBox = QVBoxLayout() self.innerBox = QHBoxLayout() @@ -80,7 +79,7 @@ class GuiProjectLoad(QDialog): self.setMinimumHeight(CONFIG.pxInt(400)) self.nwIcon = QLabel() - self.nwIcon.setPixmap(self.mainGui.mainTheme.getPixmap("novelwriter", (nPx, nPx))) + self.nwIcon.setPixmap(CONFIG.theme.getPixmap("novelwriter", (nPx, nPx))) self.innerBox.addWidget(self.nwIcon, 0, Qt.AlignTop) self.projectForm = QGridLayout() @@ -110,7 +109,7 @@ class GuiProjectLoad(QDialog): self.selPath.setReadOnly(True) self.browseButton = QPushButton("...") - self.browseButton.setMaximumWidth(int(2.5*self.mainTheme.getTextWidth("..."))) + self.browseButton.setMaximumWidth(int(2.5*CONFIG.theme.getTextWidth("..."))) self.browseButton.clicked.connect(self._doBrowse) self.projectForm.addWidget(self.lblRecent, 0, 0, 1, 3) @@ -268,7 +267,7 @@ class GuiProjectLoad(QDialog): self.listBox.clear() dataList = CONFIG.recentProjects.listEntries() sortList = sorted(dataList, key=lambda x: x[3], reverse=True) - nwxIcon = self.mainGui.mainTheme.getIcon("proj_nwx") + nwxIcon = CONFIG.theme.getIcon("proj_nwx") for path, title, words, time in sortList: newItem = QTreeWidgetItem([""]*4) newItem.setIcon(self.C_NAME, nwxIcon) @@ -279,7 +278,7 @@ class GuiProjectLoad(QDialog): newItem.setTextAlignment(self.C_NAME, Qt.AlignLeft | Qt.AlignVCenter) newItem.setTextAlignment(self.C_COUNT, Qt.AlignRight | Qt.AlignVCenter) newItem.setTextAlignment(self.C_TIME, Qt.AlignRight | Qt.AlignVCenter) - newItem.setFont(self.C_TIME, self.mainTheme.guiFontFixed) + newItem.setFont(self.C_TIME, CONFIG.theme.guiFontFixed) self.listBox.addTopLevelItem(newItem) if self.listBox.topLevelItemCount() > 0: diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index a639f42c..cd9c8e00 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -206,7 +206,7 @@ class GuiProjectEditMain(QWidget): # The Form self.mainForm = NConfigLayout() - self.mainForm.setHelpTextStyle(self.mainGui.mainTheme.helpText) + self.mainForm.setHelpTextStyle(CONFIG.theme.helpText) self.setLayout(self.mainForm) self.mainForm.addGroupLabel(self.tr("Project Settings")) @@ -291,7 +291,6 @@ class GuiProjectEditStatus(QWidget): self.mainGui = projGui.mainGui self.theProject = projGui.theProject - self.mainTheme = projGui.mainGui.mainTheme if isStatus: self.theStatus = self.theProject.data.itemStatus @@ -310,7 +309,7 @@ class GuiProjectEditStatus(QWidget): self.colChanged = False self.selColour = QColor(100, 100, 100) - self.iPx = self.mainTheme.baseIconSize + self.iPx = CONFIG.theme.baseIconSize # The List # ======== @@ -329,16 +328,16 @@ class GuiProjectEditStatus(QWidget): # List Controls # ============= - self.addButton = QPushButton(self.mainTheme.getIcon("add"), "") + self.addButton = QPushButton(CONFIG.theme.getIcon("add"), "") self.addButton.clicked.connect(self._newItem) - self.delButton = QPushButton(self.mainTheme.getIcon("remove"), "") + self.delButton = QPushButton(CONFIG.theme.getIcon("remove"), "") self.delButton.clicked.connect(self._delItem) - self.upButton = QPushButton(self.mainTheme.getIcon("up"), "") + self.upButton = QPushButton(CONFIG.theme.getIcon("up"), "") self.upButton.clicked.connect(lambda: self._moveItem(-1)) - self.dnButton = QPushButton(self.mainTheme.getIcon("down"), "") + self.dnButton = QPushButton(CONFIG.theme.getIcon("down"), "") self.dnButton.clicked.connect(lambda: self._moveItem(1)) # Edit Form @@ -578,7 +577,6 @@ class GuiProjectEditReplace(QWidget): super().__init__(parent=projGui) self.mainGui = projGui.mainGui - self.mainTheme = projGui.mainGui.mainTheme self.theProject = projGui.theProject self.arChanged = False @@ -609,10 +607,10 @@ class GuiProjectEditReplace(QWidget): # List Controls # ============= - self.addButton = QPushButton(self.mainTheme.getIcon("add"), "") + self.addButton = QPushButton(CONFIG.theme.getIcon("add"), "") self.addButton.clicked.connect(self._addEntry) - self.delButton = QPushButton(self.mainTheme.getIcon("remove"), "") + self.delButton = QPushButton(CONFIG.theme.getIcon("remove"), "") self.delButton.clicked.connect(self._delEntry) # Edit Form diff --git a/novelwriter/dialogs/updates.py b/novelwriter/dialogs/updates.py index 4b8afad1..c40cb5a4 100644 --- a/novelwriter/dialogs/updates.py +++ b/novelwriter/dialogs/updates.py @@ -49,9 +49,6 @@ class GuiUpdates(QDialog): logger.debug("Create: GuiUpdates") self.setObjectName("GuiUpdates") - - self.mainGui = mainGui - self.setWindowTitle(self.tr("Check for Updates")) nPx = CONFIG.pxInt(96) @@ -61,7 +58,7 @@ class GuiUpdates(QDialog): # Left Box self.nwIcon = QLabel() - self.nwIcon.setPixmap(self.mainGui.mainTheme.getPixmap("novelwriter", (nPx, nPx))) + self.nwIcon.setPixmap(CONFIG.theme.getPixmap("novelwriter", (nPx, nPx))) self.leftBox = QVBoxLayout() self.leftBox.addWidget(self.nwIcon) diff --git a/novelwriter/dialogs/wordlist.py b/novelwriter/dialogs/wordlist.py index 9f807162..faeefb41 100644 --- a/novelwriter/dialogs/wordlist.py +++ b/novelwriter/dialogs/wordlist.py @@ -52,7 +52,6 @@ class GuiWordList(QDialog): self.setObjectName("GuiWordList") self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self.setWindowTitle(self.tr("Project Word List")) @@ -80,10 +79,10 @@ class GuiWordList(QDialog): self.newEntry = QLineEdit() - self.addButton = QPushButton(self.mainTheme.getIcon("add"), "") + self.addButton = QPushButton(CONFIG.theme.getIcon("add"), "") self.addButton.clicked.connect(self._doAdd) - self.delButton = QPushButton(self.mainTheme.getIcon("remove"), "") + self.delButton = QPushButton(CONFIG.theme.getIcon("remove"), "") self.delButton.clicked.connect(self._doDelete) self.editBox = QHBoxLayout() diff --git a/novelwriter/gui/components.py b/novelwriter/gui/components.py index 3556ae9c..fe73cb5a 100644 --- a/novelwriter/gui/components.py +++ b/novelwriter/gui/components.py @@ -30,6 +30,7 @@ from PyQt5.QtGui import QPainter from PyQt5.QtCore import pyqtSignal, pyqtSlot from PyQt5.QtWidgets import QAbstractButton, QComboBox +from novelwriter import CONFIG from novelwriter.enum import nwItemClass from novelwriter.constants import nwLabels @@ -45,7 +46,6 @@ class NovelSelector(QComboBox): self._mainGui = mainGui self._project = project - self._theme = mainGui.mainTheme self._blockSignal = False self._firstHandle = None @@ -89,7 +89,7 @@ class NovelSelector(QComboBox): self._firstHandle = None self.clear() - icon = self._theme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL]) + icon = CONFIG.theme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL]) handle = self.currentData() for tHandle, nwItem in self._project.tree.iterRoots(nwItemClass.NOVEL): if prefix: diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 9734bc45..ac1cc0cf 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -85,7 +85,6 @@ class GuiDocEditor(QTextEdit): # Class Variables self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._nwDocument = None @@ -229,14 +228,14 @@ class GuiDocEditor(QTextEdit): """Update the syntax highlighting theme. """ mainPalette = self.palette() - mainPalette.setColor(QPalette.Window, QColor(*self.mainTheme.colBack)) - mainPalette.setColor(QPalette.Base, QColor(*self.mainTheme.colBack)) - mainPalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + mainPalette.setColor(QPalette.Window, QColor(*CONFIG.theme.colBack)) + mainPalette.setColor(QPalette.Base, QColor(*CONFIG.theme.colBack)) + mainPalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.setPalette(mainPalette) docPalette = self.viewport().palette() - docPalette.setColor(QPalette.Base, QColor(*self.mainTheme.colBack)) - docPalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + docPalette.setColor(QPalette.Base, QColor(*CONFIG.theme.colBack)) + docPalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.viewport().setPalette(docPalette) self.docHeader.matchColours() @@ -2226,7 +2225,6 @@ class GuiDocEditSearch(QFrame): self.docEditor = docEditor self.mainGui = docEditor.mainGui self.theProject = docEditor.theProject - self.mainTheme = docEditor.mainTheme self.repVisible = False self.isCaseSense = CONFIG.searchCase @@ -2237,9 +2235,9 @@ class GuiDocEditSearch(QFrame): self.doMatchCap = CONFIG.searchMatchCap mPx = CONFIG.pxInt(6) - tPx = int(0.8*self.mainTheme.fontPixelSize) - self.boxFont = self.mainTheme.guiFont - self.boxFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) + tPx = int(0.8*CONFIG.theme.fontPixelSize) + self.boxFont = CONFIG.theme.guiFont + self.boxFont.setPointSizeF(0.9*CONFIG.theme.fontPointSize) self.setContentsMargins(0, 0, 0, 0) self.setAutoFillBackground(True) @@ -2272,7 +2270,7 @@ class GuiDocEditSearch(QFrame): self.resultLabel = QLabel("?/?") self.resultLabel.setFont(self.boxFont) - self.resultLabel.setMinimumWidth(self.mainTheme.getTextWidth("?/?", self.boxFont)) + self.resultLabel.setMinimumWidth(CONFIG.theme.getTextWidth("?/?", self.boxFont)) self.toggleCase = QAction(self.tr("Case Sensitive"), self) self.toggleCase.setCheckable(True) @@ -2378,15 +2376,15 @@ class GuiDocEditSearch(QFrame): self.replaceBox.setPalette(qPalette) # Set icons - self.toggleCase.setIcon(self.mainTheme.getIcon("search_case")) - self.toggleWord.setIcon(self.mainTheme.getIcon("search_word")) - self.toggleRegEx.setIcon(self.mainTheme.getIcon("search_regex")) - self.toggleLoop.setIcon(self.mainTheme.getIcon("search_loop")) - self.toggleProject.setIcon(self.mainTheme.getIcon("search_project")) - self.toggleMatchCap.setIcon(self.mainTheme.getIcon("search_preserve")) - self.cancelSearch.setIcon(self.mainTheme.getIcon("search_cancel")) - self.searchButton.setIcon(self.mainTheme.getIcon("search")) - self.replaceButton.setIcon(self.mainTheme.getIcon("search_replace")) + self.toggleCase.setIcon(CONFIG.theme.getIcon("search_case")) + self.toggleWord.setIcon(CONFIG.theme.getIcon("search_word")) + self.toggleRegEx.setIcon(CONFIG.theme.getIcon("search_regex")) + self.toggleLoop.setIcon(CONFIG.theme.getIcon("search_loop")) + self.toggleProject.setIcon(CONFIG.theme.getIcon("search_project")) + self.toggleMatchCap.setIcon(CONFIG.theme.getIcon("search_preserve")) + self.cancelSearch.setIcon(CONFIG.theme.getIcon("search_cancel")) + self.searchButton.setIcon(CONFIG.theme.getIcon("search")) + self.replaceButton.setIcon(CONFIG.theme.getIcon("search_replace")) # Set stylesheets self.searchOpt.setStyleSheet("QToolBar {padding: 0;}") @@ -2478,7 +2476,7 @@ class GuiDocEditSearch(QFrame): """ currRes = "?" if currRes is None else currRes resCount = "?" if resCount is None else "1000+" if resCount > 1000 else resCount - minWidth = self.mainTheme.getTextWidth(f"{resCount}//{resCount}", self.boxFont) + minWidth = CONFIG.theme.getTextWidth(f"{resCount}//{resCount}", self.boxFont) self.resultLabel.setText(f"{currRes}/{resCount}") self.resultLabel.setMinimumWidth(minWidth) self.adjustSize() @@ -2641,11 +2639,10 @@ class GuiDocEditHeader(QWidget): self.docEditor = docEditor self.mainGui = docEditor.mainGui self.theProject = docEditor.theProject - self.mainTheme = docEditor.mainTheme self._docHandle = None - fPx = int(0.9*self.mainTheme.fontPixelSize) + fPx = int(0.9*CONFIG.theme.fontPixelSize) hSp = CONFIG.pxInt(6) # Main Widget Settings @@ -2662,7 +2659,7 @@ class GuiDocEditHeader(QWidget): self.theTitle.setFixedHeight(fPx) lblFont = self.theTitle.font() - lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) + lblFont.setPointSizeF(0.9*CONFIG.theme.fontPointSize) self.theTitle.setFont(lblFont) # Buttons @@ -2732,15 +2729,15 @@ class GuiDocEditHeader(QWidget): def updateTheme(self): """Update theme elements. """ - self.editButton.setIcon(self.mainTheme.getIcon("edit")) - self.searchButton.setIcon(self.mainTheme.getIcon("search")) - self.minmaxButton.setIcon(self.mainTheme.getIcon("maximise")) - self.closeButton.setIcon(self.mainTheme.getIcon("close")) + self.editButton.setIcon(CONFIG.theme.getIcon("edit")) + self.searchButton.setIcon(CONFIG.theme.getIcon("search")) + self.minmaxButton.setIcon(CONFIG.theme.getIcon("maximise")) + self.closeButton.setIcon(CONFIG.theme.getIcon("close")) buttonStyle = ( "QToolButton {{border: none; background: transparent;}} " "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" - ).format(*self.mainTheme.colText) + ).format(*CONFIG.theme.colText) self.editButton.setStyleSheet(buttonStyle) self.searchButton.setStyleSheet(buttonStyle) @@ -2756,9 +2753,9 @@ class GuiDocEditHeader(QWidget): theme rather than the main GUI. """ thePalette = QPalette() - thePalette.setColor(QPalette.Window, QColor(*self.mainTheme.colBack)) - thePalette.setColor(QPalette.WindowText, QColor(*self.mainTheme.colText)) - thePalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + thePalette.setColor(QPalette.Window, QColor(*CONFIG.theme.colBack)) + thePalette.setColor(QPalette.WindowText, QColor(*CONFIG.theme.colText)) + thePalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.setPalette(thePalette) self.theTitle.setPalette(thePalette) @@ -2806,9 +2803,9 @@ class GuiDocEditHeader(QWidget): toggleFocusMode function and should not be activated directly. """ if self.mainGui.isFocusMode: - self.minmaxButton.setIcon(self.mainTheme.getIcon("minimise")) + self.minmaxButton.setIcon(CONFIG.theme.getIcon("minimise")) else: - self.minmaxButton.setIcon(self.mainTheme.getIcon("maximise")) + self.minmaxButton.setIcon(CONFIG.theme.getIcon("maximise")) return ## @@ -2876,20 +2873,19 @@ class GuiDocEditFooter(QWidget): self.docEditor = docEditor self.mainGui = docEditor.mainGui self.theProject = docEditor.theProject - self.mainTheme = docEditor.mainTheme self._theItem = None self._docHandle = None self._docSelection = False - self.sPx = int(round(0.9*self.mainTheme.baseIconSize)) - fPx = int(0.9*self.mainTheme.fontPixelSize) + self.sPx = int(round(0.9*CONFIG.theme.baseIconSize)) + fPx = int(0.9*CONFIG.theme.fontPixelSize) bSp = CONFIG.pxInt(4) hSp = CONFIG.pxInt(6) lblFont = self.font() - lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) + lblFont.setPointSizeF(0.9*CONFIG.theme.fontPointSize) # Main Widget Settings self.setContentsMargins(0, 0, 0, 0) @@ -2976,8 +2972,8 @@ class GuiDocEditFooter(QWidget): def updateTheme(self): """Update theme elements. """ - self.linesIcon.setPixmap(self.mainTheme.getPixmap("status_lines", (self.sPx, self.sPx))) - self.wordsIcon.setPixmap(self.mainTheme.getPixmap("status_stats", (self.sPx, self.sPx))) + self.linesIcon.setPixmap(CONFIG.theme.getPixmap("status_lines", (self.sPx, self.sPx))) + self.wordsIcon.setPixmap(CONFIG.theme.getPixmap("status_stats", (self.sPx, self.sPx))) self.matchColours() @@ -2988,9 +2984,9 @@ class GuiDocEditFooter(QWidget): theme rather than the main GUI. """ thePalette = QPalette() - thePalette.setColor(QPalette.Window, QColor(*self.mainTheme.colBack)) - thePalette.setColor(QPalette.WindowText, QColor(*self.mainTheme.colText)) - thePalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + thePalette.setColor(QPalette.Window, QColor(*CONFIG.theme.colBack)) + thePalette.setColor(QPalette.WindowText, QColor(*CONFIG.theme.colText)) + thePalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.setPalette(thePalette) self.statusText.setPalette(thePalette) diff --git a/novelwriter/gui/dochighlight.py b/novelwriter/gui/dochighlight.py index 46904842..8fbc307e 100644 --- a/novelwriter/gui/dochighlight.py +++ b/novelwriter/gui/dochighlight.py @@ -54,7 +54,6 @@ class GuiDocHighlighter(QSyntaxHighlighter): self.theDoc = theDoc self.spEnchant = spEnchant self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self.theHandle = None self.spellCheck = False @@ -87,24 +86,24 @@ class GuiDocHighlighter(QSyntaxHighlighter): """ logger.debug("Setting up highlighting rules") - self.colHead = QColor(*self.mainTheme.colHead) - self.colHeadH = QColor(*self.mainTheme.colHeadH) - self.colDialN = QColor(*self.mainTheme.colDialN) - self.colDialD = QColor(*self.mainTheme.colDialD) - self.colDialS = QColor(*self.mainTheme.colDialS) - self.colHidden = QColor(*self.mainTheme.colHidden) - self.colKey = QColor(*self.mainTheme.colKey) - self.colVal = QColor(*self.mainTheme.colVal) - self.colSpell = QColor(*self.mainTheme.colSpell) - self.colError = QColor(*self.mainTheme.colError) - self.colRepTag = QColor(*self.mainTheme.colRepTag) - self.colMod = QColor(*self.mainTheme.colMod) - self.colBreak = QColor(*self.mainTheme.colEmph) + self.colHead = QColor(*CONFIG.theme.colHead) + self.colHeadH = QColor(*CONFIG.theme.colHeadH) + self.colDialN = QColor(*CONFIG.theme.colDialN) + self.colDialD = QColor(*CONFIG.theme.colDialD) + self.colDialS = QColor(*CONFIG.theme.colDialS) + self.colHidden = QColor(*CONFIG.theme.colHidden) + self.colKey = QColor(*CONFIG.theme.colKey) + self.colVal = QColor(*CONFIG.theme.colVal) + self.colSpell = QColor(*CONFIG.theme.colSpell) + self.colError = QColor(*CONFIG.theme.colError) + self.colRepTag = QColor(*CONFIG.theme.colRepTag) + self.colMod = QColor(*CONFIG.theme.colMod) + self.colBreak = QColor(*CONFIG.theme.colEmph) self.colBreak.setAlpha(64) self.colEmph = None if CONFIG.highlightEmph: - self.colEmph = QColor(*self.mainTheme.colEmph) + self.colEmph = QColor(*CONFIG.theme.colEmph) self.hStyles = { "header1": self._makeFormat(self.colHead, "bold", 1.8), diff --git a/novelwriter/gui/docviewer.py b/novelwriter/gui/docviewer.py index 168030b2..8cfd2073 100644 --- a/novelwriter/gui/docviewer.py +++ b/novelwriter/gui/docviewer.py @@ -60,7 +60,6 @@ class GuiDocViewer(QTextBrowser): # Class Variables self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject # Internal Variables @@ -121,14 +120,14 @@ class GuiDocViewer(QTextBrowser): # Set the widget colours to match syntax theme mainPalette = self.palette() - mainPalette.setColor(QPalette.Window, QColor(*self.mainTheme.colBack)) - mainPalette.setColor(QPalette.Base, QColor(*self.mainTheme.colBack)) - mainPalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + mainPalette.setColor(QPalette.Window, QColor(*CONFIG.theme.colBack)) + mainPalette.setColor(QPalette.Base, QColor(*CONFIG.theme.colBack)) + mainPalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.setPalette(mainPalette) docPalette = self.viewport().palette() - docPalette.setColor(QPalette.Base, QColor(*self.mainTheme.colBack)) - docPalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + docPalette.setColor(QPalette.Base, QColor(*CONFIG.theme.colBack)) + docPalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.viewport().setPalette(docPalette) self.docHeader.matchColours() @@ -508,27 +507,27 @@ class GuiDocViewer(QTextBrowser): " text-align: center;" "}}\n" ).format( - tColR=self.mainTheme.colText[0], - tColG=self.mainTheme.colText[1], - tColB=self.mainTheme.colText[2], - hColR=self.mainTheme.colHead[0], - hColG=self.mainTheme.colHead[1], - hColB=self.mainTheme.colHead[2], - aColR=self.mainTheme.colVal[0], - aColG=self.mainTheme.colVal[1], - aColB=self.mainTheme.colVal[2], - eColR=self.mainTheme.colEmph[0], - eColG=self.mainTheme.colEmph[1], - eColB=self.mainTheme.colEmph[2], - kColR=self.mainTheme.colKey[0], - kColG=self.mainTheme.colKey[1], - kColB=self.mainTheme.colKey[2], - cColR=self.mainTheme.colHidden[0], - cColG=self.mainTheme.colHidden[1], - cColB=self.mainTheme.colHidden[2], - mColR=self.mainTheme.colMod[0], - mColG=self.mainTheme.colMod[1], - mColB=self.mainTheme.colMod[2], + tColR=CONFIG.theme.colText[0], + tColG=CONFIG.theme.colText[1], + tColB=CONFIG.theme.colText[2], + hColR=CONFIG.theme.colHead[0], + hColG=CONFIG.theme.colHead[1], + hColB=CONFIG.theme.colHead[2], + aColR=CONFIG.theme.colVal[0], + aColG=CONFIG.theme.colVal[1], + aColB=CONFIG.theme.colVal[2], + eColR=CONFIG.theme.colEmph[0], + eColG=CONFIG.theme.colEmph[1], + eColB=CONFIG.theme.colEmph[2], + kColR=CONFIG.theme.colKey[0], + kColG=CONFIG.theme.colKey[1], + kColB=CONFIG.theme.colKey[2], + cColR=CONFIG.theme.colHidden[0], + cColG=CONFIG.theme.colHidden[1], + cColB=CONFIG.theme.colHidden[2], + mColR=CONFIG.theme.colMod[0], + mColG=CONFIG.theme.colMod[1], + mColB=CONFIG.theme.colMod[2], ) self.document().setDefaultStyleSheet(styleSheet) @@ -684,12 +683,11 @@ class GuiDocViewHeader(QWidget): self.docViewer = docViewer self.mainGui = docViewer.mainGui self.theProject = docViewer.theProject - self.mainTheme = docViewer.mainTheme # Internal Variables self._docHandle = None - fPx = int(0.9*self.mainTheme.fontPixelSize) + fPx = int(0.9*CONFIG.theme.fontPixelSize) hSp = CONFIG.pxInt(6) # Main Widget Settings @@ -706,7 +704,7 @@ class GuiDocViewHeader(QWidget): self.theTitle.setFixedHeight(fPx) lblFont = self.theTitle.font() - lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) + lblFont.setPointSizeF(0.9*CONFIG.theme.fontPointSize) self.theTitle.setFont(lblFont) # Buttons @@ -777,15 +775,15 @@ class GuiDocViewHeader(QWidget): def updateTheme(self): """Update theme elements. """ - self.backButton.setIcon(self.mainTheme.getIcon("backward")) - self.forwardButton.setIcon(self.mainTheme.getIcon("forward")) - self.refreshButton.setIcon(self.mainTheme.getIcon("refresh")) - self.closeButton.setIcon(self.mainTheme.getIcon("close")) + self.backButton.setIcon(CONFIG.theme.getIcon("backward")) + self.forwardButton.setIcon(CONFIG.theme.getIcon("forward")) + self.refreshButton.setIcon(CONFIG.theme.getIcon("refresh")) + self.closeButton.setIcon(CONFIG.theme.getIcon("close")) buttonStyle = ( "QToolButton {{border: none; background: transparent;}} " "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" - ).format(*self.mainTheme.colText) + ).format(*CONFIG.theme.colText) self.backButton.setStyleSheet(buttonStyle) self.forwardButton.setStyleSheet(buttonStyle) @@ -801,9 +799,9 @@ class GuiDocViewHeader(QWidget): theme rather than the main GUI. """ thePalette = QPalette() - thePalette.setColor(QPalette.Window, QColor(*self.mainTheme.colBack)) - thePalette.setColor(QPalette.WindowText, QColor(*self.mainTheme.colText)) - thePalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + thePalette.setColor(QPalette.Window, QColor(*CONFIG.theme.colBack)) + thePalette.setColor(QPalette.WindowText, QColor(*CONFIG.theme.colText)) + thePalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.setPalette(thePalette) self.theTitle.setPalette(thePalette) @@ -900,13 +898,12 @@ class GuiDocViewFooter(QWidget): self.docViewer = docViewer self.mainGui = docViewer.mainGui - self.mainTheme = docViewer.mainTheme self.viewMeta = docViewer.mainGui.viewMeta # Internal Variables self._docHandle = None - fPx = int(0.9*self.mainTheme.fontPixelSize) + fPx = int(0.9*CONFIG.theme.fontPixelSize) bSp = CONFIG.pxInt(2) hSp = CONFIG.pxInt(8) @@ -991,7 +988,7 @@ class GuiDocViewFooter(QWidget): self.lblSynopsis.setAlignment(Qt.AlignLeft | Qt.AlignTop) lblFont = self.font() - lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) + lblFont.setPointSizeF(0.9*CONFIG.theme.fontPointSize) self.lblRefs.setFont(lblFont) self.lblSticky.setFont(lblFont) self.lblComments.setFont(lblFont) @@ -1036,21 +1033,21 @@ class GuiDocViewFooter(QWidget): """ # Icons - fPx = int(0.9*self.mainTheme.fontPixelSize) + fPx = int(0.9*CONFIG.theme.fontPixelSize) - stickyOn = self.mainTheme.getPixmap("sticky-on", (fPx, fPx)) - stickyOff = self.mainTheme.getPixmap("sticky-off", (fPx, fPx)) + stickyOn = CONFIG.theme.getPixmap("sticky-on", (fPx, fPx)) + stickyOff = CONFIG.theme.getPixmap("sticky-off", (fPx, fPx)) stickyIcon = QIcon() stickyIcon.addPixmap(stickyOn, QIcon.Normal, QIcon.On) stickyIcon.addPixmap(stickyOff, QIcon.Normal, QIcon.Off) - bulletOn = self.mainTheme.getPixmap("bullet-on", (fPx, fPx)) - bulletOff = self.mainTheme.getPixmap("bullet-off", (fPx, fPx)) + bulletOn = CONFIG.theme.getPixmap("bullet-on", (fPx, fPx)) + bulletOff = CONFIG.theme.getPixmap("bullet-off", (fPx, fPx)) bulletIcon = QIcon() bulletIcon.addPixmap(bulletOn, QIcon.Normal, QIcon.On) bulletIcon.addPixmap(bulletOff, QIcon.Normal, QIcon.Off) - self.showHide.setIcon(self.mainTheme.getIcon("reference")) + self.showHide.setIcon(CONFIG.theme.getIcon("reference")) self.stickyRefs.setIcon(stickyIcon) self.showComments.setIcon(bulletIcon) self.showSynopsis.setIcon(bulletIcon) @@ -1060,7 +1057,7 @@ class GuiDocViewFooter(QWidget): buttonStyle = ( "QToolButton {{border: none; background: transparent;}} " "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" - ).format(*self.mainTheme.colText) + ).format(*CONFIG.theme.colText) self.showHide.setStyleSheet(buttonStyle) self.stickyRefs.setStyleSheet(buttonStyle) @@ -1076,9 +1073,9 @@ class GuiDocViewFooter(QWidget): theme rather than the main GUI. """ thePalette = QPalette() - thePalette.setColor(QPalette.Window, QColor(*self.mainTheme.colBack)) - thePalette.setColor(QPalette.WindowText, QColor(*self.mainTheme.colText)) - thePalette.setColor(QPalette.Text, QColor(*self.mainTheme.colText)) + thePalette.setColor(QPalette.Window, QColor(*CONFIG.theme.colBack)) + thePalette.setColor(QPalette.WindowText, QColor(*CONFIG.theme.colText)) + thePalette.setColor(QPalette.Text, QColor(*CONFIG.theme.colText)) self.setPalette(thePalette) self.lblRefs.setPalette(thePalette) @@ -1143,7 +1140,6 @@ class GuiDocViewDetails(QScrollArea): self.mainGui = mainGui self.theProject = mainGui.theProject - self.mainTheme = mainGui.mainTheme self.refList = QLabel("") self.refList.setWordWrap(True) @@ -1151,9 +1147,7 @@ class GuiDocViewDetails(QScrollArea): self.refList.setScaledContents(True) self.refList.linkActivated.connect(self._linkClicked) - self.linkStyle = "style='color: rgb({0},{1},{2})'".format( - *self.mainTheme.colLink - ) + self.linkStyle = "style='color: rgb({0},{1},{2})'".format(*CONFIG.theme.colLink) # Assemble self.outerWidget = QWidget() diff --git a/novelwriter/gui/itemdetails.py b/novelwriter/gui/itemdetails.py index 163e0d4d..4c1faf6f 100644 --- a/novelwriter/gui/itemdetails.py +++ b/novelwriter/gui/itemdetails.py @@ -44,7 +44,6 @@ class GuiItemDetails(QWidget): self.mainGui = mainGui self.theProject = mainGui.theProject - self.mainTheme = mainGui.mainTheme # Internal Variables self._itemHandle = None @@ -53,7 +52,7 @@ class GuiItemDetails(QWidget): hSp = CONFIG.pxInt(6) vSp = CONFIG.pxInt(1) mPx = CONFIG.pxInt(6) - fPt = self.mainTheme.fontPointSize + fPt = CONFIG.theme.fontPointSize fntLabel = QFont() fntLabel.setBold(True) @@ -178,8 +177,8 @@ class GuiItemDetails(QWidget): self.updateTheme() # Make sure the columns for flags and counts don't resize too often - flagWidth = self.mainTheme.getTextWidth("Mm", fntValue) - countWidth = self.mainTheme.getTextWidth("99,999", fntValue) + flagWidth = CONFIG.theme.getTextWidth("Mm", fntValue) + countWidth = CONFIG.theme.getTextWidth("99,999", fntValue) self.mainBox.setColumnMinimumWidth(1, flagWidth) self.mainBox.setColumnMinimumWidth(4, countWidth) @@ -241,7 +240,7 @@ class GuiItemDetails(QWidget): return self._itemHandle = tHandle - iPx = int(round(0.8*self.mainTheme.baseIconSize)) + iPx = int(round(0.8*CONFIG.theme.baseIconSize)) # Label # ===== @@ -252,11 +251,11 @@ class GuiItemDetails(QWidget): if nwItem.isFileType(): if nwItem.isActive: - self.labelIcon.setPixmap(self.mainTheme.getPixmap("checked", (iPx, iPx))) + self.labelIcon.setPixmap(CONFIG.theme.getPixmap("checked", (iPx, iPx))) else: - self.labelIcon.setPixmap(self.mainTheme.getPixmap("unchecked", (iPx, iPx))) + self.labelIcon.setPixmap(CONFIG.theme.getPixmap("unchecked", (iPx, iPx))) else: - self.labelIcon.setPixmap(self.mainTheme.getPixmap("noncheckable", (iPx, iPx))) + self.labelIcon.setPixmap(CONFIG.theme.getPixmap("noncheckable", (iPx, iPx))) self.labelData.setText(theLabel) @@ -270,14 +269,14 @@ class GuiItemDetails(QWidget): # Class # ===== - classIcon = self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItem.itemClass]) + classIcon = CONFIG.theme.getIcon(nwLabels.CLASS_ICON[nwItem.itemClass]) self.classIcon.setPixmap(classIcon.pixmap(iPx, iPx)) self.classData.setText(trConst(nwLabels.CLASS_NAME[nwItem.itemClass])) # Layout # ====== - usageIcon = self.mainTheme.getItemIcon( + usageIcon = CONFIG.theme.getItemIcon( nwItem.itemType, nwItem.itemClass, nwItem.itemLayout, nwItem.mainHeading ) self.usageIcon.setPixmap(usageIcon.pixmap(iPx, iPx)) diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index cd0fd593..b04db81f 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -201,9 +201,8 @@ class GuiNovelToolBar(QWidget): self.novelView = novelView self.mainGui = novelView.mainGui self.theProject = novelView.mainGui.theProject - self.mainTheme = novelView.mainGui.mainTheme - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize mPx = CONFIG.pxInt(2) self.setContentsMargins(0, 0, 0, 0) @@ -276,9 +275,9 @@ class GuiNovelToolBar(QWidget): """Update theme elements. """ # Icons - self.tbNovel.setIcon(self.mainTheme.getIcon("cls_novel")) - self.tbRefresh.setIcon(self.mainTheme.getIcon("refresh")) - self.tbMore.setIcon(self.mainTheme.getIcon("menu")) + self.tbNovel.setIcon(CONFIG.theme.getIcon("cls_novel")) + self.tbRefresh.setIcon(CONFIG.theme.getIcon("refresh")) + self.tbMore.setIcon(CONFIG.theme.getIcon("menu")) qPalette = self.palette() qPalette.setBrush(QPalette.Window, qPalette.base()) @@ -401,7 +400,6 @@ class GuiNovelTree(QTreeWidget): self.novelView = novelView self.mainGui = novelView.mainGui - self.mainTheme = novelView.mainGui.mainTheme self.theProject = novelView.mainGui.theProject # Internal Variables @@ -419,7 +417,7 @@ class GuiNovelTree(QTreeWidget): # Build GUI # ========= - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize cMg = CONFIG.pxInt(6) self.setIconSize(QSize(iPx, iPx)) @@ -485,8 +483,8 @@ class GuiNovelTree(QTreeWidget): def updateTheme(self): """Update theme elements. """ - iPx = self.mainTheme.baseIconSize - self._pMore = self.mainTheme.loadDecoration("deco_doc_more", pxH=iPx) + iPx = CONFIG.theme.baseIconSize + self._pMore = CONFIG.theme.loadDecoration("deco_doc_more", pxH=iPx) return ## @@ -737,7 +735,7 @@ class GuiNovelTree(QTreeWidget): """Set the tree item values from the index entry. """ iLevel = nwHeaders.H_LEVEL.get(idxItem.level, 0) - hDec = self.mainTheme.getHeaderDecoration(iLevel) + hDec = CONFIG.theme.getHeaderDecoration(iLevel) trItem.setData(self.C_TITLE, Qt.DecorationRole, hDec) trItem.setText(self.C_TITLE, idxItem.title) diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index e19b19a3..bcc3ef24 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -217,7 +217,6 @@ class GuiOutlineToolBar(QToolBar): self.mainGui = theOutline.mainGui self.theProject = theOutline.mainGui.theProject - self.mainTheme = theOutline.mainGui.mainTheme iPx = CONFIG.pxInt(22) mPx = CONFIG.pxInt(12) @@ -275,8 +274,8 @@ class GuiOutlineToolBar(QToolBar): self.setStyleSheet("QToolBar {border: 0px;}") self.novelValue.updateList(includeAll=True) - self.aRefresh.setIcon(self.mainTheme.getIcon("refresh")) - self.tbColumns.setIcon(self.mainTheme.getIcon("menu")) + self.aRefresh.setIcon(CONFIG.theme.getIcon("refresh")) + self.tbColumns.setIcon(CONFIG.theme.getIcon("menu")) return @@ -375,7 +374,6 @@ class GuiOutlineTree(QTreeWidget): self.outlineView = outlineView self.mainGui = outlineView.mainGui self.theProject = outlineView.mainGui.theProject - self.mainTheme = outlineView.mainGui.mainTheme self.setUniformRowHeights(True) self.setFrameStyle(QFrame.NoFrame) @@ -386,7 +384,7 @@ class GuiOutlineTree(QTreeWidget): self.itemDoubleClicked.connect(self._treeDoubleClick) self.itemSelectionChanged.connect(self._itemSelected) - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize self.setIconSize(QSize(iPx, iPx)) self.setIndentation(0) @@ -403,11 +401,11 @@ class GuiOutlineTree(QTreeWidget): self._hFonts = [self.font(), fH1, fH2, self.font(), self.font()] self._dIcon = { - "H0": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H0"), - "H1": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H1"), - "H2": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H2"), - "H3": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H3"), - "H4": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H4"), + "H0": CONFIG.theme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H0"), + "H1": CONFIG.theme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H1"), + "H2": CONFIG.theme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H2"), + "H3": CONFIG.theme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H3"), + "H4": CONFIG.theme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H4"), } # Internals @@ -675,7 +673,7 @@ class GuiOutlineTree(QTreeWidget): trItem = QTreeWidgetItem() nwItem = self.theProject.tree[tHandle] - hDec = self.mainTheme.getHeaderDecoration(iLevel) + hDec = CONFIG.theme.getHeaderDecoration(iLevel) trItem.setData(self._colIdx[nwOutline.TITLE], Qt.DecorationRole, hDec) trItem.setText(self._colIdx[nwOutline.TITLE], novIdx.title) @@ -777,12 +775,11 @@ class GuiOutlineDetails(QScrollArea): self.theOutline = theOutline self.mainGui = theOutline.mainGui self.theProject = theOutline.mainGui.theProject - self.mainTheme = theOutline.mainGui.mainTheme # Sizes - minTitle = 30*self.mainTheme.textNWidth - maxTitle = 40*self.mainTheme.textNWidth - wCount = self.mainTheme.getTextWidth("999,999") + minTitle = 30*CONFIG.theme.textNWidth + maxTitle = 40*CONFIG.theme.textNWidth + wCount = CONFIG.theme.getTextWidth("999,999") hSpace = int(CONFIG.pxInt(10)) vSpace = int(CONFIG.pxInt(4)) diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index de547135..22c40d44 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -237,9 +237,8 @@ class GuiProjectToolBar(QWidget): self.projTree = projView.projTree self.mainGui = projView.mainGui self.theProject = projView.mainGui.theProject - self.mainTheme = projView.mainGui.mainTheme - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize mPx = CONFIG.pxInt(2) self.setContentsMargins(0, 0, 0, 0) @@ -370,16 +369,16 @@ class GuiProjectToolBar(QWidget): self.tbAdd.setStyleSheet(buttonStyle) self.tbMore.setStyleSheet(buttonStyle) - self.tbQuick.setIcon(self.mainTheme.getIcon("bookmark")) - self.tbMoveU.setIcon(self.mainTheme.getIcon("up")) - self.tbMoveD.setIcon(self.mainTheme.getIcon("down")) - self.aAddEmpty.setIcon(self.mainTheme.getIcon("proj_document")) - self.aAddChap.setIcon(self.mainTheme.getIcon("proj_chapter")) - self.aAddScene.setIcon(self.mainTheme.getIcon("proj_scene")) - self.aAddNote.setIcon(self.mainTheme.getIcon("proj_note")) - self.aAddFolder.setIcon(self.mainTheme.getIcon("proj_folder")) - self.tbAdd.setIcon(self.mainTheme.getIcon("add")) - self.tbMore.setIcon(self.mainTheme.getIcon("menu")) + self.tbQuick.setIcon(CONFIG.theme.getIcon("bookmark")) + self.tbMoveU.setIcon(CONFIG.theme.getIcon("up")) + self.tbMoveD.setIcon(CONFIG.theme.getIcon("down")) + self.aAddEmpty.setIcon(CONFIG.theme.getIcon("proj_document")) + self.aAddChap.setIcon(CONFIG.theme.getIcon("proj_chapter")) + self.aAddScene.setIcon(CONFIG.theme.getIcon("proj_scene")) + self.aAddNote.setIcon(CONFIG.theme.getIcon("proj_note")) + self.aAddFolder.setIcon(CONFIG.theme.getIcon("proj_folder")) + self.tbAdd.setIcon(CONFIG.theme.getIcon("add")) + self.tbMore.setIcon(CONFIG.theme.getIcon("menu")) self.buildQuickLinkMenu() self._buildRootMenu() @@ -398,7 +397,7 @@ class GuiProjectToolBar(QWidget): for n, (tHandle, nwItem) in enumerate(self.theProject.tree.iterRoots(None)): aRoot = self.mQuick.addAction(nwItem.itemName) aRoot.setData(tHandle) - aRoot.setIcon(self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItem.itemClass])) + aRoot.setIcon(CONFIG.theme.getIcon(nwLabels.CLASS_ICON[nwItem.itemClass])) aRoot.triggered.connect( lambda n, tHandle=tHandle: self.projView.setSelectedHandle(tHandle, doScroll=True) ) @@ -412,7 +411,7 @@ class GuiProjectToolBar(QWidget): """Build the rood folder menu.""" def addClass(itemClass): aNew = self.mAddRoot.addAction(trConst(nwLabels.CLASS_NAME[itemClass])) - aNew.setIcon(self.mainTheme.getIcon(nwLabels.CLASS_ICON[itemClass])) + aNew.setIcon(CONFIG.theme.getIcon(nwLabels.CLASS_ICON[itemClass])) aNew.triggered.connect(lambda: self.projTree.newTreeItem(nwItemType.ROOT, itemClass)) self.mAddRoot.addAction(aNew) return @@ -469,7 +468,6 @@ class GuiProjectTree(QTreeWidget): self.projView = projView self.mainGui = projView.mainGui - self.mainTheme = projView.mainGui.mainTheme self.theProject = projView.mainGui.theProject # Internal Variables @@ -485,7 +483,7 @@ class GuiProjectTree(QTreeWidget): self.customContextMenuRequested.connect(self._openContextMenu) # Tree Settings - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize cMg = CONFIG.pxInt(6) self.setIconSize(QSize(iPx, iPx)) @@ -995,7 +993,7 @@ class GuiProjectTree(QTreeWidget): itemStatus, statusIcon = nwItem.getImportStatus(incIcon=True) hLevel = nwItem.mainHeading - itemIcon = self.mainTheme.getItemIcon( + itemIcon = CONFIG.theme.getItemIcon( nwItem.itemType, nwItem.itemClass, nwItem.itemLayout, hLevel ) @@ -1011,7 +1009,7 @@ class GuiProjectTree(QTreeWidget): else: iconName = "noncheckable" - trItem.setIcon(self.C_ACTIVE, self.mainTheme.getIcon(iconName)) + trItem.setIcon(self.C_ACTIVE, CONFIG.theme.getIcon(iconName)) if CONFIG.emphLabels and nwItem.isDocumentLayout(): trFont = trItem.font(self.C_NAME) diff --git a/novelwriter/gui/sidebar.py b/novelwriter/gui/sidebar.py index 637e11a5..8e8b608d 100644 --- a/novelwriter/gui/sidebar.py +++ b/novelwriter/gui/sidebar.py @@ -45,15 +45,14 @@ class GuiSideBar(QToolBar): logger.debug("Create: GuiSideBar") - self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme + self.mainGui = mainGui # Style iPx = CONFIG.pxInt(22) mPx = CONFIG.pxInt(60) - lblFont = self.mainTheme.guiFont - lblFont.setPointSizeF(0.65*self.mainTheme.fontPointSize) + lblFont = CONFIG.theme.guiFont + lblFont.setPointSizeF(0.65*CONFIG.theme.fontPointSize) self.setMovable(False) self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) @@ -131,13 +130,13 @@ class GuiSideBar(QToolBar): """ self.setStyleSheet("QToolBar {border: 0px;}") - self.aProject.setIcon(self.mainTheme.getIcon("view_editor")) - self.aNovel.setIcon(self.mainTheme.getIcon("view_novel")) - self.aOutline.setIcon(self.mainTheme.getIcon("view_outline")) - self.aBuild.setIcon(self.mainTheme.getIcon("view_build")) - self.aDetails.setIcon(self.mainTheme.getIcon("proj_details")) - self.aStats.setIcon(self.mainTheme.getIcon("proj_stats")) - self.tbSettings.setIcon(self.mainTheme.getIcon("settings")) + self.aProject.setIcon(CONFIG.theme.getIcon("view_editor")) + self.aNovel.setIcon(CONFIG.theme.getIcon("view_novel")) + self.aOutline.setIcon(CONFIG.theme.getIcon("view_outline")) + self.aBuild.setIcon(CONFIG.theme.getIcon("view_build")) + self.aDetails.setIcon(CONFIG.theme.getIcon("proj_details")) + self.aStats.setIcon(CONFIG.theme.getIcon("proj_stats")) + self.tbSettings.setIcon(CONFIG.theme.getIcon("settings")) return diff --git a/novelwriter/gui/statusbar.py b/novelwriter/gui/statusbar.py index 10f16c08..f14affff 100644 --- a/novelwriter/gui/statusbar.py +++ b/novelwriter/gui/statusbar.py @@ -47,15 +47,14 @@ class GuiMainStatus(QStatusBar): logger.debug("Create: GuiMainStatus") self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.refTime = None self.userIdle = False - colNone = QColor(*self.mainTheme.statNone) - colSaved = QColor(*self.mainTheme.statSaved) - colUnsaved = QColor(*self.mainTheme.statUnsaved) + colNone = QColor(*CONFIG.theme.statNone) + colSaved = QColor(*CONFIG.theme.statSaved) + colUnsaved = QColor(*CONFIG.theme.statUnsaved) - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize # Permanent Widgets # ================= @@ -99,7 +98,7 @@ class GuiMainStatus(QStatusBar): self.timeIcon = QLabel() self.timeText = QLabel("") self.timeText.setToolTip(self.tr("Session Time")) - self.timeText.setMinimumWidth(self.mainTheme.getTextWidth("00:00:00:")) + self.timeText.setMinimumWidth(CONFIG.theme.getTextWidth("00:00:00:")) self.timeIcon.setContentsMargins(0, 0, 0, 0) self.timeText.setContentsMargins(0, 0, 0, 0) self.addPermanentWidget(self.timeIcon) @@ -129,13 +128,13 @@ class GuiMainStatus(QStatusBar): def updateTheme(self): """Update theme elements. """ - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize - self.langIcon.setPixmap(self.mainTheme.getPixmap("status_lang", (iPx, iPx))) - self.statsIcon.setPixmap(self.mainTheme.getPixmap("status_stats", (iPx, iPx))) + self.langIcon.setPixmap(CONFIG.theme.getPixmap("status_lang", (iPx, iPx))) + self.statsIcon.setPixmap(CONFIG.theme.getPixmap("status_stats", (iPx, iPx))) - self.timePixmap = self.mainTheme.getPixmap("status_time", (iPx, iPx)) - self.idlePixmap = self.mainTheme.getPixmap("status_idle", (iPx, iPx)) + self.timePixmap = CONFIG.theme.getPixmap("status_time", (iPx, iPx)) + self.idlePixmap = CONFIG.theme.getPixmap("status_idle", (iPx, iPx)) self.timeIcon.setPixmap(self.timePixmap) diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 6076d120..ac4025a9 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -113,7 +113,7 @@ class GuiMain(QMainWindow): # ============ # Core Classes - self.mainTheme = GuiTheme() + CONFIG.setThemeInstance(GuiTheme()) self.theProject = NWProject(self) # Core Settings @@ -135,7 +135,7 @@ class GuiMain(QMainWindow): # ============= # Sizes - iPx = self.mainTheme.fontPixelSize + iPx = CONFIG.theme.fontPixelSize mPx = CONFIG.pxInt(4) hWd = CONFIG.pxInt(4) @@ -307,10 +307,10 @@ class GuiMain(QMainWindow): # Cache Alert Pixmaps pxSize = (2*iPx, 2*iPx) self.alertPix: dict[nwAlert, QPixmap] = { - nwAlert.INFO: self.mainTheme.getPixmap("alert_info", pxSize), - nwAlert.WARN: self.mainTheme.getPixmap("alert_warn", pxSize), - nwAlert.ERROR: self.mainTheme.getPixmap("alert_error", pxSize), - nwAlert.ASK: self.mainTheme.getPixmap("alert_question", pxSize), + nwAlert.INFO: CONFIG.theme.getPixmap("alert_info", pxSize), + nwAlert.WARN: CONFIG.theme.getPixmap("alert_warn", pxSize), + nwAlert.ERROR: CONFIG.theme.getPixmap("alert_error", pxSize), + nwAlert.ASK: CONFIG.theme.getPixmap("alert_question", pxSize), } # Check that config loaded fine @@ -912,7 +912,7 @@ class GuiMain(QMainWindow): if dlgConf.updateTheme: # We are doing this manually instead of connecting to # qApp.paletteChanged since the processing order matters - self.mainTheme.loadTheme() + CONFIG.theme.loadTheme() self.docEditor.updateTheme() self.docViewer.updateTheme() self.viewsBar.updateTheme() @@ -923,7 +923,7 @@ class GuiMain(QMainWindow): self.mainStatus.updateTheme() if dlgConf.updateSyntax: - self.mainTheme.loadSyntax() + CONFIG.theme.loadSyntax() self.docEditor.updateSyntaxColours() self.docEditor.initEditor() diff --git a/novelwriter/tools/lipsum.py b/novelwriter/tools/lipsum.py index c78e20de..b803caf6 100644 --- a/novelwriter/tools/lipsum.py +++ b/novelwriter/tools/lipsum.py @@ -49,8 +49,7 @@ class GuiLipsum(QDialog): if CONFIG.osDarwin: self.setWindowFlag(Qt.WindowType.Tool) - self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme + self.mainGui = mainGui self.setWindowTitle(self.tr("Insert Placeholder Text")) @@ -61,7 +60,7 @@ class GuiLipsum(QDialog): nPx = CONFIG.pxInt(64) vSp = CONFIG.pxInt(4) self.docIcon = QLabel() - self.docIcon.setPixmap(self.mainTheme.getPixmap("proj_document", (nPx, nPx))) + self.docIcon.setPixmap(CONFIG.theme.getPixmap("proj_document", (nPx, nPx))) self.leftBox = QVBoxLayout() self.leftBox.setSpacing(vSp) diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py index 81df33c2..0c2d4dda 100644 --- a/novelwriter/tools/manusbuild.py +++ b/novelwriter/tools/manusbuild.py @@ -66,7 +66,6 @@ class GuiManuscriptBuild(QDialog): self.setObjectName("GuiManuscriptBuild") self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._parent = parent @@ -76,7 +75,7 @@ class GuiManuscriptBuild(QDialog): self.setMinimumWidth(CONFIG.pxInt(500)) self.setMinimumHeight(CONFIG.pxInt(300)) - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize sp4 = CONFIG.pxInt(4) sp8 = CONFIG.pxInt(8) sp16 = CONFIG.pxInt(16) @@ -148,7 +147,7 @@ class GuiManuscriptBuild(QDialog): # Build Path self.lblPath = QLabel(self.tr("Path")) self.buildPath = QLineEdit(self) - self.btnBrowse = QPushButton(self.mainTheme.getIcon("browse"), "") + self.btnBrowse = QPushButton(CONFIG.theme.getIcon("browse"), "") self.pathBox = QHBoxLayout() self.pathBox.addWidget(self.buildPath) @@ -158,7 +157,7 @@ class GuiManuscriptBuild(QDialog): # Build Name self.lblName = QLabel(self.tr("File Name")) self.buildName = QLineEdit(self) - self.btnReset = QPushButton(self.mainTheme.getIcon("revert"), "") + self.btnReset = QPushButton(CONFIG.theme.getIcon("revert"), "") self.btnReset.setToolTip(self.tr("Reset file name to default")) self.nameBox = QHBoxLayout() @@ -183,7 +182,7 @@ class GuiManuscriptBuild(QDialog): self.buildBox.setVerticalSpacing(sp4) # Dialog Buttons - self.btnBuild = QPushButton(self.mainTheme.getIcon("export"), self.tr("&Build")) + self.btnBuild = QPushButton(CONFIG.theme.getIcon("export"), self.tr("&Build")) self.dlgButtons = QDialogButtonBox(QDialogButtonBox.Close) self.dlgButtons.addButton(self.btnBuild, QDialogButtonBox.ActionRole) @@ -382,7 +381,7 @@ class GuiManuscriptBuild(QDialog): if isinstance(rItem, NWItem): rootMap[rHandle] = rItem.itemName - itemIcon = self.mainTheme.getItemIcon( + itemIcon = CONFIG.theme.getItemIcon( nwItem.itemType, nwItem.itemClass, nwItem.itemLayout, nwItem.mainHeading ) diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index e767dced..1e0205c4 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -73,7 +73,6 @@ class GuiManuscript(QDialog): self.setWindowFlag(Qt.WindowType.Tool) self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._builds = BuildCollection(self.theProject) @@ -83,7 +82,7 @@ class GuiManuscript(QDialog): self.setMinimumWidth(CONFIG.pxInt(600)) self.setMinimumHeight(CONFIG.pxInt(500)) - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize wWin = CONFIG.pxInt(900) hWin = CONFIG.pxInt(600) @@ -107,21 +106,21 @@ class GuiManuscript(QDialog): ).format(CONFIG.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue()) self.tbAdd = QToolButton(self) - self.tbAdd.setIcon(self.mainTheme.getIcon("add")) + self.tbAdd.setIcon(CONFIG.theme.getIcon("add")) self.tbAdd.setIconSize(QSize(iPx, iPx)) self.tbAdd.setToolTip(self.tr("Add New Build")) self.tbAdd.setStyleSheet(buttonStyle) self.tbAdd.clicked.connect(self._createNewBuild) self.tbDel = QToolButton(self) - self.tbDel.setIcon(self.mainTheme.getIcon("remove")) + self.tbDel.setIcon(CONFIG.theme.getIcon("remove")) self.tbDel.setIconSize(QSize(iPx, iPx)) self.tbDel.setToolTip(self.tr("Delete Selected Build")) self.tbDel.setStyleSheet(buttonStyle) self.tbDel.clicked.connect(self._deleteSelectedBuild) self.tbEdit = QToolButton(self) - self.tbEdit.setIcon(self.mainTheme.getIcon("edit")) + self.tbEdit.setIcon(CONFIG.theme.getIcon("edit")) self.tbEdit.setIconSize(QSize(iPx, iPx)) self.tbEdit.setToolTip(self.tr("Edit Selected Build")) self.tbEdit.setStyleSheet(buttonStyle) @@ -428,7 +427,7 @@ class GuiManuscript(QDialog): for key, name in self._builds.builds(): bItem = QListWidgetItem() bItem.setText(name) - bItem.setIcon(self.mainTheme.getIcon("export")) + bItem.setIcon(CONFIG.theme.getIcon("export")) bItem.setData(self.D_KEY, key) self.buildList.addItem(bItem) self._buildMap[key] = bItem @@ -452,7 +451,6 @@ class _PreviewWidget(QTextBrowser): super().__init__(parent=mainGui) self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._docTime = 0 @@ -464,7 +462,7 @@ class _PreviewWidget(QTextBrowser): dPalette.setColor(QPalette.Text, QColor(0, 0, 0)) self.setPalette(dPalette) - self.setMinimumWidth(40*self.mainGui.mainTheme.textNWidth) + self.setMinimumWidth(40*CONFIG.theme.textNWidth) self.setTextFont(CONFIG.textFont, CONFIG.textSize) self.setTabStopDistance(CONFIG.getTabWidth()) self.setOpenExternalLinks(False) @@ -482,7 +480,7 @@ class _PreviewWidget(QTextBrowser): aPalette.setColor(QPalette.Foreground, aPalette.toolTipText().color()) aFont = self.font() - aFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) + aFont.setPointSizeF(0.9*CONFIG.theme.fontPointSize) self.ageLabel = QLabel("", self) self.ageLabel.setIndent(0) @@ -490,7 +488,7 @@ class _PreviewWidget(QTextBrowser): self.ageLabel.setPalette(aPalette) self.ageLabel.setAutoFillBackground(True) self.ageLabel.setAlignment(Qt.AlignCenter) - self.ageLabel.setFixedHeight(int(2.1*self.mainTheme.fontPixelSize)) + self.ageLabel.setFixedHeight(int(2.1*CONFIG.theme.fontPixelSize)) # Progress self.buildProgress = NProgressCircle(self, CONFIG.pxInt(160), CONFIG.pxInt(16)) diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index fb5eeba0..f90eeb25 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -49,7 +49,6 @@ from novelwriter.extensions.pagedsidebar import NPagedSideBar if TYPE_CHECKING: # pragma: no cover from novelwriter.guimain import GuiMain - from novelwriter.gui.theme import GuiTheme logger = logging.getLogger(__name__) @@ -78,7 +77,6 @@ class GuiBuildSettings(QDialog): self.setWindowFlag(Qt.WindowType.Tool) self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self._build = build @@ -103,7 +101,7 @@ class GuiBuildSettings(QDialog): self.optSideBar = NPagedSideBar(self) self.optSideBar.setMinimumWidth(mPx) self.optSideBar.setMaximumWidth(mPx) - self.optSideBar.setLabelColor(self.mainTheme.helpText) + self.optSideBar.setLabelColor(CONFIG.theme.helpText) self.optSideBar.addLabel(self.tr("Options")) self.optSideBar.addButton(self.tr("Selection"), self.OPT_FILTERS) @@ -307,7 +305,6 @@ class _FilterTab(QWidget): super().__init__(parent=buildMain) self.mainGui = buildMain.mainGui - self.mainTheme = buildMain.mainGui.mainTheme self.theProject = buildMain.mainGui.theProject self._treeMap: dict[str, QTreeWidgetItem] = {} @@ -315,9 +312,9 @@ class _FilterTab(QWidget): self._statusFlags: dict[int, QIcon] = { self.F_NONE: QIcon(), - self.F_FILTERED: self.mainTheme.getIcon("build_filtered"), - self.F_INCLUDED: self.mainTheme.getIcon("build_included"), - self.F_EXCLUDED: self.mainTheme.getIcon("build_excluded"), + self.F_FILTERED: CONFIG.theme.getIcon("build_filtered"), + self.F_INCLUDED: CONFIG.theme.getIcon("build_included"), + self.F_EXCLUDED: CONFIG.theme.getIcon("build_excluded"), } self._trIncluded = self.tr("Included in manuscript") @@ -327,7 +324,7 @@ class _FilterTab(QWidget): # ============ # Tree Settings - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize cMg = CONFIG.pxInt(6) # Tree Widget @@ -365,7 +362,7 @@ class _FilterTab(QWidget): self.resetButton = QToolButton(self) self.resetButton.setToolTip(self.tr("Reset to default")) - self.resetButton.setIcon(self.mainTheme.getIcon("revert")) + self.resetButton.setIcon(CONFIG.theme.getIcon("revert")) self.resetButton.clicked.connect(lambda: self._setSelectedMode(self.F_FILTERED)) self.modeBox = QHBoxLayout() @@ -466,7 +463,7 @@ class _FilterTab(QWidget): continue hLevel = nwItem.mainHeading - itemIcon = self.mainTheme.getItemIcon( + itemIcon = CONFIG.theme.getItemIcon( nwItem.itemType, nwItem.itemClass, nwItem.itemLayout, hLevel ) @@ -480,7 +477,7 @@ class _FilterTab(QWidget): trItem.setText(self.C_NAME, nwItem.itemName) trItem.setData(self.C_DATA, self.D_HANDLE, tHandle) trItem.setData(self.C_DATA, self.D_FILE, isFile) - trItem.setIcon(self.C_ACTIVE, self.mainTheme.getIcon(iconName)) + trItem.setIcon(self.C_ACTIVE, CONFIG.theme.getIcon(iconName)) trItem.setTextAlignment(self.C_NAME, Qt.AlignLeft) @@ -504,19 +501,19 @@ class _FilterTab(QWidget): self.filterOpt.clear() self.filterOpt.addLabel(self._build.getLabel("filter")) self.filterOpt.addItem( - self.mainTheme.getIcon("proj_scene"), + CONFIG.theme.getIcon("proj_scene"), self._build.getLabel("filter.includeNovel"), "doc:filter.includeNovel", default=self._build.getBool("filter.includeNovel") ) self.filterOpt.addItem( - self.mainTheme.getIcon("proj_note"), + CONFIG.theme.getIcon("proj_note"), self._build.getLabel("filter.includeNotes"), "doc:filter.includeNotes", default=self._build.getBool("filter.includeNotes") ) self.filterOpt.addItem( - self.mainTheme.getIcon("unchecked"), + CONFIG.theme.getIcon("unchecked"), self._build.getLabel("filter.includeInactive"), "doc:filter.includeInactive", default=self._build.getBool("filter.includeInactive") @@ -528,7 +525,7 @@ class _FilterTab(QWidget): self.filterOpt.addLabel(self.tr("Select Root Folders")) for tHandle, nwItem in self.theProject.tree.iterRoots(None): if not nwItem.isInactiveClass(): - itemIcon = self.mainTheme.getItemIcon( + itemIcon = CONFIG.theme.getItemIcon( nwItem.itemType, nwItem.itemClass, nwItem.itemLayout ) self.filterOpt.addItem( @@ -603,13 +600,12 @@ class _HeadingsTab(QWidget): super().__init__(parent=buildMain) self.mainGui = buildMain.mainGui - self.mainTheme = buildMain.mainGui.mainTheme self.theProject = buildMain.mainGui.theProject self._build = build self._editing = 0 - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize vSp = CONFIG.pxInt(12) bSp = CONFIG.pxInt(6) @@ -623,7 +619,7 @@ class _HeadingsTab(QWidget): self.fmtTitle = QLineEdit("") self.fmtTitle.setReadOnly(True) self.btnTitle = QToolButton() - self.btnTitle.setIcon(self.mainTheme.getIcon("edit")) + self.btnTitle.setIcon(CONFIG.theme.getIcon("edit")) self.btnTitle.clicked.connect(lambda: self._editHeading(self.EDIT_TITLE)) wrapTitle = QHBoxLayout() @@ -639,7 +635,7 @@ class _HeadingsTab(QWidget): self.fmtChapter = QLineEdit("") self.fmtChapter.setReadOnly(True) self.btnChapter = QToolButton() - self.btnChapter.setIcon(self.mainTheme.getIcon("edit")) + self.btnChapter.setIcon(CONFIG.theme.getIcon("edit")) self.btnChapter.clicked.connect(lambda: self._editHeading(self.EDIT_CHAPTER)) wrapChapter = QHBoxLayout() @@ -655,7 +651,7 @@ class _HeadingsTab(QWidget): self.fmtUnnumbered = QLineEdit("") self.fmtUnnumbered.setReadOnly(True) self.btnUnnumbered = QToolButton() - self.btnUnnumbered.setIcon(self.mainTheme.getIcon("edit")) + self.btnUnnumbered.setIcon(CONFIG.theme.getIcon("edit")) self.btnUnnumbered.clicked.connect(lambda: self._editHeading(self.EDIT_UNNUM)) wrapUnnumbered = QHBoxLayout() @@ -672,7 +668,7 @@ class _HeadingsTab(QWidget): self.fmtScene = QLineEdit("") self.fmtScene.setReadOnly(True) self.btnScene = QToolButton() - self.btnScene.setIcon(self.mainTheme.getIcon("edit")) + self.btnScene.setIcon(CONFIG.theme.getIcon("edit")) self.btnScene.clicked.connect(lambda: self._editHeading(self.EDIT_SCENE)) self.hdeScene = QLabel(self.tr("Hide")) self.hdeScene.setToolTip(sceneHideTip) @@ -699,7 +695,7 @@ class _HeadingsTab(QWidget): self.fmtSection = QLineEdit("") self.fmtSection.setReadOnly(True) self.btnSection = QToolButton() - self.btnSection.setIcon(self.mainTheme.getIcon("edit")) + self.btnSection.setIcon(CONFIG.theme.getIcon("edit")) self.btnSection.clicked.connect(lambda: self._editHeading(self.EDIT_SECTION)) self.hdeSection = QLabel(self.tr("Hide")) self.hdeSection.setToolTip(sectionHideTip) @@ -729,7 +725,7 @@ class _HeadingsTab(QWidget): self.editTextBox.setFixedHeight(5*iPx) self.editTextBox.setEnabled(False) - self.formSyntax = _HeadingSyntaxHighlighter(self.editTextBox.document(), self.mainTheme) + self.formSyntax = _HeadingSyntaxHighlighter(self.editTextBox.document()) self.menuInsert = QMenu() self.aInsTitle = self.menuInsert.addAction(self.tr("Title")) @@ -872,12 +868,12 @@ class _HeadingsTab(QWidget): class _HeadingSyntaxHighlighter(QSyntaxHighlighter): - def __init__(self, document: QTextDocument, mainTheme: GuiTheme) -> None: + def __init__(self, document: QTextDocument) -> None: super().__init__(document) self._fmtSymbol = QTextCharFormat() - self._fmtSymbol.setForeground(QColor(*mainTheme.colHead)) + self._fmtSymbol.setForeground(QColor(*CONFIG.theme.colHead)) self._fmtFormat = QTextCharFormat() - self._fmtFormat.setForeground(QColor(*mainTheme.colEmph)) + self._fmtFormat.setForeground(QColor(*CONFIG.theme.colEmph)) return def highlightBlock(self, text: str) -> None: @@ -901,12 +897,9 @@ class _ContentTab(QWidget): def __init__(self, buildMain: GuiBuildSettings, build: BuildSettings) -> None: super().__init__(parent=buildMain) - self.mainGui = buildMain.mainGui - self.mainTheme = buildMain.mainGui.mainTheme - self._build = build - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize # Left Form # ========= @@ -973,16 +966,15 @@ class _FormatTab(QWidget): def __init__(self, buildMain: GuiBuildSettings, build: BuildSettings) -> None: super().__init__(parent=buildMain) - self.buildMain = buildMain - self.mainGui = buildMain.mainGui - self.mainTheme = buildMain.mainGui.mainTheme + self.buildMain = buildMain + self.mainGui = buildMain.mainGui self._build = build self._unitScale = 1.0 - iPx = self.mainTheme.baseIconSize - spW = 6*self.mainTheme.textNWidth - dbW = 8*self.mainTheme.textNWidth + iPx = CONFIG.theme.baseIconSize + spW = 6*CONFIG.theme.textNWidth + dbW = 8*CONFIG.theme.textNWidth # Text Format Form # ================ @@ -1003,7 +995,7 @@ class _FormatTab(QWidget): self.textFont = QLineEdit() self.textFont.setReadOnly(True) self.btnTextFont = QPushButton("...") - self.btnTextFont.setMaximumWidth(int(2.5*self.mainTheme.getTextWidth("..."))) + self.btnTextFont.setMaximumWidth(int(2.5*CONFIG.theme.getTextWidth("..."))) self.btnTextFont.clicked.connect(self._selectFont) self.formFormat.addRow( self._build.getLabel("format.textFont"), self.textFont, button=self.btnTextFont @@ -1287,12 +1279,9 @@ class _OutputTab(QWidget): def __init__(self, buildMain: GuiBuildSettings, build: BuildSettings) -> None: super().__init__(parent=buildMain) - self.mainGui = buildMain.mainGui - self.mainTheme = buildMain.mainGui.mainTheme - self._build = build - iPx = self.mainTheme.baseIconSize + iPx = CONFIG.theme.baseIconSize # Left Form # ========= diff --git a/novelwriter/tools/projwizard.py b/novelwriter/tools/projwizard.py index f147dd0f..c4f61416 100644 --- a/novelwriter/tools/projwizard.py +++ b/novelwriter/tools/projwizard.py @@ -53,10 +53,9 @@ class GuiProjectWizard(QWizard): logger.debug("Create: GuiProjectWizard") self.setObjectName("GuiProjectWizard") - self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme + self.mainGui = mainGui - self.sideImage = self.mainTheme.loadDecoration( + self.sideImage = CONFIG.theme.loadDecoration( "wiz-back", None, CONFIG.pxInt(370) ) self.setWizardStyle(QWizard.ModernStyle) @@ -92,9 +91,6 @@ class ProjWizardIntroPage(QWizardPage): def __init__(self, theWizard): super().__init__() - self.theWizard = theWizard - self.mainTheme = theWizard.mainTheme - self.setTitle(self.tr("Create New Project")) self.theText = QLabel(self.tr( "Provide at least a project name. The project name should not " @@ -108,7 +104,7 @@ class ProjWizardIntroPage(QWizardPage): "Peter Mitterhofer", "CC BY-SA 4.0" )) lblFont = self.imgCredit.font() - lblFont.setPointSizeF(0.6*self.mainTheme.fontPointSize) + lblFont.setPointSizeF(0.6*CONFIG.theme.fontPointSize) self.imgCredit.setFont(lblFont) xW = CONFIG.pxInt(300) @@ -160,9 +156,6 @@ class ProjWizardFolderPage(QWizardPage): def __init__(self, theWizard): super().__init__() - self.theWizard = theWizard - self.mainTheme = theWizard.mainTheme - self.setTitle(self.tr("Select Project Folder")) self.theText = QLabel(self.tr( "Select a location to store the project. A new project folder " @@ -179,7 +172,7 @@ class ProjWizardFolderPage(QWizardPage): self.projPath.setPlaceholderText(self.tr("Required")) self.browseButton = QPushButton("...") - self.browseButton.setMaximumWidth(int(2.5*self.mainTheme.getTextWidth("..."))) + self.browseButton.setMaximumWidth(int(2.5*CONFIG.theme.getTextWidth("..."))) self.browseButton.clicked.connect(self._doBrowse) self.errLabel = QLabel("") @@ -257,8 +250,6 @@ class ProjWizardPopulatePage(QWizardPage): def __init__(self, theWizard): super().__init__() - self.theWizard = theWizard - self.setTitle(self.tr("Populate Project")) self.theText = QLabel(self.tr( "Choose how to pre-fill the project. Either with a minimal set of " @@ -312,8 +303,6 @@ class ProjWizardCustomPage(QWizardPage): def __init__(self, theWizard): super().__init__() - self.theWizard = theWizard - self.setTitle(self.tr("Custom Project Options")) self.theText = QLabel(self.tr( "Select which additional elements to populate the project with. " @@ -412,8 +401,6 @@ class ProjWizardFinalPage(QWizardPage): def __init__(self, theWizard): super().__init__() - self.theWizard = theWizard - self.setTitle(self.tr("Summary")) self.theText = QLabel("") self.theText.setWordWrap(True) diff --git a/novelwriter/tools/writingstats.py b/novelwriter/tools/writingstats.py index c3b0b1b1..2a787294 100644 --- a/novelwriter/tools/writingstats.py +++ b/novelwriter/tools/writingstats.py @@ -73,7 +73,6 @@ class GuiWritingStats(QDialog): self.setWindowFlag(Qt.WindowType.Tool) self.mainGui = mainGui - self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject self.logData = [] @@ -134,7 +133,7 @@ class GuiWritingStats(QDialog): self.listBox.setSortingEnabled(True) # Word Bar - self.barHeight = int(round(0.5*self.mainTheme.fontPixelSize)) + self.barHeight = int(round(0.5*CONFIG.theme.fontPixelSize)) self.barWidth = CONFIG.pxInt(200) self.barImage = QPixmap(self.barHeight, self.barHeight) self.barImage.fill(self.palette().highlight().color()) @@ -145,27 +144,27 @@ class GuiWritingStats(QDialog): self.infoBox.setLayout(self.infoForm) self.labelTotal = QLabel(formatTime(0)) - self.labelTotal.setFont(self.mainTheme.guiFontFixed) + self.labelTotal.setFont(CONFIG.theme.guiFontFixed) self.labelTotal.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.labelIdleT = QLabel(formatTime(0)) - self.labelIdleT.setFont(self.mainTheme.guiFontFixed) + self.labelIdleT.setFont(CONFIG.theme.guiFontFixed) self.labelIdleT.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.labelFilter = QLabel(formatTime(0)) - self.labelFilter.setFont(self.mainTheme.guiFontFixed) + self.labelFilter.setFont(CONFIG.theme.guiFontFixed) self.labelFilter.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.novelWords = QLabel("0") - self.novelWords.setFont(self.mainTheme.guiFontFixed) + self.novelWords.setFont(CONFIG.theme.guiFontFixed) self.novelWords.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.notesWords = QLabel("0") - self.notesWords.setFont(self.mainTheme.guiFontFixed) + self.notesWords.setFont(CONFIG.theme.guiFontFixed) self.notesWords.setAlignment(Qt.AlignVCenter | Qt.AlignRight) self.totalWords = QLabel("0") - self.totalWords.setFont(self.mainTheme.guiFontFixed) + self.totalWords.setFont(CONFIG.theme.guiFontFixed) self.totalWords.setAlignment(Qt.AlignVCenter | Qt.AlignRight) lblTTime = QLabel(self.tr("Total Time:")) @@ -192,7 +191,7 @@ class GuiWritingStats(QDialog): self.infoForm.setRowStretch(6, 1) # Filter Options - sPx = self.mainTheme.baseIconSize + sPx = CONFIG.theme.baseIconSize self.filterBox = QGroupBox(self.tr("Filters"), self) self.filterForm = QGridLayout(self) @@ -589,13 +588,13 @@ class GuiWritingStats(QDialog): newItem.setTextAlignment(self.C_COUNT, Qt.AlignRight) newItem.setTextAlignment(self.C_BAR, Qt.AlignLeft | Qt.AlignVCenter) - newItem.setFont(self.C_TIME, self.mainTheme.guiFontFixed) - newItem.setFont(self.C_LENGTH, self.mainTheme.guiFontFixed) - newItem.setFont(self.C_COUNT, self.mainTheme.guiFontFixed) + newItem.setFont(self.C_TIME, CONFIG.theme.guiFontFixed) + newItem.setFont(self.C_LENGTH, CONFIG.theme.guiFontFixed) + newItem.setFont(self.C_COUNT, CONFIG.theme.guiFontFixed) if showIdleTime: - newItem.setFont(self.C_IDLE, self.mainTheme.guiFontFixed) + newItem.setFont(self.C_IDLE, CONFIG.theme.guiFontFixed) else: - newItem.setFont(self.C_IDLE, self.mainTheme.guiFont) + newItem.setFont(self.C_IDLE, CONFIG.theme.guiFont) self.listBox.addTopLevelItem(newItem) self.timeFilter += sDiff diff --git a/sample/nwProject.nwx b/sample/nwProject.nwx index c37f48cd..41d8853b 100644 --- a/sample/nwProject.nwx +++ b/sample/nwProject.nwx @@ -1,6 +1,6 @@ - - + + Sample Project Sample Project Jane Smith diff --git a/tests/test_dialogs/test_dlg_about.py b/tests/test_dialogs/test_dlg_about.py index 1ae7e028..d2ab97a6 100644 --- a/tests/test_dialogs/test_dlg_about.py +++ b/tests/test_dialogs/test_dlg_about.py @@ -34,8 +34,6 @@ from novelwriter.dialogs.about import GuiAbout def testDlgAbout_NWDialog(qtbot, monkeypatch, nwGUI): """Test the novelWriter about dialogs.""" # NW About - nwGUI.mainTheme.themeName = "A Theme" - nwGUI.mainTheme.themeAuthor = "An Author" assert nwGUI.showAboutNWDialog(showNotes=True) is True qtbot.waitUntil(lambda: getGuiItem("GuiAbout") is not None, timeout=1000) diff --git a/tests/test_gui/test_gui_theme.py b/tests/test_gui/test_gui_theme.py index 9d193480..2f012229 100644 --- a/tests/test_gui/test_gui_theme.py +++ b/tests/test_gui/test_gui_theme.py @@ -33,14 +33,12 @@ from PyQt5.QtWidgets import QApplication from novelwriter import CONFIG from novelwriter.enum import nwItemClass, nwItemLayout, nwItemType from novelwriter.constants import nwLabels -from novelwriter.gui.theme import GuiIcons, GuiTheme @pytest.mark.gui def testGuiTheme_Main(qtbot, nwGUI, tstPaths): - """Test the theme class init. - """ - mainTheme: GuiTheme = nwGUI.mainTheme + """Test the theme class init.""" + mainTheme = CONFIG.theme # Methods # ======= @@ -123,7 +121,7 @@ def testGuiTheme_Main(qtbot, nwGUI, tstPaths): @pytest.mark.gui def testGuiTheme_Theme(qtbot, monkeypatch, nwGUI): """Test the theme part of the class.""" - mainTheme: GuiTheme = nwGUI.mainTheme + mainTheme = CONFIG.theme # List Themes # =========== @@ -200,9 +198,8 @@ def testGuiTheme_Theme(qtbot, monkeypatch, nwGUI): @pytest.mark.gui def testGuiTheme_Syntax(qtbot, monkeypatch, nwGUI): - """Test the syntax part of the class. - """ - mainTheme: GuiTheme = nwGUI.mainTheme + """Test the syntax part of the class.""" + mainTheme = CONFIG.theme # List Themes # =========== @@ -266,9 +263,8 @@ def testGuiTheme_Syntax(qtbot, monkeypatch, nwGUI): @pytest.mark.gui def testGuiTheme_Icons(qtbot, caplog, monkeypatch, nwGUI, tstPaths): - """Test the icon cache class. - """ - iconCache: GuiIcons = nwGUI.mainTheme.iconCache + """Test the icon cache class.""" + iconCache = CONFIG.theme.iconCache # Load Theme # ==========