Add a root folder filter to the Build Tool (#1168)

This commit is contained in:
Veronica Berglyd Olsen
2022-10-14 22:55:09 +02:00
committed by GitHub
2 changed files with 48 additions and 6 deletions
+4 -4
View File
@@ -40,7 +40,7 @@ VALID_MAP = {
"GuiWritingStats": { "GuiWritingStats": {
"winWidth", "winHeight", "widthCol0", "widthCol1", "widthCol2", "winWidth", "winHeight", "widthCol0", "widthCol1", "widthCol2",
"widthCol3", "sortCol", "sortOrder", "incNovel", "incNotes", "widthCol3", "sortCol", "sortOrder", "incNovel", "incNotes",
"hideZeros", "hideNegative", "groupByDay", "showIdleTime", "histMax" "hideZeros", "hideNegative", "groupByDay", "showIdleTime", "histMax",
}, },
"GuiDocSplit": {"spLevel", "intoFolder", "docHierarchy"}, "GuiDocSplit": {"spLevel", "intoFolder", "docHierarchy"},
"GuiBuildNovel": { "GuiBuildNovel": {
@@ -48,15 +48,15 @@ VALID_MAP = {
"hideSection", "addNovel", "addNotes", "ignoreFlag", "justifyText", "hideSection", "addNovel", "addNotes", "ignoreFlag", "justifyText",
"excludeBody", "textFont", "textSize", "lineHeight", "noStyling", "excludeBody", "textFont", "textSize", "lineHeight", "noStyling",
"incSynopsis", "incComments", "incKeywords", "incBodyText", "incSynopsis", "incComments", "incKeywords", "incBodyText",
"replaceTabs", "replaceUCode" "replaceTabs", "replaceUCode", "rootFilter",
}, },
"GuiOutline": {"headerOrder", "columnWidth", "columnHidden"}, "GuiOutline": {"headerOrder", "columnWidth", "columnHidden"},
"GuiProjectSettings": { "GuiProjectSettings": {
"winWidth", "winHeight", "replaceColW", "statusColW", "importColW" "winWidth", "winHeight", "replaceColW", "statusColW", "importColW",
}, },
"GuiProjectDetails": { "GuiProjectDetails": {
"winWidth", "winHeight", "widthCol0", "widthCol1", "widthCol2", "winWidth", "winHeight", "widthCol0", "widthCol1", "widthCol2",
"widthCol3", "widthCol4", "wordsPerPage", "countFrom", "clearDouble" "widthCol3", "widthCol4", "wordsPerPage", "countFrom", "clearDouble",
}, },
"GuiWordList": {"winWidth", "winHeight"}, "GuiWordList": {"winWidth", "winHeight"},
"GuiNovelView": {"lastCol"}, "GuiNovelView": {"lastCol"},
+44 -2
View File
@@ -351,6 +351,36 @@ class GuiBuildNovel(QDialog):
self.textForm.setColumnStretch(0, 1) self.textForm.setColumnStretch(0, 1)
self.textForm.setColumnStretch(1, 0) self.textForm.setColumnStretch(1, 0)
# Root Filter Options
# ===================
self.rootGroup = QGroupBox(self.tr("Root Filter Options"), self)
self.rootForm = QGridLayout(self)
self.rootGroup.setLayout(self.rootForm)
rootFilter = pOptions.getValue("GuiBuildNovel", "rootFilter", [])
if not isinstance(rootFilter, list):
rootFilter = []
iRow = 0
self.rootSelection = {}
for tHandle, nwItem in self.theProject.tree.iterRoots(None):
if not nwItem.isInactive():
rootLabel = QLabel(nwItem.itemName)
rootLabel.setWordWrap(True)
rootValue = QSwitch(width=wS, height=hS)
rootValue.setChecked(tHandle not in rootFilter)
self.rootSelection[tHandle] = rootValue
self.rootForm.addWidget(rootLabel, iRow, 0, 1, 1, Qt.AlignLeft)
self.rootForm.addWidget(rootValue, iRow, 1, 1, 1, Qt.AlignRight)
iRow += 1
self.rootForm.setColumnStretch(0, 1)
self.rootForm.setColumnStretch(1, 0)
# File Filter Options # File Filter Options
# =================== # ===================
@@ -503,6 +533,7 @@ class GuiBuildNovel(QDialog):
self.toolsBox.addWidget(self.fontGroup) self.toolsBox.addWidget(self.fontGroup)
self.toolsBox.addWidget(self.styleGroup) self.toolsBox.addWidget(self.styleGroup)
self.toolsBox.addWidget(self.textGroup) self.toolsBox.addWidget(self.textGroup)
self.toolsBox.addWidget(self.rootGroup)
self.toolsBox.addWidget(self.fileGroup) self.toolsBox.addWidget(self.fileGroup)
self.toolsBox.addWidget(self.exportGroup) self.toolsBox.addWidget(self.exportGroup)
self.toolsBox.addStretch(1) self.toolsBox.addStretch(1)
@@ -716,6 +747,7 @@ class GuiBuildNovel(QDialog):
self.buildProgress.setMaximum(len(self.theProject.tree)) self.buildProgress.setMaximum(len(self.theProject.tree))
self.buildProgress.setValue(0) self.buildProgress.setValue(0)
rootFilter = set(self._generateRootFilter())
for nItt, tItem in enumerate(self.theProject.tree): for nItt, tItem in enumerate(self.theProject.tree):
noteRoot = noteFiles noteRoot = noteFiles
@@ -730,7 +762,7 @@ class GuiBuildNovel(QDialog):
if doConvert: if doConvert:
bldObj.doConvert() bldObj.doConvert()
elif self._checkInclude(tItem, noteFiles, novelFiles, ignoreFlag): elif self._checkInclude(tItem, noteFiles, novelFiles, ignoreFlag, rootFilter):
bldObj.setText(tItem.itemHandle) bldObj.setText(tItem.itemHandle)
bldObj.doPreProcessing() bldObj.doPreProcessing()
bldObj.tokenizeText() bldObj.tokenizeText()
@@ -766,7 +798,7 @@ class GuiBuildNovel(QDialog):
return return
def _checkInclude(self, theItem, noteFiles, novelFiles, ignoreFlag): def _checkInclude(self, theItem, noteFiles, novelFiles, ignoreFlag, rootFilter):
"""This function checks whether a file should be included in the """This function checks whether a file should be included in the
export or not. For standard note and novel files, this is export or not. For standard note and novel files, this is
controlled by the options selected by the user. For other files controlled by the options selected by the user. For other files
@@ -784,6 +816,9 @@ class GuiBuildNovel(QDialog):
if not (theItem.isExported or ignoreFlag): if not (theItem.isExported or ignoreFlag):
return False return False
if theItem.itemRoot in rootFilter:
return False
isNone = not theItem.isFileType() isNone = not theItem.isFileType()
isNone |= theItem.itemLayout == nwItemLayout.NO_LAYOUT isNone |= theItem.itemLayout == nwItemLayout.NO_LAYOUT
isNone |= theItem.isInactive() isNone |= theItem.isInactive()
@@ -1045,6 +1080,11 @@ class GuiBuildNovel(QDialog):
return return
def _generateRootFilter(self):
"""Return a list of all root folders that are filtered out.
"""
return [h for h, s in self.rootSelection.items() if not s.isChecked()]
def _loadCache(self): def _loadCache(self):
"""Save the current data to cache. """Save the current data to cache.
""" """
@@ -1146,6 +1186,7 @@ class GuiBuildNovel(QDialog):
incBodyText = self.includeBody.isChecked() incBodyText = self.includeBody.isChecked()
replaceTabs = self.replaceTabs.isChecked() replaceTabs = self.replaceTabs.isChecked()
replaceUCode = self.replaceUCode.isChecked() replaceUCode = self.replaceUCode.isChecked()
rootFilter = self._generateRootFilter()
mainSplit = self.mainSplit.sizes() mainSplit = self.mainSplit.sizes()
boxWidth = self.mainConf.rpxInt(mainSplit[0]) boxWidth = self.mainConf.rpxInt(mainSplit[0])
@@ -1175,6 +1216,7 @@ class GuiBuildNovel(QDialog):
pOptions.setValue("GuiBuildNovel", "incBodyText", incBodyText) pOptions.setValue("GuiBuildNovel", "incBodyText", incBodyText)
pOptions.setValue("GuiBuildNovel", "replaceTabs", replaceTabs) pOptions.setValue("GuiBuildNovel", "replaceTabs", replaceTabs)
pOptions.setValue("GuiBuildNovel", "replaceUCode", replaceUCode) pOptions.setValue("GuiBuildNovel", "replaceUCode", replaceUCode)
pOptions.setValue("GuiBuildNovel", "rootFilter", rootFilter)
pOptions.saveSettings() pOptions.saveSettings()
return return