Add theme update handling to manuscript build tool

This commit is contained in:
Veronica Berglyd Olsen
2025-10-26 02:00:04 +01:00
parent 9339c9ff62
commit e492c6575d
5 changed files with 76 additions and 34 deletions
+59 -23
View File
@@ -101,30 +101,20 @@ class GuiManuscript(NToolDialog):
# Build Controls
# ==============
qPalette = self.palette()
qPalette.setBrush(QPalette.ColorRole.Window, qPalette.base())
self.setPalette(qPalette)
buttonStyle = SHARED.theme.getStyleSheet(STYLES_MIN_TOOLBUTTON)
self.tbAdd = NIconToolButton(self, iSz, "add", "green")
self.tbAdd = NIconToolButton(self, iSz)
self.tbAdd.setToolTip(self.tr("Add New Build"))
self.tbAdd.setStyleSheet(buttonStyle)
self.tbAdd.clicked.connect(self._createNewBuild)
self.tbDel = NIconToolButton(self, iSz, "remove", "red")
self.tbDel = NIconToolButton(self, iSz)
self.tbDel.setToolTip(self.tr("Delete Selected Build"))
self.tbDel.setStyleSheet(buttonStyle)
self.tbDel.clicked.connect(self._deleteSelectedBuild)
self.tbCopy = NIconToolButton(self, iSz, "copy", "blue")
self.tbCopy = NIconToolButton(self, iSz)
self.tbCopy.setToolTip(self.tr("Duplicate Selected Build"))
self.tbCopy.setStyleSheet(buttonStyle)
self.tbCopy.clicked.connect(self._copySelectedBuild)
self.tbEdit = NIconToolButton(self, iSz, "edit", "green")
self.tbEdit = NIconToolButton(self, iSz)
self.tbEdit.setToolTip(self.tr("Edit Selected Build"))
self.tbEdit.setStyleSheet(buttonStyle)
self.tbEdit.clicked.connect(self._editSelectedBuild)
self.lblBuilds = QLabel("<b>{0}</b>".format(self.tr("Builds")), self)
@@ -159,7 +149,6 @@ class GuiManuscript(NToolDialog):
self.detailsTabs = QTabWidget(self)
self.detailsTabs.addTab(self.buildDetails, self.tr("Details"))
self.detailsTabs.addTab(self.buildOutline, self.tr("Outline"))
self.detailsTabs.setStyleSheet(SHARED.theme.getStyleSheet(STYLES_FLAT_TABS))
self.buildSplit = QSplitter(Qt.Orientation.Vertical, self)
self.buildSplit.addWidget(self.buildList)
@@ -247,6 +236,8 @@ class GuiManuscript(NToolDialog):
self.setLayout(self.outerBox)
self.setSizeGripEnabled(True)
self.updateTheme(init=True)
# Signals
self.buildOutline.outlineEntryClicked.connect(self.docPreview.navigateTo)
@@ -270,6 +261,31 @@ class GuiManuscript(NToolDialog):
self.buildList.setCurrentItem(self._buildMap[selected])
QTimer.singleShot(200, self._generatePreview)
def updateTheme(self, *, init: bool = False) -> None:
"""Update theme elements."""
self.tbAdd.setThemeIcon("add", "green")
self.tbDel.setThemeIcon("remove", "red")
self.tbCopy.setThemeIcon("copy", "blue")
self.tbEdit.setThemeIcon("edit", "green")
if not init:
self.btnPreview.updateIcon()
self.btnPrint.updateIcon()
self.btnBuild.updateIcon()
self.btnClose.updateIcon()
buttonStyle = SHARED.theme.getStyleSheet(STYLES_MIN_TOOLBUTTON)
self.tbAdd.setStyleSheet(buttonStyle)
self.tbDel.setStyleSheet(buttonStyle)
self.tbCopy.setStyleSheet(buttonStyle)
self.tbEdit.setStyleSheet(buttonStyle)
self.detailsTabs.setStyleSheet(SHARED.theme.getStyleSheet(STYLES_FLAT_TABS))
self.buildDetails.updateTheme()
self.buildOutline.updateTheme()
self.docPreview.updateTheme()
##
# Events
##
@@ -490,6 +506,7 @@ class _DetailsWidget(QWidget):
super().__init__(parent=parent)
self._initExpanded = True
self._build = None
# Tree Widget
self.listView = QTreeWidget(self)
@@ -612,9 +629,16 @@ class _DetailsWidget(QWidget):
sub.setIcon(1, on if build.getBool(key) else off)
item.addChild(sub)
self._build = build
# Restore expanded state
self.setExpandedState(expanded)
def updateTheme(self) -> None:
"""Update theme elements."""
if self._build:
self.updateInfo(self._build)
class _OutlineWidget(QWidget):
@@ -639,9 +663,9 @@ class _OutlineWidget(QWidget):
self.outerBox.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.outerBox)
def updateOutline(self, data: dict[str, str]) -> None:
def updateOutline(self, data: dict[str, str], *, force: bool = False) -> None:
"""Update the outline."""
if isinstance(data, dict) and data != self._outline:
if isinstance(data, dict) and (data != self._outline or force):
self.listView.clear()
tFont = self.font()
@@ -679,6 +703,10 @@ class _OutlineWidget(QWidget):
self.listView.setIndentation(SHARED.theme.baseIconHeight if indent else 4)
self._outline = data
def updateTheme(self) -> None:
"""Update theme elements."""
self.updateOutline(self._outline, force=True)
##
# Private Slots
##
@@ -721,17 +749,12 @@ class _PreviewWidget(QTextBrowser):
self.anchorClicked.connect(self._linkClicked)
# Document Age
aPalette = self.palette()
aPalette.setColor(QPalette.ColorRole.Window, aPalette.toolTipBase().color())
aPalette.setColor(QPalette.ColorRole.WindowText, aPalette.toolTipText().color())
aFont = self.font()
aFont.setPointSizeF(0.9*SHARED.theme.fontPointSize)
self.ageLabel = QLabel("", self)
self.ageLabel.setIndent(0)
self.ageLabel.setFont(aFont)
self.ageLabel.setPalette(aPalette)
self.ageLabel.setAutoFillBackground(True)
self.ageLabel.setAlignment(QtAlignCenter)
self.ageLabel.setFixedHeight(int(2.1*SHARED.theme.fontPixelSize))
@@ -750,6 +773,7 @@ class _PreviewWidget(QTextBrowser):
self._updateDocMargins()
self._updateBuildAge()
self.updateTheme()
self.setTextFont(CONFIG.textFont)
# Age Timer
@@ -815,6 +839,13 @@ class _PreviewWidget(QTextBrowser):
QApplication.processEvents()
QTimer.singleShot(300, self._postUpdate)
def updateTheme(self) -> None:
"""Update theme elements."""
palette = QApplication.palette()
palette.setColor(QPalette.ColorRole.Window, palette.toolTipBase().color())
palette.setColor(QPalette.ColorRole.WindowText, palette.toolTipText().color())
self.ageLabel.setPalette(palette)
##
# Events
##
@@ -907,7 +938,7 @@ class _StatsWidget(QWidget):
self.minWidget = QWidget(self)
self.maxWidget = QWidget(self)
self.toggleButton = NIconToggleButton(self, SHARED.theme.baseIconSize, "unfold")
self.toggleButton = NIconToggleButton(self, SHARED.theme.baseIconSize)
self.toggleButton.toggled.connect(self._toggleView)
self._buildBottomPanel()
@@ -922,6 +953,7 @@ class _StatsWidget(QWidget):
self.outerBox.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.outerBox)
self.updateTheme()
self._toggleView(False)
@@ -946,6 +978,10 @@ class _StatsWidget(QWidget):
self.maxHeadWordChars.setText(f"{data.get(nwStats.WCHARS_TITLE, 0):n}")
self.maxTextWordChars.setText(f"{data.get(nwStats.WCHARS_TEXT, 0):n}")
def updateTheme(self) -> None:
"""Update theme elements."""
self.toggleButton.setThemeIcon("unfold")
##
# Private Slots
##