From 116150ef01ae31affe902fb74695d84a9f5588ad Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Fri, 3 May 2019 21:56:51 +0200 Subject: [PATCH] Fixed creating new project, opening and saving of projects. --- nw/gui/doctree.py | 16 +++++++- nw/gui/winmain.py | 9 +++-- nw/project/project.py | 88 +++++++++++++++++++++++++++---------------- 3 files changed, 76 insertions(+), 37 deletions(-) diff --git a/nw/gui/doctree.py b/nw/gui/doctree.py index c38d1527..6bd7706e 100644 --- a/nw/gui/doctree.py +++ b/nw/gui/doctree.py @@ -39,9 +39,14 @@ class GuiDocTree(QTreeWidget): self.debugGUI = self.mainConf.debugGUI self.theParent = theParent self.theProject = theProject - self.theMap = {} + + # Tree Settings + self.theMap = None self.orphRoot = None + self.clearTree() + + # Build GUI self.setIconSize(QSize(13,13)) self.setExpandsOnDoubleClick(True) self.setIndentation(13) @@ -67,6 +72,15 @@ class GuiDocTree(QTreeWidget): return + def clearTree(self): + + self.clear() + + self.theMap = {} + self.orphRoot = None + + return + def newTreeItem(self, itemType, itemClass): pHandle = self.getSelectedHandle() diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 37d491f6..8d8a8261 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -103,6 +103,7 @@ class GuiMain(QMainWindow): def newProject(self): logger.info("Creating new project") + self.treeView.clearTree() self.theProject.newProject() self.treeView.buildTree() return @@ -112,6 +113,7 @@ class GuiMain(QMainWindow): projFile = self.openProjectDialog() if projFile is None: return False + self.treeView.clearTree() self.theProject.openProject(projFile) self.treeView.buildTree() self._setWindowTitle(self.theProject.projName) @@ -184,7 +186,7 @@ class GuiMain(QMainWindow): dlgOpt = QFileDialog.Options() dlgOpt |= QFileDialog.DontUseNativeDialog projFile, _ = QFileDialog.getOpenFileName( - self,"Open novelWriter Project","","novelWriter Project File (nwProject.nwx);;All Files (*)", options=dlgOpt + self,"Open novelWriter Project","","novelWriter Project File (nwProject.nwx);;All Files (*)",options=dlgOpt ) if projFile: return projFile @@ -192,9 +194,10 @@ class GuiMain(QMainWindow): def saveProjectDialog(self): dlgOpt = QFileDialog.Options() + dlgOpt |= QFileDialog.ShowDirsOnly dlgOpt |= QFileDialog.DontUseNativeDialog - projPath, _ = QFileDialog.getSaveFileName( - self,"Save novelWriter Project","","novelWriter Project File (nwProject.nwx);;All Files (*)", options=dlgOpt + projPath = QFileDialog.getExistingDirectory( + self,"Save novelWriter Project","",options=dlgOpt ) if projPath: return projPath diff --git a/nw/project/project.py b/nw/project/project.py index acd29b3e..fa92ca02 100644 --- a/nw/project/project.py +++ b/nw/project/project.py @@ -31,27 +31,22 @@ class NWProject(): def __init__(self): # Internal - self.mainConf = nw.CONFIG + self.mainConf = nw.CONFIG # Project Settings - self.projTree = {} - self.treeOrder = [] - self.treeRoots = [] - self.projPath = None - self.projFile = "nwProject.nwx" - self.projName = "" - self.bookTitle = "" - self.bookAuthors = [] + self.projTree = None + self.treeOrder = None + self.treeRoots = None + self.projPath = None + self.projFile = None + self.projName = None + self.bookTitle = None + self.bookAuthors = None + self.statusCols = None + self.statusIcons = None + self.statusLabels = None - self.statusCols = [ - ("New", 100,100,100), - ("Note", 200, 50, 0), - ("Draft", 200,150, 0), - ("Finished", 50,200, 0), - ] - self.statusIcons = [] - self.statusLabels = [] - self._makeStatusIcons() + self.clearProject() return @@ -88,19 +83,39 @@ class NWProject(): return newItem.itemHandle def newProject(self): - self.projTree = {} - self.treeOrder = [] - self.projPath = None - self.projFile = "nwProject.nwx" - self.projName = "" - self.bookTitle = "" - self.bookAuthors = [] - self._makeStatusIcons() + + self.clearProject() + hNovel = self.newRoot("Novel", nwItemClass.NOVEL) hChars = self.newRoot("Characters", nwItemClass.CHARACTER) hWorld = self.newRoot("World", nwItemClass.WORLD) hChapt = self.newFolder("New Chapter", nwItemClass.NOVEL, hNovel) hScene = self.newFile("New Scene", nwItemClass.NOVEL, hChapt) + + return + + def clearProject(self): + + # Project Settings + self.projTree = {} + self.treeOrder = [] + self.treeRoots = [] + self.projPath = None + self.projFile = "nwProject.nwx" + self.projName = "" + self.bookTitle = "" + self.bookAuthors = [] + + self.statusCols = [ + ("New", 100,100,100), + ("Note", 200, 50, 0), + ("Draft", 200,150, 0), + ("Finished", 50,200, 0), + ] + self.statusIcons = [] + self.statusLabels = [] + self._makeStatusIcons() + return ## @@ -115,6 +130,7 @@ class NWProject(): logger.error("File not found: %s" % fileName) return False + self.clearProject() self.projPath = path.dirname(fileName) logger.debug("Opening project: %s" % self.projPath) @@ -211,13 +227,19 @@ class NWProject(): self.projTree[tHandle].packXML(xContent) # Write the xml tree to file - with open(path.join(self.projPath,self.projFile),"wb") as outFile: - outFile.write(etree.tostring( - nwXML, - pretty_print = True, - encoding = "utf-8", - xml_declaration = True - )) + saveFile = path.join(self.projPath,self.projFile) + try: + with open(saveFile,"wb") as outFile: + outFile.write(etree.tostring( + nwXML, + pretty_print = True, + encoding = "utf-8", + xml_declaration = True + )) + except Exception as e: + logger.error("Failed to save project to %s" % saveFile) + logger.error(str(e)) + return False self.mainConf.setRecent(self.projPath)