Add am auto-update button to manuscript build settings

This commit is contained in:
Veronica Berglyd Olsen
2025-10-27 21:02:50 +01:00
parent d3b0a48779
commit d9d8e54ed3
5 changed files with 61 additions and 25 deletions
+1 -1
View File
@@ -56,7 +56,7 @@ VALID_MAP: dict[str, set[str]] = {
"GuiWordList": {"winWidth", "winHeight"},
"GuiNovelView": {"lastCol", "lastColSize"},
"GuiBuildSettings": {
"winWidth", "winHeight", "treeWidth", "filterWidth",
"winWidth", "winHeight", "treeWidth", "filterWidth", "autoPreview",
},
"GuiManuscript": {
"winWidth", "winHeight", "optsWidth", "viewWidth", "listHeight",
+16 -13
View File
@@ -92,10 +92,10 @@ class GuiManuscript(NToolDialog):
iPx = SHARED.theme.baseIconHeight
iSz = SHARED.theme.baseIconSize
pOptions = SHARED.project.options
options = SHARED.project.options
self.resize(
pOptions.getInt("GuiManuscript", "winWidth", 900),
pOptions.getInt("GuiManuscript", "winHeight", 600),
options.getInt("GuiManuscript", "winWidth", 900),
options.getInt("GuiManuscript", "winHeight", 600),
)
# Build Controls
@@ -142,7 +142,7 @@ class GuiManuscript(NToolDialog):
# ============
self.buildDetails = _DetailsWidget(self)
self.buildDetails.setColumnWidth(pOptions.getInt("GuiManuscript", "detailsWidth", 100))
self.buildDetails.setColumnWidth(options.getInt("GuiManuscript", "detailsWidth", 100))
self.buildOutline = _OutlineWidget(self)
@@ -154,8 +154,8 @@ class GuiManuscript(NToolDialog):
self.buildSplit.addWidget(self.buildList)
self.buildSplit.addWidget(self.detailsTabs)
self.buildSplit.setSizes([
pOptions.getInt("GuiManuscript", "listHeight", 50),
pOptions.getInt("GuiManuscript", "detailsHeight", 50),
options.getInt("GuiManuscript", "listHeight", 50),
options.getInt("GuiManuscript", "detailsHeight", 50),
])
# Process Controls
@@ -183,7 +183,7 @@ class GuiManuscript(NToolDialog):
# ===============
self.swtNewPage = NSwitch(self, height=iPx)
self.swtNewPage.setChecked(pOptions.getBool("GuiManuscript", "showNewPage", True))
self.swtNewPage.setChecked(options.getBool("GuiManuscript", "showNewPage", True))
self.swtNewPage.clicked.connect(self._generatePreview)
self.lblNewPage = QLabel(self.tr("Show Page Breaks"), self)
@@ -226,8 +226,8 @@ class GuiManuscript(NToolDialog):
self.mainSplit.setStretchFactor(0, 0)
self.mainSplit.setStretchFactor(1, 1)
self.mainSplit.setSizes([
pOptions.getInt("GuiManuscript", "optsWidth", 225),
pOptions.getInt("GuiManuscript", "viewWidth", 675),
options.getInt("GuiManuscript", "optsWidth", 225),
options.getInt("GuiManuscript", "viewWidth", 675),
])
self.outerBox = QVBoxLayout()
@@ -352,13 +352,16 @@ class GuiManuscript(NToolDialog):
self._builds.removeBuild(build.buildID)
self._updateBuildsList()
@pyqtSlot(BuildSettings)
def _processNewSettings(self, build: BuildSettings) -> None:
@pyqtSlot(BuildSettings, bool)
def _processNewSettings(self, build: BuildSettings, refreshPreview: bool) -> None:
"""Process new build settings from the settings dialog."""
self._builds.setBuild(build)
self._updateBuildItem(build)
if (current := self.buildList.currentItem()) and current.data(self.D_KEY) == build.buildID:
self._updateBuildDetails(current, current)
if refreshPreview:
self.buildList.setCurrentItem(self._buildMap[build.buildID])
self._generatePreview()
elif (item := self.buildList.currentItem()) and item.data(self.D_KEY) == build.buildID:
self._updateBuildDetails(item, item)
@pyqtSlot()
def _generatePreview(self) -> None:
+25 -9
View File
@@ -72,7 +72,7 @@ class GuiBuildSettings(NToolDialog):
OPT_HEADINGS = 2
OPT_FORMATTING = 10
newSettingsReady = pyqtSignal(BuildSettings)
newSettingsReady = pyqtSignal(BuildSettings, bool)
def __init__(self, parent: GuiMain, build: BuildSettings) -> None:
super().__init__(parent=parent)
@@ -86,6 +86,7 @@ class GuiBuildSettings(NToolDialog):
self.setWindowTitle(self.tr("Manuscript Build Settings"))
self.setMinimumSize(700, 400)
iPx = SHARED.theme.baseIconHeight
options = SHARED.project.options
self.resize(
options.getInt("GuiBuildSettings", "winWidth", 750),
@@ -124,6 +125,13 @@ class GuiBuildSettings(NToolDialog):
self.toolStack.addWidget(self.optTabHeadings)
self.toolStack.addWidget(self.optTabFormatting)
# Preview
self.swtAutoPreview = NSwitch(self, height=iPx)
self.swtAutoPreview.setChecked(options.getBool("GuiBuildSettings", "autoPreview", True))
self.lblAutoPreview = QLabel(self.tr("Auro-Update Preview"), self)
self.lblAutoPreview.setBuddy(self.swtAutoPreview)
# Buttons
self.btnApply = SHARED.theme.getStandardButton(nwStandardButton.APPLY, self)
self.btnSave = SHARED.theme.getStandardButton(nwStandardButton.SAVE, self)
@@ -147,10 +155,17 @@ class GuiBuildSettings(NToolDialog):
self.mainBox.addWidget(self.toolStack)
self.mainBox.setContentsMargins(0, 0, 0, 0)
self.bottomBox = QHBoxLayout()
self.bottomBox.addWidget(self.lblAutoPreview, 0)
self.bottomBox.addWidget(self.swtAutoPreview, 0)
self.bottomBox.addSpacing(8)
self.bottomBox.addWidget(self.btnBox, 1)
self.bottomBox.setContentsMargins(0, 0, 0, 0)
self.outerBox = QVBoxLayout()
self.outerBox.addLayout(self.topBox)
self.outerBox.addLayout(self.mainBox)
self.outerBox.addWidget(self.btnBox)
self.outerBox.addLayout(self.bottomBox)
self.outerBox.setSpacing(12)
self.setLayout(self.outerBox)
@@ -259,12 +274,13 @@ class GuiBuildSettings(NToolDialog):
"""Save the various user settings."""
treeWidth, filterWidth = self.optTabSelect.mainSplitSizes()
logger.debug("Saving State: GuiBuildSettings")
pOptions = SHARED.project.options
pOptions.setValue("GuiBuildSettings", "winWidth", self.width())
pOptions.setValue("GuiBuildSettings", "winHeight", self.height())
pOptions.setValue("GuiBuildSettings", "treeWidth", treeWidth)
pOptions.setValue("GuiBuildSettings", "filterWidth", filterWidth)
pOptions.saveSettings()
options = SHARED.project.options
options.setValue("GuiBuildSettings", "winWidth", self.width())
options.setValue("GuiBuildSettings", "winHeight", self.height())
options.setValue("GuiBuildSettings", "treeWidth", treeWidth)
options.setValue("GuiBuildSettings", "filterWidth", filterWidth)
options.setValue("GuiBuildSettings", "autoPreview", self.swtAutoPreview.isChecked())
options.saveSettings()
def _applyChanges(self) -> None:
"""Apply all settings changes to the build object."""
@@ -274,7 +290,7 @@ class GuiBuildSettings(NToolDialog):
def _emitBuildData(self) -> None:
"""Assemble the build data and emit the signal."""
self.newSettingsReady.emit(self._build)
self.newSettingsReady.emit(self._build, self.swtAutoPreview.isChecked())
self._build.resetChangedState()