Add customisation option for ODT build document header (#1675)

This commit is contained in:
Veronica Berglyd Olsen
2024-01-28 15:58:06 +01:00
committed by GitHub
10 changed files with 117 additions and 45 deletions
+7 -1
View File
@@ -309,7 +309,13 @@ class nwHeadFmt:
SC_NUM = "{Scene}" SC_NUM = "{Scene}"
SC_ABS = "{Scene:Abs}" SC_ABS = "{Scene:Abs}"
ALL = [TITLE, CH_NUM, CH_WORD, CH_ROMU, CH_ROML, SC_NUM, SC_ABS] PAGE_HEADERS = [TITLE, CH_NUM, CH_WORD, CH_ROMU, CH_ROML, SC_NUM, SC_ABS]
# ODT Document Page Header
ODT_PROJECT = "{Project}"
ODT_AUTHOR = "{Author}"
ODT_PAGE = "{Page}"
ODT_AUTO = "{Project} / {Author} / {Page}"
# END Class nwHeadFmt # END Class nwHeadFmt
+4
View File
@@ -79,6 +79,8 @@ SETTINGS_TEMPLATE = {
"format.leftMargin": (float, 2.0), "format.leftMargin": (float, 2.0),
"format.rightMargin": (float, 2.0), "format.rightMargin": (float, 2.0),
"odt.addColours": (bool, True), "odt.addColours": (bool, True),
"odt.pageHeader": (str, nwHeadFmt.ODT_AUTO),
"odt.pageCountOffset": (int, 0),
"html.addStyles": (bool, True), "html.addStyles": (bool, True),
} }
@@ -125,6 +127,8 @@ SETTINGS_LABELS = {
"odt": QT_TRANSLATE_NOOP("Builds", "Open Document (.odt)"), "odt": QT_TRANSLATE_NOOP("Builds", "Open Document (.odt)"),
"odt.addColours": QT_TRANSLATE_NOOP("Builds", "Add Highlight Colours"), "odt.addColours": QT_TRANSLATE_NOOP("Builds", "Add Highlight Colours"),
"odt.pageHeader": QT_TRANSLATE_NOOP("Builds", "Page Header"),
"odt.pageCountOffset": QT_TRANSLATE_NOOP("Builds", "Page Counter Offset"),
"html": QT_TRANSLATE_NOOP("Builds", "HTML (.html)"), "html": QT_TRANSLATE_NOOP("Builds", "HTML (.html)"),
"html.addStyles": QT_TRANSLATE_NOOP("Builds", "Add CSS Styles"), "html.addStyles": QT_TRANSLATE_NOOP("Builds", "Add CSS Styles"),
+3
View File
@@ -284,6 +284,9 @@ class NWBuildDocument:
if isinstance(bldObj, ToOdt): if isinstance(bldObj, ToOdt):
bldObj.setColourHeaders(self._build.getBool("odt.addColours")) bldObj.setColourHeaders(self._build.getBool("odt.addColours"))
bldObj.setLanguage(self._project.data.language) bldObj.setLanguage(self._project.data.language)
bldObj.setHeaderFormat(
self._build.getStr("odt.pageHeader"), self._build.getInt("odt.pageCountOffset")
)
scale = nwLabels.UNIT_SCALE.get(self._build.getStr("format.pageUnit"), 1.0) scale = nwLabels.UNIT_SCALE.get(self._build.getStr("format.pageUnit"), 1.0)
pW, pH = nwLabels.PAPER_SIZE.get(self._build.getStr("format.pageSize"), (-1.0, -1.0)) pW, pH = nwLabels.PAPER_SIZE.get(self._build.getStr("format.pageSize"), (-1.0, -1.0))
+1 -1
View File
@@ -34,11 +34,11 @@ from pathlib import Path
from functools import partial from functools import partial
from PyQt5.QtCore import QCoreApplication, QRegularExpression from PyQt5.QtCore import QCoreApplication, QRegularExpression
from novelwriter.core.index import processComment
from novelwriter.enum import nwComment, nwItemLayout from novelwriter.enum import nwComment, nwItemLayout
from novelwriter.common import formatTimeStamp, numberToRoman, checkInt from novelwriter.common import formatTimeStamp, numberToRoman, checkInt
from novelwriter.constants import nwHeadFmt, nwRegEx, nwShortcode, nwUnicode from novelwriter.constants import nwHeadFmt, nwRegEx, nwShortcode, nwUnicode
from novelwriter.core.index import processComment
from novelwriter.core.project import NWProject from novelwriter.core.project import NWProject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+33 -21
View File
@@ -132,11 +132,12 @@ class ToOdt(Tokenizer):
self._errData = [] # List of errors encountered self._errData = [] # List of errors encountered
# Properties # Properties
self._textFont = "Liberation Serif" self._textFont = "Liberation Serif"
self._textSize = 12 self._textSize = 12
self._textFixed = False self._textFixed = False
self._colourHead = False self._colourHead = False
self._headerText = "" self._headerFormat = ""
self._pageOffset = 0
# Internal # Internal
self._fontFamily = "'Liberation Serif'" self._fontFamily = "'Liberation Serif'"
@@ -222,6 +223,12 @@ class ToOdt(Tokenizer):
self._mDocRight = f"{right/10.0:.3f}cm" self._mDocRight = f"{right/10.0:.3f}cm"
return return
def setHeaderFormat(self, format: str, offset: int) -> None:
"""Set the document header format."""
self._headerFormat = format.strip()
self._pageOffset = offset
return
## ##
# Class Methods # Class Methods
## ##
@@ -279,12 +286,6 @@ class ToOdt(Tokenizer):
# Clear Errors # Clear Errors
self._errData = [] self._errData = []
# Document Header
# ===============
if self._headerText == "":
self._headerText = f"{self._project.data.name} / {self._project.data.author} /"
# Create Roots # Create Roots
# ============ # ============
@@ -1010,17 +1011,28 @@ class ToOdt(Tokenizer):
xPage = ET.SubElement(self._xMast, _mkTag("style", "master-page"), attrib=tAttr) xPage = ET.SubElement(self._xMast, _mkTag("style", "master-page"), attrib=tAttr)
# Standard Page Header # Standard Page Header
xHead = ET.SubElement(xPage, _mkTag("style", "header")) if self._headerFormat:
xPar = ET.SubElement(xHead, _mkTag("text", "p"), attrib={ pre, page, post = self._headerFormat.partition(nwHeadFmt.ODT_PAGE)
_mkTag("text", "style-name"): "Header"
})
xPar.text = self._headerText.strip() + " "
xTail = ET.SubElement(xPar, _mkTag("text", "page-number"), attrib={ pre = pre.replace(nwHeadFmt.ODT_PROJECT, self._project.data.name)
_mkTag("text", "select-page"): "current" pre = pre.replace(nwHeadFmt.ODT_AUTHOR, self._project.data.author)
}) post = post.replace(nwHeadFmt.ODT_PROJECT, self._project.data.name)
xTail.text = "2" post = post.replace(nwHeadFmt.ODT_AUTHOR, self._project.data.author)
xTail.tail = "" # Prevent line break in indented XML
xHead = ET.SubElement(xPage, _mkTag("style", "header"))
xPar = ET.SubElement(xHead, _mkTag("text", "p"), attrib={
_mkTag("text", "style-name"): "Header"
})
xPar.text = pre
if page:
attrib = {_mkTag("text", "select-page"): "current"}
if self._pageOffset > 0:
attrib = {_mkTag("text", "page-adjust"): str(0 - self._pageOffset)}
xTail = ET.SubElement(xPar, _mkTag("text", "page-number"), attrib=attrib)
xTail.text = "2"
xTail.tail = post
else:
xPar.text += post
# First Page Header # First Page Header
xHead = ET.SubElement(xPage, _mkTag("style", "header-first")) xHead = ET.SubElement(xPage, _mkTag("style", "header-first"))
+48 -16
View File
@@ -79,17 +79,16 @@ class GuiBuildSettings(QDialog):
self._build = build self._build = build
self.setWindowTitle(self.tr("Manuscript Build Settings")) self.setWindowTitle(self.tr("Manuscript Build Settings"))
self.setMinimumWidth(CONFIG.pxInt(700)) self.setMinimumSize(CONFIG.pxInt(700), CONFIG.pxInt(400))
self.setMinimumHeight(CONFIG.pxInt(400))
mPx = CONFIG.pxInt(150) mPx = CONFIG.pxInt(150)
wWin = CONFIG.pxInt(750) wWin = CONFIG.pxInt(750)
hWin = CONFIG.pxInt(550) hWin = CONFIG.pxInt(550)
pOptions = SHARED.project.options options = SHARED.project.options
self.resize( self.resize(
CONFIG.pxInt(pOptions.getInt("GuiBuildSettings", "winWidth", wWin)), CONFIG.pxInt(options.getInt("GuiBuildSettings", "winWidth", wWin)),
CONFIG.pxInt(pOptions.getInt("GuiBuildSettings", "winHeight", hWin)) CONFIG.pxInt(options.getInt("GuiBuildSettings", "winHeight", hWin))
) )
# Title # Title
@@ -604,9 +603,9 @@ class _HeadingsTab(NScrollablePage):
# Title Heading # Title Heading
self.lblTitle = QLabel(self._build.getLabel("headings.fmtTitle")) self.lblTitle = QLabel(self._build.getLabel("headings.fmtTitle"))
self.fmtTitle = QLineEdit("") self.fmtTitle = QLineEdit("", self)
self.fmtTitle.setReadOnly(True) self.fmtTitle.setReadOnly(True)
self.btnTitle = QToolButton() self.btnTitle = QToolButton(self)
self.btnTitle.setIcon(SHARED.theme.getIcon("edit")) self.btnTitle.setIcon(SHARED.theme.getIcon("edit"))
self.btnTitle.clicked.connect(lambda: self._editHeading(self.EDIT_TITLE)) self.btnTitle.clicked.connect(lambda: self._editHeading(self.EDIT_TITLE))
@@ -620,9 +619,9 @@ class _HeadingsTab(NScrollablePage):
# Chapter Heading # Chapter Heading
self.lblChapter = QLabel(self._build.getLabel("headings.fmtChapter")) self.lblChapter = QLabel(self._build.getLabel("headings.fmtChapter"))
self.fmtChapter = QLineEdit("") self.fmtChapter = QLineEdit("", self)
self.fmtChapter.setReadOnly(True) self.fmtChapter.setReadOnly(True)
self.btnChapter = QToolButton() self.btnChapter = QToolButton(self)
self.btnChapter.setIcon(SHARED.theme.getIcon("edit")) self.btnChapter.setIcon(SHARED.theme.getIcon("edit"))
self.btnChapter.clicked.connect(lambda: self._editHeading(self.EDIT_CHAPTER)) self.btnChapter.clicked.connect(lambda: self._editHeading(self.EDIT_CHAPTER))
@@ -636,9 +635,9 @@ class _HeadingsTab(NScrollablePage):
# Unnumbered Chapter Heading # Unnumbered Chapter Heading
self.lblUnnumbered = QLabel(self._build.getLabel("headings.fmtUnnumbered")) self.lblUnnumbered = QLabel(self._build.getLabel("headings.fmtUnnumbered"))
self.fmtUnnumbered = QLineEdit("") self.fmtUnnumbered = QLineEdit("", self)
self.fmtUnnumbered.setReadOnly(True) self.fmtUnnumbered.setReadOnly(True)
self.btnUnnumbered = QToolButton() self.btnUnnumbered = QToolButton(self)
self.btnUnnumbered.setIcon(SHARED.theme.getIcon("edit")) self.btnUnnumbered.setIcon(SHARED.theme.getIcon("edit"))
self.btnUnnumbered.clicked.connect(lambda: self._editHeading(self.EDIT_UNNUM)) self.btnUnnumbered.clicked.connect(lambda: self._editHeading(self.EDIT_UNNUM))
@@ -653,9 +652,9 @@ class _HeadingsTab(NScrollablePage):
# Scene Heading # Scene Heading
sceneHideTip = self._build.getLabel("headings.hideScene") sceneHideTip = self._build.getLabel("headings.hideScene")
self.lblScene = QLabel(self._build.getLabel("headings.fmtScene")) self.lblScene = QLabel(self._build.getLabel("headings.fmtScene"))
self.fmtScene = QLineEdit("") self.fmtScene = QLineEdit("", self)
self.fmtScene.setReadOnly(True) self.fmtScene.setReadOnly(True)
self.btnScene = QToolButton() self.btnScene = QToolButton(self)
self.btnScene.setIcon(SHARED.theme.getIcon("edit")) self.btnScene.setIcon(SHARED.theme.getIcon("edit"))
self.btnScene.clicked.connect(lambda: self._editHeading(self.EDIT_SCENE)) self.btnScene.clicked.connect(lambda: self._editHeading(self.EDIT_SCENE))
self.hdeScene = QLabel(self.tr("Hide")) self.hdeScene = QLabel(self.tr("Hide"))
@@ -680,9 +679,9 @@ class _HeadingsTab(NScrollablePage):
# Section Heading # Section Heading
sectionHideTip = self._build.getLabel("headings.hideSection") sectionHideTip = self._build.getLabel("headings.hideSection")
self.lblSection = QLabel(self._build.getLabel("headings.fmtSection")) self.lblSection = QLabel(self._build.getLabel("headings.fmtSection"))
self.fmtSection = QLineEdit("") self.fmtSection = QLineEdit("", self)
self.fmtSection.setReadOnly(True) self.fmtSection.setReadOnly(True)
self.btnSection = QToolButton() self.btnSection = QToolButton(self)
self.btnSection.setIcon(SHARED.theme.getIcon("edit")) self.btnSection.setIcon(SHARED.theme.getIcon("edit"))
self.btnSection.clicked.connect(lambda: self._editHeading(self.EDIT_SECTION)) self.btnSection.clicked.connect(lambda: self._editHeading(self.EDIT_SECTION))
self.hdeSection = QLabel(self.tr("Hide")) self.hdeSection = QLabel(self.tr("Hide"))
@@ -867,7 +866,7 @@ class _HeadingSyntaxHighlighter(QSyntaxHighlighter):
def highlightBlock(self, text: str) -> None: def highlightBlock(self, text: str) -> None:
"""Add syntax highlighting to the text block.""" """Add syntax highlighting to the text block."""
for heading in nwHeadFmt.ALL: for heading in nwHeadFmt.PAGE_HEADERS:
pos = text.find(heading) pos = text.find(heading)
if pos >= 0: if pos >= 0:
chars = len(heading) chars = len(heading)
@@ -1211,14 +1210,34 @@ class _OutputTab(NScrollableForm):
self._build = build self._build = build
iPx = SHARED.theme.baseIconSize iPx = SHARED.theme.baseIconSize
spW = 6*SHARED.theme.textNWidth
# Open Document # Open Document
self.addGroupLabel(self._build.getLabel("odt")) self.addGroupLabel(self._build.getLabel("odt"))
self.odtAddColours = NSwitch(self, width=2*iPx, height=iPx) self.odtAddColours = NSwitch(self, width=2*iPx, height=iPx)
self.addRow(self._build.getLabel("odt.addColours"), self.odtAddColours) self.addRow(self._build.getLabel("odt.addColours"), self.odtAddColours)
self.odtPageHeader = QLineEdit(self)
self.odtPageHeader.setMinimumWidth(CONFIG.pxInt(200))
self.btnPageHeader = QToolButton(self)
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.odtPageCountOffset = QSpinBox(self)
self.odtPageCountOffset.setMinimum(0)
self.odtPageCountOffset.setMaximum(999)
self.odtPageCountOffset.setSingleStep(1)
self.odtPageCountOffset.setMinimumWidth(spW)
self.addRow(self._build.getLabel("odt.pageCountOffset"), self.odtPageCountOffset)
# HTML Document # HTML Document
self.addGroupLabel(self._build.getLabel("html")) self.addGroupLabel(self._build.getLabel("html"))
self.htmlAddStyles = NSwitch(self, width=2*iPx, height=iPx) self.htmlAddStyles = NSwitch(self, width=2*iPx, height=iPx)
self.addRow(self._build.getLabel("html.addStyles"), self.htmlAddStyles) self.addRow(self._build.getLabel("html.addStyles"), self.htmlAddStyles)
@@ -1230,13 +1249,26 @@ class _OutputTab(NScrollableForm):
def loadContent(self) -> None: def loadContent(self) -> None:
"""Populate the widgets.""" """Populate the widgets."""
self.odtAddColours.setChecked(self._build.getBool("odt.addColours")) self.odtAddColours.setChecked(self._build.getBool("odt.addColours"))
self.odtPageHeader.setText(self._build.getStr("odt.pageHeader"))
self.odtPageCountOffset.setValue(self._build.getInt("odt.pageCountOffset"))
self.htmlAddStyles.setChecked(self._build.getBool("html.addStyles")) self.htmlAddStyles.setChecked(self._build.getBool("html.addStyles"))
return return
def saveContent(self) -> None: def saveContent(self) -> None:
"""Save choices back into build object.""" """Save choices back into build object."""
self._build.setValue("odt.addColours", self.odtAddColours.isChecked()) self._build.setValue("odt.addColours", self.odtAddColours.isChecked())
self._build.setValue("odt.pageHeader", self.odtPageHeader.text())
self._build.setValue("odt.pageCountOffset", self.odtPageCountOffset.value())
self._build.setValue("html.addStyles", self.htmlAddStyles.isChecked()) self._build.setValue("html.addStyles", self.htmlAddStyles.isChecked())
return return
##
# Private Slots
##
def _resetPageHeader(self) -> None:
"""Reset the ODT header format to default."""
self.odtPageHeader.setText(nwHeadFmt.ODT_AUTO)
return
# END Class _OutputTab # END Class _OutputTab
@@ -1,13 +1,13 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<office:document xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> <office:document xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
<office:meta> <office:meta>
<meta:creation-date>2023-10-20T22:51:30</meta:creation-date> <meta:creation-date>2024-01-28T15:48:36</meta:creation-date>
<meta:generator>novelWriter/2.2-alpha1</meta:generator> <meta:generator>novelWriter/2.3a3</meta:generator>
<meta:initial-creator>Jane Smith</meta:initial-creator> <meta:initial-creator>Jane Smith</meta:initial-creator>
<meta:editing-cycles>1234</meta:editing-cycles> <meta:editing-cycles>1234</meta:editing-cycles>
<meta:editing-duration>P42DT12H34M56S</meta:editing-duration> <meta:editing-duration>P42DT12H34M56S</meta:editing-duration>
<dc:title>Test Project</dc:title> <dc:title>Test Project</dc:title>
<dc:date>2023-10-20T22:51:30</dc:date> <dc:date>2024-01-28T15:48:36</dc:date>
<dc:creator>Jane Smith</dc:creator> <dc:creator>Jane Smith</dc:creator>
</office:meta> </office:meta>
<office:font-face-decls> <office:font-face-decls>
@@ -76,7 +76,7 @@
<office:master-styles> <office:master-styles>
<style:master-page style:name="Standard" style:page-layout-name="PM1"> <style:master-page style:name="Standard" style:page-layout-name="PM1">
<style:header> <style:header>
<text:p text:style-name="Header">Test Project / Jane Smith / <text:page-number text:select-page="current">2</text:page-number></text:p> <text:p text:style-name="Header">Test Project / Jane Smith / <text:page-number text:page-adjust="-1">2</text:page-number></text:p>
</style:header> </style:header>
<style:header-first> <style:header-first>
<text:p text:style-name="Header" /> <text:p text:style-name="Header" />
@@ -63,8 +63,7 @@
<office:master-styles> <office:master-styles>
<style:master-page style:name="Standard" style:page-layout-name="PM1"> <style:master-page style:name="Standard" style:page-layout-name="PM1">
<style:header> <style:header>
<text:p text:style-name="Header">Test Project / Jane Smith / <text:page-number text:select-page="current">2</text:page-number> <text:p text:style-name="Header">Test Project - Jane Smith</text:p>
</text:p>
</style:header> </style:header>
<style:header-first> <style:header-first>
<text:p text:style-name="Header" /> <text:p text:style-name="Header" />
+7
View File
@@ -29,6 +29,7 @@ from shutil import copyfile
from tools import ODT_IGNORE, cmpFiles from tools import ODT_IGNORE, cmpFiles
from novelwriter.common import xmlIndent from novelwriter.common import xmlIndent
from novelwriter.constants import nwHeadFmt
from novelwriter.core.toodt import ToOdt, ODTParagraphStyle, ODTTextStyle, XMLParagraph, _mkTag from novelwriter.core.toodt import ToOdt, ODTParagraphStyle, ODTTextStyle, XMLParagraph, _mkTag
from novelwriter.core.project import NWProject from novelwriter.core.project import NWProject
@@ -691,6 +692,9 @@ def testCoreToOdt_SaveFlat(mockGUI, fncPath, tstPaths):
odt.setLanguage("nb_NO") odt.setLanguage("nb_NO")
assert odt._dLanguage == "nb" assert odt._dLanguage == "nb"
odt.setColourHeaders(True) odt.setColourHeaders(True)
assert odt._colourHead is True
odt.setHeaderFormat(nwHeadFmt.ODT_AUTO, 1)
assert odt._headerFormat == nwHeadFmt.ODT_AUTO
odt.setPageLayout(148, 210, 20, 18, 17, 15) odt.setPageLayout(148, 210, 20, 18, 17, 15)
assert odt._mDocWidth == "14.800cm" assert odt._mDocWidth == "14.800cm"
@@ -736,6 +740,9 @@ def testCoreToOdt_SaveFull(mockGUI, fncPath, tstPaths):
odt = ToOdt(project, isFlat=False) odt = ToOdt(project, isFlat=False)
odt._isNovel = True odt._isNovel = True
# Set a format without page number
odt.setHeaderFormat(f"{nwHeadFmt.ODT_PROJECT} - {nwHeadFmt.ODT_AUTHOR}", 0)
odt._text = ( odt._text = (
"## Chapter One\n\n" "## Chapter One\n\n"
"Text\n\n" "Text\n\n"
@@ -649,18 +649,27 @@ def testBuildSettings_Output(qtbot: QtBot, nwGUI: GuiMain):
# Check initial values # Check initial values
assert outTab.odtAddColours.isChecked() is False assert outTab.odtAddColours.isChecked() is False
assert outTab.odtPageHeader.text() == nwHeadFmt.ODT_AUTO
assert outTab.htmlAddStyles.isChecked() is False assert outTab.htmlAddStyles.isChecked() is False
# Toggle all # Toggle all
outTab.odtAddColours.setChecked(True) outTab.odtAddColours.setChecked(True)
outTab.htmlAddStyles.setChecked(True) outTab.htmlAddStyles.setChecked(True)
# Change header format
outTab.odtPageHeader.setText("Stuff")
# Save values # Save values
outTab.saveContent() outTab.saveContent()
assert build.getBool("odt.addColours") is True assert build.getBool("odt.addColours") is True
assert build.getStr("odt.pageHeader") == "Stuff"
assert build.getBool("html.addStyles") is True assert build.getBool("html.addStyles") is True
# Reset header format
outTab.btnPageHeader.click()
assert outTab.odtPageHeader.text() == nwHeadFmt.ODT_AUTO
# Finish # Finish
bSettings._dialogButtonClicked(bSettings.buttonBox.button(QDialogButtonBox.Close)) bSettings._dialogButtonClicked(bSettings.buttonBox.button(QDialogButtonBox.Close))
# qtbot.stop() # qtbot.stop()