Add functionality to load and save last selected outline novel, and fix a few inconsistencies

This commit is contained in:
Veronica Berglyd Olsen
2022-07-31 18:40:16 +02:00
parent 67aff2550b
commit 069e3baf67
7 changed files with 68 additions and 57 deletions
+50 -19
View File
@@ -59,8 +59,9 @@ class GuiOutlineView(QWidget):
def __init__(self, mainGui):
QWidget.__init__(self, mainGui)
self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui
self.theProject = mainGui.theProject
# Build GUI
self.outlineBar = GuiOutlineToolBar(self)
@@ -96,26 +97,43 @@ class GuiOutlineView(QWidget):
# Methods
##
def splitSizes(self):
return self.splitOutline.sizes()
def clearOutline(self):
self.outlineData.clearDetails()
return
def initOutline(self):
self.outlineTree.initOutline()
self.outlineData.initDetails()
return
def refreshTree(self):
"""Refresh the current tree.
"""
self.outlineTree.refreshTree(rootHandle=self.theProject.lastOutline)
return
def clearProject(self):
self.outlineData.clearDetails()
return
def openProjectTasks(self):
"""Run opening project tasks.
"""
lastOutline = self.theProject.lastOutline
if not (lastOutline in self.theProject.tree or lastOutline is None):
lastOutline = self.theProject.tree.findRoot(nwItemClass.NOVEL)
logger.debug("Setting outline tree to root item '%s'", lastOutline)
self.clearProject()
self.outlineBar.populateNovelList()
self.outlineBar.setCurrentRoot(lastOutline)
return
def closeOutline(self):
self.outlineTree.closeOutline()
self.outlineData.updateClasses()
return
def refreshView(self, overRide=False, novelChanged=False):
self.outlineTree.refreshTree(overRide=overRide, novelChanged=novelChanged)
return
def splitSizes(self):
return self.splitOutline.sizes()
def treeHasFocus(self):
return self.outlineTree.hasFocus()
@@ -243,6 +261,17 @@ class GuiOutlineToolBar(QToolBar):
self.novelValue.addItem(tIcon, self.tr("All Novel Folders"), "")
return
def setCurrentRoot(self, rootHandle):
"""Set the current active root handle.
"""
if rootHandle is None:
rootIdx = self.novelValue.count() - 1
else:
rootIdx = self.novelValue.findData(rootHandle)
if rootIdx >= 0:
self.novelValue.setCurrentIndex(rootIdx)
return
def setColumnHiddenState(self, hiddenState):
"""Forward the change of column hidden states to the menu.
"""
@@ -379,7 +408,7 @@ class GuiOutlineTree(QTreeWidget):
self._lastBuild = 0
self.initOutline()
self.clearOutline()
self.clearContent()
self.hiddenStateChanged.emit()
@@ -415,7 +444,7 @@ class GuiOutlineTree(QTreeWidget):
return
def clearOutline(self):
def clearContent(self):
"""Clear the tree and header and set the default values for the
columns arrays.
"""
@@ -453,10 +482,12 @@ class GuiOutlineTree(QTreeWidget):
# If the novel index or novel tree has changed since the tree
# was last built, we rebuild the tree from the updated index.
indexChanged = self.theProject.index.rootChangedSince(rootHandle, self._lastBuild)
doBuild = (novelChanged or indexChanged) and self.theProject.autoOutline
if doBuild or overRide:
logger.debug("Rebuilding Project Outline")
self._populateTree(rootHandle)
if not (novelChanged or indexChanged or overRide):
logger.verbose("No changes have been made to the novel index")
return
self._populateTree(rootHandle)
self.theProject.setLastOutlineViewed(rootHandle or None)
return
@@ -464,7 +495,7 @@ class GuiOutlineTree(QTreeWidget):
"""Called before a project is closed.
"""
self._saveHeaderState()
self.clearOutline()
self.clearContent()
self._firstView = True
return
-3
View File
@@ -55,7 +55,6 @@ class GuiProjectView(QWidget):
# Signals triggered when the meta data values of items change
treeItemChanged = pyqtSignal(str)
novelItemChanged = pyqtSignal(str)
rootFolderChanged = pyqtSignal(str)
wordCountsChanged = pyqtSignal()
@@ -1356,8 +1355,6 @@ class GuiProjectTree(QTreeWidget):
itemType = tItem.itemType
if itemType == nwItemType.ROOT:
self.projView.rootFolderChanged.emit(tHandle)
elif itemType == nwItemType.FILE and tItem.isNovelLike():
self.projView.novelItemChanged.emit(tHandle)
self.projView.treeItemChanged.emit(tHandle)