From 26430e642c1a2625697118d652deb138af4bafbd Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Sat, 13 May 2023 19:20:31 +0200
Subject: [PATCH] Add a new Manuscript Build tool
---
novelwriter/core/options.py | 3 +
novelwriter/guimain.py | 8 +-
novelwriter/tools/manusbuild.py | 141 +++++++++++++++++++++++++++++
novelwriter/tools/manussettings.py | 12 +--
4 files changed, 153 insertions(+), 11 deletions(-)
create mode 100644 novelwriter/tools/manusbuild.py
diff --git a/novelwriter/core/options.py b/novelwriter/core/options.py
index 838372a8..8637d937 100644
--- a/novelwriter/core/options.py
+++ b/novelwriter/core/options.py
@@ -63,6 +63,9 @@ VALID_MAP = {
"GuiBuildSettings": {
"winWidth", "winHeight", "treeWidth", "filterWidth"
},
+ "GuiBuildManuscript": {
+ "winWidth", "winHeight", "optsWidth", "viewWidth"
+ },
}
diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py
index cb3faec6..700b7ba7 100644
--- a/novelwriter/guimain.py
+++ b/novelwriter/guimain.py
@@ -57,9 +57,9 @@ from novelwriter.dialogs.projdetails import GuiProjectDetails
from novelwriter.dialogs.projsettings import GuiProjectSettings
from novelwriter.tools.build import GuiBuildNovel
from novelwriter.tools.lipsum import GuiLipsum
+from novelwriter.tools.manusbuild import GuiBuildManuscript
from novelwriter.tools.projwizard import GuiProjectWizard
from novelwriter.tools.writingstats import GuiWritingStats
-from novelwriter.tools.manussettings import GuiBuildSettings
from novelwriter.core.project import NWProject
from novelwriter.core.coretools import ProjectBuilder
@@ -1021,10 +1021,10 @@ class GuiMain(QMainWindow):
logger.error("No project open")
return False
- dlgBuild = getGuiItem("GuiBuildSettings")
+ dlgBuild = getGuiItem("GuiBuildManuscript")
if dlgBuild is None:
- dlgBuild = GuiBuildSettings(self)
- assert isinstance(dlgBuild, GuiBuildSettings)
+ dlgBuild = GuiBuildManuscript(self)
+ assert isinstance(dlgBuild, GuiBuildManuscript)
dlgBuild.setModal(False)
dlgBuild.show()
diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py
new file mode 100644
index 00000000..dc871a2d
--- /dev/null
+++ b/novelwriter/tools/manusbuild.py
@@ -0,0 +1,141 @@
+"""
+novelWriter – GUI Build Manuscript
+==================================
+GUI classes for the Manuscript Build Tool
+
+File History:
+Created: 2023-05-13 [2.1b1]
+
+This file is a part of novelWriter
+Copyright 2018–2023, Veronica Berglyd Olsen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+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 .
+"""
+
+import logging
+import novelwriter
+
+from PyQt5.QtWidgets import QDialog, QGridLayout, QSplitter, QTextBrowser, QVBoxLayout, QWidget
+
+logger = logging.getLogger(__name__)
+
+
+class GuiBuildManuscript(QDialog):
+
+ def __init__(self, mainGui):
+ super().__init__(parent=mainGui)
+
+ self.mainConf = novelwriter.CONFIG
+ self.mainGui = mainGui
+ self.mainTheme = mainGui.mainTheme
+ self.theProject = mainGui.theProject
+
+ self.setWindowTitle(self.tr("Build Manuscript"))
+ self.setMinimumWidth(self.mainConf.pxInt(600))
+ self.setMinimumHeight(self.mainConf.pxInt(500))
+
+ wWin = self.mainConf.pxInt(900)
+ hWin = self.mainConf.pxInt(600)
+
+ pOptions = self.theProject.options
+ self.resize(
+ self.mainConf.pxInt(pOptions.getInt("GuiBuildManuscript", "winWidth", wWin)),
+ self.mainConf.pxInt(pOptions.getInt("GuiBuildManuscript", "winHeight", hWin))
+ )
+
+ # Controls
+ # ========
+
+ self.optsGrid = QGridLayout()
+
+ self.manPreview = GuiManuscriptPreview(self)
+
+ # Assemble GUI
+ # ============
+
+ self.optsWidget = QWidget()
+ self.optsWidget.setLayout(self.optsGrid)
+
+ self.mainSplit = QSplitter()
+ self.mainSplit.addWidget(self.optsWidget)
+ self.mainSplit.addWidget(self.manPreview)
+ self.mainSplit.setSizes([
+ self.mainConf.pxInt(pOptions.getInt("GuiBuildManuscript", "optsWidth", wWin//3)),
+ self.mainConf.pxInt(pOptions.getInt("GuiBuildManuscript", "viewWidth", 2*wWin//3)),
+ ])
+
+ self.outerBox = QVBoxLayout()
+ self.outerBox.addWidget(self.mainSplit)
+
+ self.setLayout(self.outerBox)
+
+ return
+
+ def loadContent(self):
+ """
+ """
+ return
+
+ ##
+ # Events
+ ##
+
+ def closeEvent(self, event):
+ """Capture the user closing the window so we can save settings.
+ """
+ self._saveSettings()
+ event.accept()
+ return
+
+ ##
+ # Internal Functions
+ ##
+
+ def _saveSettings(self):
+ """Save the various user settings.
+ """
+ logger.debug("Saving GuiBuildManuscript settings")
+
+ winWidth = self.mainConf.rpxInt(self.width())
+ winHeight = self.mainConf.rpxInt(self.height())
+
+ mainSplit = self.mainSplit.sizes()
+ optsWidth = mainSplit[0]
+ viewWidth = mainSplit[1]
+
+ pOptions = self.theProject.options
+ pOptions.setValue("GuiBuildManuscript", "winWidth", winWidth)
+ pOptions.setValue("GuiBuildManuscript", "winHeight", winHeight)
+ pOptions.setValue("GuiBuildManuscript", "optsWidth", optsWidth)
+ pOptions.setValue("GuiBuildManuscript", "viewWidth", viewWidth)
+ pOptions.saveSettings()
+
+ return
+
+# END Class GuiBuildManuscript
+
+
+class GuiManuscriptPreview(QTextBrowser):
+
+ def __init__(self, mainGui):
+ super().__init__(parent=mainGui)
+
+ self.mainConf = novelwriter.CONFIG
+ self.mainGui = mainGui
+ self.mainTheme = mainGui.mainTheme
+ self.theProject = mainGui.theProject
+
+ return
+
+# END Class GuiManuscriptPreview
diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py
index e215f89d..65d517ce 100644
--- a/novelwriter/tools/manussettings.py
+++ b/novelwriter/tools/manussettings.py
@@ -1,7 +1,7 @@
"""
-novelWriter – GUI Build Manuscript
-==================================
-GUI classes for the Manuscript Build Tool
+novelWriter – GUI Build Settings
+================================
+GUI classes for editing Manuscript Build Settings
File History:
Created: 2023-02-13 [2.1b1]
@@ -24,7 +24,6 @@ along with this program. If not, see .
"""
import logging
-
import novelwriter
from PyQt5.QtGui import QIcon
@@ -67,18 +66,17 @@ class GuiBuildSettings(QDialog):
"filter": {},
}
- self.setWindowTitle(self.tr("Build Manuscript"))
+ self.setWindowTitle(self.tr("Manuscript Build Settings"))
self.setMinimumWidth(self.mainConf.pxInt(700))
self.setMinimumHeight(self.mainConf.pxInt(400))
- # Style
mPx = self.mainConf.pxInt(150)
wWin = self.mainConf.pxInt(900)
hWin = self.mainConf.pxInt(600)
pOptions = self.theProject.options
self.resize(
- self.mainConf.pxInt(pOptions.getInt("GuiBuildSettings", "winWidth", wWin)),
+ self.mainConf.pxInt(pOptions.getInt("GuiBuildSettings", "winWidth", wWin)),
self.mainConf.pxInt(pOptions.getInt("GuiBuildSettings", "winHeight", hWin))
)