Using global enum class instead of constants in classes.
This commit is contained in:
+1
-5
@@ -17,6 +17,7 @@ from os import path, remove, rename
|
|||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
from nw.main import NovelWriter
|
from nw.main import NovelWriter
|
||||||
from nw.config import Config
|
from nw.config import Config
|
||||||
|
from nw.enum import *
|
||||||
|
|
||||||
__package__ = "novelWriter"
|
__package__ = "novelWriter"
|
||||||
__author__ = "Veronica Berglyd Olsen"
|
__author__ = "Veronica Berglyd Olsen"
|
||||||
@@ -62,11 +63,6 @@ logger = logging.getLogger(__name__)
|
|||||||
# Load the main config as a global object
|
# Load the main config as a global object
|
||||||
CONFIG = Config()
|
CONFIG = Config()
|
||||||
|
|
||||||
# Constants
|
|
||||||
DOCTYPE_ABOUT = 0
|
|
||||||
DOCTYPE_DOC = 1
|
|
||||||
DOCTYPE_PROJECT = 2
|
|
||||||
|
|
||||||
def main(sysArgs):
|
def main(sysArgs):
|
||||||
"""
|
"""
|
||||||
Parses command line, sets up logging, and launches main GUI.
|
Parses command line, sets up logging, and launches main GUI.
|
||||||
|
|||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
# -*- coding: utf-8 -*
|
||||||
|
"""novelWriter Enums
|
||||||
|
|
||||||
|
novelWriter – Enums
|
||||||
|
=====================
|
||||||
|
All enum values
|
||||||
|
|
||||||
|
File History:
|
||||||
|
Created: 2018-11-02 [0.0.1]
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
class nwItemType(Enum):
|
||||||
|
|
||||||
|
NONE = 0
|
||||||
|
ROOT = 1
|
||||||
|
FOLDER = 2
|
||||||
|
FILE = 3
|
||||||
|
|
||||||
|
# END Enum nwItemType
|
||||||
|
|
||||||
|
class nwItemClass(Enum):
|
||||||
|
|
||||||
|
NONE = 0
|
||||||
|
NOVEL = 1
|
||||||
|
CHAPTER = 2
|
||||||
|
CHARACTER = 3
|
||||||
|
WORLD = 4
|
||||||
|
|
||||||
|
# END Enum nwItemClass
|
||||||
+16
-16
@@ -18,7 +18,7 @@ from PyQt5.QtGui import QIcon
|
|||||||
from PyQt5.QtCore import Qt, QSize
|
from PyQt5.QtCore import Qt, QSize
|
||||||
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QTreeWidgetItemIterator, QAbstractItemView
|
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QTreeWidgetItemIterator, QAbstractItemView
|
||||||
|
|
||||||
from nw.project.item import NWItem
|
from nw.enum import nwItemType, nwItemClass
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -60,31 +60,31 @@ class GuiDocTree(QTreeWidget):
|
|||||||
|
|
||||||
# Figure out where to put the new item
|
# Figure out where to put the new item
|
||||||
if rHandle is None:
|
if rHandle is None:
|
||||||
nwType = NWItem.TYPE_ROOT
|
nwType = nwItemType.ROOT
|
||||||
pHandle = None
|
pHandle = None
|
||||||
else:
|
else:
|
||||||
rItem = self.theProject.projTree[rHandle]
|
rItem = self.theProject.projTree[rHandle]
|
||||||
if rItem.itemType == NWItem.TYPE_FILE:
|
if rItem.itemType == nwItemType.FILE:
|
||||||
pHandle = rItem.parHandle
|
pHandle = rItem.parHandle
|
||||||
else:
|
else:
|
||||||
pHandle = rHandle
|
pHandle = rHandle
|
||||||
|
|
||||||
# Create the new item
|
# Create the new item
|
||||||
if itemType == NWItem.TYPE_FILE:
|
if itemType == nwItemType.FILE:
|
||||||
tHandle = self.theProject.newFile("New File", NWItem.CLASS_NONE, pHandle)
|
tHandle = self.theProject.newFile("New File", nwItemClass.NONE, pHandle)
|
||||||
elif itemType == NWItem.TYPE_FOLDER:
|
elif itemType == nwItemType.FOLDER:
|
||||||
if pHandle is None:
|
if pHandle is None:
|
||||||
logger.error("Failed to add new item.")
|
logger.error("Failed to add new item.")
|
||||||
return
|
return
|
||||||
pItem = self.theProject.projTree[rHandle]
|
pItem = self.theProject.projTree[rHandle]
|
||||||
if pItem.itemClass == NWItem.CLASS_NOVEL:
|
if pItem.itemClass == nwItemClass.NOVEL:
|
||||||
tHandle = self.theProject.newFolder("New Chapter", NWItem.CLASS_CHAPTER, pHandle)
|
tHandle = self.theProject.newFolder("New Chapter", nwItemClass.CHAPTER, pHandle)
|
||||||
elif pItem.itemClass == NWItem.CLASS_CHAPTER:
|
elif pItem.itemClass == nwItemClass.CHAPTER:
|
||||||
tHandle = self.theProject.newFolder("New Chapter", NWItem.CLASS_CHAPTER, pItem.parHandle)
|
tHandle = self.theProject.newFolder("New Chapter", nwItemClass.CHAPTER, pItem.parHandle)
|
||||||
else:
|
else:
|
||||||
tHandle = self.theProject.newFolder("New Folder", NWItem.CLASS_NONE, pHandle)
|
tHandle = self.theProject.newFolder("New Folder", nwItemClass.NONE, pHandle)
|
||||||
elif itemType == NWItem.TYPE_ROOT:
|
elif itemType == nwItemType.ROOT:
|
||||||
tHandle = self.theProject.newRoot("Root Folder", NWItem.CLASS_NONE)
|
tHandle = self.theProject.newRoot("Root Folder", nwItemClass.NONE)
|
||||||
else:
|
else:
|
||||||
logger.error("Failed to add new item.")
|
logger.error("Failed to add new item.")
|
||||||
return
|
return
|
||||||
@@ -132,11 +132,11 @@ class GuiDocTree(QTreeWidget):
|
|||||||
else:
|
else:
|
||||||
self.theMap[pHandle].addChild(newItem)
|
self.theMap[pHandle].addChild(newItem)
|
||||||
newItem.setExpanded(nwItem.isExpanded)
|
newItem.setExpanded(nwItem.isExpanded)
|
||||||
if nwItem.itemType == NWItem.TYPE_ROOT:
|
if nwItem.itemType == nwItemType.ROOT:
|
||||||
newItem.setIcon(0, QIcon.fromTheme("drive-harddisk"))
|
newItem.setIcon(0, QIcon.fromTheme("drive-harddisk"))
|
||||||
elif nwItem.itemType == NWItem.TYPE_FOLDER:
|
elif nwItem.itemType == nwItemType.FOLDER:
|
||||||
newItem.setIcon(0, QIcon.fromTheme("folder"))
|
newItem.setIcon(0, QIcon.fromTheme("folder"))
|
||||||
elif nwItem.itemType == NWItem.TYPE_FILE:
|
elif nwItem.itemType == nwItemType.FILE:
|
||||||
newItem.setIcon(0, QIcon.fromTheme("x-office-document"))
|
newItem.setIcon(0, QIcon.fromTheme("x-office-document"))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -18,11 +18,11 @@ from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QHBoxLayout, QVBoxL
|
|||||||
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.enum import nwItemType
|
||||||
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.gui.projecteditor import GuiProjectEditor
|
from nw.gui.projecteditor import GuiProjectEditor
|
||||||
from nw.project.project import NWProject
|
from nw.project.project import NWProject
|
||||||
from nw.project.item import NWItem
|
|
||||||
from nw.project.document import NWDoc
|
from nw.project.document import NWDoc
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -149,7 +149,7 @@ class GuiMain(QMainWindow):
|
|||||||
tHandle = tItem.text(3)
|
tHandle = tItem.text(3)
|
||||||
logger.verbose("User double clicked tree item with handle %s" % tHandle)
|
logger.verbose("User double clicked tree item with handle %s" % tHandle)
|
||||||
nwItem = self.theProject.getItem(tHandle)
|
nwItem = self.theProject.getItem(tHandle)
|
||||||
if nwItem.itemType == NWItem.TYPE_FILE:
|
if nwItem.itemType == nwItemType.FILE:
|
||||||
logger.verbose("Requested item %s is a file" % tHandle)
|
logger.verbose("Requested item %s is a file" % tHandle)
|
||||||
self.openDocument(tHandle)
|
self.openDocument(tHandle)
|
||||||
else:
|
else:
|
||||||
@@ -396,21 +396,21 @@ class GuiMain(QMainWindow):
|
|||||||
tbRootNew = QAction(QIcon.fromTheme("folder-new"), "New Root Folder (Ctrl+Alt+N)", toolBar)
|
tbRootNew = QAction(QIcon.fromTheme("folder-new"), "New Root Folder (Ctrl+Alt+N)", toolBar)
|
||||||
tbRootNew.setShortcut("Ctrl+Alt+N")
|
tbRootNew.setShortcut("Ctrl+Alt+N")
|
||||||
tbRootNew.setStatusTip("Create New Root Folder")
|
tbRootNew.setStatusTip("Create New Root Folder")
|
||||||
tbRootNew.triggered.connect(lambda: self.treeView.newTreeItem(NWItem.TYPE_ROOT))
|
tbRootNew.triggered.connect(lambda: self.treeView.newTreeItem(nwItemType.ROOT))
|
||||||
toolBar.addAction(tbRootNew)
|
toolBar.addAction(tbRootNew)
|
||||||
|
|
||||||
# Folder > New
|
# Folder > New
|
||||||
tbFolderNew = QAction(QIcon.fromTheme("folder-new"), "New Folder (Ctrl+Shift+N)", toolBar)
|
tbFolderNew = QAction(QIcon.fromTheme("folder-new"), "New Folder (Ctrl+Shift+N)", toolBar)
|
||||||
tbFolderNew.setShortcut("Ctrl+Shift+N")
|
tbFolderNew.setShortcut("Ctrl+Shift+N")
|
||||||
tbFolderNew.setStatusTip("Create New Chapter or Folder")
|
tbFolderNew.setStatusTip("Create New Chapter or Folder")
|
||||||
tbFolderNew.triggered.connect(lambda: self.treeView.newTreeItem(NWItem.TYPE_FOLDER))
|
tbFolderNew.triggered.connect(lambda: self.treeView.newTreeItem(nwItemType.FOLDER))
|
||||||
toolBar.addAction(tbFolderNew)
|
toolBar.addAction(tbFolderNew)
|
||||||
|
|
||||||
# Document > New
|
# Document > New
|
||||||
tbDocNew = QAction(QIcon.fromTheme("document-new"), "New Document (Ctrl+N)", toolBar)
|
tbDocNew = QAction(QIcon.fromTheme("document-new"), "New Document (Ctrl+N)", toolBar)
|
||||||
tbDocNew.setShortcut("Ctrl+N")
|
tbDocNew.setShortcut("Ctrl+N")
|
||||||
tbDocNew.setStatusTip("Create New Document")
|
tbDocNew.setStatusTip("Create New Document")
|
||||||
tbDocNew.triggered.connect(lambda: self.treeView.newTreeItem(NWItem.TYPE_FILE))
|
tbDocNew.triggered.connect(lambda: self.treeView.newTreeItem(nwItemType.FILE))
|
||||||
toolBar.addAction(tbDocNew)
|
toolBar.addAction(tbDocNew)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
+18
-48
@@ -17,28 +17,20 @@ from os import path, mkdir
|
|||||||
from lxml import etree
|
from lxml import etree
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
from nw.enum import nwItemType, nwItemClass
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class NWItem():
|
class NWItem():
|
||||||
|
|
||||||
TYPE_ROOT = 0
|
|
||||||
TYPE_FOLDER = 1
|
|
||||||
TYPE_FILE = 2
|
|
||||||
|
|
||||||
CLASS_NONE = 0
|
|
||||||
CLASS_NOVEL = 1
|
|
||||||
CLASS_CHAPTER = 2
|
|
||||||
CLASS_CHARACTER = 3
|
|
||||||
CLASS_WORLD = 4
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
self.itemName = ""
|
self.itemName = ""
|
||||||
self.itemHandle = None
|
self.itemHandle = None
|
||||||
self.parHandle = None
|
self.parHandle = None
|
||||||
self.itemOrder = None
|
self.itemOrder = None
|
||||||
self.itemType = None
|
self.itemType = nwItemType.NONE
|
||||||
self.itemClass = None
|
self.itemClass = nwItemClass.NONE
|
||||||
self.isExpanded = False
|
self.isExpanded = False
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -69,35 +61,27 @@ class NWItem():
|
|||||||
return
|
return
|
||||||
|
|
||||||
def setType(self, theType):
|
def setType(self, theType):
|
||||||
if isinstance(theType, int):
|
if isinstance(theType, nwItemType):
|
||||||
self.itemType = theType
|
self.itemType = theType
|
||||||
elif theType == "ROOT":
|
|
||||||
self.itemType = self.TYPE_ROOT
|
|
||||||
elif theType == "FOLDER":
|
|
||||||
self.itemType = self.TYPE_FOLDER
|
|
||||||
elif theType == "FILE":
|
|
||||||
self.itemType = self.TYPE_FILE
|
|
||||||
else:
|
else:
|
||||||
logger.error("Unrecognised item type '%s'" % theType)
|
for itemType in nwItemType:
|
||||||
self.itemType = None
|
if theType == itemType.name:
|
||||||
|
self.itemType = itemType
|
||||||
|
return
|
||||||
|
logger.error("Unrecognised item type '%s'" % theType)
|
||||||
|
self.itemType = nwItemType.NONE
|
||||||
return
|
return
|
||||||
|
|
||||||
def setClass(self, theClass):
|
def setClass(self, theClass):
|
||||||
if isinstance(theClass, int):
|
if isinstance(theClass, nwItemClass):
|
||||||
self.itemClass = theClass
|
self.itemClass = theClass
|
||||||
elif theClass == "NONE":
|
|
||||||
self.itemClass = self.CLASS_NONE
|
|
||||||
elif theClass == "NOVEL":
|
|
||||||
self.itemClass = self.CLASS_NOVEL
|
|
||||||
elif theClass == "CHAPTER":
|
|
||||||
self.itemClass = self.CLASS_CHAPTER
|
|
||||||
elif theClass == "CHARACTER":
|
|
||||||
self.itemClass = self.CLASS_CHARACTER
|
|
||||||
elif theClass == "WORLD":
|
|
||||||
self.itemClass = self.CLASS_WORLD
|
|
||||||
else:
|
else:
|
||||||
logger.error("Unrecognised root item '%s'" % theClass)
|
for itemClass in nwItemClass:
|
||||||
self.itemClass = None
|
if theClass == itemClass.name:
|
||||||
|
self.itemClass = itemClass
|
||||||
|
return
|
||||||
|
logger.error("Unrecognised item class '%s'" % theClass)
|
||||||
|
self.itemClass = nwItemClass.NONE
|
||||||
return
|
return
|
||||||
|
|
||||||
def setExpanded(self, expState):
|
def setExpanded(self, expState):
|
||||||
@@ -107,18 +91,4 @@ class NWItem():
|
|||||||
self.isExpanded = expState
|
self.isExpanded = expState
|
||||||
return
|
return
|
||||||
|
|
||||||
def getType(self):
|
|
||||||
if self.itemType == self.TYPE_ROOT: return "ROOT"
|
|
||||||
if self.itemType == self.TYPE_FOLDER: return "FOLDER"
|
|
||||||
if self.itemType == self.TYPE_FILE: return "FILE"
|
|
||||||
return "NONE"
|
|
||||||
|
|
||||||
def getClass(self):
|
|
||||||
if self.itemClass == self.CLASS_NONE: return "NONE"
|
|
||||||
if self.itemClass == self.CLASS_NOVEL: return "NOVEL"
|
|
||||||
if self.itemClass == self.CLASS_CHAPTER: return "CHAPTER"
|
|
||||||
if self.itemClass == self.CLASS_CHARACTER: return "CHARACTER"
|
|
||||||
if self.itemClass == self.CLASS_WORLD: return "WORLD"
|
|
||||||
return "NONE"
|
|
||||||
|
|
||||||
# END Class NWItem
|
# END Class NWItem
|
||||||
|
|||||||
+23
-24
@@ -13,12 +13,13 @@
|
|||||||
import logging
|
import logging
|
||||||
import nw
|
import nw
|
||||||
|
|
||||||
from os import path, mkdir
|
from os import path, mkdir
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
|
from nw.enum import nwItemType, nwItemClass
|
||||||
from nw.project.item import NWItem
|
from nw.project.item import NWItem
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -47,7 +48,7 @@ class NWProject():
|
|||||||
def newRoot(self, rootName, rootClass):
|
def newRoot(self, rootName, rootClass):
|
||||||
newItem = NWItem()
|
newItem = NWItem()
|
||||||
newItem.setName(rootName)
|
newItem.setName(rootName)
|
||||||
newItem.setType(NWItem.TYPE_ROOT)
|
newItem.setType(nwItemType.ROOT)
|
||||||
newItem.setClass(rootClass)
|
newItem.setClass(rootClass)
|
||||||
self._appendItem(None,None,newItem)
|
self._appendItem(None,None,newItem)
|
||||||
return newItem.itemHandle
|
return newItem.itemHandle
|
||||||
@@ -55,7 +56,7 @@ class NWProject():
|
|||||||
def newFolder(self, folderName, folderClass, pHandle):
|
def newFolder(self, folderName, folderClass, pHandle):
|
||||||
newItem = NWItem()
|
newItem = NWItem()
|
||||||
newItem.setName(folderName)
|
newItem.setName(folderName)
|
||||||
newItem.setType(NWItem.TYPE_FOLDER)
|
newItem.setType(nwItemType.FOLDER)
|
||||||
newItem.setClass(folderClass)
|
newItem.setClass(folderClass)
|
||||||
self._appendItem(None,pHandle,newItem)
|
self._appendItem(None,pHandle,newItem)
|
||||||
return newItem.itemHandle
|
return newItem.itemHandle
|
||||||
@@ -63,7 +64,7 @@ class NWProject():
|
|||||||
def newFile(self, fileName, fileClass, pHandle):
|
def newFile(self, fileName, fileClass, pHandle):
|
||||||
newItem = NWItem()
|
newItem = NWItem()
|
||||||
newItem.setName(fileName)
|
newItem.setName(fileName)
|
||||||
newItem.setType(NWItem.TYPE_FILE)
|
newItem.setType(nwItemType.FILE)
|
||||||
newItem.setClass(fileClass)
|
newItem.setClass(fileClass)
|
||||||
self._appendItem(None,pHandle,newItem)
|
self._appendItem(None,pHandle,newItem)
|
||||||
return newItem.itemHandle
|
return newItem.itemHandle
|
||||||
@@ -76,11 +77,11 @@ class NWProject():
|
|||||||
self.projName = ""
|
self.projName = ""
|
||||||
self.bookTitle = ""
|
self.bookTitle = ""
|
||||||
self.bookAuthors = []
|
self.bookAuthors = []
|
||||||
hNovel = self.newRoot("Novel", NWItem.CLASS_NOVEL)
|
hNovel = self.newRoot("Novel", nwItemClass.NOVEL)
|
||||||
hChars = self.newRoot("Characters",NWItem.CLASS_CHARACTER)
|
hChars = self.newRoot("Characters",nwItemClass.CHARACTER)
|
||||||
hWorld = self.newRoot("World", NWItem.CLASS_WORLD)
|
hWorld = self.newRoot("World", nwItemClass.WORLD)
|
||||||
hChapt = self.newFolder("New Chapter", NWItem.CLASS_CHAPTER ,hNovel)
|
hChapt = self.newFolder("New Chapter", nwItemClass.CHAPTER ,hNovel)
|
||||||
hScene = self.newFile("New Scene", NWItem.CLASS_NONE, hChapt)
|
hScene = self.newFile("New Scene", nwItemClass.NONE, hChapt)
|
||||||
return
|
return
|
||||||
|
|
||||||
def openProject(self, fileName):
|
def openProject(self, fileName):
|
||||||
@@ -129,7 +130,7 @@ class NWProject():
|
|||||||
if "handle" in xItem.attrib:
|
if "handle" in xItem.attrib:
|
||||||
tHandle = itemAttrib["handle"]
|
tHandle = itemAttrib["handle"]
|
||||||
else:
|
else:
|
||||||
logger.error("Skipping rntry missing handle")
|
logger.error("Skipping entry missing handle")
|
||||||
continue
|
continue
|
||||||
if "parent" in xItem.attrib:
|
if "parent" in xItem.attrib:
|
||||||
pHandle = itemAttrib["parent"]
|
pHandle = itemAttrib["parent"]
|
||||||
@@ -184,16 +185,14 @@ class NWProject():
|
|||||||
"parent" : str(nwItem.parHandle),
|
"parent" : str(nwItem.parHandle),
|
||||||
"order" : str(nwItem.itemOrder),
|
"order" : str(nwItem.itemOrder),
|
||||||
})
|
})
|
||||||
xItemName = etree.SubElement(xItem,"name")
|
xItemValue = etree.SubElement(xItem,"name")
|
||||||
xItemName.text = str(nwItem.itemName)
|
xItemValue.text = str(nwItem.itemName)
|
||||||
xItemType = etree.SubElement(xItem,"type")
|
xItemValue = etree.SubElement(xItem,"type")
|
||||||
xItemType.text = str(nwItem.getType())
|
xItemValue.text = str(nwItem.itemType.name)
|
||||||
if nwItem.getClass() is not "NONE":
|
xItemValue = etree.SubElement(xItem,"class")
|
||||||
xItemValue = etree.SubElement(xItem,"class")
|
xItemValue.text = str(nwItem.itemClass.name)
|
||||||
xItemValue.text = str(nwItem.getClass())
|
xItemValue = etree.SubElement(xItem,"expanded")
|
||||||
if nwItem.isExpanded:
|
xItemValue.text = str(nwItem.isExpanded)
|
||||||
xItemValue = etree.SubElement(xItem,"expanded")
|
|
||||||
xItemValue.text = str(nwItem.isExpanded)
|
|
||||||
|
|
||||||
# Write the xml tree to file
|
# Write the xml tree to file
|
||||||
with open(path.join(self.projPath,self.projFile),"wb") as outFile:
|
with open(path.join(self.projPath,self.projFile),"wb") as outFile:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<novelWriterXML appVersion="0.1.0" fileVersion="1.0" timeStamp="2018-11-02 21:07:47">
|
<novelWriterXML appVersion="0.0.1" fileVersion="1.0" timeStamp="2018-11-02 23:17:55">
|
||||||
<project>
|
<project>
|
||||||
<name>Sample Project</name>
|
<name>Sample Project</name>
|
||||||
<title>Sample Project</title>
|
<title>Sample Project</title>
|
||||||
@@ -16,25 +16,32 @@
|
|||||||
<item handle="e7ded148d6e4a" order="0" parent="7031beac91f75">
|
<item handle="e7ded148d6e4a" order="0" parent="7031beac91f75">
|
||||||
<name>New Chapter</name>
|
<name>New Chapter</name>
|
||||||
<type>FOLDER</type>
|
<type>FOLDER</type>
|
||||||
|
<class>CHAPTER</class>
|
||||||
<expanded>True</expanded>
|
<expanded>True</expanded>
|
||||||
</item>
|
</item>
|
||||||
<item handle="96b68994dfa3d" order="0" parent="e7ded148d6e4a">
|
<item handle="96b68994dfa3d" order="0" parent="e7ded148d6e4a">
|
||||||
<name>New Scene</name>
|
<name>New Scene</name>
|
||||||
<type>FILE</type>
|
<type>FILE</type>
|
||||||
|
<class>NONE</class>
|
||||||
|
<expanded>False</expanded>
|
||||||
</item>
|
</item>
|
||||||
<item handle="636b6aa9b697b" order="1" parent="e7ded148d6e4a">
|
<item handle="636b6aa9b697b" order="1" parent="e7ded148d6e4a">
|
||||||
<name>New File</name>
|
<name>New File</name>
|
||||||
<type>FILE</type>
|
<type>FILE</type>
|
||||||
|
<class>NONE</class>
|
||||||
|
<expanded>False</expanded>
|
||||||
</item>
|
</item>
|
||||||
<item handle="f6622b4617424" order="1" parent="None">
|
<item handle="f6622b4617424" order="1" parent="None">
|
||||||
<name>Characters</name>
|
<name>Characters</name>
|
||||||
<type>ROOT</type>
|
<type>ROOT</type>
|
||||||
<class>CHARACTER</class>
|
<class>CHARACTER</class>
|
||||||
|
<expanded>False</expanded>
|
||||||
</item>
|
</item>
|
||||||
<item handle="73eee34351f85" order="2" parent="None">
|
<item handle="73eee34351f85" order="2" parent="None">
|
||||||
<name>World</name>
|
<name>World</name>
|
||||||
<type>ROOT</type>
|
<type>ROOT</type>
|
||||||
<class>WORLD</class>
|
<class>WORLD</class>
|
||||||
|
<expanded>False</expanded>
|
||||||
</item>
|
</item>
|
||||||
</content>
|
</content>
|
||||||
</novelWriterXML>
|
</novelWriterXML>
|
||||||
|
|||||||
Reference in New Issue
Block a user