Most columns now available in outline

This commit is contained in:
Veronica K. B. Olsen
2019-11-16 17:23:32 +01:00
parent d09fb50bfc
commit 19ebedd8b3
2 changed files with 141 additions and 60 deletions
+119 -53
View File
@@ -20,35 +20,53 @@ from PyQt5.QtWidgets import (
QWidget, QVBoxLayout, QTreeWidget, QTreeWidgetItem
)
from nw.constants import nwItemLayout
from nw.constants import nwItemLayout, nwKeyWords, nwLabels
logger = logging.getLogger(__name__)
class GuiProjectOutline(QWidget):
I_TITLE = 0
I_LEVEL = 1
I_LABEL = 2
I_LINE = 3
I_WORDS = 4
I_CHARS = 5
I_PARAS = 6
I_SYNOP = 7
I_TITLE = 0
I_LEVEL = 1
I_LABEL = 2
I_LINE = 3
I_WCOUNT = 4
I_CCOUNT = 5
I_PCOUNT = 6
I_SYNOP = 7
I_POV = 8
I_CHAR = 9
I_PLOT = 10
I_TIME = 11
I_WORLD = 12
I_OBJECT = 13
I_ENTITY = 14
I_CUSTOM = 15
COL_ORDER = [
I_TITLE, I_LEVEL, I_LABEL, I_LINE,
I_WORDS, I_CHARS, I_PARAS, I_SYNOP,
I_TITLE, I_LEVEL, I_LABEL, I_LINE,
I_WCOUNT, I_CCOUNT, I_PCOUNT, I_SYNOP,
I_POV, I_CHAR, I_PLOT, I_TIME,
I_WORLD, I_OBJECT, I_ENTITY, I_CUSTOM,
]
COL_LABELS = {
I_TITLE : "Title",
I_LEVEL : "Level",
I_LABEL : "Document",
I_LINE : "Line",
I_WORDS : "Words",
I_CHARS : "Chars",
I_PARAS : "Pars",
I_SYNOP : "Synopsis",
I_TITLE : "Title",
I_LEVEL : "Level",
I_LABEL : "Document",
I_LINE : "Line",
I_WCOUNT : "Words",
I_CCOUNT : "Chars",
I_PCOUNT : "Pars",
I_SYNOP : "Synopsis",
I_POV : nwLabels.KEY_NAME[nwKeyWords.POV_KEY],
I_CHAR : nwLabels.KEY_NAME[nwKeyWords.CHAR_KEY],
I_PLOT : nwLabels.KEY_NAME[nwKeyWords.PLOT_KEY],
I_TIME : nwLabels.KEY_NAME[nwKeyWords.TIME_KEY],
I_WORLD : nwLabels.KEY_NAME[nwKeyWords.WORLD_KEY],
I_OBJECT : nwLabels.KEY_NAME[nwKeyWords.OBJECT_KEY],
I_ENTITY : nwLabels.KEY_NAME[nwKeyWords.ENTITY_KEY],
I_CUSTOM : nwLabels.KEY_NAME[nwKeyWords.CUSTOM_KEY],
}
def __init__(self, theParent, theProject):
@@ -82,14 +100,14 @@ class GuiProjectOutline(QWidget):
theLabels = []
for n in self.treeOrder:
theLabels.append(self.COL_LABELS[n])
self.mainTree.clear()
self.mainTree.setHeaderLabels(theLabels)
treeHead = self.mainTree.headerItem()
treeHead.setTextAlignment(self.I_CHARS,Qt.AlignRight)
treeHead.setTextAlignment(self.I_WORDS,Qt.AlignRight)
treeHead.setTextAlignment(self.I_PARAS,Qt.AlignRight)
treeHead.setTextAlignment(self.I_CCOUNT,Qt.AlignRight)
treeHead.setTextAlignment(self.I_WCOUNT,Qt.AlignRight)
treeHead.setTextAlignment(self.I_PCOUNT,Qt.AlignRight)
currTitle = None
currChapter = None
@@ -106,54 +124,102 @@ class GuiProjectOutline(QWidget):
for tEntry in self.theIndex.novelIndex[tHandle]:
theLine = str(tEntry[0])
newItem = QTreeWidgetItem([""]*4)
newItem.setText(self.I_TITLE, tEntry[2])
newItem.setText(self.I_LEVEL, str(tEntry[1]))
newItem.setText(self.I_LABEL, nwItem.itemName)
newItem.setText(self.I_LINE, theLine)
cC, wC, pC = self.theIndex.getCounts(tHandle, theLine)
newItem.setText(self.I_CHARS, str(cC))
newItem.setText(self.I_WORDS, str(wC))
newItem.setText(self.I_PARAS, str(pC))
newItem.setTextAlignment(self.I_CHARS,Qt.AlignRight)
newItem.setTextAlignment(self.I_WORDS,Qt.AlignRight)
newItem.setTextAlignment(self.I_PARAS,Qt.AlignRight)
nTitle = str(tEntry[0])
tTitle = tEntry[2]
tLevel = str(tEntry[1])
tLabel = nwItem.itemName
tItem = self._createTreeItem(tHandle, nTitle, tTitle, tLevel, tLabel)
if tEntry[1] == 1:
currTitle = newItem
self.mainTree.addTopLevelItem(newItem)
currTitle = tItem
self.mainTree.addTopLevelItem(tItem)
elif tEntry[1] == 2:
if currTitle is None:
self.mainTree.addTopLevelItem(newItem)
self.mainTree.addTopLevelItem(tItem)
else:
currTitle.addChild(newItem)
currChapter = newItem
currTitle.addChild(tItem)
currChapter = tItem
elif tEntry[1] == 3:
if currChapter is None:
if currTitle is None:
self.mainTree.addTopLevelItem(newItem)
self.mainTree.addTopLevelItem(tItem)
else:
currTitle.addChild(newItem)
currTitle.addChild(tItem)
else:
currChapter.addChild(newItem)
currScene = newItem
currChapter.addChild(tItem)
currScene = tItem
elif tEntry[1] == 4:
if currScene is None:
if currChapter is None:
if currTitle is None:
self.mainTree.addTopLevelItem(newItem)
self.mainTree.addTopLevelItem(tItem)
else:
currTitle.addChild(newItem)
currTitle.addChild(tItem)
else:
currChapter.addChild(newItem)
currChapter.addChild(tItem)
else:
currScene.addChild(newItem)
currScene.addChild(tItem)
newItem.setExpanded(True)
tItem.setExpanded(True)
return
##
# Internal Functions
##
def _createTreeItem(self, tHandle, nTitle, tTitle, tLevel, tLabel):
newItem = QTreeWidgetItem()
newItem.setText(self.I_TITLE, tTitle)
newItem.setText(self.I_LEVEL, tLevel)
newItem.setText(self.I_LABEL, tLabel)
newItem.setText(self.I_LINE, nTitle)
cC, wC, pC = self.theIndex.getCounts(tHandle, nTitle)
newItem.setText(self.I_CCOUNT, str(cC))
newItem.setText(self.I_WCOUNT, str(wC))
newItem.setText(self.I_PCOUNT, str(pC))
newItem.setTextAlignment(self.I_CCOUNT,Qt.AlignRight)
newItem.setTextAlignment(self.I_WCOUNT,Qt.AlignRight)
newItem.setTextAlignment(self.I_PCOUNT,Qt.AlignRight)
povList = []
charList = []
plotList = []
timeList = []
worldList = []
objectList = []
entityList = []
customList = []
for tKey, tTag in self.theIndex.getReferences(tHandle, nTitle):
if tKey == nwKeyWords.POV_KEY:
povList.append(tTag)
elif tKey == nwKeyWords.CHAR_KEY:
charList.append(tTag)
elif tKey == nwKeyWords.PLOT_KEY:
plotList.append(tTag)
elif tKey == nwKeyWords.TIME_KEY:
timeList.append(tTag)
elif tKey == nwKeyWords.WORLD_KEY:
worldList.append(tTag)
elif tKey == nwKeyWords.OBJECT_KEY:
objectList.append(tTag)
elif tKey == nwKeyWords.ENTITY_KEY:
entityList.append(tTag)
elif tKey == nwKeyWords.CUSTOM_KEY:
customList.append(tTag)
newItem.setText(self.I_POV, ", ".join(povList))
newItem.setText(self.I_CHAR, ", ".join(charList))
newItem.setText(self.I_PLOT, ", ".join(plotList))
newItem.setText(self.I_TIME, ", ".join(timeList))
newItem.setText(self.I_WORLD, ", ".join(worldList))
newItem.setText(self.I_OBJECT, ", ".join(objectList))
newItem.setText(self.I_ENTITY, ", ".join(entityList))
newItem.setText(self.I_CUSTOM, ", ".join(customList))
return newItem
# END Class GuiProjectOutline
+22 -7
View File
@@ -475,29 +475,44 @@ class NWIndex():
# Extract Data
##
def getCounts(self, tHandle, tLine=None):
def getCounts(self, tHandle, nTitle=None):
"""Returns the counts for a file, or a section of a file
starting at line tLine.
starting at title nTitle.
"""
cC = 0
wC = 0
pC = 0
if tLine is None:
if nTitle is None:
if tHandle in self.fileCounts:
cC = self.fileCounts[tHandle][0]
wC = self.fileCounts[tHandle][1]
pC = self.fileCounts[tHandle][2]
else:
if tHandle in self.textCounts:
if tLine in self.textCounts[tHandle]:
cC = self.textCounts[tHandle][tLine][0]
wC = self.textCounts[tHandle][tLine][1]
pC = self.textCounts[tHandle][tLine][2]
if nTitle in self.textCounts[tHandle]:
cC = self.textCounts[tHandle][nTitle][0]
wC = self.textCounts[tHandle][nTitle][1]
pC = self.textCounts[tHandle][nTitle][2]
return cC, wC, pC
def getReferences(self, tHandle, tTitle=None):
"""Extract all references made in a file, and optionally title
section. tTitle must be a string.
"""
theRefs = []
if tHandle not in self.refIndex:
return theRefs
for nLine, tKey, tTag, nTitle in self.refIndex[tHandle]:
if tTitle is None or tTitle == str(nTitle):
theRefs.append((tKey, tTag))
return theRefs
def buildNovelList(self):
"""Build a list of the content of the novel.
"""