Change how item data is stored in the project tree
This commit is contained in:
+18
-14
@@ -417,11 +417,15 @@ class GuiProjectToolBar(QWidget):
|
|||||||
|
|
||||||
class GuiProjectTree(QTreeWidget):
|
class GuiProjectTree(QTreeWidget):
|
||||||
|
|
||||||
|
C_DATA = 0
|
||||||
C_NAME = 0
|
C_NAME = 0
|
||||||
C_COUNT = 1
|
C_COUNT = 1
|
||||||
C_ACTIVE = 2
|
C_ACTIVE = 2
|
||||||
C_STATUS = 3
|
C_STATUS = 3
|
||||||
|
|
||||||
|
D_HANDLE = Qt.UserRole
|
||||||
|
D_WORDS = Qt.UserRole + 1
|
||||||
|
|
||||||
def __init__(self, projView):
|
def __init__(self, projView):
|
||||||
super().__init__(parent=projView)
|
super().__init__(parent=projView)
|
||||||
|
|
||||||
@@ -974,10 +978,10 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
|
|
||||||
if countChildren:
|
if countChildren:
|
||||||
for i in range(tItem.childCount()):
|
for i in range(tItem.childCount()):
|
||||||
newCount += int(tItem.child(i).data(self.C_COUNT, Qt.UserRole))
|
newCount += int(tItem.child(i).data(self.C_DATA, self.D_WORDS))
|
||||||
|
|
||||||
tItem.setText(self.C_COUNT, f"{newCount:n}")
|
tItem.setText(self.C_COUNT, f"{newCount:n}")
|
||||||
tItem.setData(self.C_COUNT, Qt.UserRole, int(newCount))
|
tItem.setData(self.C_DATA, self.D_WORDS, int(newCount))
|
||||||
|
|
||||||
pItem = tItem.parent()
|
pItem = tItem.parent()
|
||||||
if pItem is None:
|
if pItem is None:
|
||||||
@@ -986,8 +990,8 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
pCount = 0
|
pCount = 0
|
||||||
pHandle = None
|
pHandle = None
|
||||||
for i in range(pItem.childCount()):
|
for i in range(pItem.childCount()):
|
||||||
pCount += int(pItem.child(i).data(self.C_COUNT, Qt.UserRole))
|
pCount += int(pItem.child(i).data(self.C_DATA, self.D_WORDS))
|
||||||
pHandle = pItem.data(self.C_NAME, Qt.UserRole)
|
pHandle = pItem.data(self.C_DATA, self.D_HANDLE)
|
||||||
|
|
||||||
if pHandle:
|
if pHandle:
|
||||||
if self.theProject.tree.checkType(pHandle, nwItemType.FILE):
|
if self.theProject.tree.checkType(pHandle, nwItemType.FILE):
|
||||||
@@ -1038,8 +1042,8 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
dstIndex = min(max(0, dstIndex), dstItem.childCount())
|
dstIndex = min(max(0, dstIndex), dstItem.childCount())
|
||||||
sHandle = srcItem.data(self.C_NAME, Qt.UserRole)
|
sHandle = srcItem.data(self.C_DATA, self.D_HANDLE)
|
||||||
dHandle = dstItem.data(self.C_NAME, Qt.UserRole)
|
dHandle = dstItem.data(self.C_DATA, self.D_HANDLE)
|
||||||
logger.debug("Moving item '%s' back to '%s', index %d", sHandle, dHandle, dstIndex)
|
logger.debug("Moving item '%s' back to '%s', index %d", sHandle, dHandle, dstIndex)
|
||||||
|
|
||||||
wCount = self._getItemWordCount(sHandle)
|
wCount = self._getItemWordCount(sHandle)
|
||||||
@@ -1063,7 +1067,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
"""
|
"""
|
||||||
selItem = self.selectedItems()
|
selItem = self.selectedItems()
|
||||||
if selItem:
|
if selItem:
|
||||||
return selItem[0].data(self.C_NAME, Qt.UserRole)
|
return selItem[0].data(self.C_DATA, self.D_HANDLE)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -1149,7 +1153,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
hasChild = False
|
hasChild = False
|
||||||
selItem = self.itemAt(clickPos)
|
selItem = self.itemAt(clickPos)
|
||||||
if isinstance(selItem, QTreeWidgetItem):
|
if isinstance(selItem, QTreeWidgetItem):
|
||||||
tHandle = selItem.data(self.C_NAME, Qt.UserRole)
|
tHandle = selItem.data(self.C_DATA, self.D_HANDLE)
|
||||||
tItem = self.theProject.tree[tHandle]
|
tItem = self.theProject.tree[tHandle]
|
||||||
hasChild = selItem.childCount() > 0
|
hasChild = selItem.childCount() > 0
|
||||||
|
|
||||||
@@ -1308,7 +1312,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
if not isinstance(selItem, QTreeWidgetItem):
|
if not isinstance(selItem, QTreeWidgetItem):
|
||||||
return
|
return
|
||||||
|
|
||||||
tHandle = selItem.data(self.C_NAME, Qt.UserRole)
|
tHandle = selItem.data(self.C_DATA, self.D_HANDLE)
|
||||||
tItem = self.theProject.tree[tHandle]
|
tItem = self.theProject.tree[tHandle]
|
||||||
if tItem is None:
|
if tItem is None:
|
||||||
return
|
return
|
||||||
@@ -1367,7 +1371,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
|
|
||||||
# Update item parent handle in the project, make sure meta data
|
# Update item parent handle in the project, make sure meta data
|
||||||
# is updated accordingly, and update word count
|
# is updated accordingly, and update word count
|
||||||
pHandle = trItemP.data(self.C_NAME, Qt.UserRole)
|
pHandle = trItemP.data(self.C_DATA, self.D_HANDLE)
|
||||||
nwItemS.setParent(pHandle)
|
nwItemS.setParent(pHandle)
|
||||||
trItemP.setExpanded(True)
|
trItemP.setExpanded(True)
|
||||||
logger.debug("The parent of item '%s' has been changed to '%s'", tHandle, pHandle)
|
logger.debug("The parent of item '%s' has been changed to '%s'", tHandle, pHandle)
|
||||||
@@ -1397,7 +1401,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
tItem = self._getTreeItem(tHandle)
|
tItem = self._getTreeItem(tHandle)
|
||||||
if tItem is None:
|
if tItem is None:
|
||||||
return 0
|
return 0
|
||||||
return int(tItem.data(self.C_COUNT, Qt.UserRole))
|
return int(tItem.data(self.C_DATA, self.D_WORDS))
|
||||||
|
|
||||||
def _getTreeItem(self, tHandle):
|
def _getTreeItem(self, tHandle):
|
||||||
"""Return the QTreeWidgetItem of a given item handle.
|
"""Return the QTreeWidgetItem of a given item handle.
|
||||||
@@ -1617,7 +1621,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
"""This is a recursive function returning all items in a tree
|
"""This is a recursive function returning all items in a tree
|
||||||
starting at a given QTreeWidgetItem.
|
starting at a given QTreeWidgetItem.
|
||||||
"""
|
"""
|
||||||
tHandle = tItem.data(self.C_NAME, Qt.UserRole)
|
tHandle = tItem.data(self.C_DATA, self.D_HANDLE)
|
||||||
cCount = tItem.childCount()
|
cCount = tItem.childCount()
|
||||||
|
|
||||||
# Update tree-related meta data
|
# Update tree-related meta data
|
||||||
@@ -1650,8 +1654,8 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
newItem.setTextAlignment(self.C_ACTIVE, Qt.AlignLeft)
|
newItem.setTextAlignment(self.C_ACTIVE, Qt.AlignLeft)
|
||||||
newItem.setTextAlignment(self.C_STATUS, Qt.AlignLeft)
|
newItem.setTextAlignment(self.C_STATUS, Qt.AlignLeft)
|
||||||
|
|
||||||
newItem.setData(self.C_NAME, Qt.UserRole, tHandle)
|
newItem.setData(self.C_DATA, self.D_HANDLE, tHandle)
|
||||||
newItem.setData(self.C_COUNT, Qt.UserRole, 0)
|
newItem.setData(self.C_DATA, self.D_WORDS, 0)
|
||||||
|
|
||||||
self._treeMap[tHandle] = newItem
|
self._treeMap[tHandle] = newItem
|
||||||
if pHandle is None:
|
if pHandle is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user