New folders and files can now be added.

This commit is contained in:
Veronica K. B. Olsen
2018-11-02 22:08:15 +01:00
parent a5d453f7cb
commit c2dbbf647c
6 changed files with 122 additions and 34 deletions
+80 -20
View File
@@ -53,6 +53,48 @@ class GuiDocTree(QTreeWidget):
return
def newTreeItem(self, itemType):
rHandle = self._getSelectedHandle()
logger.verbose("Adding item relative to handle %s" % rHandle)
# Figure out where to put the new item
if rHandle is None:
nwType = NWItem.TYPE_ROOT
pHandle = None
else:
rItem = self.theProject.projTree[rHandle]
if rItem.itemType == NWItem.TYPE_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 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)
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)
else:
logger.error("Failed to add new item.")
return
# Add the new item to the tree
nwItem = self.theProject.projTree[tHandle]
self._addTreeItem(nwItem)
return
def saveTreeOrder(self):
theList = []
for i in range(self.topLevelItemCount()):
@@ -70,31 +112,49 @@ class GuiDocTree(QTreeWidget):
self._scanChildren(theList, theItem.child(i), i)
return theList
def _scanParents(self, theItem, theCount=0):
if theItem.parent() is not None:
theItem, theCount = self._scanParents(theItem.parent(), theCount)
return theItem, theCount+1
def _addTreeItem(self, nwItem):
tName = nwItem.itemName
tHandle = nwItem.itemHandle
pHandle = nwItem.parHandle
tStatus = 0
wCount = 0
newItem = QTreeWidgetItem([
tName, str(tStatus), str(wCount), tHandle
])
self.theMap[tHandle] = newItem
if pHandle is None:
self.addTopLevelItem(newItem)
else:
self.theMap[pHandle].addChild(newItem)
newItem.setExpanded(nwItem.isExpanded)
if nwItem.itemType == NWItem.TYPE_ROOT:
newItem.setIcon(0, QIcon.fromTheme("drive-harddisk"))
elif nwItem.itemType == NWItem.TYPE_FOLDER:
newItem.setIcon(0, QIcon.fromTheme("folder"))
elif nwItem.itemType == NWItem.TYPE_FILE:
newItem.setIcon(0, QIcon.fromTheme("x-office-document"))
return True
def buildTree(self):
self.clear()
for tHandle in self.theProject.projTree:
nwItem = self.theProject.projTree[tHandle]
tName = nwItem.itemName
tStatus = 0
wCount = 0
pHandle = nwItem.parHandle
newItem = QTreeWidgetItem([
tName, str(tStatus), str(wCount), tHandle
])
self.theMap[tHandle] = newItem
if pHandle is None:
self.addTopLevelItem(newItem)
else:
self.theMap[pHandle].addChild(newItem)
newItem.setExpanded(nwItem.isExpanded)
if nwItem.itemType == NWItem.TYPE_ROOT:
newItem.setIcon(0, QIcon.fromTheme("drive-harddisk"))
elif nwItem.itemType == NWItem.TYPE_FOLDER:
newItem.setIcon(0, QIcon.fromTheme("folder"))
elif nwItem.itemType == NWItem.TYPE_FILE:
newItem.setIcon(0, QIcon.fromTheme("x-office-document"))
nwItem = self.theProject.projTree[tHandle]
self._addTreeItem(nwItem)
return True
def _getSelectedHandle(self):
selItem = self.selectedItems()
if len(selItem) == 0:
return None
if isinstance(selItem[0], QTreeWidgetItem):
return selItem[0].text(3)
return None
def getColumnSizes(self):
retVals = [
self.columnWidth(0),
+11 -2
View File
@@ -392,16 +392,25 @@ class GuiMain(QMainWindow):
toolBar.setToolButtonStyle(Qt.ToolButtonIconOnly)
toolBar.setIconSize(QSize(16,16))
# Root > New
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))
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 folder")
tbFolderNew.setStatusTip("Create New Chapter or Folder")
tbFolderNew.triggered.connect(lambda: self.treeView.newTreeItem(NWItem.TYPE_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.setStatusTip("Create New Document")
tbDocNew.triggered.connect(lambda: self.treeView.newTreeItem(NWItem.TYPE_FILE))
toolBar.addAction(tbDocNew)
return
+6 -2
View File
@@ -27,8 +27,9 @@ class NWItem():
CLASS_NONE = 0
CLASS_NOVEL = 1
CLASS_CHARACTER = 2
CLASS_WORLD = 3
CLASS_CHAPTER = 2
CLASS_CHARACTER = 3
CLASS_WORLD = 4
def __init__(self):
@@ -88,6 +89,8 @@ class NWItem():
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":
@@ -113,6 +116,7 @@ class NWItem():
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"
+8 -8
View File
@@ -44,27 +44,27 @@ class NWProject():
def buildProjectTree(self):
return True
def newRoot(self, rootName, rootType):
def newRoot(self, rootName, rootClass):
newItem = NWItem()
newItem.setName(rootName)
newItem.setType(NWItem.TYPE_ROOT)
newItem.setClass(rootType)
newItem.setClass(rootClass)
self._appendItem(None,None,newItem)
return newItem.itemHandle
def newFolder(self, folderName, pHandle):
def newFolder(self, folderName, folderClass, pHandle):
newItem = NWItem()
newItem.setName(folderName)
newItem.setType(NWItem.TYPE_FOLDER)
newItem.setClass(NWItem.CLASS_NONE)
newItem.setClass(folderClass)
self._appendItem(None,pHandle,newItem)
return newItem.itemHandle
def newFile(self, fileName, pHandle):
def newFile(self, fileName, fileClass, pHandle):
newItem = NWItem()
newItem.setName(fileName)
newItem.setType(NWItem.TYPE_FILE)
newItem.setClass(NWItem.CLASS_NONE)
newItem.setClass(fileClass)
self._appendItem(None,pHandle,newItem)
return newItem.itemHandle
@@ -79,8 +79,8 @@ class NWProject():
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", hNovel)
hScene = self.newFile("New Scene", hChapt)
hChapt = self.newFolder("New Chapter", NWItem.CLASS_CHAPTER ,hNovel)
hScene = self.newFile("New Scene", NWItem.CLASS_NONE, hChapt)
return
def openProject(self, fileName):
@@ -0,0 +1,11 @@
<html>
<head>
<meta name="qrichtext" content="1">
<style type="text/css">
p, li { white-space: pre-wrap; }
</style>
</head>
<body style=" font-family:'Source Sans Pro'; font-size:13pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">File with stuff.</p>
</body>
</html>
+6 -2
View File
@@ -1,12 +1,12 @@
<?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="0.1.0" fileVersion="1.0" timeStamp="2018-10-30 21:03:03">
<novelWriterXML appVersion="0.1.0" fileVersion="1.0" timeStamp="2018-11-02 21:07:47">
<project>
<name>Sample Project</name>
<title>Sample Project</title>
<author>Jane Smith</author>
<author>Jay Doh</author>
</project>
<content count="5">
<content count="6">
<item handle="7031beac91f75" order="0" parent="None">
<name>Novel</name>
<type>ROOT</type>
@@ -22,6 +22,10 @@
<name>New Scene</name>
<type>FILE</type>
</item>
<item handle="636b6aa9b697b" order="1" parent="e7ded148d6e4a">
<name>New File</name>
<type>FILE</type>
</item>
<item handle="f6622b4617424" order="1" parent="None">
<name>Characters</name>
<type>ROOT</type>