From 0a5c51ad4b7d8648c2f8d63b35e5389aa786f71e Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 8 May 2022 18:07:21 +0200 Subject: [PATCH 1/2] Make deleting empty folders bypass Trash --- novelwriter/gui/projtree.py | 11 +++++++++++ tests/test_gui/test_gui_projtree.py | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index 4b4d5e2d..75429563 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -445,6 +445,7 @@ class GuiProjectTree(QTreeWidget): wCount = self._getItemWordCount(tHandle) if nwItemS.itemType == nwItemType.ROOT: + # Only an empty ROOT folder can be deleted logger.debug("User requested a root folder '%s' deleted", tHandle) tIndex = self.indexOfTopLevelItem(trItemS) if trItemS.childCount() == 0: @@ -459,7 +460,17 @@ class GuiProjectTree(QTreeWidget): ), nwAlert.ERROR) return False + elif nwItemS.itemType == nwItemType.FOLDER and trItemS.childCount() == 0: + # An empty FOLDER is just deleted without any further checks + logger.debug("User requested an empty folder '%s' deleted", tHandle) + trItemP = trItemS.parent() + tIndex = trItemP.indexOfChild(trItemS) + trItemP.takeChild(tIndex) + self._deleteTreeItem(tHandle) + self._setTreeChanged(True) + else: + # A populated FOLDER or a FILE requires confirmtation logger.debug("User requested a file or folder '%s' deleted", tHandle) trItemP = trItemS.parent() trItemT = self._addTrashRoot() diff --git a/tests/test_gui/test_gui_projtree.py b/tests/test_gui/test_gui_projtree.py index 59d02c2d..af851138 100644 --- a/tests/test_gui/test_gui_projtree.py +++ b/tests/test_gui/test_gui_projtree.py @@ -398,6 +398,15 @@ def testGuiProjTree_DeleteItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockR assert not os.path.isfile(os.path.join(fncDir, "project", "content", "0000000000015.nwd")) assert not os.path.isfile(os.path.join(fncDir, "project", "content", "0000000000016.nwd")) + # Add an empty folder, which can be deleted with no further restrictions + nwTree.setSelectedHandle("0000000000009") + assert nwTree.newTreeItem(nwItemType.FOLDER) is True + assert nwTree.getTreeFromHandle("0000000000009") == ["0000000000009", "0000000000017"] + + nwTree.setSelectedHandle("0000000000017") + assert nwTree.deleteItem("0000000000017") is True + assert nwTree.getTreeFromHandle("0000000000009") == ["0000000000009"] + # Empty Trash # =========== From 9e9beea83c973cfeb71ef3338e8f2c903954d4ba Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 8 May 2022 18:21:17 +0200 Subject: [PATCH 2/2] Fix outdated docstring in project tree class --- novelwriter/gui/projtree.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index 75429563..0339ec5f 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -760,8 +760,8 @@ class GuiProjectTree(QTreeWidget): return def dropEvent(self, theEvent): - """Overload the drop of dragged item event to check whether the - drop is allowed or not. Disallowed drops are cancelled. + """Overload the drop item event to ensure relevant data has been + updated. """ sHandle = self.getSelectedHandle() if sHandle is None: