Using global enum class instead of constants in classes.

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