diff --git a/novelwriter/constants.py b/novelwriter/constants.py index 96e3db99..40ff4c0b 100644 --- a/novelwriter/constants.py +++ b/novelwriter/constants.py @@ -322,11 +322,8 @@ class nwHeadFmt: CHAR_POV, CHAR_FOCUS ] - # ODT Document Page Header - ODT_PROJECT = "{Project}" - ODT_AUTHOR = "{Author}" + # ODT Document Header Page Counter ODT_PAGE = "{Page}" - ODT_AUTO = "{Project} / {Author} / {Page}" # END Class nwHeadFmt diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index 1bd03485..42751f40 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -91,7 +91,7 @@ SETTINGS_TEMPLATE = { "format.leftMargin": (float, 2.0), "format.rightMargin": (float, 2.0), "odt.addColours": (bool, True), - "odt.pageHeader": (str, nwHeadFmt.ODT_AUTO), + "odt.pageHeaderText": (str, nwHeadFmt.ODT_PAGE), "odt.pageCountOffset": (int, 0), "odt.firstLineIndent": (bool, False), "md.preserveBreaks": (bool, True), @@ -142,7 +142,7 @@ SETTINGS_LABELS = { "odt": QT_TRANSLATE_NOOP("Builds", "Open Document (.odt)"), "odt.addColours": QT_TRANSLATE_NOOP("Builds", "Add Highlight Colours"), - "odt.pageHeader": QT_TRANSLATE_NOOP("Builds", "Page Header"), + "odt.pageHeaderText": QT_TRANSLATE_NOOP("Builds", "Page Header"), "odt.pageCountOffset": QT_TRANSLATE_NOOP("Builds", "Page Counter Offset"), "odt.firstLineIndent": QT_TRANSLATE_NOOP("Builds", "First Line Indent"), diff --git a/novelwriter/core/docbuild.py b/novelwriter/core/docbuild.py index fec7aa97..cda3e1fc 100644 --- a/novelwriter/core/docbuild.py +++ b/novelwriter/core/docbuild.py @@ -330,7 +330,7 @@ class NWBuildDocument: bldObj.setColourHeaders(self._build.getBool("odt.addColours")) bldObj.setLanguage(self._project.data.language) bldObj.setHeaderFormat( - self._build.getStr("odt.pageHeader"), self._build.getInt("odt.pageCountOffset") + self._build.getStr("odt.pageHeaderText"), self._build.getInt("odt.pageCountOffset") ) bldObj.setFirstLineIndent(self._build.getBool("odt.firstLineIndent")) diff --git a/novelwriter/core/toodt.py b/novelwriter/core/toodt.py index 012815e1..92e90b57 100644 --- a/novelwriter/core/toodt.py +++ b/novelwriter/core/toodt.py @@ -1048,12 +1048,6 @@ class ToOdt(Tokenizer): # Standard Page Header if self._headerFormat: pre, page, post = self._headerFormat.partition(nwHeadFmt.ODT_PAGE) - - pre = pre.replace(nwHeadFmt.ODT_PROJECT, self._project.data.name) - pre = pre.replace(nwHeadFmt.ODT_AUTHOR, self._project.data.author) - post = post.replace(nwHeadFmt.ODT_PROJECT, self._project.data.name) - post = post.replace(nwHeadFmt.ODT_AUTHOR, self._project.data.author) - xHead = ET.SubElement(xPage, _mkTag("style", "header")) xPar = ET.SubElement(xHead, _mkTag("text", "p"), attrib={ _mkTag("text", "style-name"): "Header" diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 7b176d84..c461c43b 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -1352,8 +1352,8 @@ class _OutputTab(NScrollableForm): self.btnPageHeader.setIcon(SHARED.theme.getIcon("revert")) self.btnPageHeader.clicked.connect(self._resetPageHeader) self.addRow( - self._build.getLabel("odt.pageHeader"), self.odtPageHeader, - button=self.btnPageHeader, stretch=(1, 1) + self._build.getLabel("odt.pageHeaderText"), self.odtPageHeader, + button=self.btnPageHeader, stretch=(2, 3) ) self.odtPageCountOffset = NSpinBox(self) @@ -1389,7 +1389,7 @@ class _OutputTab(NScrollableForm): def loadContent(self) -> None: """Populate the widgets.""" self.odtAddColours.setChecked(self._build.getBool("odt.addColours")) - self.odtPageHeader.setText(self._build.getStr("odt.pageHeader")) + self.odtPageHeader.setText(self._build.getStr("odt.pageHeaderText")) self.odtPageCountOffset.setValue(self._build.getInt("odt.pageCountOffset")) self.odtFirstLineIndent.setChecked(self._build.getBool("odt.firstLineIndent")) self.htmlAddStyles.setChecked(self._build.getBool("html.addStyles")) @@ -1400,7 +1400,7 @@ class _OutputTab(NScrollableForm): def saveContent(self) -> None: """Save choices back into build object.""" self._build.setValue("odt.addColours", self.odtAddColours.isChecked()) - self._build.setValue("odt.pageHeader", self.odtPageHeader.text()) + self._build.setValue("odt.pageHeaderText", self.odtPageHeader.text()) self._build.setValue("odt.pageCountOffset", self.odtPageCountOffset.value()) self._build.setValue("odt.firstLineIndent", self.odtFirstLineIndent.isChecked()) self._build.setValue("html.addStyles", self.htmlAddStyles.isChecked()) @@ -1414,7 +1414,10 @@ class _OutputTab(NScrollableForm): def _resetPageHeader(self) -> None: """Reset the ODT header format to default.""" - self.odtPageHeader.setText(nwHeadFmt.ODT_AUTO) + self.odtPageHeader.setText(" / ".join(filter(bool, [ + SHARED.project.data.name, SHARED.project.data.author, nwHeadFmt.ODT_PAGE + ]))) + self.odtPageHeader.setCursorPosition(0) return # END Class _OutputTab diff --git a/tests/reference/coreToOdt_SaveFlat_document.fodt b/tests/reference/coreToOdt_SaveFlat_document.fodt index b97f7cea..c26f19cc 100644 --- a/tests/reference/coreToOdt_SaveFlat_document.fodt +++ b/tests/reference/coreToOdt_SaveFlat_document.fodt @@ -79,7 +79,7 @@ - Test Project / Jane Smith / 2 + 2 diff --git a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt index 1585963a..1dfd6c1a 100644 --- a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt +++ b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt @@ -103,7 +103,7 @@ - Lorem Ipsum / lipsum.com / 2 + 2 diff --git a/tests/test_core/test_core_toodt.py b/tests/test_core/test_core_toodt.py index 89cdf8c4..8c01f1c4 100644 --- a/tests/test_core/test_core_toodt.py +++ b/tests/test_core/test_core_toodt.py @@ -711,8 +711,8 @@ def testCoreToOdt_SaveFlat(mockGUI, fncPath, tstPaths): assert odt._dLanguage == "nb" odt.setColourHeaders(True) assert odt._colourHead is True - odt.setHeaderFormat(nwHeadFmt.ODT_AUTO, 1) - assert odt._headerFormat == nwHeadFmt.ODT_AUTO + odt.setHeaderFormat(nwHeadFmt.ODT_PAGE, 1) + assert odt._headerFormat == nwHeadFmt.ODT_PAGE odt.setPageLayout(148, 210, 20, 18, 17, 15) assert odt._mDocWidth == "14.800cm" @@ -759,7 +759,7 @@ def testCoreToOdt_SaveFull(mockGUI, fncPath, tstPaths): odt._isNovel = True # Set a format without page number - odt.setHeaderFormat(f"{nwHeadFmt.ODT_PROJECT} - {nwHeadFmt.ODT_AUTHOR}", 0) + odt.setHeaderFormat("Test Project - Jane Smith", 0) odt._text = ( "## Chapter One\n\n" diff --git a/tests/test_tools/test_tools_manussettings.py b/tests/test_tools/test_tools_manussettings.py index 5f2ece6d..ba6c24b3 100644 --- a/tests/test_tools/test_tools_manussettings.py +++ b/tests/test_tools/test_tools_manussettings.py @@ -673,7 +673,7 @@ def testBuildSettings_Output(qtbot: QtBot, nwGUI: GuiMain): # Check initial values assert outTab.odtAddColours.isChecked() is False - assert outTab.odtPageHeader.text() == nwHeadFmt.ODT_AUTO + assert outTab.odtPageHeader.text() == nwHeadFmt.ODT_PAGE assert outTab.odtPageCountOffset.value() == 0 assert outTab.odtFirstLineIndent.isChecked() is False assert outTab.htmlAddStyles.isChecked() is False @@ -695,7 +695,7 @@ def testBuildSettings_Output(qtbot: QtBot, nwGUI: GuiMain): outTab.saveContent() assert build.getBool("odt.addColours") is True - assert build.getStr("odt.pageHeader") == "Stuff" + assert build.getStr("odt.pageHeaderText") == "Stuff" assert build.getInt("odt.pageCountOffset") == 1 assert build.getBool("odt.firstLineIndent") is True assert build.getBool("html.addStyles") is True @@ -703,8 +703,9 @@ def testBuildSettings_Output(qtbot: QtBot, nwGUI: GuiMain): assert build.getBool("md.preserveBreaks") is False # Reset header format + SHARED.project.data.setName("Test Project") outTab.btnPageHeader.click() - assert outTab.odtPageHeader.text() == nwHeadFmt.ODT_AUTO + assert outTab.odtPageHeader.text() == f"Test Project / {nwHeadFmt.ODT_PAGE}" # Finish bSettings._dialogButtonClicked(bSettings.buttonBox.button(QDialogButtonBox.Close))