Added project settings GUI

This commit is contained in:
Veronica K. B. Olsen
2018-10-25 23:33:13 +02:00
parent 1104baef22
commit 3b90eea7cb
6 changed files with 191 additions and 44 deletions
+38
View File
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg1014"
version="1.1"
viewBox="0 0 40 40"
height="40mm"
width="40mm">
<defs
id="defs1008" />
<metadata
id="metadata1011">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(0,-257)"
id="layer1">
<rect
y="257"
x="-1.7763568e-15"
height="40"
width="40"
id="rect1580"
style="fill:#646464;fill-opacity:0.39351851;stroke:none;stroke-width:0.18425357;stroke-linecap:square;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+60
View File
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="svg1014"
version="1.1"
viewBox="0 0 40 40"
height="40mm"
width="40mm">
<defs
id="defs1008">
<linearGradient
id="linearGradient1586">
<stop
id="stop1582"
offset="0"
style="stop-color:#646464;stop-opacity:0" />
<stop
id="stop1584"
offset="1"
style="stop-color:#646464;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.90450234,0,0,0.53447864,-9.5726494,251.5932)"
gradientUnits="userSpaceOnUse"
y2="47.535713"
x2="54.938839"
y1="47.535713"
x1="10.451041"
id="linearGradient1588"
xlink:href="#linearGradient1586" />
</defs>
<metadata
id="metadata1011">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(0,-257)"
id="layer1">
<rect
y="257"
x="-1.7763568e-15"
height="40"
width="40"
id="rect1580"
style="fill:url(#linearGradient1588);fill-opacity:1;stroke:none;stroke-width:0.18425357;stroke-linecap:square;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+50 -17
View File
@@ -13,20 +13,32 @@
import logging import logging
import nw import nw
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, QLabel, QLineEdit, QPlainTextEdit, QPushButton, QFileDialog from os import path
from PyQt5.QtWidgets import QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QFormLayout, QLabel, QLineEdit, QPlainTextEdit, QPushButton
from PyQt5.QtSvg import QSvgWidget
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class GuiProjectEditor(QWidget): class GuiProjectEditor(QDialog):
def __init__(self): def __init__(self, guiParent, theProject):
QWidget.__init__(self) QDialog.__init__(self, guiParent)
logger.debug("Initialising ProjectEditor ...") logger.debug("Initialising ProjectEditor ...")
self.outerBox = QVBoxLayout() self.mainConf = nw.CONFIG
self.theProject = theProject
self.outerBox = QHBoxLayout()
self.innerBox = QVBoxLayout()
self.gradPath = path.abspath(path.join(self.mainConf.appPath,"graphics","block.svg"))
self.svgGradient = QSvgWidget(self.gradPath)
self.svgGradient.setFixedWidth(80)
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
self.outerBox.addWidget(self.svgGradient)
self.outerBox.addLayout(self.innerBox)
self.mainGroup = QGroupBox("Project Settings") self.mainGroup = QGroupBox("Project Settings")
self.mainForm = QFormLayout() self.mainForm = QFormLayout()
@@ -34,29 +46,50 @@ class GuiProjectEditor(QWidget):
self.editName = QLineEdit() self.editName = QLineEdit()
self.editTitle = QLineEdit() self.editTitle = QLineEdit()
self.editAuthors = QPlainTextEdit() self.editAuthors = QPlainTextEdit()
self.saveBox = QHBoxLayout()
self.savePath = QLineEdit()
self.saveButton = QPushButton(QIcon.fromTheme("folder"),"Browse")
self.saveButton.setToolTip("Browse for Save Path")
self.saveButton.clicked.connect(self._browseProjectPath)
self.saveBox.addWidget(self.savePath)
self.saveBox.addWidget(self.saveButton)
self.mainForm.addRow("Working Title", self.editName) self.mainForm.addRow("Working Title", self.editName)
self.mainForm.addRow("Book Title", self.editTitle) self.mainForm.addRow("Book Title", self.editTitle)
self.mainForm.addRow("Book Authors", self.editAuthors) self.mainForm.addRow("Book Authors", self.editAuthors)
self.mainForm.addRow("Save Path", self.saveBox)
self.editName.setText(self.theProject.projName)
self.editTitle.setText(self.theProject.bookTitle)
bookAuthors = ""
for bookAuthor in self.theProject.bookAuthors:
bookAuthors += bookAuthor+"\n"
self.editAuthors.setPlainText(bookAuthors)
self.buttonBox = QHBoxLayout()
self.closeButton = QPushButton("Close")
self.closeButton.clicked.connect(self._doClose)
self.saveButton = QPushButton("Save")
self.saveButton.clicked.connect(self._doSave)
self.buttonBox.addStretch(1)
self.buttonBox.addWidget(self.closeButton)
self.buttonBox.addWidget(self.saveButton)
self.mainGroup.setLayout(self.mainForm) self.mainGroup.setLayout(self.mainForm)
self.outerBox.addWidget(self.mainGroup) self.innerBox.addWidget(self.mainGroup)
self.innerBox.addLayout(self.buttonBox)
self.show()
logger.debug("ProjectEditor initialisation complete") logger.debug("ProjectEditor initialisation complete")
return return
def _browseProjectPath(self): def _doSave(self):
fileName, _ = QFileDialog.getSaveFileName(self,"Project File Name","","novelWriter File (*.nwf);;All Files (*)") logger.vverbose("ProjectEditor save button clicked")
self.savePath.setText(fileName) projName = self.editName.text()
bookTitle = self.editTitle.text()
bookAuthors = self.editAuthors.toPlainText()
self.theProject.setProjectName(projName)
self.theProject.setBookTitle(bookTitle)
self.theProject.setBookAuthors(bookAuthors)
return
def _doClose(self):
logger.vverbose("ProjectEditor close button clicked")
self.close()
return return
# END Class GuiProjectEditor # END Class GuiProjectEditor
+14 -7
View File
@@ -13,14 +13,15 @@
import logging import logging
import nw import nw
from os import path from os import path
from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QHBoxLayout, QVBoxLayout, QFrame, QSplitter, QAction, QToolBar, QFileDialog from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QHBoxLayout, QVBoxLayout, QFrame, QSplitter, QAction, QToolBar, QFileDialog
from PyQt5.QtCore import Qt, QSize from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon, QStandardItemModel from PyQt5.QtGui import QIcon, QStandardItemModel
from nw.gui.doctree import GuiDocTree from nw.gui.doctree import GuiDocTree
from nw.gui.doceditor import GuiDocEditor from nw.gui.doceditor import GuiDocEditor
from nw.project.project import NWProject from nw.gui.projecteditor import GuiProjectEditor
from nw.project.project import NWProject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -115,6 +116,11 @@ class GuiMain(QMainWindow):
self.theProject.saveProject() self.theProject.saveProject()
return True return True
def editProject(self):
dlgProj = GuiProjectEditor(self, self.theProject)
dlgProj.exec_()
return True
# #
# Document Actions # Document Actions
# #
@@ -164,6 +170,7 @@ class GuiMain(QMainWindow):
# File > Project Settings # File > Project Settings
menuProjectSettings = QAction(QIcon.fromTheme("document-properties"), "Project Settings", menuBar) menuProjectSettings = QAction(QIcon.fromTheme("document-properties"), "Project Settings", menuBar)
menuProjectSettings.setStatusTip("Project Settings") menuProjectSettings.setStatusTip("Project Settings")
menuProjectSettings.triggered.connect(self.editProject)
fileMenu.addAction(menuProjectSettings) fileMenu.addAction(menuProjectSettings)
# --------------------- # ---------------------
+22 -16
View File
@@ -29,6 +29,7 @@ class NWProject():
# Project Settings # Project Settings
self.projPath = None self.projPath = None
self.projFile = "nwProject.nwx" self.projFile = "nwProject.nwx"
self.projName = ""
self.bookTitle = "" self.bookTitle = ""
self.bookAuthors = [] self.bookAuthors = []
@@ -60,17 +61,17 @@ class NWProject():
logger.error("Project file does not appear to be a novelWriterXML file version 1.0") logger.error("Project file does not appear to be a novelWriterXML file version 1.0")
return False return False
# for xChild in xRoot: for xChild in xRoot:
# if xChild.tag == "book": if xChild.tag == "project":
# logger.debug("BookOpen: Found book data") logger.debug("Found book data")
# for xItem in xChild: for xItem in xChild:
# if xItem.text is None: continue if xItem.text is None: continue
# if xItem.tag == "title": if xItem.tag == "title":
# logger.verbose("BookOpen: Title is '%s'" % xItem.text) logger.verbose("Title is '%s'" % xItem.text)
# self.bookTitle = xItem.text self.bookTitle = xItem.text
# elif xItem.tag == "author": elif xItem.tag == "author":
# logger.verbose("BookOpen: Author: '%s'" % xItem.text) logger.verbose("Author: '%s'" % xItem.text)
# self.bookAuthors.append(xItem.text) self.bookAuthors.append(xItem.text)
self.mainConf.setRecent(self.projPath) self.mainConf.setRecent(self.projPath)
@@ -92,12 +93,14 @@ class NWProject():
"appVersion" : str(nw.__version__), "appVersion" : str(nw.__version__),
"timeStamp" : datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "timeStamp" : datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
}) })
xBook = etree.SubElement(nwXML,"book") xProject = etree.SubElement(nwXML,"project")
xBookTitle = etree.SubElement(xBook,"title") xProjName = etree.SubElement(xProject,"name")
xProjName.text = self.projName
xBookTitle = etree.SubElement(xProject,"title")
xBookTitle.text = self.bookTitle xBookTitle.text = self.bookTitle
for bookAuthor in self.bookAuthors: for bookAuthor in self.bookAuthors:
if bookAuthor == "": continue if bookAuthor == "": continue
xBookAuthor = etree.SubElement(xBook,"author") xBookAuthor = etree.SubElement(xProject,"author")
xBookAuthor.text = bookAuthor xBookAuthor.text = bookAuthor
# Write the xml tree to file # Write the xml tree to file
@@ -131,8 +134,11 @@ class NWProject():
def setBookAuthors(self, bookAuthors): def setBookAuthors(self, bookAuthors):
self.bookAuthors = [] self.bookAuthors = []
for bookAuthor in bookAuthors.split(","): for bookAuthor in bookAuthors.split("\n"):
self.bookAuthors.append(bookAuthor.strip()) bookAuthor = bookAuthor.strip()
if bookAuthor == "":
continue
self.bookAuthors.append(bookAuthor)
return True return True
# END Class NWProject # END Class NWProject
+7 -4
View File
@@ -1,6 +1,9 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="0.1.0" fileVersion="1.0" timeStamp="2018-10-23T21:36:09"> <novelWriterXML appVersion="0.1.0" fileVersion="1.0" timeStamp="2018-10-25 22:17:01">
<book> <project>
<title></title> <name>Sample Project</name>
</book> <title>Sample Project</title>
<author>Jane Smith</author>
<author>Jane Doh</author>
</project>
</novelWriterXML> </novelWriterXML>