Move to trash and drag'n'drop items now updates word counts

This commit is contained in:
Veronica K. B. Olsen
2020-06-22 19:07:30 +02:00
parent 64e2521974
commit bc6751ba00
+20 -17
View File
@@ -237,8 +237,8 @@ class GuiProjectTree(QTreeWidget):
""" """
if qApp.focusWidget() == self and self.theParent.hasProject: if qApp.focusWidget() == self and self.theParent.hasProject:
tHandle = self.getSelectedHandle() tHandle = self.getSelectedHandle()
tItem = self._getTreeItem(tHandle) tItem = self._getTreeItem(tHandle)
pItem = tItem.parent() pItem = tItem.parent()
if pItem is None: if pItem is None:
tIndex = self.indexOfTopLevelItem(tItem) tIndex = self.indexOfTopLevelItem(tItem)
nChild = self.topLevelItemCount() nChild = self.topLevelItemCount()
@@ -367,6 +367,7 @@ class GuiProjectTree(QTreeWidget):
if nwItemS is None: if nwItemS is None:
return False return False
wCount = int(trItemS.text(self.C_COUNT))
if nwItemS.itemType == nwItemType.FILE: if nwItemS.itemType == nwItemType.FILE:
logger.debug("User requested file %s moved to trash" % tHandle) logger.debug("User requested file %s moved to trash" % tHandle)
trItemP = trItemS.parent() trItemP = trItemS.parent()
@@ -422,10 +423,12 @@ class GuiProjectTree(QTreeWidget):
if pHandle is None: if pHandle is None:
logger.warning("File has no parent item") logger.warning("File has no parent item")
self.propagateCount(tHandle, 0)
tIndex = trItemP.indexOfChild(trItemS) tIndex = trItemP.indexOfChild(trItemS)
trItemC = trItemP.takeChild(tIndex) trItemC = trItemP.takeChild(tIndex)
trItemT.addChild(trItemC) trItemT.addChild(trItemC)
nwItemS.setParent(self.theProject.projTree.trashRoot()) nwItemS.setParent(self.theProject.projTree.trashRoot())
self.propagateCount(tHandle, wCount)
self._setTreeChanged(True) self._setTreeChanged(True)
self.theParent.theIndex.deleteHandle(tHandle) self.theParent.theIndex.deleteHandle(tHandle)
@@ -504,7 +507,7 @@ class GuiProjectTree(QTreeWidget):
""" """
tItem = self._getTreeItem(tHandle) tItem = self._getTreeItem(tHandle)
if tItem is not None: if tItem is not None:
tItem.setText(self.C_COUNT,str(theCount)) tItem.setText(self.C_COUNT, str(theCount))
pItem = tItem.parent() pItem = tItem.parent()
if pItem is not None: if pItem is not None:
pCount = 0 pCount = 0
@@ -629,23 +632,26 @@ class GuiProjectTree(QTreeWidget):
logger.error("Invalid drop index") logger.error("Invalid drop index")
return return
dItem = self.itemFromIndex(dIndex) sItem = self._getTreeItem(sHandle)
dItem = self.itemFromIndex(dIndex)
dHandle = dItem.data(self.C_NAME, Qt.UserRole) dHandle = dItem.data(self.C_NAME, Qt.UserRole)
snItem = self.theProject.projTree[sHandle] snItem = self.theProject.projTree[sHandle]
dnItem = self.theProject.projTree[dHandle] dnItem = self.theProject.projTree[dHandle]
if dnItem is None: if dnItem is None:
self.makeAlert("The item cannot be moved to that location.", nwAlert.ERROR) self.makeAlert("The item cannot be moved to that location.", nwAlert.ERROR)
return return
isSame = snItem.itemClass == dnItem.itemClass wCount = int(sItem.text(self.C_COUNT))
isNone = snItem.itemClass == nwItemClass.NO_CLASS isSame = snItem.itemClass == dnItem.itemClass
isNote = snItem.itemLayout == nwItemLayout.NOTE isNone = snItem.itemClass == nwItemClass.NO_CLASS
onFile = dnItem.itemType == nwItemType.FILE isNote = snItem.itemLayout == nwItemLayout.NOTE
isRoot = snItem.itemType == nwItemType.ROOT onFile = dnItem.itemType == nwItemType.FILE
onRoot = dnItem.itemType == nwItemType.ROOT isRoot = snItem.itemType == nwItemType.ROOT
onRoot = dnItem.itemType == nwItemType.ROOT
isOnTop = self.dropIndicatorPosition() == QAbstractItemView.OnItem isOnTop = self.dropIndicatorPosition() == QAbstractItemView.OnItem
if (isSame or isNone or isNote) and not (onFile and isOnTop) and not isRoot: if (isSame or isNone or isNote) and not (onFile and isOnTop) and not isRoot:
logger.debug("Drag'n'drop of item %s accepted" % sHandle) logger.debug("Drag'n'drop of item %s accepted" % sHandle)
self.propagateCount(sHandle, 0)
QTreeWidget.dropEvent(self, theEvent) QTreeWidget.dropEvent(self, theEvent)
if isNone: if isNone:
self._moveOrphanedItem(sHandle, dHandle) self._moveOrphanedItem(sHandle, dHandle)
@@ -660,6 +666,7 @@ class GuiProjectTree(QTreeWidget):
)) ))
snItem.setClass(dnItem.itemClass) snItem.setClass(dnItem.itemClass)
self.setTreeItemValues(sHandle) self.setTreeItemValues(sHandle)
self.propagateCount(sHandle, wCount)
else: else:
logger.debug("Drag'n'drop of item %s not accepted" % sHandle) logger.debug("Drag'n'drop of item %s not accepted" % sHandle)
self.makeAlert("The item cannot be moved to that location.", nwAlert.ERROR) self.makeAlert("The item cannot be moved to that location.", nwAlert.ERROR)
@@ -794,8 +801,7 @@ class GuiProjectTree(QTreeWidget):
def _updateItemParent(self, tHandle): def _updateItemParent(self, tHandle):
"""Update the parent handle of an item so that the information """Update the parent handle of an item so that the information
in the project is consistent with the treeView. Also move the in the project is consistent with the treeView.
word count over to the new parent tree.
""" """
trItemS = self._getTreeItem(tHandle) trItemS = self._getTreeItem(tHandle)
nwItemS = self.theProject.projTree[tHandle] nwItemS = self.theProject.projTree[tHandle]
@@ -805,10 +811,7 @@ class GuiProjectTree(QTreeWidget):
return False return False
pHandle = trItemP.data(self.C_NAME, Qt.UserRole) pHandle = trItemP.data(self.C_NAME, Qt.UserRole)
wC = int(trItemS.text(self.C_COUNT))
self.propagateCount(tHandle, -wC)
nwItemS.setParent(pHandle) nwItemS.setParent(pHandle)
self.propagateCount(tHandle, wC)
self.setTreeItemValues(tHandle) self.setTreeItemValues(tHandle)
self._setTreeChanged(True) self._setTreeChanged(True)