Fixed both drag and drop and moveTreeItem for top level items.

This commit is contained in:
Veronica K. B. Olsen
2019-05-03 22:16:00 +02:00
parent 2ed9f11716
commit eb39b856b1
+22 -8
View File
@@ -142,12 +142,20 @@ class GuiDocTree(QTreeWidget):
tHandle = self.getSelectedHandle() tHandle = self.getSelectedHandle()
tItem = self.theMap[tHandle] tItem = self.theMap[tHandle]
pItem = tItem.parent() pItem = tItem.parent()
tIndex = pItem.indexOfChild(tItem) if pItem is None:
nChild = pItem.childCount() tIndex = self.indexOfTopLevelItem(tItem)
nIndex = tIndex + nStep nChild = self.topLevelItemCount()
if nIndex < 0 or nIndex >= nChild: return nIndex = tIndex + nStep
cItem = pItem.takeChild(tIndex) if nIndex < 0 or nIndex >= nChild: return
pItem.insertChild(nIndex, cItem) cItem = self.takeTopLevelItem(tIndex)
self.insertTopLevelItem(nIndex, cItem)
else:
tIndex = pItem.indexOfChild(tItem)
nChild = pItem.childCount()
nIndex = tIndex + nStep
if nIndex < 0 or nIndex >= nChild: return
cItem = pItem.takeChild(tIndex)
pItem.insertChild(nIndex, cItem)
self.clearSelection() self.clearSelection()
cItem.setSelected(True) cItem.setSelected(True)
return return
@@ -352,15 +360,21 @@ class GuiDocTree(QTreeWidget):
dnItem = self.theProject.getItem(dHandle) dnItem = self.theProject.getItem(dHandle)
isSame = snItem.itemClass == dnItem.itemClass isSame = snItem.itemClass == dnItem.itemClass
isNone = snItem.itemClass == nwItemClass.NO_CLASS isNone = snItem.itemClass == nwItemClass.NO_CLASS
isFile = dnItem.itemType == nwItemType.FILE onFile = dnItem.itemType == nwItemType.FILE
isRoot = snItem.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) and not (isFile and isOnTop) and not isRoot: isAbove = self.dropIndicatorPosition() == QAbstractItemView.AboveItem
isBelow = self.dropIndicatorPosition() == QAbstractItemView.BelowItem
if (isSame or isNone) and not (onFile and isOnTop) and not isRoot:
logger.verbose("Drag'n'drop of item %s accepted" % sHandle) logger.verbose("Drag'n'drop of item %s accepted" % sHandle)
QTreeWidget.dropEvent(self, theEvent) QTreeWidget.dropEvent(self, theEvent)
if isNone: if isNone:
self._moveOrphanedItem(sHandle, dHandle) self._moveOrphanedItem(sHandle, dHandle)
self._cleanOrphanedRoot() self._cleanOrphanedRoot()
elif isRoot and (isAbove or isBelow) and onRoot:
logger.verbose("Drag'n'drop of item %s accepted" % sHandle)
QTreeWidget.dropEvent(self, theEvent)
else: else:
logger.verbose("Drag'n'drop of item %s not accepted" % sHandle) logger.verbose("Drag'n'drop of item %s not accepted" % sHandle)