Use build time to update novel tree, and restore last selected item on tab change
This commit is contained in:
+26
-3
@@ -126,7 +126,20 @@ class GuiNovelTree(QTreeWidget):
|
|||||||
def refreshTree(self, overRide=False):
|
def refreshTree(self, overRide=False):
|
||||||
"""Called whenever the Novel tab is activated.
|
"""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()
|
self._populateTree()
|
||||||
|
|
||||||
|
if titleKey is not None and titleKey in self.treeMap:
|
||||||
|
self.treeMap[titleKey].setSelected(True)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def getColumnSizes(self):
|
def getColumnSizes(self):
|
||||||
@@ -138,6 +151,16 @@ class GuiNovelTree(QTreeWidget):
|
|||||||
]
|
]
|
||||||
return retVals
|
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
|
# Slots
|
||||||
##
|
##
|
||||||
@@ -193,7 +216,7 @@ class GuiNovelTree(QTreeWidget):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
tLevel = self.theIndex.novelIndex[tHandle][sTitle]["level"]
|
tLevel = self.theIndex.novelIndex[tHandle][sTitle]["level"]
|
||||||
tItem = self._createTreeItem(tHandle, sTitle, tLevel)
|
tItem = self._createTreeItem(tHandle, sTitle, tLevel, titleKey)
|
||||||
self.treeMap[titleKey] = tItem
|
self.treeMap[titleKey] = tItem
|
||||||
|
|
||||||
if tLevel == "H1":
|
if tLevel == "H1":
|
||||||
@@ -232,14 +255,14 @@ class GuiNovelTree(QTreeWidget):
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def _createTreeItem(self, tHandle, sTitle, tLevel):
|
def _createTreeItem(self, tHandle, sTitle, tLevel, titleKey):
|
||||||
"""Populate a tree item with all the column values.
|
"""Populate a tree item with all the column values.
|
||||||
"""
|
"""
|
||||||
novIdx = self.theIndex.novelIndex[tHandle][sTitle]
|
novIdx = self.theIndex.novelIndex[tHandle][sTitle]
|
||||||
|
|
||||||
newItem = QTreeWidgetItem()
|
newItem = QTreeWidgetItem()
|
||||||
hIcon = "doc_%s" % tLevel.lower()
|
hIcon = "doc_%s" % tLevel.lower()
|
||||||
theData = (tHandle, sTitle[1:].lstrip("0"))
|
theData = (tHandle, sTitle[1:].lstrip("0"), titleKey)
|
||||||
|
|
||||||
wC = int(novIdx["wCount"])
|
wC = int(novIdx["wCount"])
|
||||||
|
|
||||||
|
|||||||
+1
-5
@@ -640,11 +640,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
selected, return the first.
|
selected, return the first.
|
||||||
"""
|
"""
|
||||||
selItem = self.selectedItems()
|
selItem = self.selectedItems()
|
||||||
|
if selItem:
|
||||||
if len(selItem) == 0:
|
|
||||||
return None
|
|
||||||
|
|
||||||
if isinstance(selItem[0], QTreeWidgetItem):
|
|
||||||
return selItem[0].data(self.C_NAME, Qt.UserRole)
|
return selItem[0].data(self.C_NAME, Qt.UserRole)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
+30
-8
@@ -118,6 +118,7 @@ class GuiMain(QMainWindow):
|
|||||||
self.projTabs.setStyleSheet("QTabWidget::pane {border: 0;};")
|
self.projTabs.setStyleSheet("QTabWidget::pane {border: 0;};")
|
||||||
self.projTabs.addTab(self.treeView, "Project")
|
self.projTabs.addTab(self.treeView, "Project")
|
||||||
self.projTabs.addTab(self.novelView, "Novel")
|
self.projTabs.addTab(self.novelView, "Novel")
|
||||||
|
self.projTabs.currentChanged.connect(self._projTabsChanged)
|
||||||
|
|
||||||
tabFont = self.projTabs.tabBar().font()
|
tabFont = self.projTabs.tabBar().font()
|
||||||
tabFont.setPointSize(round(0.9*self.theTheme.fontPointSize))
|
tabFont.setPointSize(round(0.9*self.theTheme.fontPointSize))
|
||||||
@@ -166,14 +167,16 @@ class GuiMain(QMainWindow):
|
|||||||
self.splitMain.setSizes(self.mainConf.getMainPanePos())
|
self.splitMain.setSizes(self.mainConf.getMainPanePos())
|
||||||
|
|
||||||
# Indices of All Splitter Widgets
|
# Indices of All Splitter Widgets
|
||||||
self.idxTree = self.splitMain.indexOf(self.treePane)
|
self.idxTree = self.splitMain.indexOf(self.treePane)
|
||||||
self.idxMain = self.splitMain.indexOf(self.mainTabs)
|
self.idxMain = self.splitMain.indexOf(self.mainTabs)
|
||||||
self.idxEditor = self.splitDocs.indexOf(self.docEditor)
|
self.idxEditor = self.splitDocs.indexOf(self.docEditor)
|
||||||
self.idxViewer = self.splitDocs.indexOf(self.splitView)
|
self.idxViewer = self.splitDocs.indexOf(self.splitView)
|
||||||
self.idxViewDoc = self.splitView.indexOf(self.docViewer)
|
self.idxViewDoc = self.splitView.indexOf(self.docViewer)
|
||||||
self.idxViewMeta = self.splitView.indexOf(self.viewMeta)
|
self.idxViewMeta = self.splitView.indexOf(self.viewMeta)
|
||||||
self.idxTabEdit = self.mainTabs.indexOf(self.splitDocs)
|
self.idxTabEdit = self.mainTabs.indexOf(self.splitDocs)
|
||||||
self.idxTabProj = self.mainTabs.indexOf(self.splitOutline)
|
self.idxTabProj = self.mainTabs.indexOf(self.splitOutline)
|
||||||
|
self.idxTreeView = self.projTabs.indexOf(self.treeView)
|
||||||
|
self.idxNovelView = self.projTabs.indexOf(self.novelView)
|
||||||
|
|
||||||
# Splitter Behaviour
|
# Splitter Behaviour
|
||||||
self.splitMain.setCollapsible(self.idxTree, False)
|
self.splitMain.setCollapsible(self.idxTree, False)
|
||||||
@@ -1375,4 +1378,23 @@ class GuiMain(QMainWindow):
|
|||||||
self.projView.refreshTree()
|
self.projView.refreshTree()
|
||||||
return
|
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
|
# END Class GuiMain
|
||||||
|
|||||||
Reference in New Issue
Block a user