95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
# -*- coding: utf-8 -*
|
||
"""novelWriter GUI Document Tree
|
||
|
||
novelWriter – GUI Document Tree
|
||
=================================
|
||
Class holding the left side document tree view
|
||
|
||
File History:
|
||
Created: 2018-09-29 [0.1.0]
|
||
|
||
"""
|
||
|
||
import logging
|
||
import nw
|
||
|
||
from os import path
|
||
from PyQt5.QtCore import Qt
|
||
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QTreeWidgetItemIterator, QAbstractItemView
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
class GuiDocTree(QTreeWidget):
|
||
|
||
def __init__(self, theProject):
|
||
QTreeWidget.__init__(self)
|
||
|
||
logger.debug("Initialising DocTree ...")
|
||
self.mainConf = nw.CONFIG
|
||
self.debugGUI = self.mainConf.debugGUI
|
||
self.theProject = theProject
|
||
self.theMap = {}
|
||
|
||
self.setStyleSheet("QTreeWidget {font-size: 13px;}")
|
||
self.setColumnCount(4)
|
||
self.setHeaderLabels(["Name","","","Handle"])
|
||
if not self.debugGUI:
|
||
self.hideColumn(3)
|
||
|
||
# Allow Move by Drag & Drop
|
||
self.setDragEnabled(True)
|
||
self.setDragDropMode(QAbstractItemView.InternalMove)
|
||
|
||
for colN in range(len(self.mainConf.treeColWidth)):
|
||
self.setColumnWidth(colN,self.mainConf.treeColWidth[colN])
|
||
|
||
logger.debug("DocTree initialisation complete")
|
||
|
||
return
|
||
|
||
def saveTreeOrder(self):
|
||
theList = []
|
||
for i in range(self.topLevelItemCount()):
|
||
theList = self._scanChildren(theList, self.topLevelItem(i), i)
|
||
self.theProject.setTreeOrder(theList)
|
||
return True
|
||
|
||
def _scanChildren(self, theList, theItem, theIndex):
|
||
tHandle = theItem.text(3)
|
||
nwItem = self.theProject.projTree[tHandle]
|
||
nwItem.setExpanded(theItem.isExpanded())
|
||
nwItem.setOrder(theIndex)
|
||
theList.append(tHandle)
|
||
for i in range(theItem.childCount()):
|
||
self._scanChildren(theList, theItem.child(i), i)
|
||
return theList
|
||
|
||
def buildTree(self):
|
||
self.clear()
|
||
for tHandle in self.theProject.projTree:
|
||
nwItem = self.theProject.projTree[tHandle]
|
||
tName = nwItem.itemName
|
||
tStatus = 0
|
||
wCount = 0
|
||
pHandle = nwItem.parHandle
|
||
newItem = QTreeWidgetItem([
|
||
tName, str(tStatus), str(wCount), tHandle
|
||
])
|
||
self.theMap[tHandle] = newItem
|
||
if pHandle is None:
|
||
self.addTopLevelItem(newItem)
|
||
else:
|
||
self.theMap[pHandle].addChild(newItem)
|
||
newItem.setExpanded(nwItem.isExpanded)
|
||
return True
|
||
|
||
def getColumnSizes(self):
|
||
retVals = [
|
||
self.columnWidth(0),
|
||
self.columnWidth(1),
|
||
self.columnWidth(2),
|
||
]
|
||
return retVals
|
||
|
||
# END Class GuiDocTree
|