diff --git a/nw/core/index.py b/nw/core/index.py index 5b7cc05c..6962dbb7 100644 --- a/nw/core/index.py +++ b/nw/core/index.py @@ -267,13 +267,24 @@ class NWIndex(): files before we save them, unless we're rebuilding the index. """ theItem = self.theProject.projTree[tHandle] + theRoot = self.theProject.projTree.getRootItem(tHandle) if theItem is None: + logger.error("Not indexing unknown item %s" % tHandle) return False if theItem.itemType != nwItemType.FILE: + logger.error("Not indexing non-file item %s" % tHandle) return False if theItem.parHandle == self.theProject.projTree.trashRoot(): + logger.error("Not indexing trash item %s" % tHandle) return False if theItem.itemLayout == nwItemLayout.NO_LAYOUT: + logger.error("Not indexing no-layout item %s" % tHandle) + return False + if theRoot is None: + logger.error("Not indexing homeless item %s" % tHandle) + return False + if theRoot.itemClass == nwItemClass.ARCHIVE: + logger.error("Not indexing archived item %s" % tHandle) return False itemClass = theItem.itemClass diff --git a/nw/core/tree.py b/nw/core/tree.py index 74080bd3..3181892a 100644 --- a/nw/core/tree.py +++ b/nw/core/tree.py @@ -245,12 +245,10 @@ class NWTree(): if tItem is not None: for i in range(200): if tItem.parHandle is None: - return tHandle + return tItem else: tHandle = tItem.parHandle - tItem = self.__getitem__(tHandle) - if tItem is None: - return tHandle + tItem = self.__getitem__(tHandle) return None def getItemPath(self, tHandle): diff --git a/nw/gui/projtree.py b/nw/gui/projtree.py index f80437ed..bcc81036 100644 --- a/nw/gui/projtree.py +++ b/nw/gui/projtree.py @@ -201,7 +201,17 @@ class GuiProjectTree(QTreeWidget): if pHandle == self.theProject.projTree.trashRoot(): self.makeAlert( - "Cannot add new files or folders to the trash folder.", nwAlert.ERROR + "Cannot add new files or folders to the %s folder." % ( + nwLabels.CLASS_NAME[nwItemClass.TRASH] + ), nwAlert.ERROR + ) + return False + + if pItem.itemClass == nwItemClass.ARCHIVE: + self.makeAlert( + "Cannot add new files or folders to the %s folder." % ( + nwLabels.CLASS_NAME[nwItemClass.ARCHIVE] + ), nwAlert.ERROR ) return False @@ -671,6 +681,7 @@ class GuiProjectTree(QTreeWidget): isRoot = snItem.itemType == nwItemType.ROOT onFree = dnItem.itemClass == nwItemClass.ARCHIVE onFree |= dnItem.itemClass == nwItemClass.TRASH + onFree &= snItem.itemType == nwItemType.FILE isOnTop = self.dropIndicatorPosition() == QAbstractItemView.OnItem if (isSame or isNone or isNote or onFree) and not (onFile and isOnTop) and not isRoot: logger.debug("Drag'n'drop of item %s accepted" % sHandle) @@ -944,14 +955,15 @@ class GuiProjectTreeMenu(QMenu): inTrash = theItem.parHandle == trashHandle isTrash = theItem.itemHandle == trashHandle isFile = theItem.itemType == nwItemType.FILE + isArch = theItem.itemClass == nwItemClass.ARCHIVE isOrph = isFile and theItem.parHandle is None showOpen = isFile showView = isFile showEdit = not isTrash and not isOrph showExport = isFile and not inTrash and not isOrph - showNewFile = not isTrash and not inTrash and not isOrph - showNewFolder = not isTrash and not inTrash and not isOrph + showNewFile = not isTrash and not inTrash and not isOrph and not isArch + showNewFolder = not isTrash and not inTrash and not isOrph and not isArch showDelete = not isTrash showEmpty = isTrash