Update the Outline View to be consistent with the Novel Tree (#1094)

This commit is contained in:
Veronica Berglyd Olsen
2022-08-15 18:09:33 +02:00
committed by GitHub
21 changed files with 178 additions and 206 deletions
@@ -84,6 +84,7 @@ view_editor = mixed_edit.svg
view_novel = typ_book-grey.svg view_novel = typ_book-grey.svg
view_outline = typ_puzzle-outline.svg view_outline = typ_puzzle-outline.svg
deco_doc_h0 = nw_deco-h0.svg
deco_doc_h1 = nw_deco-h1.svg deco_doc_h1 = nw_deco-h1.svg
deco_doc_h2 = nw_deco-h2.svg deco_doc_h2 = nw_deco-h2.svg
deco_doc_h3 = nw_deco-h3.svg deco_doc_h3 = nw_deco-h3.svg
@@ -84,6 +84,7 @@ view_editor = mixed_edit.svg
view_novel = typ_book-grey.svg view_novel = typ_book-grey.svg
view_outline = typ_puzzle-outline.svg view_outline = typ_puzzle-outline.svg
deco_doc_h0 = nw_deco-h0.svg
deco_doc_h1 = nw_deco-h1.svg deco_doc_h1 = nw_deco-h1.svg
deco_doc_h2 = nw_deco-h2.svg deco_doc_h2 = nw_deco-h2.svg
deco_doc_h3 = nw_deco-h3.svg deco_doc_h3 = nw_deco-h3.svg
+8 -13
View File
@@ -97,7 +97,6 @@ class NWProject():
self.autoReplace = {} # Text to auto-replace on exports self.autoReplace = {} # Text to auto-replace on exports
self.titleFormat = {} # The formatting of titles for exports self.titleFormat = {} # The formatting of titles for exports
self.spellCheck = False # Controls the spellcheck-as-you-type feature self.spellCheck = False # Controls the spellcheck-as-you-type feature
self.autoOutline = True # If true, the Project Outline is updated automatically
self.statusItems = None # Novel file progress status values self.statusItems = None # Novel file progress status values
self.importItems = None # Note file importance values self.importItems = None # Note file importance values
self.lastEdited = None # The handle of the last file to be edited self.lastEdited = None # The handle of the last file to be edited
@@ -258,7 +257,6 @@ class NWProject():
"section": "", "section": "",
} }
self.spellCheck = False self.spellCheck = False
self.autoOutline = True
self.statusItems = NWStatus(NWStatus.STATUS) self.statusItems = NWStatus(NWStatus.STATUS)
self.statusItems.write(None, self.tr("New"), (100, 100, 100)) self.statusItems.write(None, self.tr("New"), (100, 100, 100))
self.statusItems.write(None, self.tr("Note"), (200, 50, 0)) self.statusItems.write(None, self.tr("Note"), (200, 50, 0))
@@ -608,8 +606,6 @@ class NWProject():
self.spellCheck = checkBool(xItem.text, False) self.spellCheck = checkBool(xItem.text, False)
elif xItem.tag == "spellLang": elif xItem.tag == "spellLang":
self.projSpell = checkString(xItem.text, None, True) self.projSpell = checkString(xItem.text, None, True)
elif xItem.tag == "autoOutline":
self.autoOutline = checkBool(xItem.text, True)
elif xItem.tag == "lastEdited": elif xItem.tag == "lastEdited":
self.lastEdited = checkString(xItem.text, None, True) self.lastEdited = checkString(xItem.text, None, True)
elif xItem.tag == "lastViewed": elif xItem.tag == "lastViewed":
@@ -735,7 +731,6 @@ class NWProject():
self._packProjectValue(xSettings, "language", self.projLang) self._packProjectValue(xSettings, "language", self.projLang)
self._packProjectValue(xSettings, "spellCheck", self.spellCheck) self._packProjectValue(xSettings, "spellCheck", self.spellCheck)
self._packProjectValue(xSettings, "spellLang", self.projSpell) self._packProjectValue(xSettings, "spellLang", self.projSpell)
self._packProjectValue(xSettings, "autoOutline", self.autoOutline)
self._packProjectValue(xSettings, "lastEdited", self.lastEdited) self._packProjectValue(xSettings, "lastEdited", self.lastEdited)
self._packProjectValue(xSettings, "lastViewed", self.lastViewed) self._packProjectValue(xSettings, "lastViewed", self.lastViewed)
self._packProjectValue(xSettings, "lastNovel", self.lastNovel) self._packProjectValue(xSettings, "lastNovel", self.lastNovel)
@@ -1096,14 +1091,6 @@ class NWProject():
self.setProjectChanged(True) self.setProjectChanged(True)
return True return True
def setAutoOutline(self, theMode):
"""Enable/disable automatic update of project outline.
"""
if self.autoOutline != theMode:
self.autoOutline = theMode
self.setProjectChanged(True)
return self.autoOutline
def setTreeOrder(self, newOrder): def setTreeOrder(self, newOrder):
"""A list representing the linear/flattened order of project """A list representing the linear/flattened order of project
items in the GUI project tree. The user can rearrange the order items in the GUI project tree. The user can rearrange the order
@@ -1139,6 +1126,14 @@ class NWProject():
self.setProjectChanged(True) self.setProjectChanged(True)
return True return True
def setLastOutlineViewed(self, tHandle):
"""Set last viewed novel root in the outline view.
"""
if self.lastOutline != tHandle:
self.lastOutline = tHandle
self.setProjectChanged(True)
return True
def setStatusColours(self, newCols, delCols): def setStatusColours(self, newCols, delCols):
"""Update the list of novel file status flags. """Update the list of novel file status flags.
""" """
+7 -7
View File
@@ -69,8 +69,8 @@ class GuiNovelView(QWidget):
self.theProject = mainGui.theProject self.theProject = mainGui.theProject
# Build GUI # Build GUI
self.novelTree = GuiNovelTree(self)
self.novelBar = GuiNovelToolBar(self) self.novelBar = GuiNovelToolBar(self)
self.novelTree = GuiNovelTree(self)
# Assemble # Assemble
self.outerBox = QVBoxLayout() self.outerBox = QVBoxLayout()
@@ -93,6 +93,8 @@ class GuiNovelView(QWidget):
## ##
def initSettings(self): def initSettings(self):
"""Initialise GUI elements that depend on specific settings.
"""
self.novelTree.initSettings() self.novelTree.initSettings()
return return
@@ -110,7 +112,7 @@ class GuiNovelView(QWidget):
return return
def openProjectTasks(self): def openProjectTasks(self):
"""Run opening project tasks. """Run open project tasks.
""" """
lastNovel = self.theProject.lastNovel lastNovel = self.theProject.lastNovel
if lastNovel not in self.theProject.tree: if lastNovel not in self.theProject.tree:
@@ -136,8 +138,8 @@ class GuiNovelView(QWidget):
self.theProject.options.setValue("GuiNovelView", "lastCol", lastColType) self.theProject.options.setValue("GuiNovelView", "lastCol", lastColType)
return return
def setFocus(self): def setTreeFocus(self):
"""Forward the set focus call to the tree widget. """Set the focus to the tree widget.
""" """
self.novelTree.setFocus() self.novelTree.setFocus()
return return
@@ -174,7 +176,7 @@ class GuiNovelToolBar(QWidget):
self.mainTheme = novelView.mainGui.mainTheme self.mainTheme = novelView.mainGui.mainTheme
iPx = self.mainTheme.baseIconSize iPx = self.mainTheme.baseIconSize
mPx = self.mainConf.pxInt(3) mPx = self.mainConf.pxInt(2)
self.setContentsMargins(0, 0, 0, 0) self.setContentsMargins(0, 0, 0, 0)
self.setAutoFillBackground(True) self.setAutoFillBackground(True)
@@ -396,8 +398,6 @@ class GuiNovelTree(QTreeWidget):
self.mainTheme.loadDecoration("deco_doc_h4", pxH=iPx), self.mainTheme.loadDecoration("deco_doc_h4", pxH=iPx),
] ]
self._pMore = self.mainTheme.loadDecoration("deco_doc_more", pxH=iPx) self._pMore = self.mainTheme.loadDecoration("deco_doc_more", pxH=iPx)
self._pActive = self.mainTheme.loadDecoration("deco_more_on", pxH=iPx)
self._pInactive = self.mainTheme.loadDecoration("deco_more_off", pxH=iPx)
# Connect signals # Connect signals
self.clicked.connect(self._treeItemClicked) self.clicked.connect(self._treeItemClicked)
+136 -121
View File
@@ -37,16 +37,16 @@ from PyQt5.QtCore import (
Qt, pyqtSignal, pyqtSlot, QSize, QT_TRANSLATE_NOOP Qt, pyqtSignal, pyqtSlot, QSize, QT_TRANSLATE_NOOP
) )
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QAbstractItemView, QAction, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QAbstractItemView, QAction, QComboBox, QFrame, QGridLayout, QGroupBox,
QMenu, QScrollArea, QSplitter, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QHBoxLayout, QLabel, QMenu, QScrollArea, QSizePolicy, QSplitter, QToolBar,
QWidget, QFrame, QToolBar, QSizePolicy, QComboBox, QToolButton QToolButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
) )
from novelwriter.enum import ( from novelwriter.enum import (
nwDocMode, nwItemClass, nwItemLayout, nwItemType, nwOutline nwDocMode, nwItemClass, nwItemLayout, nwItemType, nwOutline
) )
from novelwriter.common import checkInt from novelwriter.common import checkInt
from novelwriter.constants import trConst, nwKeyWords, nwLabels from novelwriter.constants import nwHeaders, trConst, nwKeyWords, nwLabels
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -59,8 +59,9 @@ class GuiOutlineView(QWidget):
def __init__(self, mainGui): def __init__(self, mainGui):
QWidget.__init__(self, mainGui) QWidget.__init__(self, mainGui)
self.mainConf = novelwriter.CONFIG self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui self.mainGui = mainGui
self.theProject = mainGui.theProject
# Build GUI # Build GUI
self.outlineBar = GuiOutlineToolBar(self) self.outlineBar = GuiOutlineToolBar(self)
@@ -96,33 +97,58 @@ class GuiOutlineView(QWidget):
# Methods # Methods
## ##
def splitSizes(self): def initSettings(self):
return self.splitOutline.sizes() """Initialise GUI elements that depend on specific settings.
"""
self.outlineTree.initSettings()
self.outlineData.initSettings()
return
def clearOutline(self): def refreshTree(self):
"""Refresh the current tree.
"""
self.outlineTree.refreshTree(rootHandle=self.theProject.lastOutline)
return
def clearProject(self):
"""Clear project-related GUI content.
"""
self.outlineData.clearDetails() self.outlineData.clearDetails()
return return
def initOutline(self): def openProjectTasks(self):
self.outlineTree.initOutline() """Run open project tasks.
self.outlineData.initDetails() """
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 return
def closeOutline(self): def closeProjectTasks(self):
self.outlineTree.closeOutline() self.outlineTree.closeProjectTasks()
self.outlineData.updateClasses() self.outlineData.updateClasses()
return return
def refreshView(self, overRide=False, novelChanged=False): def splitSizes(self):
self.outlineTree.refreshTree(overRide=overRide, novelChanged=novelChanged) return self.splitOutline.sizes()
return
def treeHasFocus(self):
return self.outlineTree.hasFocus()
def setTreeFocus(self): def setTreeFocus(self):
"""Set the focus to the tree widget.
"""
return self.outlineTree.setFocus() return self.outlineTree.setFocus()
def treeHasFocus(self):
"""Check if the outline tree has focus.
"""
return self.outlineTree.hasFocus()
## ##
# Public Slots # Public Slots
## ##
@@ -243,6 +269,17 @@ class GuiOutlineToolBar(QToolBar):
self.novelValue.addItem(tIcon, self.tr("All Novel Folders"), "") self.novelValue.addItem(tIcon, self.tr("All Novel Folders"), "")
return 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): def setColumnHiddenState(self, hiddenState):
"""Forward the change of column hidden states to the menu. """Forward the change of column hidden states to the menu.
""" """
@@ -313,6 +350,9 @@ class GuiOutlineTree(QTreeWidget):
nwOutline.SYNOP: False, nwOutline.SYNOP: False,
} }
D_HANDLE = Qt.UserRole
D_TITLE = Qt.UserRole + 1
hiddenStateChanged = pyqtSignal() hiddenStateChanged = pyqtSignal()
activeItemChanged = pyqtSignal(str, str) activeItemChanged = pyqtSignal(str, str)
@@ -337,11 +377,35 @@ class GuiOutlineTree(QTreeWidget):
iPx = self.mainTheme.baseIconSize iPx = self.mainTheme.baseIconSize
self.setIconSize(QSize(iPx, iPx)) self.setIconSize(QSize(iPx, iPx))
self.setIndentation(iPx) self.setIndentation(0)
self.treeHead = self.header() self.treeHead = self.header()
self.treeHead.sectionMoved.connect(self._columnMoved) self.treeHead.sectionMoved.connect(self._columnMoved)
# Pre-Generate Tree Formatting
fH1 = self.font()
fH1.setBold(True)
fH1.setUnderline(True)
fH2 = self.font()
fH2.setBold(True)
self._hFonts = [self.font(), fH1, fH2, self.font(), self.font()]
self._pIndent = [
self.mainTheme.loadDecoration("deco_doc_h0", pxH=iPx),
self.mainTheme.loadDecoration("deco_doc_h1", pxH=iPx),
self.mainTheme.loadDecoration("deco_doc_h2", pxH=iPx),
self.mainTheme.loadDecoration("deco_doc_h3", pxH=iPx),
self.mainTheme.loadDecoration("deco_doc_h4", pxH=iPx),
]
self._dIcon = {
"H0": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H0"),
"H1": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H1"),
"H2": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H2"),
"H3": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H3"),
"H4": self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, "H4"),
}
# Internals # Internals
self._treeOrder = [] self._treeOrder = []
self._colWidth = {} self._colWidth = {}
@@ -351,8 +415,8 @@ class GuiOutlineTree(QTreeWidget):
self._firstView = True self._firstView = True
self._lastBuild = 0 self._lastBuild = 0
self.initOutline() self.initSettings()
self.clearOutline() self.clearContent()
self.hiddenStateChanged.emit() self.hiddenStateChanged.emit()
@@ -372,7 +436,7 @@ class GuiOutlineTree(QTreeWidget):
# Methods # Methods
## ##
def initOutline(self): def initSettings(self):
"""Set or update outline settings. """Set or update outline settings.
""" """
# Scroll bars # Scroll bars
@@ -388,7 +452,7 @@ class GuiOutlineTree(QTreeWidget):
return return
def clearOutline(self): def clearContent(self):
"""Clear the tree and header and set the default values for the """Clear the tree and header and set the default values for the
columns arrays. columns arrays.
""" """
@@ -426,18 +490,20 @@ class GuiOutlineTree(QTreeWidget):
# If the novel index or novel tree has changed since the tree # If the novel index or novel tree has changed since the tree
# was last built, we rebuild the tree from the updated index. # was last built, we rebuild the tree from the updated index.
indexChanged = self.theProject.index.rootChangedSince(rootHandle, self._lastBuild) indexChanged = self.theProject.index.rootChangedSince(rootHandle, self._lastBuild)
doBuild = (novelChanged or indexChanged) and self.theProject.autoOutline if not (novelChanged or indexChanged or overRide):
if doBuild or overRide: logger.verbose("No changes have been made to the novel index")
logger.debug("Rebuilding Project Outline") return
self._populateTree(rootHandle)
self._populateTree(rootHandle)
self.theProject.setLastOutlineViewed(rootHandle or None)
return return
def closeOutline(self): def closeProjectTasks(self):
"""Called before a project is closed. """Called before a project is closed.
""" """
self._saveHeaderState() self._saveHeaderState()
self.clearOutline() self.clearContent()
self._firstView = True self._firstView = True
return return
@@ -449,7 +515,7 @@ class GuiOutlineTree(QTreeWidget):
tHandle = None tHandle = None
tLine = 0 tLine = 0
if selItem: if selItem:
tHandle = selItem[0].data(self._colIdx[nwOutline.TITLE], Qt.UserRole) tHandle = selItem[0].data(self._colIdx[nwOutline.TITLE], self.D_HANDLE)
tLine = checkInt(selItem[0].text(self._colIdx[nwOutline.LINE]), 1) - 1 tLine = checkInt(selItem[0].text(self._colIdx[nwOutline.LINE]), 1) - 1
return tHandle, tLine return tHandle, tLine
@@ -475,8 +541,8 @@ class GuiOutlineTree(QTreeWidget):
""" """
selItems = self.selectedItems() selItems = self.selectedItems()
if selItems: if selItems:
tHandle = selItems[0].data(self._colIdx[nwOutline.TITLE], Qt.UserRole) tHandle = selItems[0].data(self._colIdx[nwOutline.TITLE], self.D_HANDLE)
sTitle = selItems[0].data(self._colIdx[nwOutline.LINE], Qt.UserRole) sTitle = selItems[0].data(self._colIdx[nwOutline.TITLE], self.D_TITLE)
self.activeItemChanged.emit(tHandle, sTitle) self.activeItemChanged.emit(tHandle, sTitle)
return return
@@ -614,8 +680,7 @@ class GuiOutlineTree(QTreeWidget):
self.setColumnWidth(self._colIdx[hItem], self._colWidth[hItem]) self.setColumnWidth(self._colIdx[hItem], self._colWidth[hItem])
self.setColumnHidden(self._colIdx[hItem], self._colHidden[hItem]) self.setColumnHidden(self._colIdx[hItem], self._colHidden[hItem])
# Make sure title column is always visible, # Make sure title column is always visible
# and handle column always hidden
self.setColumnHidden(self._colIdx[nwOutline.TITLE], False) self.setColumnHidden(self._colIdx[nwOutline.TITLE], False)
headItem = self.headerItem() headItem = self.headerItem()
@@ -623,101 +688,51 @@ class GuiOutlineTree(QTreeWidget):
headItem.setTextAlignment(self._colIdx[nwOutline.WCOUNT], Qt.AlignRight) headItem.setTextAlignment(self._colIdx[nwOutline.WCOUNT], Qt.AlignRight)
headItem.setTextAlignment(self._colIdx[nwOutline.PCOUNT], Qt.AlignRight) headItem.setTextAlignment(self._colIdx[nwOutline.PCOUNT], Qt.AlignRight)
currTitle = None
currChapter = None
currScene = None
novStruct = self.theProject.index.novelStructure(rootHandle=rootHandle, skipExcl=True) novStruct = self.theProject.index.novelStructure(rootHandle=rootHandle, skipExcl=True)
for _, tHandle, sTitle, novIdx in novStruct: for _, tHandle, sTitle, novIdx in novStruct:
tItem = self._createTreeItem(tHandle, sTitle, novIdx) iLevel = nwHeaders.H_LEVEL.get(novIdx.level, 0)
dLevel = self.theProject.index.getHandleHeaderLevel(tHandle)
if iLevel == 0:
continue
tLevel = novIdx.level trItem = QTreeWidgetItem()
if tLevel == "H1": nwItem = self.theProject.tree[tHandle]
self.addTopLevelItem(tItem)
currTitle = tItem
currChapter = None
currScene = None
elif tLevel == "H2": trItem.setData(self._colIdx[nwOutline.TITLE], Qt.DecorationRole, self._pIndent[iLevel])
if currTitle is None: trItem.setText(self._colIdx[nwOutline.TITLE], novIdx.title)
self.addTopLevelItem(tItem) trItem.setData(self._colIdx[nwOutline.TITLE], self.D_HANDLE, tHandle)
else: trItem.setData(self._colIdx[nwOutline.TITLE], self.D_TITLE, sTitle)
currTitle.addChild(tItem) trItem.setFont(self._colIdx[nwOutline.TITLE], self._hFonts[iLevel])
currChapter = tItem trItem.setText(self._colIdx[nwOutline.LEVEL], novIdx.level)
currScene = None trItem.setIcon(self._colIdx[nwOutline.LABEL], self._dIcon[dLevel])
trItem.setText(self._colIdx[nwOutline.LABEL], nwItem.itemName)
trItem.setText(self._colIdx[nwOutline.LINE], sTitle[1:].lstrip("0"))
trItem.setText(self._colIdx[nwOutline.SYNOP], novIdx.synopsis)
trItem.setText(self._colIdx[nwOutline.CCOUNT], f"{novIdx.charCount:n}")
trItem.setText(self._colIdx[nwOutline.WCOUNT], f"{novIdx.wordCount:n}")
trItem.setText(self._colIdx[nwOutline.PCOUNT], f"{novIdx.paraCount:n}")
trItem.setTextAlignment(self._colIdx[nwOutline.CCOUNT], Qt.AlignRight)
trItem.setTextAlignment(self._colIdx[nwOutline.WCOUNT], Qt.AlignRight)
trItem.setTextAlignment(self._colIdx[nwOutline.PCOUNT], Qt.AlignRight)
elif tLevel == "H3": refs = self.theProject.index.getReferences(tHandle, sTitle)
if currChapter is None: trItem.setText(self._colIdx[nwOutline.POV], ", ".join(refs[nwKeyWords.POV_KEY]))
if currTitle is None: trItem.setText(self._colIdx[nwOutline.FOCUS], ", ".join(refs[nwKeyWords.FOCUS_KEY]))
self.addTopLevelItem(tItem) trItem.setText(self._colIdx[nwOutline.CHAR], ", ".join(refs[nwKeyWords.CHAR_KEY]))
else: trItem.setText(self._colIdx[nwOutline.PLOT], ", ".join(refs[nwKeyWords.PLOT_KEY]))
currTitle.addChild(tItem) trItem.setText(self._colIdx[nwOutline.TIME], ", ".join(refs[nwKeyWords.TIME_KEY]))
else: trItem.setText(self._colIdx[nwOutline.WORLD], ", ".join(refs[nwKeyWords.WORLD_KEY]))
currChapter.addChild(tItem) trItem.setText(self._colIdx[nwOutline.OBJECT], ", ".join(refs[nwKeyWords.OBJECT_KEY]))
currScene = tItem trItem.setText(self._colIdx[nwOutline.ENTITY], ", ".join(refs[nwKeyWords.ENTITY_KEY]))
trItem.setText(self._colIdx[nwOutline.CUSTOM], ", ".join(refs[nwKeyWords.CUSTOM_KEY]))
elif tLevel == "H4": self.addTopLevelItem(trItem)
if currScene is None:
if currChapter is None:
if currTitle is None:
self.addTopLevelItem(tItem)
else:
currTitle.addChild(tItem)
else:
currChapter.addChild(tItem)
else:
currScene.addChild(tItem)
tItem.setExpanded(True)
self._lastBuild = time() self._lastBuild = time()
return return
def _createTreeItem(self, tHandle, sTitle, novIdx):
"""Populate a tree item with all the column values.
"""
nwItem = self.theProject.tree[tHandle]
newItem = QTreeWidgetItem()
hIcon = "doc_%s" % novIdx.level.lower()
hLevel = self.theProject.index.getHandleHeaderLevel(tHandle)
dIcon = self.mainTheme.getItemIcon(nwItemType.FILE, None, nwItemLayout.DOCUMENT, hLevel)
cC = int(novIdx.charCount)
wC = int(novIdx.wordCount)
pC = int(novIdx.paraCount)
newItem.setText(self._colIdx[nwOutline.TITLE], novIdx.title)
newItem.setData(self._colIdx[nwOutline.TITLE], Qt.UserRole, tHandle)
newItem.setIcon(self._colIdx[nwOutline.TITLE], self.mainTheme.getIcon(hIcon))
newItem.setText(self._colIdx[nwOutline.LEVEL], novIdx.level)
newItem.setText(self._colIdx[nwOutline.LABEL], nwItem.itemName)
newItem.setIcon(self._colIdx[nwOutline.LABEL], dIcon)
newItem.setText(self._colIdx[nwOutline.LINE], sTitle[1:].lstrip("0"))
newItem.setData(self._colIdx[nwOutline.LINE], Qt.UserRole, sTitle)
newItem.setText(self._colIdx[nwOutline.SYNOP], novIdx.synopsis)
newItem.setText(self._colIdx[nwOutline.CCOUNT], f"{cC:n}")
newItem.setText(self._colIdx[nwOutline.WCOUNT], f"{wC:n}")
newItem.setText(self._colIdx[nwOutline.PCOUNT], f"{pC:n}")
newItem.setTextAlignment(self._colIdx[nwOutline.CCOUNT], Qt.AlignRight)
newItem.setTextAlignment(self._colIdx[nwOutline.WCOUNT], Qt.AlignRight)
newItem.setTextAlignment(self._colIdx[nwOutline.PCOUNT], Qt.AlignRight)
theRefs = self.theProject.index.getReferences(tHandle, sTitle)
newItem.setText(self._colIdx[nwOutline.POV], ", ".join(theRefs[nwKeyWords.POV_KEY]))
newItem.setText(self._colIdx[nwOutline.FOCUS], ", ".join(theRefs[nwKeyWords.FOCUS_KEY]))
newItem.setText(self._colIdx[nwOutline.CHAR], ", ".join(theRefs[nwKeyWords.CHAR_KEY]))
newItem.setText(self._colIdx[nwOutline.PLOT], ", ".join(theRefs[nwKeyWords.PLOT_KEY]))
newItem.setText(self._colIdx[nwOutline.TIME], ", ".join(theRefs[nwKeyWords.TIME_KEY]))
newItem.setText(self._colIdx[nwOutline.WORLD], ", ".join(theRefs[nwKeyWords.WORLD_KEY]))
newItem.setText(self._colIdx[nwOutline.OBJECT], ", ".join(theRefs[nwKeyWords.OBJECT_KEY]))
newItem.setText(self._colIdx[nwOutline.ENTITY], ", ".join(theRefs[nwKeyWords.ENTITY_KEY]))
newItem.setText(self._colIdx[nwOutline.CUSTOM], ", ".join(theRefs[nwKeyWords.CUSTOM_KEY]))
return newItem
# END Class GuiOutlineTree # END Class GuiOutlineTree
@@ -964,13 +979,13 @@ class GuiOutlineDetails(QScrollArea):
self.setWidgetResizable(True) self.setWidgetResizable(True)
self.setFrameStyle(QFrame.NoFrame) self.setFrameStyle(QFrame.NoFrame)
self.initDetails() self.initSettings()
logger.debug("GuiOutlineDetails initialisation complete") logger.debug("GuiOutlineDetails initialisation complete")
return return
def initDetails(self): def initSettings(self):
"""Set or update outline settings. """Set or update outline settings.
""" """
# Scroll bars # Scroll bars
+1 -4
View File
@@ -55,7 +55,6 @@ class GuiProjectView(QWidget):
# Signals triggered when the meta data values of items change # Signals triggered when the meta data values of items change
treeItemChanged = pyqtSignal(str) treeItemChanged = pyqtSignal(str)
novelItemChanged = pyqtSignal(str)
rootFolderChanged = pyqtSignal(str) rootFolderChanged = pyqtSignal(str)
wordCountsChanged = pyqtSignal() wordCountsChanged = pyqtSignal()
@@ -177,7 +176,7 @@ class GuiProjectToolBar(QWidget):
self.mainTheme = projView.mainGui.mainTheme self.mainTheme = projView.mainGui.mainTheme
iPx = self.mainTheme.baseIconSize iPx = self.mainTheme.baseIconSize
mPx = self.mainConf.pxInt(3) mPx = self.mainConf.pxInt(2)
self.setContentsMargins(0, 0, 0, 0) self.setContentsMargins(0, 0, 0, 0)
self.setAutoFillBackground(True) self.setAutoFillBackground(True)
@@ -1356,8 +1355,6 @@ class GuiProjectTree(QTreeWidget):
itemType = tItem.itemType itemType = tItem.itemType
if itemType == nwItemType.ROOT: if itemType == nwItemType.ROOT:
self.projView.rootFolderChanged.emit(tHandle) self.projView.rootFolderChanged.emit(tHandle)
elif itemType == nwItemType.FILE and tItem.isNovelLike():
self.projView.novelItemChanged.emit(tHandle)
self.projView.treeItemChanged.emit(tHandle) self.projView.treeItemChanged.emit(tHandle)
+7 -20
View File
@@ -199,7 +199,6 @@ class GuiMain(QMainWindow):
self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox)
self.projView.openDocumentRequest.connect(self._openDocument) self.projView.openDocumentRequest.connect(self._openDocument)
self.projView.novelItemChanged.connect(self._treeNovelItemChanged)
self.projView.wordCountsChanged.connect(self._updateStatusWordCount) self.projView.wordCountsChanged.connect(self._updateStatusWordCount)
self.projView.treeItemChanged.connect(self.docEditor.updateDocInfo) self.projView.treeItemChanged.connect(self.docEditor.updateDocInfo)
self.projView.treeItemChanged.connect(self.docViewer.updateDocInfo) self.projView.treeItemChanged.connect(self.docViewer.updateDocInfo)
@@ -303,7 +302,7 @@ class GuiMain(QMainWindow):
self.docEditor.clearEditor() self.docEditor.clearEditor()
self.docEditor.setDictionaries() self.docEditor.setDictionaries()
self.closeDocViewer() self.closeDocViewer()
self.outlineView.clearOutline() self.outlineView.clearProject()
# General # General
self.statusBar.clearStatus() self.statusBar.clearStatus()
@@ -365,8 +364,8 @@ class GuiMain(QMainWindow):
self.rebuildTrees() self.rebuildTrees()
self.saveProject() self.saveProject()
self.docEditor.setDictionaries() self.docEditor.setDictionaries()
self.outlineView.updateRootItem(None)
self.novelView.openProjectTasks() self.novelView.openProjectTasks()
self.outlineView.openProjectTasks()
self.rebuildIndex(beQuiet=True) self.rebuildIndex(beQuiet=True)
self.statusBar.setRefTime(self.theProject.projOpened) self.statusBar.setRefTime(self.theProject.projOpened)
self.statusBar.setProjectStatus(nwState.GOOD) self.statusBar.setProjectStatus(nwState.GOOD)
@@ -422,7 +421,7 @@ class GuiMain(QMainWindow):
if saveOK: if saveOK:
self.closeDocument() self.closeDocument()
self.docViewer.clearNavHistory() self.docViewer.clearNavHistory()
self.outlineView.closeOutline() self.outlineView.closeProjectTasks()
self.novelView.closeProjectTasks() self.novelView.closeProjectTasks()
self.theProject.closeProject(self.idleTime) self.theProject.closeProject(self.idleTime)
@@ -514,8 +513,8 @@ class GuiMain(QMainWindow):
self.docEditor.setDictionaries() self.docEditor.setDictionaries()
self.docEditor.toggleSpellCheck(self.theProject.spellCheck) self.docEditor.toggleSpellCheck(self.theProject.spellCheck)
self.statusBar.setRefTime(self.theProject.projOpened) self.statusBar.setRefTime(self.theProject.projOpened)
self.outlineView.updateRootItem(None)
self.novelView.openProjectTasks() self.novelView.openProjectTasks()
self.outlineView.openProjectTasks()
self._updateStatusWordCount() self._updateStatusWordCount()
# Restore previously open documents, if any # Restore previously open documents, if any
@@ -931,7 +930,7 @@ class GuiMain(QMainWindow):
self.docViewer.initViewer() self.docViewer.initViewer()
self.projView.initSettings() self.projView.initSettings()
self.novelView.initSettings() self.novelView.initSettings()
self.outlineView.initOutline() self.outlineView.initSettings()
self._updateStatusWordCount() self._updateStatusWordCount()
return return
@@ -1192,7 +1191,7 @@ class GuiMain(QMainWindow):
if tabIdx == self.idxProjView: if tabIdx == self.idxProjView:
self.projView.setFocus() self.projView.setFocus()
elif tabIdx == self.idxNovelView: elif tabIdx == self.idxNovelView:
self.novelView.setFocus() self.novelView.setTreeFocus()
elif paneNo == nwWidget.EDITOR: elif paneNo == nwWidget.EDITOR:
self._changeView(nwView.EDITOR) self._changeView(nwView.EDITOR)
self.docEditor.setFocus() self.docEditor.setFocus()
@@ -1552,18 +1551,6 @@ class GuiMain(QMainWindow):
return return
@pyqtSlot()
def _treeNovelItemChanged(self):
"""Triggered when there is a change to a novel item in the
project tree.
"""
if self.mainStack.currentIndex() == self.idxOutlineView:
logger.verbose("Novel tree changed while Outline tab active")
if self.hasProject:
self.outlineView.refreshView(novelChanged=True)
return
@pyqtSlot() @pyqtSlot()
def _keyPressReturn(self): def _keyPressReturn(self):
"""Forward the return/enter keypress to the function that opens """Forward the return/enter keypress to the function that opens
@@ -1593,7 +1580,7 @@ class GuiMain(QMainWindow):
elif stIndex == self.idxOutlineView: elif stIndex == self.idxOutlineView:
logger.verbose("Outline View activated") logger.verbose("Outline View activated")
if self.hasProject: if self.hasProject:
self.outlineView.refreshView() self.outlineView.refreshTree()
return return
+4 -5
View File
@@ -1,24 +1,23 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-15 13:07:17"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:38:08">
<project> <project>
<name>Sample Project</name> <name>Sample Project</name>
<title>Sample Project</title> <title>Sample Project</title>
<author>Jane Smith</author> <author>Jane Smith</author>
<author>Jay Doh</author> <author>Jay Doh</author>
<saveCount>1371</saveCount> <saveCount>1378</saveCount>
<autoCount>236</autoCount> <autoCount>236</autoCount>
<editTime>69222</editTime> <editTime>69273</editTime>
</project> </project>
<settings> <settings>
<doBackup>False</doBackup> <doBackup>False</doBackup>
<language>en_GB</language> <language>en_GB</language>
<spellCheck>True</spellCheck> <spellCheck>True</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>636b6aa9b697b</lastEdited> <lastEdited>636b6aa9b697b</lastEdited>
<lastViewed>636b6aa9b697b</lastViewed> <lastViewed>636b6aa9b697b</lastViewed>
<lastNovel>7031beac91f75</lastNovel> <lastNovel>7031beac91f75</lastNovel>
<lastOutline>None</lastOutline> <lastOutline>7031beac91f75</lastOutline>
<lastWordCount>1363</lastWordCount> <lastWordCount>1363</lastWordCount>
<novelWordCount>954</novelWordCount> <novelWordCount>954</novelWordCount>
<notesWordCount>409</notesWordCount> <notesWordCount>409</notesWordCount>
-1
View File
@@ -13,7 +13,6 @@
<language>en_GB</language> <language>en_GB</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>7a992350f3eb6</lastEdited> <lastEdited>7a992350f3eb6</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
-1
View File
@@ -14,7 +14,6 @@
<language>en_GB</language> <language>en_GB</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:45:51"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:40:28">
<project> <project>
<name>Test Custom</name> <name>Test Custom</name>
<title>Test Novel</title> <title>Test Novel</title>
@@ -14,7 +14,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -14,7 +14,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:45:51"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:40:28">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -13,7 +13,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:45:51"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:40:28">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title></title> <title></title>
@@ -12,7 +12,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:45:51"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:40:28">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -13,7 +13,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:52:44"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:44:39">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -13,11 +13,10 @@
<language>None</language> <language>None</language>
<spellCheck>True</spellCheck> <spellCheck>True</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>000000000000f</lastEdited> <lastEdited>000000000000f</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>0000000000008</lastNovel> <lastNovel>0000000000008</lastNovel>
<lastOutline>None</lastOutline> <lastOutline>0000000000008</lastOutline>
<lastWordCount>129</lastWordCount> <lastWordCount>129</lastWordCount>
<novelWordCount>102</novelWordCount> <novelWordCount>102</novelWordCount>
<notesWordCount>27</notesWordCount> <notesWordCount>27</notesWordCount>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:45:57"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:40:34">
<project> <project>
<name>New Project</name> <name>New Project</name>
<title>New Novel</title> <title>New Novel</title>
@@ -13,7 +13,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>None</spellLang> <spellLang>None</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-06-12 17:45:53"> <novelWriterXML appVersion="1.7-beta1" hexVersion="0x010700b1" fileVersion="1.4" timeStamp="2022-07-31 18:40:31">
<project> <project>
<name>Project Name</name> <name>Project Name</name>
<title>Project Title</title> <title>Project Title</title>
@@ -14,7 +14,6 @@
<language>None</language> <language>None</language>
<spellCheck>False</spellCheck> <spellCheck>False</spellCheck>
<spellLang>en</spellLang> <spellLang>en</spellLang>
<autoOutline>True</autoOutline>
<lastEdited>None</lastEdited> <lastEdited>None</lastEdited>
<lastViewed>None</lastViewed> <lastViewed>None</lastViewed>
<lastNovel>None</lastNovel> <lastNovel>None</lastNovel>
-6
View File
@@ -934,12 +934,6 @@ def testCoreProject_Methods(monkeypatch, mockGUI, tmpDir, fncDir, mockRnd):
assert theProject.localLookup(1) == "One" assert theProject.localLookup(1) == "One"
assert theProject.localLookup(10) == "Ten" assert theProject.localLookup(10) == "Ten"
# Automatic outline update
theProject.projChanged = False
assert theProject.setAutoOutline(True)
assert not theProject.setAutoOutline(False)
assert theProject.projChanged
# Last edited # Last edited
theProject.projChanged = False theProject.projChanged = False
assert theProject.setLastEdited("0123456789abc") assert theProject.setLastEdited("0123456789abc")
+1 -3
View File
@@ -149,9 +149,7 @@ def testGuiMain_ProjectTreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(GuiOutlineView, "treeHasFocus", lambda *a: True) mp.setattr(GuiOutlineView, "treeHasFocus", lambda *a: True)
assert nwGUI.docEditor.docHandle() is None assert nwGUI.docEditor.docHandle() is None
actItem = nwGUI.outlineView.outlineTree.topLevelItem(0) selItem = nwGUI.outlineView.outlineTree.topLevelItem(2)
chpItem = actItem.child(0)
selItem = chpItem.child(0)
nwGUI.outlineView.outlineTree.setCurrentItem(selItem) nwGUI.outlineView.outlineTree.setCurrentItem(selItem)
nwGUI._keyPressReturn() nwGUI._keyPressReturn()
assert nwGUI.docEditor.docHandle() == sHandle assert nwGUI.docEditor.docHandle() == sHandle
+4 -9
View File
@@ -54,7 +54,7 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, fncDir):
# Toggle scrollbars # Toggle scrollbars
nwGUI.mainConf.hideVScroll = True nwGUI.mainConf.hideVScroll = True
nwGUI.mainConf.hideHScroll = True nwGUI.mainConf.hideHScroll = True
outlineView.initOutline() outlineView.initSettings()
assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
@@ -62,7 +62,7 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, fncDir):
nwGUI.mainConf.hideVScroll = False nwGUI.mainConf.hideVScroll = False
nwGUI.mainConf.hideHScroll = False nwGUI.mainConf.hideHScroll = False
outlineView.initOutline() outlineView.initSettings()
assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded
assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded
assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded
@@ -232,9 +232,7 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
assert outlineData.pCValue.text() == "3" assert outlineData.pCValue.text() == "3"
# Scene One # Scene One
actItem = outlineTree.topLevelItem(1) selItem = outlineTree.topLevelItem(4)
chpItem = actItem.child(0)
selItem = chpItem.child(0)
outlineTree.setCurrentItem(selItem) outlineTree.setCurrentItem(selItem)
tHandle, tLine = outlineTree.getSelectedHandle() tHandle, tLine = outlineTree.getSelectedHandle()
@@ -252,10 +250,7 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
assert nwGUI.docViewer.docHandle() == "4c4f28287af27" assert nwGUI.docViewer.docHandle() == "4c4f28287af27"
# Scene One, Section Two # Scene One, Section Two
actItem = outlineTree.topLevelItem(1) selItem = outlineTree.topLevelItem(5)
chpItem = actItem.child(0)
scnItem = chpItem.child(0)
selItem = scnItem.child(0)
outlineTree.setCurrentItem(selItem) outlineTree.setCurrentItem(selItem)
tHandle, tLine = outlineTree.getSelectedHandle() tHandle, tLine = outlineTree.getSelectedHandle()