diff --git a/nw/enum.py b/nw/enum.py index d253f684..66a9b2da 100644 --- a/nw/enum.py +++ b/nw/enum.py @@ -14,12 +14,11 @@ from enum import Enum class nwItemType(Enum): - NO_TYPE = 0 - ROOT = 1 - FOLDER = 2 - FILE = 3 - TRASH = 4 - TRASHFILE = 5 + NO_TYPE = 0 + ROOT = 1 + FOLDER = 2 + FILE = 3 + TRASH = 4 # END Enum nwItemType diff --git a/nw/gui/doctree.py b/nw/gui/doctree.py index 609338de..a86057a1 100644 --- a/nw/gui/doctree.py +++ b/nw/gui/doctree.py @@ -134,7 +134,7 @@ class GuiDocTree(QTreeWidget): # Add the new item to the tree nwItem = self.theProject.getItem(tHandle) trItem = self._addTreeItem(nwItem) - if pHandle is not None: + if pHandle is not None and pHandle in self.theMap.keys(): self.theMap[pHandle].setExpanded(True) self.clearSelection() trItem.setSelected(True) @@ -148,7 +148,7 @@ class GuiDocTree(QTreeWidget): """ if QApplication.focusWidget() == self: tHandle = self.getSelectedHandle() - tItem = self.theMap[tHandle] + tItem = self._getTreeItem(tHandle) pItem = tItem.parent() if pItem is None: tIndex = self.indexOfTopLevelItem(tItem) @@ -187,15 +187,25 @@ class GuiDocTree(QTreeWidget): def deleteItem(self): tHandle = self.getSelectedHandle() - nwItem = self.theProject.getItem(tHandle) - if nwItem.itemType == nwItemType.FILE: + trItemS = self._getTreeItem(tHandle) + nwItemS = self.theProject.getItem(tHandle) + if nwItemS.itemType == nwItemType.FILE: logger.debug("User requested item %s moved to trash" % tHandle) - self._addTrashRoot() + trItemP = trItemS.parent() + trItemT = self._addTrashRoot() + if trItemP is None or trItemT is None: + logger.error("Could not move item to trash") + return + tIndex = trItemP.indexOfChild(trItemS) + trItemC = trItemP.takeChild(tIndex) + trItemT.addChild(trItemC) + nwItemS.setParent(self.theProject.trashRoot) + return def setTreeItemValues(self, tHandle): - trItem = self.theMap[tHandle] + trItem = self._getTreeItem(tHandle) nwItem = self.theProject.getItem(tHandle) tName = nwItem.itemName tHandle = nwItem.itemHandle @@ -215,7 +225,7 @@ class GuiDocTree(QTreeWidget): return def propagateCount(self, tHandle, theCount, nDepth=0): - tItem = self.theMap[tHandle] + tItem = self._getTreeItem(tHandle) tItem.setText(self.C_COUNT,str(theCount)) pItem = tItem.parent() if pItem is not None: @@ -246,6 +256,11 @@ class GuiDocTree(QTreeWidget): # Internal Functions ## + def _getTreeItem(self, tHandle): + if tHandle in self.theMap.keys(): + return self.theMap[tHandle] + return None + def _scanChildren(self, theList, theItem, theIndex): tHandle = theItem.text(self.C_HANDLE) nwItem = self.theProject.projTree[tHandle] @@ -307,8 +322,13 @@ class GuiDocTree(QTreeWidget): def _addTrashRoot(self): if self.theProject.trashRoot is None: self.theProject.addTrash() - self._addTreeItem(self.theProject.getItem(self.theProject.trashRoot)) - return + trItem = self._addTreeItem( + self.theProject.getItem(self.theProject.trashRoot) + ) + trItem.setExpanded(True) + else: + trItem = self._getTreeItem(self.theProject.trashRoot) + return trItem def _addOrphanedRoot(self): if self.orphRoot is None: @@ -329,7 +349,7 @@ class GuiDocTree(QTreeWidget): return def _updateItemParent(self, tHandle): - trItemS = self.theMap[tHandle] + trItemS = self._getTreeItem(tHandle) nwItemS = self.theProject.getItem(tHandle) trItemP = trItemS.parent() if trItemP is None: @@ -341,7 +361,7 @@ class GuiDocTree(QTreeWidget): return def _moveOrphanedItem(self, tHandle, dHandle): - trItemS = self.theMap[tHandle] + trItemS = self._getTreeItem(tHandle) nwItemS = self.theProject.getItem(tHandle) nwItemD = self.theProject.getItem(dHandle) trItemP = trItemS.parent() diff --git a/nw/project/item.py b/nw/project/item.py index f90ff9d9..8e0cbbaf 100644 --- a/nw/project/item.py +++ b/nw/project/item.py @@ -36,7 +36,6 @@ class NWItem(): self.itemLayout = nwItemLayout.NO_LAYOUT self.itemStatus = 0 self.itemDepth = None - self.hasChildren = False self.isExpanded = False self.charCount = 0 @@ -60,7 +59,6 @@ class NWItem(): xSub = self._subPack(xPack,"class", text=str(self.itemClass.name)) xSub = self._subPack(xPack,"status", text=str(self.itemStatus)) xSub = self._subPack(xPack,"depth", text=str(self.itemDepth)) - xSub = self._subPack(xPack,"children", text=str(self.hasChildren)) xSub = self._subPack(xPack,"expanded", text=str(self.isExpanded)) if self.itemType == nwItemType.FILE: xSub = self._subPack(xPack,"layout", text=str(self.itemLayout.name)) @@ -90,7 +88,6 @@ class NWItem(): elif tagName == "layout": self.setLayout(tagValue) elif tagName == "status": self.setStatus(tagValue) elif tagName == "depth": self.setDepth(tagValue) - elif tagName == "children": self.setChildren(tagValue) elif tagName == "expanded": self.setExpanded(tagValue) elif tagName == "charCount": self.setCharCount(tagValue) elif tagName == "wordCount": self.setWordCount(tagValue) @@ -171,10 +168,6 @@ class NWItem(): logger.error("Invalid item depth %d" % theDepth) return - def setChildren(self, hasChildren): - self.hasChildren = hasChildren - return - def setExpanded(self, expState): if isinstance(expState, str): self.isExpanded = expState == str(True) diff --git a/nw/project/project.py b/nw/project/project.py index cbaa0327..89dc230b 100644 --- a/nw/project/project.py +++ b/nw/project/project.py @@ -393,8 +393,6 @@ class NWProject(): self.projTree[tHandle] = nwItem self.treeOrder.append(tHandle) - if pHandle is not None: - self.projTree[pHandle].setChildren(True) if nwItem.itemType == nwItemType.ROOT: logger.verbose("Entry %s is a root item" % str(tHandle))