Fix inconsistend expand/collapse when tree items are moved
This commit is contained in:
+15
-18
@@ -35,9 +35,9 @@ from time import time
|
|||||||
from PyQt5.QtCore import Qt, QSize, pyqtSignal, pyqtSlot
|
from PyQt5.QtCore import Qt, QSize, pyqtSignal, pyqtSlot
|
||||||
from PyQt5.QtGui import QIcon, QPalette
|
from PyQt5.QtGui import QIcon, QPalette
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
qApp, QTreeWidget, QTreeWidgetItem, QAbstractItemView, QMenu, QAction,
|
QAbstractItemView, QAction, QDialog, QFrame, QHBoxLayout, QHeaderView,
|
||||||
QFrame, QDialog, QHeaderView, QWidget, QVBoxLayout, QLabel, QToolButton,
|
QInputDialog, QLabel, QMenu, QShortcut, QSizePolicy, QToolButton,
|
||||||
QSizePolicy, QInputDialog, QHBoxLayout, QShortcut
|
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
|
||||||
)
|
)
|
||||||
|
|
||||||
from novelwriter.core import NWDoc
|
from novelwriter.core import NWDoc
|
||||||
@@ -143,15 +143,6 @@ class GuiProjectView(QWidget):
|
|||||||
"""
|
"""
|
||||||
return self.projTree.hasFocus()
|
return self.projTree.hasFocus()
|
||||||
|
|
||||||
def anyFocus(self):
|
|
||||||
"""Check if any widget or child widget has focus.
|
|
||||||
"""
|
|
||||||
if self.hasFocus():
|
|
||||||
return True
|
|
||||||
if self.isAncestorOf(qApp.focusWidget()):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Public Slots
|
# Public Slots
|
||||||
##
|
##
|
||||||
@@ -536,34 +527,40 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
"""Move an item up or down in the tree.
|
"""Move an item up or down in the tree.
|
||||||
"""
|
"""
|
||||||
tHandle = self.getSelectedHandle()
|
tHandle = self.getSelectedHandle()
|
||||||
tItem = self._getTreeItem(tHandle)
|
trItem = self._getTreeItem(tHandle)
|
||||||
if tItem is None:
|
if trItem is None:
|
||||||
logger.verbose("No item selected")
|
logger.verbose("No item selected")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
pItem = tItem.parent()
|
pItem = trItem.parent()
|
||||||
|
isExp = trItem.isExpanded()
|
||||||
if pItem is None:
|
if pItem is None:
|
||||||
tIndex = self.indexOfTopLevelItem(tItem)
|
tIndex = self.indexOfTopLevelItem(trItem)
|
||||||
nChild = self.topLevelItemCount()
|
nChild = self.topLevelItemCount()
|
||||||
|
|
||||||
nIndex = tIndex + nStep
|
nIndex = tIndex + nStep
|
||||||
if nIndex < 0 or nIndex >= nChild:
|
if nIndex < 0 or nIndex >= nChild:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
cItem = self.takeTopLevelItem(tIndex)
|
cItem = self.takeTopLevelItem(tIndex)
|
||||||
self.insertTopLevelItem(nIndex, cItem)
|
self.insertTopLevelItem(nIndex, cItem)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
tIndex = pItem.indexOfChild(tItem)
|
tIndex = pItem.indexOfChild(trItem)
|
||||||
nChild = pItem.childCount()
|
nChild = pItem.childCount()
|
||||||
|
|
||||||
nIndex = tIndex + nStep
|
nIndex = tIndex + nStep
|
||||||
if nIndex < 0 or nIndex >= nChild:
|
if nIndex < 0 or nIndex >= nChild:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
cItem = pItem.takeChild(tIndex)
|
cItem = pItem.takeChild(tIndex)
|
||||||
pItem.insertChild(nIndex, cItem)
|
pItem.insertChild(nIndex, cItem)
|
||||||
self._recordLastMove(cItem, pItem, tIndex)
|
self._recordLastMove(cItem, pItem, tIndex)
|
||||||
|
|
||||||
self._alertTreeChange(tHandle=tHandle, flush=True)
|
self._alertTreeChange(tHandle=tHandle, flush=True)
|
||||||
self.clearSelection()
|
self.clearSelection()
|
||||||
cItem.setSelected(True)
|
trItem.setSelected(True)
|
||||||
|
trItem.setExpanded(isExp)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from tools import buildTestProject
|
|||||||
|
|
||||||
from PyQt5.QtWidgets import QMessageBox, QInputDialog
|
from PyQt5.QtWidgets import QMessageBox, QInputDialog
|
||||||
|
|
||||||
from novelwriter.gui.projtree import GuiProjectView, GuiProjectTree
|
from novelwriter.gui.projtree import GuiProjectTree
|
||||||
from novelwriter.enum import nwItemType, nwItemClass
|
from novelwriter.enum import nwItemType, nwItemClass
|
||||||
|
|
||||||
|
|
||||||
@@ -163,7 +163,6 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd):
|
|||||||
monkeypatch.setattr(QMessageBox, "question", lambda *a: QMessageBox.Yes)
|
monkeypatch.setattr(QMessageBox, "question", lambda *a: QMessageBox.Yes)
|
||||||
monkeypatch.setattr(QMessageBox, "information", lambda *a: QMessageBox.Yes)
|
monkeypatch.setattr(QMessageBox, "information", lambda *a: QMessageBox.Yes)
|
||||||
monkeypatch.setattr(QInputDialog, "getText", lambda *a, text: (text, True))
|
monkeypatch.setattr(QInputDialog, "getText", lambda *a, text: (text, True))
|
||||||
monkeypatch.setattr(GuiProjectView, "anyFocus", lambda *a: True)
|
|
||||||
|
|
||||||
nwTree = nwGUI.treeView
|
nwTree = nwGUI.treeView
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user