Use build time to update novel tree, and restore last selected item on tab change

This commit is contained in:
Veronica K. B. Olsen
2020-12-20 16:50:01 +01:00
parent 1d12014399
commit 2779c8e69f
3 changed files with 57 additions and 16 deletions
+26 -3
View File
@@ -126,7 +126,20 @@ class GuiNovelTree(QTreeWidget):
def refreshTree(self, overRide=False):
"""Called whenever the Novel tab is activated.
"""
if self.lastBuild >= self.theIndex.timeNovel:
logger.verbose("Novel tree more recent than the novel index: not updating")
return
selItem = self.selectedItems()
titleKey = None
if selItem:
titleKey = selItem[0].data(self.C_TITLE, Qt.UserRole)[2]
self._populateTree()
if titleKey is not None and titleKey in self.treeMap:
self.treeMap[titleKey].setSelected(True)
return
def getColumnSizes(self):
@@ -138,6 +151,16 @@ class GuiNovelTree(QTreeWidget):
]
return retVals
def getSelectedHandle(self):
"""Get the currently selected handle. If multiple items are
selected, return the first.
"""
selItem = self.selectedItems()
if selItem:
return selItem[0].data(self.C_TITLE, Qt.UserRole)[0]
return None
##
# Slots
##
@@ -193,7 +216,7 @@ class GuiNovelTree(QTreeWidget):
continue
tLevel = self.theIndex.novelIndex[tHandle][sTitle]["level"]
tItem = self._createTreeItem(tHandle, sTitle, tLevel)
tItem = self._createTreeItem(tHandle, sTitle, tLevel, titleKey)
self.treeMap[titleKey] = tItem
if tLevel == "H1":
@@ -232,14 +255,14 @@ class GuiNovelTree(QTreeWidget):
return
def _createTreeItem(self, tHandle, sTitle, tLevel):
def _createTreeItem(self, tHandle, sTitle, tLevel, titleKey):
"""Populate a tree item with all the column values.
"""
novIdx = self.theIndex.novelIndex[tHandle][sTitle]
newItem = QTreeWidgetItem()
hIcon = "doc_%s" % tLevel.lower()
theData = (tHandle, sTitle[1:].lstrip("0"))
theData = (tHandle, sTitle[1:].lstrip("0"), titleKey)
wC = int(novIdx["wCount"])
+1 -5
View File
@@ -640,11 +640,7 @@ class GuiProjectTree(QTreeWidget):
selected, return the first.
"""
selItem = self.selectedItems()
if len(selItem) == 0:
return None
if isinstance(selItem[0], QTreeWidgetItem):
if selItem:
return selItem[0].data(self.C_NAME, Qt.UserRole)
return None
+30 -8
View File
@@ -118,6 +118,7 @@ class GuiMain(QMainWindow):
self.projTabs.setStyleSheet("QTabWidget::pane {border: 0;};")
self.projTabs.addTab(self.treeView, "Project")
self.projTabs.addTab(self.novelView, "Novel")
self.projTabs.currentChanged.connect(self._projTabsChanged)
tabFont = self.projTabs.tabBar().font()
tabFont.setPointSize(round(0.9*self.theTheme.fontPointSize))
@@ -166,14 +167,16 @@ class GuiMain(QMainWindow):
self.splitMain.setSizes(self.mainConf.getMainPanePos())
# Indices of All Splitter Widgets
self.idxTree = self.splitMain.indexOf(self.treePane)
self.idxMain = self.splitMain.indexOf(self.mainTabs)
self.idxEditor = self.splitDocs.indexOf(self.docEditor)
self.idxViewer = self.splitDocs.indexOf(self.splitView)
self.idxViewDoc = self.splitView.indexOf(self.docViewer)
self.idxViewMeta = self.splitView.indexOf(self.viewMeta)
self.idxTabEdit = self.mainTabs.indexOf(self.splitDocs)
self.idxTabProj = self.mainTabs.indexOf(self.splitOutline)
self.idxTree = self.splitMain.indexOf(self.treePane)
self.idxMain = self.splitMain.indexOf(self.mainTabs)
self.idxEditor = self.splitDocs.indexOf(self.docEditor)
self.idxViewer = self.splitDocs.indexOf(self.splitView)
self.idxViewDoc = self.splitView.indexOf(self.docViewer)
self.idxViewMeta = self.splitView.indexOf(self.viewMeta)
self.idxTabEdit = self.mainTabs.indexOf(self.splitDocs)
self.idxTabProj = self.mainTabs.indexOf(self.splitOutline)
self.idxTreeView = self.projTabs.indexOf(self.treeView)
self.idxNovelView = self.projTabs.indexOf(self.novelView)
# Splitter Behaviour
self.splitMain.setCollapsible(self.idxTree, False)
@@ -1375,4 +1378,23 @@ class GuiMain(QMainWindow):
self.projView.refreshTree()
return
def _projTabsChanged(self, tabIndex):
"""Activated when the project view tab is changed.
"""
tHandle = None
if tabIndex == self.idxTreeView:
logger.verbose("Project tree tab activated")
tHandle = self.treeView.getSelectedHandle()
elif tabIndex == self.idxNovelView:
logger.verbose("Novel tree tab activated")
if self.hasProject:
self.novelView.refreshTree()
tHandle = self.novelView.getSelectedHandle()
self.treeMeta.updateViewBox(tHandle)
return
# END Class GuiMain