Reduce number of author entries in project to one

This commit is contained in:
Veronica Berglyd Olsen
2022-11-27 16:55:54 +01:00
parent 1678cd5e96
commit e5f04e5234
13 changed files with 45 additions and 91 deletions
+4 -4
View File
@@ -315,12 +315,12 @@ class ProjectBuilder:
# Settings # Settings
projName = data.get("projName", lblNewProject) projName = data.get("projName", lblNewProject)
projTitle = data.get("projTitle", lblNewProject) projTitle = data.get("projTitle", lblNewProject)
projAuthors = data.get("projAuthors", "") projAuthor = data.get("projAuthor", "")
project.data.setUuid(None) project.data.setUuid(None)
project.data.setName(projName) project.data.setName(projName)
project.data.setTitle(projTitle) project.data.setTitle(projTitle)
project.data.setAuthors(projAuthors) project.data.setAuthor(projAuthor)
project.setDefaultStatusImport() project.setDefaultStatusImport()
project._projOpened = int(time()) project._projOpened = int(time())
@@ -330,8 +330,8 @@ class ProjectBuilder:
novelTitle = project.data.title if project.data.title else project.data.name novelTitle = project.data.title if project.data.title else project.data.name
titlePage = f"#! {novelTitle}\n\n" titlePage = f"#! {novelTitle}\n\n"
if project.data.authors: if project.data.author:
titlePage += f">> {lblByAuthors} {project.getFormattedAuthors()} <<\n\n" titlePage += f">> {lblByAuthors} {project.data.author} <<\n\n"
aDoc = project.storage.getDocument(hTitlePage) aDoc = project.storage.getDocument(hTitlePage)
aDoc.writeDocument(titlePage) aDoc.writeDocument(titlePage)
-16
View File
@@ -565,22 +565,6 @@ class NWProject(QObject):
return self._lockedBy return self._lockedBy
return None return None
def getFormattedAuthors(self):
"""Return a formatted string of authors.
"""
authors = self._data.authors
nAuth = len(authors)
result = ""
if nAuth == 1:
result = authors[0]
elif nAuth > 1:
result = "%s %s %s" % (
", ".join(authors[0:-1]), self.tr("and"), authors[-1]
)
return result
def getCurrentEditTime(self): def getCurrentEditTime(self):
"""Get the total project edit time, including the time spent in """Get the total project edit time, including the time spent in
the current session. the current session.
+7 -22
View File
@@ -46,7 +46,7 @@ class NWProjectData:
self._uuid = "" self._uuid = ""
self._name = "" self._name = ""
self._title = "" self._title = ""
self._authors = [] self._author = ""
self._saveCount = 0 self._saveCount = 0
self._autoCount = 0 self._autoCount = 0
self._editTime = 0 self._editTime = 0
@@ -97,8 +97,8 @@ class NWProjectData:
return self._title return self._title
@property @property
def authors(self): def author(self):
return self._authors return self._author
@property @property
def saveCount(self): def saveCount(self):
@@ -160,13 +160,6 @@ class NWProjectData:
# Methods # Methods
## ##
def addAuthor(self, value):
"""Add an author to the authors list.
"""
self._authors.append(simplified(str(value)))
self.theProject.setProjectChanged(True)
return
def incSaveCount(self): def incSaveCount(self):
"""Increment the save count by one. """Increment the save count by one.
""" """
@@ -226,20 +219,12 @@ class NWProjectData:
self.theProject.setProjectChanged(True) self.theProject.setProjectChanged(True)
return return
def setAuthors(self, value): def setAuthor(self, value):
"""Set the list of authors from either a string with one author """Set the author value.
per line, or a list of authors.
""" """
self._authors = [] if value != self._title:
self.theProject.setProjectChanged(True) self._author = simplified(str(value))
if isinstance(value, str):
for author in value.splitlines():
author = simplified(author)
if author:
self._authors.append(author)
self.theProject.setProjectChanged(True) self.theProject.setProjectChanged(True)
elif isinstance(value, list):
self._authors = value
return return
def setSaveCount(self, value): def setSaveCount(self, value):
+2 -10
View File
@@ -245,7 +245,7 @@ class ProjectXMLReader:
elif xItem.tag == "title": elif xItem.tag == "title":
projData.setTitle(xItem.text) projData.setTitle(xItem.text)
elif xItem.tag == "author": elif xItem.tag == "author":
projData.addAuthor(xItem.text) projData.setAuthor(xItem.text)
else: else:
logger.warning("Ignored <root/project/%s> in XML", xItem.tag) logger.warning("Ignored <root/project/%s> in XML", xItem.tag)
@@ -517,7 +517,7 @@ class ProjectXMLWriter:
xProject = etree.SubElement(xRoot, "project", attrib=projAttr) xProject = etree.SubElement(xRoot, "project", attrib=projAttr)
self._packSingleValue(xProject, "name", projData.name) self._packSingleValue(xProject, "name", projData.name)
self._packSingleValue(xProject, "title", projData.title) self._packSingleValue(xProject, "title", projData.title)
self._packListValue(xProject, "author", projData.authors) self._packSingleValue(xProject, "author", projData.author)
# Save Project Settings # Save Project Settings
xSettings = etree.SubElement(xRoot, "settings") xSettings = etree.SubElement(xRoot, "settings")
@@ -590,14 +590,6 @@ class ProjectXMLWriter:
xItem.text = str(value) or "" xItem.text = str(value) or ""
return return
def _packListValue(self, xParent, name, data):
"""Pack a list of values into an XML element.
"""
for value in data:
xItem = etree.SubElement(xParent, name)
xItem.text = str(value) or ""
return
def _packDictKeyValue(self, xParent, name, data): def _packDictKeyValue(self, xParent, name, data):
"""Pack the entries of a dictionary into an XML element. """Pack the entries of a dictionary into an XML element.
""" """
+1 -1
View File
@@ -262,7 +262,7 @@ class ToOdt(Tokenizer):
if self._headerText == "": if self._headerText == "":
theTitle = self.theProject.data.title theTitle = self.theProject.data.title
theAuth = self.theProject.getFormattedAuthors() theAuth = self.theProject.data.author
self._headerText = f"{theTitle} / {theAuth} /" self._headerText = f"{theTitle} / {theAuth} /"
# Create Roots # Create Roots
+1 -3
View File
@@ -174,9 +174,7 @@ class GuiProjectDetailsMain(QWidget):
self.projName.setAlignment(Qt.AlignHCenter) self.projName.setAlignment(Qt.AlignHCenter)
self.projName.setWordWrap(True) self.projName.setWordWrap(True)
self.bookAuthors = QLabel(self.tr("By {0}").format( self.bookAuthors = QLabel(self.tr("By {0}").format(self.theProject.data.author))
self.theProject.getFormattedAuthors()
))
authFont = self.bookAuthors.font() authFont = self.bookAuthors.font()
authFont.setPointSizeF(1.2*fPt) authFont.setPointSizeF(1.2*fPt)
self.bookAuthors.setFont(authFont) self.bookAuthors.setFont(authFont)
+14 -16
View File
@@ -29,9 +29,8 @@ import novelwriter
from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush
from PyQt5.QtCore import Qt, QLocale from PyQt5.QtCore import Qt, QLocale
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QHBoxLayout, QVBoxLayout, QLineEdit, QPlainTextEdit, QLabel, QWidget, QColorDialog, QComboBox, QDialogButtonBox, QHBoxLayout, QLabel, QLineEdit,
QDialogButtonBox, QPushButton, QColorDialog, QTreeWidget, QTreeWidgetItem, QPushButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
QComboBox
) )
from novelwriter.enum import nwAlert from novelwriter.enum import nwAlert
@@ -108,15 +107,15 @@ class GuiProjectSettings(PagedDialog):
def _doSave(self): def _doSave(self):
"""Save settings and close dialog. """Save settings and close dialog.
""" """
projName = self.tabMain.editName.text() projName = self.tabMain.editName.text()
bookTitle = self.tabMain.editTitle.text() bookTitle = self.tabMain.editTitle.text()
bookAuthors = self.tabMain.editAuthors.toPlainText() bookAuthor = self.tabMain.editAuthor.text()
spellLang = self.tabMain.spellLang.currentData() spellLang = self.tabMain.spellLang.currentData()
doBackup = not self.tabMain.doBackup.isChecked() doBackup = not self.tabMain.doBackup.isChecked()
self.theProject.data.setName(projName) self.theProject.data.setName(projName)
self.theProject.data.setTitle(bookTitle) self.theProject.data.setTitle(bookTitle)
self.theProject.data.setAuthors(bookAuthors) self.theProject.data.setAuthor(bookAuthor)
self.theProject.data.setDoBackup(doBackup) self.theProject.data.setDoBackup(doBackup)
# Remember this as updating spell dictionary can be expensive # Remember this as updating spell dictionary can be expensive
@@ -204,7 +203,6 @@ class GuiProjectEditMain(QWidget):
self.mainForm.addGroupLabel(self.tr("Project Settings")) self.mainForm.addGroupLabel(self.tr("Project Settings"))
xW = self.mainConf.pxInt(250) xW = self.mainConf.pxInt(250)
xH = round(4.8*self.mainGui.mainTheme.fontPixelSize)
self.editName = QLineEdit() self.editName = QLineEdit()
self.editName.setMaxLength(200) self.editName.setMaxLength(200)
@@ -226,14 +224,14 @@ class GuiProjectEditMain(QWidget):
self.tr("Change whenever you want!") self.tr("Change whenever you want!")
) )
self.editAuthors = QPlainTextEdit() self.editAuthor = QLineEdit()
self.editAuthors.setMaximumHeight(xH) self.editAuthor.setMaxLength(200)
self.editAuthors.setMaximumWidth(xW) self.editAuthor.setMaximumWidth(xW)
self.editAuthors.setPlainText("\n".join(self.theProject.data.authors)) self.editAuthor.setText(self.theProject.data.author)
self.mainForm.addRow( self.mainForm.addRow(
self.tr("Author(s)"), self.tr("Author(s)"),
self.editAuthors, self.editAuthor,
self.tr("One name per line.") self.tr("Change whenever you want!")
) )
self.spellLang = QComboBox(self) self.spellLang = QComboBox(self)
+1 -1
View File
@@ -1419,7 +1419,7 @@ class GuiMain(QMainWindow):
projData = { projData = {
"projName": newProj.field("projName"), "projName": newProj.field("projName"),
"projTitle": newProj.field("projTitle"), "projTitle": newProj.field("projTitle"),
"projAuthors": newProj.field("projAuthors"), "projAuthor": newProj.field("projAuthor"),
"projPath": newProj.field("projPath"), "projPath": newProj.field("projPath"),
"popSample": newProj.field("popSample"), "popSample": newProj.field("popSample"),
"popMinimal": newProj.field("popMinimal"), "popMinimal": newProj.field("popMinimal"),
+2 -2
View File
@@ -968,9 +968,9 @@ class GuiBuildNovel(QDialog):
elif theFmt == self.FMT_JSON_H or theFmt == self.FMT_JSON_M: elif theFmt == self.FMT_JSON_H or theFmt == self.FMT_JSON_M:
jsonData = { jsonData = {
"meta": { "meta": {
"workingTitle": self.theProject.data.name, "projectName": self.theProject.data.name,
"novelTitle": self.theProject.data.title, "novelTitle": self.theProject.data.title,
"authors": self.theProject.data.authors, "novelAuthor": self.theProject.data.author,
"buildTime": self.buildTime, "buildTime": self.buildTime,
} }
} }
+8 -10
View File
@@ -29,9 +29,8 @@ import novelwriter
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QWizard, QWizardPage, QLabel, QVBoxLayout, QLineEdit, QPlainTextEdit, QFileDialog, QFormLayout, QGridLayout, QHBoxLayout, QLabel, QLineEdit,
QPushButton, QFileDialog, QHBoxLayout, QRadioButton, QFormLayout, QPushButton, QRadioButton, QSpinBox, QVBoxLayout, QWizard, QWizardPage
QGridLayout, QSpinBox
) )
from novelwriter.common import makeFileNameSafe from novelwriter.common import makeFileNameSafe
@@ -111,7 +110,6 @@ class ProjWizardIntroPage(QWizardPage):
self.imgCredit.setFont(lblFont) self.imgCredit.setFont(lblFont)
xW = self.mainConf.pxInt(300) xW = self.mainConf.pxInt(300)
xH = self.mainConf.pxInt(100)
vS = self.mainConf.pxInt(12) vS = self.mainConf.pxInt(12)
fS = self.mainConf.pxInt(4) fS = self.mainConf.pxInt(4)
@@ -126,20 +124,20 @@ class ProjWizardIntroPage(QWizardPage):
self.projTitle.setFixedWidth(xW) self.projTitle.setFixedWidth(xW)
self.projTitle.setPlaceholderText(self.tr("Optional")) self.projTitle.setPlaceholderText(self.tr("Optional"))
self.projAuthors = QPlainTextEdit() self.projAuthor = QLineEdit()
self.projAuthors.setFixedHeight(xH) self.projAuthor.setMaxLength(200)
self.projAuthors.setFixedWidth(xW) self.projAuthor.setFixedWidth(xW)
self.projAuthors.setPlaceholderText(self.tr("Optional. One name per line.")) self.projAuthor.setPlaceholderText(self.tr("Optional"))
self.mainForm = QFormLayout() self.mainForm = QFormLayout()
self.mainForm.addRow(self.tr("Project Name"), self.projName) self.mainForm.addRow(self.tr("Project Name"), self.projName)
self.mainForm.addRow(self.tr("Novel Title"), self.projTitle) self.mainForm.addRow(self.tr("Novel Title"), self.projTitle)
self.mainForm.addRow(self.tr("Author(s)"), self.projAuthors) self.mainForm.addRow(self.tr("Author(s)"), self.projAuthor)
self.mainForm.setVerticalSpacing(fS) self.mainForm.setVerticalSpacing(fS)
self.registerField("projName*", self.projName) self.registerField("projName*", self.projName)
self.registerField("projTitle", self.projTitle) self.registerField("projTitle", self.projTitle)
self.registerField("projAuthors", self.projAuthors, "plainText") self.registerField("projAuthor", self.projAuthor)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
+1 -1
View File
@@ -3,7 +3,7 @@
%%~kind: NOVEL/DOCUMENT %%~kind: NOVEL/DOCUMENT
#! My Novel #! My Novel
>> **By Jane Doh** << >> **By Jane Smith** <<
>> This is the title page. << >> This is the title page. <<
>> It should be the first document of the project. << >> It should be the first document of the project. <<
+3 -4
View File
@@ -1,10 +1,9 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.0-rc2" hexVersion="0x020000c2" fileVersion="1.5" timeStamp="2022-11-17 16:28:09"> <novelWriterXML appVersion="2.0-rc2" hexVersion="0x020000c2" fileVersion="1.5" timeStamp="2022-11-27 16:39:07">
<project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="1453" autoCount="237" editTime="69933"> <project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="1455" autoCount="237" editTime="70027">
<name>Sample Project</name> <name>Sample Project</name>
<title>Sample Project</title> <title>Sample Project</title>
<author>Jane Smith</author> <author>Jane Smith</author>
<author>Jay Doh</author>
</project> </project>
<settings> <settings>
<doBackup>no</doBackup> <doBackup>no</doBackup>
@@ -50,7 +49,7 @@
<name status="sc24b8f" import="ia857f0">Novel</name> <name status="sc24b8f" import="ia857f0">Novel</name>
</item> </item>
<item handle="53b69b83cdafc" parent="7031beac91f75" root="7031beac91f75" order="0" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="53b69b83cdafc" parent="7031beac91f75" root="7031beac91f75" order="0" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H1" charCount="93" wordCount="19" paraCount="2" cursorPos="119"/> <meta expanded="no" heading="H1" charCount="95" wordCount="19" paraCount="2" cursorPos="31"/>
<name status="sc24b8f" import="ia857f0" active="yes">Title Page</name> <name status="sc24b8f" import="ia857f0" active="yes">Title Page</name>
</item> </item>
<item handle="974e400180a99" parent="7031beac91f75" root="7031beac91f75" order="1" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="974e400180a99" parent="7031beac91f75" root="7031beac91f75" order="1" type="FILE" class="NOVEL" layout="DOCUMENT">
+1 -1
View File
@@ -174,7 +174,7 @@ def buildTestProject(theObject, projPath):
theProject.data.setUuid("d0f3fe10-c6e6-4310-8bfd-181eb4224eed") theProject.data.setUuid("d0f3fe10-c6e6-4310-8bfd-181eb4224eed")
theProject.data.setName("New Project") theProject.data.setName("New Project")
theProject.data.setTitle("New Novel") theProject.data.setTitle("New Novel")
theProject.data.setAuthors("Jane Doe") theProject.data.setAuthor("Jane Doe")
# Creating a minimal project with a few root folders and a # Creating a minimal project with a few root folders and a
# single chapter folder with a single file. # single chapter folder with a single file.