From 88183cdc39b9911692a5f72d92b0958cba8947c0 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 25 Oct 2022 23:42:43 +0200 Subject: [PATCH] Add updateTheme functions to remaining GUI components --- novelwriter/dialogs/preferences.py | 38 +++++++++++++----------------- novelwriter/gui/doceditor.py | 28 ++++++++++++---------- novelwriter/gui/docviewer.py | 26 +++++++++++--------- novelwriter/gui/itemdetails.py | 15 ++++++++---- novelwriter/gui/noveltree.py | 2 -- novelwriter/gui/outline.py | 20 +++++++++++++--- novelwriter/gui/statusbar.py | 22 ++++++++++++----- novelwriter/guimain.py | 28 +++++++++++++++++----- 8 files changed, 113 insertions(+), 66 deletions(-) diff --git a/novelwriter/dialogs/preferences.py b/novelwriter/dialogs/preferences.py index 4551d3e6..6236a2a5 100644 --- a/novelwriter/dialogs/preferences.py +++ b/novelwriter/dialogs/preferences.py @@ -34,7 +34,6 @@ from PyQt5.QtWidgets import ( QLineEdit, QFileDialog, QFontDialog, QDoubleSpinBox ) -from novelwriter.enum import nwAlert from novelwriter.custom import QSwitch, QConfigLayout, PagedDialog from novelwriter.dialogs.quotes import GuiQuoteSelect @@ -78,6 +77,12 @@ class GuiPreferences(PagedDialog): self.resize(*self.mainConf.getPreferencesSize()) + # Settings + self.updateTheme = False + self.updateSyntax = False + self.needsRestart = False + self.refreshTree = False + logger.debug("GuiPreferences initialisation complete") return @@ -92,8 +97,7 @@ class GuiPreferences(PagedDialog): """ logger.debug("Saving new preferences") - needsRestart, refreshTree = self.tabGeneral.saveValues() - + self.tabGeneral.saveValues() self.tabProjects.saveValues() self.tabDocs.saveValues() self.tabEditor.saveValues() @@ -101,14 +105,6 @@ class GuiPreferences(PagedDialog): self.tabAuto.saveValues() self.tabQuote.saveValues() - if needsRestart: - self.mainGui.makeAlert(self.tr( - "Some changes will not be applied until novelWriter has been restarted." - ), nwAlert.INFO) - - if refreshTree: - self.mainGui.projView.populateTree() - self._saveWindowSize() self.accept() @@ -140,6 +136,7 @@ class GuiPreferencesGeneral(QWidget): super().__init__(parent=prefsGui) self.mainConf = novelwriter.CONFIG + self.prefsGui = prefsGui self.mainGui = prefsGui.mainGui self.mainTheme = prefsGui.mainGui.mainTheme @@ -277,16 +274,13 @@ class GuiPreferencesGeneral(QWidget): guiFontSize = self.guiFontSize.value() emphLabels = self.emphLabels.isChecked() - # Check if restart is needed - needsRestart = False - needsRestart |= self.mainConf.guiLang != guiLang - needsRestart |= self.mainConf.guiTheme != guiTheme - needsRestart |= self.mainConf.guiFont != guiFont - needsRestart |= self.mainConf.guiFontSize != guiFontSize - - # Check if refreshing project tree is needed - refreshTree = False - refreshTree |= self.mainConf.emphLabels != emphLabels + # Update Flags + self.prefsGui.updateTheme |= self.mainConf.guiTheme != guiTheme + self.prefsGui.updateSyntax |= self.mainConf.guiSyntax != guiSyntax + self.prefsGui.needsRestart |= self.mainConf.guiLang != guiLang + self.prefsGui.needsRestart |= self.mainConf.guiFont != guiFont + self.prefsGui.needsRestart |= self.mainConf.guiFontSize != guiFontSize + self.prefsGui.refreshTree |= self.mainConf.emphLabels != emphLabels self.mainConf.guiLang = guiLang self.mainConf.guiTheme = guiTheme @@ -300,7 +294,7 @@ class GuiPreferencesGeneral(QWidget): self.mainConf.confChanged = True - return needsRestart, refreshTree + return ## # Slots diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 6b098959..8db3734a 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -2650,17 +2650,11 @@ class GuiDocEditHeader(QWidget): lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) self.theTitle.setFont(lblFont) - buttonStyle = ( - "QToolButton {{border: none; background: transparent;}} " - "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" - ).format(*self.mainTheme.colText) - # Buttons self.editButton = QToolButton(self) self.editButton.setContentsMargins(0, 0, 0, 0) self.editButton.setIconSize(QSize(fPx, fPx)) self.editButton.setFixedSize(fPx, fPx) - self.editButton.setStyleSheet(buttonStyle) self.editButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.editButton.setVisible(False) self.editButton.setToolTip(self.tr("Edit document label")) @@ -2670,7 +2664,6 @@ class GuiDocEditHeader(QWidget): self.searchButton.setContentsMargins(0, 0, 0, 0) self.searchButton.setIconSize(QSize(fPx, fPx)) self.searchButton.setFixedSize(fPx, fPx) - self.searchButton.setStyleSheet(buttonStyle) self.searchButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.searchButton.setVisible(False) self.searchButton.setToolTip(self.tr("Search document")) @@ -2680,7 +2673,6 @@ class GuiDocEditHeader(QWidget): self.minmaxButton.setContentsMargins(0, 0, 0, 0) self.minmaxButton.setIconSize(QSize(fPx, fPx)) self.minmaxButton.setFixedSize(fPx, fPx) - self.minmaxButton.setStyleSheet(buttonStyle) self.minmaxButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.minmaxButton.setVisible(False) self.minmaxButton.setToolTip(self.tr("Toggle Focus Mode")) @@ -2690,7 +2682,6 @@ class GuiDocEditHeader(QWidget): self.closeButton.setContentsMargins(0, 0, 0, 0) self.closeButton.setIconSize(QSize(fPx, fPx)) self.closeButton.setFixedSize(fPx, fPx) - self.closeButton.setStyleSheet(buttonStyle) self.closeButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.closeButton.setVisible(False) self.closeButton.setToolTip(self.tr("Close the document")) @@ -2713,9 +2704,7 @@ class GuiDocEditHeader(QWidget): self.outerBox.setContentsMargins(cM, cM, cM, cM) self.setMinimumHeight(fPx + 2*cM) - # Fix the Colours self.updateTheme() - self.matchColours() logger.debug("GuiDocEditHeader initialisation complete") @@ -2732,6 +2721,19 @@ class GuiDocEditHeader(QWidget): self.searchButton.setIcon(self.mainTheme.getIcon("search")) self.minmaxButton.setIcon(self.mainTheme.getIcon("maximise")) self.closeButton.setIcon(self.mainTheme.getIcon("close")) + + buttonStyle = ( + "QToolButton {{border: none; background: transparent;}} " + "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" + ).format(*self.mainTheme.colText) + + self.editButton.setStyleSheet(buttonStyle) + self.searchButton.setStyleSheet(buttonStyle) + self.minmaxButton.setStyleSheet(buttonStyle) + self.closeButton.setStyleSheet(buttonStyle) + + self.matchColours() + return def matchColours(self): @@ -2942,7 +2944,6 @@ class GuiDocEditFooter(QWidget): # Fix the Colours self.updateTheme() - self.matchColours() self.updateLineCount() self.updateCounts() @@ -2959,6 +2960,9 @@ class GuiDocEditFooter(QWidget): """ 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.matchColours() + return def matchColours(self): diff --git a/novelwriter/gui/docviewer.py b/novelwriter/gui/docviewer.py index d3cac0b0..1b1a5b53 100644 --- a/novelwriter/gui/docviewer.py +++ b/novelwriter/gui/docviewer.py @@ -742,17 +742,11 @@ class GuiDocViewHeader(QWidget): lblFont.setPointSizeF(0.9*self.mainTheme.fontPointSize) self.theTitle.setFont(lblFont) - buttonStyle = ( - "QToolButton {{border: none; background: transparent;}} " - "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" - ).format(*self.mainTheme.colText) - # Buttons self.backButton = QToolButton(self) self.backButton.setContentsMargins(0, 0, 0, 0) self.backButton.setIconSize(QSize(fPx, fPx)) self.backButton.setFixedSize(fPx, fPx) - self.backButton.setStyleSheet(buttonStyle) self.backButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.backButton.setVisible(False) self.backButton.setToolTip(self.tr("Go backward")) @@ -762,7 +756,6 @@ class GuiDocViewHeader(QWidget): self.forwardButton.setContentsMargins(0, 0, 0, 0) self.forwardButton.setIconSize(QSize(fPx, fPx)) self.forwardButton.setFixedSize(fPx, fPx) - self.forwardButton.setStyleSheet(buttonStyle) self.forwardButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.forwardButton.setVisible(False) self.forwardButton.setToolTip(self.tr("Go forward")) @@ -772,7 +765,6 @@ class GuiDocViewHeader(QWidget): self.refreshButton.setContentsMargins(0, 0, 0, 0) self.refreshButton.setIconSize(QSize(fPx, fPx)) self.refreshButton.setFixedSize(fPx, fPx) - self.refreshButton.setStyleSheet(buttonStyle) self.refreshButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.refreshButton.setVisible(False) self.refreshButton.setToolTip(self.tr("Reload the document")) @@ -782,7 +774,6 @@ class GuiDocViewHeader(QWidget): self.closeButton.setContentsMargins(0, 0, 0, 0) self.closeButton.setIconSize(QSize(fPx, fPx)) self.closeButton.setFixedSize(fPx, fPx) - self.closeButton.setStyleSheet(buttonStyle) self.closeButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.closeButton.setVisible(False) self.closeButton.setToolTip(self.tr("Close the document")) @@ -807,7 +798,6 @@ class GuiDocViewHeader(QWidget): # Fix the Colours self.updateTheme() - self.matchColours() logger.debug("GuiDocViewHeader initialisation complete") @@ -824,6 +814,19 @@ class GuiDocViewHeader(QWidget): self.forwardButton.setIcon(self.mainTheme.getIcon("forward")) self.refreshButton.setIcon(self.mainTheme.getIcon("refresh")) self.closeButton.setIcon(self.mainTheme.getIcon("close")) + + buttonStyle = ( + "QToolButton {{border: none; background: transparent;}} " + "QToolButton:hover {{border: none; background: rgba({0},{1},{2},0.2);}}" + ).format(*self.mainTheme.colText) + + self.backButton.setStyleSheet(buttonStyle) + self.forwardButton.setStyleSheet(buttonStyle) + self.refreshButton.setStyleSheet(buttonStyle) + self.closeButton.setStyleSheet(buttonStyle) + + self.matchColours() + return def matchColours(self): @@ -1051,7 +1054,6 @@ class GuiDocViewFooter(QWidget): # Fix the Colours self.updateTheme() - self.matchColours() logger.debug("GuiDocViewFooter initialisation complete") @@ -1097,6 +1099,8 @@ class GuiDocViewFooter(QWidget): self.showComments.setStyleSheet(buttonStyle) self.showSynopsis.setStyleSheet(buttonStyle) + self.matchColours() + return def matchColours(self): diff --git a/novelwriter/gui/itemdetails.py b/novelwriter/gui/itemdetails.py index a99650c2..e8eae31d 100644 --- a/novelwriter/gui/itemdetails.py +++ b/novelwriter/gui/itemdetails.py @@ -53,12 +53,8 @@ class GuiItemDetails(QWidget): hSp = self.mainConf.pxInt(6) vSp = self.mainConf.pxInt(1) mPx = self.mainConf.pxInt(6) - iPx = self.mainTheme.baseIconSize fPt = self.mainTheme.fontPointSize - self._expCheck = self.mainTheme.getPixmap("check", (iPx, iPx)) - self._expCross = self.mainTheme.getPixmap("cross", (iPx, iPx)) - fntLabel = QFont() fntLabel.setBold(True) fntLabel.setPointSizeF(0.9*fPt) @@ -179,6 +175,8 @@ class GuiItemDetails(QWidget): self.setLayout(self.mainBox) + 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) @@ -219,6 +217,15 @@ class GuiItemDetails(QWidget): """ self.updateViewBox(self._itemHandle) + def updateTheme(self): + """Update theme elements. + """ + iPx = self.mainTheme.baseIconSize + self._expCheck = self.mainTheme.getPixmap("check", (iPx, iPx)) + self._expCross = self.mainTheme.getPixmap("cross", (iPx, iPx)) + self.updateViewBox(self._itemHandle) + return + ## # Public Slots ## diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index 489b7ab6..54bf884d 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -252,7 +252,6 @@ class GuiNovelToolBar(QWidget): """Update theme elements. """ # Icons - self.tbRefresh.setIcon(self.mainTheme.getIcon("refresh")) self.tbRoot.setIcon(self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])) self.tbMore.setIcon(self.mainTheme.getIcon("menu")) @@ -262,7 +261,6 @@ class GuiNovelToolBar(QWidget): self.setPalette(qPalette) # StyleSheets - fadeCol = qPalette.text().color() buttonStyle = ( "QToolButton {{padding: {0}px; border: none; background: transparent;}} " diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index bb900d9f..dc0bf6d6 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -97,6 +97,13 @@ class GuiOutlineView(QWidget): # Methods ## + def updateTheme(self): + """Update theme elements. + """ + self.outlineBar.updateTheme() + self.refreshTree() + return + def initSettings(self): """Initialise GUI elements that depend on specific settings. """ @@ -213,7 +220,6 @@ class GuiOutlineToolBar(QToolBar): self.setMovable(False) self.setIconSize(QSize(iPx, iPx)) self.setContentsMargins(0, 0, 0, 0) - self.setStyleSheet("QToolBar {border: 0px;}") stretch = QWidget(self) stretch.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) @@ -228,7 +234,6 @@ class GuiOutlineToolBar(QToolBar): # Actions self.aRefresh = QAction(self.tr("Refresh"), self) - self.aRefresh.setIcon(self.mainTheme.getIcon("refresh")) self.aRefresh.triggered.connect(self._refreshRequested) # Column Menu @@ -238,7 +243,6 @@ class GuiOutlineToolBar(QToolBar): ) self.tbColumns = QToolButton(self) - self.tbColumns.setIcon(self.mainTheme.getIcon("menu")) self.tbColumns.setMenu(self.mColumns) self.tbColumns.setPopupMode(QToolButton.InstantPopup) @@ -258,6 +262,16 @@ class GuiOutlineToolBar(QToolBar): # Methods ## + def updateTheme(self): + """Update theme elements. + """ + self.setStyleSheet("QToolBar {border: 0px;}") + + self.aRefresh.setIcon(self.mainTheme.getIcon("refresh")) + self.tbColumns.setIcon(self.mainTheme.getIcon("menu")) + + return + def populateNovelList(self): """Fill the novel combo box with a list of all novel folders. """ diff --git a/novelwriter/gui/statusbar.py b/novelwriter/gui/statusbar.py index c6191b8d..26830e2d 100644 --- a/novelwriter/gui/statusbar.py +++ b/novelwriter/gui/statusbar.py @@ -66,7 +66,6 @@ class GuiMainStatus(QStatusBar): # The Spell Checker Language self.langIcon = QLabel("") self.langText = QLabel(self.tr("None")) - self.langIcon.setPixmap(self.mainTheme.getPixmap("status_lang", (iPx, iPx))) self.langIcon.setContentsMargins(0, 0, 0, 0) self.langText.setContentsMargins(0, 0, xM, 0) self.addPermanentWidget(self.langIcon) @@ -91,7 +90,6 @@ class GuiMainStatus(QStatusBar): # The Project and Session Stats self.statsIcon = QLabel() self.statsText = QLabel("") - self.statsIcon.setPixmap(self.mainTheme.getPixmap("status_stats", (iPx, iPx))) self.statsIcon.setContentsMargins(0, 0, 0, 0) self.statsText.setContentsMargins(0, 0, xM, 0) self.addPermanentWidget(self.statsIcon) @@ -99,12 +97,8 @@ class GuiMainStatus(QStatusBar): # The Session Clock # Set the mimimum width so the label doesn't rescale every second - self.timePixmap = self.mainTheme.getPixmap("status_time", (iPx, iPx)) - self.idlePixmap = self.mainTheme.getPixmap("status_idle", (iPx, iPx)) - self.timeIcon = QLabel() self.timeText = QLabel("") - self.timeIcon.setPixmap(self.timePixmap) self.timeText.setToolTip(self.tr("Session Time")) self.timeText.setMinimumWidth(self.mainTheme.getTextWidth("00:00:00:")) self.timeIcon.setContentsMargins(0, 0, 0, 0) @@ -117,6 +111,7 @@ class GuiMainStatus(QStatusBar): logger.debug("GuiMainStatus initialisation complete") + self.updateTheme() self.clearStatus() return @@ -132,6 +127,21 @@ class GuiMainStatus(QStatusBar): self.updateTime() return True + def updateTheme(self): + """Update theme elements. + """ + iPx = self.mainTheme.baseIconSize + + self.langIcon.setPixmap(self.mainTheme.getPixmap("status_lang", (iPx, iPx))) + self.statsIcon.setPixmap(self.mainTheme.getPixmap("status_stats", (iPx, iPx))) + + self.timePixmap = self.mainTheme.getPixmap("status_time", (iPx, iPx)) + self.idlePixmap = self.mainTheme.getPixmap("status_idle", (iPx, iPx)) + + self.timeIcon.setPixmap(self.timePixmap) + + return + ## # Setters ## diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 9b18220a..a6ac3407 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -909,18 +909,34 @@ class GuiMain(QMainWindow): self.initMain() self.saveDocument() - self.mainTheme.updateTheme() - self.viewsBar.updateTheme() - self.projView.updateTheme() - self.novelView.updateTheme() - self.docEditor.updateTheme() - self.docViewer.updateTheme() + if dlgConf.needsRestart: + self.makeAlert(self.tr( + "Some changes will not be applied until novelWriter has been restarted." + ), nwAlert.INFO) + + if dlgConf.refreshTree: + self.projView.populateTree() + + if dlgConf.updateTheme: + self.mainTheme.updateTheme() + self.docEditor.updateTheme() + self.docViewer.updateTheme() + self.viewsBar.updateTheme() + self.projView.updateTheme() + self.novelView.updateTheme() + self.outlineView.updateTheme() + self.itemDetails.updateTheme() + self.mainStatus.updateTheme() + + if dlgConf.updateSyntax: + pass self.docEditor.initEditor() self.docViewer.initViewer() self.projView.initSettings() self.novelView.initSettings() self.outlineView.initSettings() + self._updateStatusWordCount() return