Add root class filtering
This commit is contained in:
@@ -103,10 +103,11 @@ SETTINGS_LABELS = {
|
||||
|
||||
class FilterMode(Enum):
|
||||
|
||||
UNKNOWN = 0
|
||||
UNKNOWN = 0
|
||||
FILTERED = 1
|
||||
INCLUDED = 2
|
||||
EXCLUDED = 3
|
||||
SKIPPED = 4
|
||||
|
||||
# END Enum FilterMode
|
||||
|
||||
@@ -114,6 +115,7 @@ class FilterMode(Enum):
|
||||
class BuildSettings:
|
||||
|
||||
def __init__(self):
|
||||
self._skiproot = set()
|
||||
self._excluded = set()
|
||||
self._included = set()
|
||||
self._settings = {k: v[1] for k, v in SETTINGS_TEMPLATE.items()}
|
||||
@@ -128,6 +130,9 @@ class BuildSettings:
|
||||
def isExcluded(self, tHandle):
|
||||
return tHandle in self._excluded
|
||||
|
||||
def isRootAllowed(self, tHandle):
|
||||
return tHandle not in self._skiproot
|
||||
|
||||
def setFiltered(self, tHandle):
|
||||
"""Set an item as filtered.
|
||||
"""
|
||||
@@ -149,6 +154,15 @@ class BuildSettings:
|
||||
self._included.discard(tHandle)
|
||||
return
|
||||
|
||||
def setSkipRoot(self, tHandle, state):
|
||||
"""Set a specific root folder as skipped or not.
|
||||
"""
|
||||
if state is True:
|
||||
self._skiproot.discard(tHandle)
|
||||
elif state is False:
|
||||
self._skiproot.add(tHandle)
|
||||
return
|
||||
|
||||
def setValue(self, key, value):
|
||||
"""Set a specific value for a build setting.
|
||||
"""
|
||||
@@ -190,8 +204,11 @@ class BuildSettings:
|
||||
if not isinstance(item, NWItem):
|
||||
result[tHandle] = (False, FilterMode.UNKNOWN)
|
||||
continue
|
||||
if item.isInactiveClass() or (item.itemRoot in self._skiproot):
|
||||
result[tHandle] = (False, FilterMode.SKIPPED)
|
||||
continue
|
||||
if not item.isFileType():
|
||||
result[tHandle] = (False, FilterMode.FILTERED)
|
||||
result[tHandle] = (False, FilterMode.SKIPPED)
|
||||
continue
|
||||
if tHandle in self._included:
|
||||
result[tHandle] = (True, FilterMode.INCLUDED)
|
||||
|
||||
+20
-24
@@ -170,10 +170,7 @@ class GuiBuildFilterTab(QWidget):
|
||||
C_STATUS = 2
|
||||
|
||||
D_HANDLE = Qt.UserRole
|
||||
D_FILTER = Qt.UserRole + 1
|
||||
D_FILE = Qt.UserRole + 2
|
||||
D_NOVEL = Qt.UserRole + 3
|
||||
D_ACTIVE = Qt.UserRole + 4
|
||||
D_FILE = Qt.UserRole + 1
|
||||
|
||||
F_NONE = 0
|
||||
F_FILTERED = 1
|
||||
@@ -213,7 +210,6 @@ class GuiBuildFilterTab(QWidget):
|
||||
self.optTree.setHeaderHidden(True)
|
||||
self.optTree.setIndentation(iPx)
|
||||
self.optTree.setColumnCount(3)
|
||||
self.optTree.setRootIsDecorated(False)
|
||||
|
||||
treeHeader = self.optTree.header()
|
||||
treeHeader.setStretchLastSection(False)
|
||||
@@ -269,18 +265,19 @@ class GuiBuildFilterTab(QWidget):
|
||||
def populateTree(self):
|
||||
"""Build the tree of project items.
|
||||
"""
|
||||
logger.debug("Building project tree")
|
||||
self._treeMap = {}
|
||||
self.optTree.clear()
|
||||
bSettings = self.buildOpts["settings"]
|
||||
for nwItem in self.theProject.getProjectItems():
|
||||
|
||||
tHandle = nwItem.itemHandle
|
||||
pHandle = nwItem.itemParent
|
||||
rHandle = nwItem.itemRoot
|
||||
isFile = nwItem.isFileType()
|
||||
isNovel = nwItem.isNovelLike()
|
||||
isActive = nwItem.isActive
|
||||
|
||||
if nwItem.isInactiveClass():
|
||||
logger.debug("Skipping inactive class item '%s'", tHandle)
|
||||
if nwItem.isInactiveClass() or not bSettings.isRootAllowed(rHandle):
|
||||
continue
|
||||
|
||||
hLevel = nwItem.mainHeading
|
||||
@@ -297,10 +294,7 @@ class GuiBuildFilterTab(QWidget):
|
||||
trItem.setIcon(self.C_NAME, itemIcon)
|
||||
trItem.setText(self.C_NAME, nwItem.itemName)
|
||||
trItem.setData(self.C_DATA, self.D_HANDLE, tHandle)
|
||||
trItem.setData(self.C_DATA, self.D_FILTER, False)
|
||||
trItem.setData(self.C_DATA, self.D_FILE, isFile)
|
||||
trItem.setData(self.C_DATA, self.D_NOVEL, isNovel)
|
||||
trItem.setData(self.C_DATA, self.D_ACTIVE, isActive)
|
||||
trItem.setIcon(self.C_ACTIVE, self.mainTheme.getIcon(iconName))
|
||||
|
||||
trItem.setTextAlignment(self.C_NAME, Qt.AlignLeft)
|
||||
@@ -330,26 +324,26 @@ class GuiBuildFilterTab(QWidget):
|
||||
"""Populate the filter options switches.
|
||||
"""
|
||||
self.filterOpt.clear()
|
||||
buildSettings = self.buildOpts["settings"]
|
||||
bSettings = self.buildOpts["settings"]
|
||||
|
||||
self.filterOpt.addLabel(buildSettings.getLabel("filter"))
|
||||
self.filterOpt.addLabel(bSettings.getLabel("filter"))
|
||||
self.filterOpt.addItem(
|
||||
self.mainTheme.getIcon("proj_scene"),
|
||||
buildSettings.getLabel("filter.includeNovel"),
|
||||
bSettings.getLabel("filter.includeNovel"),
|
||||
"doc:filter.includeNovel",
|
||||
default=buildSettings.getValue("filter.includeNovel") or False
|
||||
default=bSettings.getValue("filter.includeNovel") or False
|
||||
)
|
||||
self.filterOpt.addItem(
|
||||
self.mainTheme.getIcon("proj_note"),
|
||||
buildSettings.getLabel("filter.includeNotes"),
|
||||
bSettings.getLabel("filter.includeNotes"),
|
||||
"doc:filter.includeNotes",
|
||||
default=buildSettings.getValue("filter.includeNotes") or False
|
||||
default=bSettings.getValue("filter.includeNotes") or False
|
||||
)
|
||||
self.filterOpt.addItem(
|
||||
self.mainTheme.getIcon("unchecked"),
|
||||
buildSettings.getLabel("filter.includeInactive"),
|
||||
bSettings.getLabel("filter.includeInactive"),
|
||||
"doc:filter.includeInactive",
|
||||
default=buildSettings.getValue("filter.includeInactive") or False
|
||||
default=bSettings.getValue("filter.includeInactive") or False
|
||||
)
|
||||
|
||||
self.filterOpt.addSeparator()
|
||||
@@ -376,6 +370,9 @@ class GuiBuildFilterTab(QWidget):
|
||||
if key.startswith("doc:"):
|
||||
self.buildOpts["settings"].setValue(key[4:], state)
|
||||
self._setTreeItemMode()
|
||||
elif key.startswith("root:"):
|
||||
self.buildOpts["settings"].setSkipRoot(key[5:], state)
|
||||
self.populateTree()
|
||||
return
|
||||
|
||||
##
|
||||
@@ -385,7 +382,7 @@ class GuiBuildFilterTab(QWidget):
|
||||
def _setSelectedMode(self, mode):
|
||||
"""Set the mode for the selected items.
|
||||
"""
|
||||
buildSettings = self.buildOpts["settings"]
|
||||
bSettings = self.buildOpts["settings"]
|
||||
|
||||
for item in self.optTree.selectedItems():
|
||||
if not isinstance(item, QTreeWidgetItem):
|
||||
@@ -395,11 +392,11 @@ class GuiBuildFilterTab(QWidget):
|
||||
isFile = item.data(self.C_DATA, self.D_FILE)
|
||||
if isFile:
|
||||
if mode == self.F_FILTERED:
|
||||
buildSettings.setFiltered(tHandle)
|
||||
bSettings.setFiltered(tHandle)
|
||||
elif mode == self.F_INCLUDED:
|
||||
buildSettings.setIncluded(tHandle)
|
||||
bSettings.setIncluded(tHandle)
|
||||
elif mode == self.F_EXCLUDED:
|
||||
buildSettings.setExcluded(tHandle)
|
||||
bSettings.setExcluded(tHandle)
|
||||
|
||||
self._setTreeItemMode()
|
||||
|
||||
@@ -419,7 +416,6 @@ class GuiBuildFilterTab(QWidget):
|
||||
item.setIcon(self.C_STATUS, self._statusFlags[self.F_FILTERED][1])
|
||||
else:
|
||||
item.setIcon(self.C_STATUS, self._statusFlags[self.F_NONE][1])
|
||||
|
||||
return
|
||||
|
||||
# END Class GuiBuildFilterTab
|
||||
|
||||
Reference in New Issue
Block a user