diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index b47e6bc4..93478c7a 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -1110,67 +1110,55 @@ class GuiProjectTree(QTreeWidget): # Transform Item # ============== - mTrans = ctxMenu.addMenu(self.tr("Transform")) + if not isRoot: + mTrans = ctxMenu.addMenu(self.tr("Transform")) - if isFile and tItem.documentAllowed(): - if tItem.isNoteLayout(): + trDoc = trConst(nwLabels.LAYOUT_NAME[nwItemLayout.DOCUMENT]) + trNote = trConst(nwLabels.LAYOUT_NAME[nwItemLayout.NOTE]) + + isDocFile = tItem.isDocumentLayout() and isFile + isNoteFile = tItem.isNoteLayout() and isFile + + if (isNoteFile or isFolder) and tItem.documentAllowed(): mTrans.addAction( - self.tr("Convert to {0}").format( - trConst(nwLabels.LAYOUT_NAME[nwItemLayout.DOCUMENT]) - ), + self.tr("Convert to {0}").format(trDoc), lambda: self._changeItemLayout(tHandle, nwItemLayout.DOCUMENT) ) - else: + + if isDocFile or isFolder: mTrans.addAction( - self.tr("Convert to {0}").format( - trConst(nwLabels.LAYOUT_NAME[nwItemLayout.NOTE]) - ), + self.tr("Convert to {0}").format(trNote), lambda: self._changeItemLayout(tHandle, nwItemLayout.NOTE) ) - elif isFolder: - if tItem.documentAllowed(): - mTrans.addAction( - self.tr("Convert to {0}").format( - trConst(nwLabels.LAYOUT_NAME[nwItemLayout.DOCUMENT]) - ), - lambda: self._covertFolderToFile(tHandle, nwItemLayout.DOCUMENT) - ) - mTrans.addAction( - self.tr("Convert to {0}").format( - trConst(nwLabels.LAYOUT_NAME[nwItemLayout.NOTE]) - ), - lambda: self._covertFolderToFile(tHandle, nwItemLayout.NOTE) - ) - if hasChild: + if hasChild: + if isFile: + mTrans.addAction( + self.tr("Merge Child Items into Self"), + lambda: self._mergeDocuments(tHandle, False) + ) + mTrans.addAction( + self.tr("Merge Child Items into New"), + lambda: self._mergeDocuments(tHandle, True) + ) + elif isFolder: + mTrans.addAction( + self.tr("Combine Documents in Folder"), + lambda: self._mergeDocuments(tHandle, True) + ) + if isFile: mTrans.addAction( - self.tr("Merge Child Items into Self"), - lambda: self._mergeDocuments(tHandle, False) - ) - mTrans.addAction( - self.tr("Merge Child Items into New"), - lambda: self._mergeDocuments(tHandle, True) - ) - else: - mTrans.addAction( - self.tr("Combine Documents in Folder"), - lambda: self._mergeDocuments(tHandle, True) + self.tr("Split Document by Header"), + lambda: self._splitDocument(tHandle) ) - if isFile: - mTrans.addAction( - self.tr("Split Document by Header"), - lambda: self._splitDocument(tHandle) - ) + # Expand/Collapse/Delete + # ====================== ctxMenu.addSeparator() - # Expand/Collapse - # =============== - if hasChild: - ctxMenu.addSeparator() ctxMenu.addAction( self.tr("Expand All"), lambda: self.setExpandedFromHandle(tHandle, True) @@ -1180,9 +1168,6 @@ class GuiProjectTree(QTreeWidget): lambda: self.setExpandedFromHandle(tHandle, False) ) - # Delete Item - # =========== - if tItem.itemClass == nwItemClass.TRASH or isRoot or (isFolder and not hasChild): ctxMenu.addAction( self.tr("Delete Permanently"), lambda: self.permanentlyDeleteItem(tHandle) @@ -1192,6 +1177,7 @@ class GuiProjectTree(QTreeWidget): self.tr("Move to Trash"), lambda: self.moveItemToTrash(tHandle) ) + # Show Context Menu ctxMenu.exec_(self.viewport().mapToGlobal(clickPos)) return True @@ -1403,7 +1389,11 @@ class GuiProjectTree(QTreeWidget): tItem = self.theProject.tree[tHandle] if tItem is None: - return + return False + + if tItem.isRootType(): + logger.error("Cannot merge root item") + return False if not newFile: itemList.remove(tHandle) @@ -1427,7 +1417,7 @@ class GuiProjectTree(QTreeWidget): docMerger.setTargetDoc(tHandle) mHandle = tHandle else: - return + return False for sHandle in mrgData.get("finalItems", []): docMerger.appendText(sHandle, True, mLabel) @@ -1436,7 +1426,7 @@ class GuiProjectTree(QTreeWidget): self.mainGui.makeAlert([ self.tr("Could not save document."), docMerger.getError() ], nwAlert.ERROR) - return + return False if newFile: self.mainGui.projView.revealNewTreeItem(mHandle, tHandle) @@ -1453,7 +1443,7 @@ class GuiProjectTree(QTreeWidget): self._alertTreeChange(mHandle, flush=True) self.projView.wordCountsChanged.emit() - return + return True def _splitDocument(self, tHandle): return