Rename outline components

This commit is contained in:
Veronica Berglyd Olsen
2022-06-11 15:59:08 +02:00
parent 94068e777a
commit db01d85f2e
5 changed files with 83 additions and 83 deletions
+2 -2
View File
@@ -24,7 +24,7 @@ from novelwriter.gui.docviewer import GuiDocViewer, GuiDocViewDetails
from novelwriter.gui.itemdetails import GuiItemDetails from novelwriter.gui.itemdetails import GuiItemDetails
from novelwriter.gui.mainmenu import GuiMainMenu from novelwriter.gui.mainmenu import GuiMainMenu
from novelwriter.gui.noveltree import GuiNovelTree from novelwriter.gui.noveltree import GuiNovelTree
from novelwriter.gui.outline import GuiOutline from novelwriter.gui.outline import GuiOutlineView
from novelwriter.gui.projtree import GuiProjectView from novelwriter.gui.projtree import GuiProjectView
from novelwriter.gui.statusbar import GuiMainStatus from novelwriter.gui.statusbar import GuiMainStatus
from novelwriter.gui.theme import GuiTheme from novelwriter.gui.theme import GuiTheme
@@ -38,7 +38,7 @@ __all__ = [
"GuiMainMenu", "GuiMainMenu",
"GuiMainStatus", "GuiMainStatus",
"GuiNovelTree", "GuiNovelTree",
"GuiOutline", "GuiOutlineView",
"GuiProjectView", "GuiProjectView",
"GuiTheme", "GuiTheme",
"GuiViewsBar", "GuiViewsBar",
+21 -21
View File
@@ -4,9 +4,9 @@ novelWriter GUI Project Outline
GUI class for the project outline view GUI class for the project outline view
File History: File History:
Created: 2022-05-15 [1.7b1] GuiOutline Created: 2022-05-15 [1.7b1] GuiOutlineView
Created: 2022-05-22 [1.7b1] GuiOutlineToolBar Created: 2022-05-22 [1.7b1] GuiOutlineToolBar
Created: 2019-11-16 [0.4.1] GuiOutlineView Created: 2019-11-16 [0.4.1] GuiOutlineTree
Created: 2019-11-16 [0.4.1] GuiOutlineHeaderMenu Created: 2019-11-16 [0.4.1] GuiOutlineHeaderMenu
Created: 2020-06-02 [0.7.0] GuiOutlineDetails Created: 2020-06-02 [0.7.0] GuiOutlineDetails
@@ -52,7 +52,7 @@ from novelwriter.constants import trConst, nwKeyWords, nwLabels
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class GuiOutline(QWidget): class GuiOutlineView(QWidget):
loadDocumentTagRequest = pyqtSignal(str, Enum) loadDocumentTagRequest = pyqtSignal(str, Enum)
@@ -64,11 +64,11 @@ class GuiOutline(QWidget):
# Build GUI # Build GUI
self.outlineBar = GuiOutlineToolBar(self) self.outlineBar = GuiOutlineToolBar(self)
self.outlineView = GuiOutlineView(self) self.outlineTree = GuiOutlineTree(self)
self.outlineData = GuiOutlineDetails(self) self.outlineData = GuiOutlineDetails(self)
self.splitOutline = QSplitter(Qt.Vertical) self.splitOutline = QSplitter(Qt.Vertical)
self.splitOutline.addWidget(self.outlineView) self.splitOutline.addWidget(self.outlineTree)
self.splitOutline.addWidget(self.outlineData) self.splitOutline.addWidget(self.outlineData)
self.splitOutline.setSizes(self.mainConf.getOutlinePanePos()) self.splitOutline.setSizes(self.mainConf.getOutlinePanePos())
@@ -81,14 +81,14 @@ class GuiOutline(QWidget):
self.setLayout(self.outerBox) self.setLayout(self.outerBox)
# Connect Signals # Connect Signals
self.outlineView.hiddenStateChanged.connect(self._updateMenuColumns) self.outlineTree.hiddenStateChanged.connect(self._updateMenuColumns)
self.outlineView.activeItemChanged.connect(self.outlineData.showItem) self.outlineTree.activeItemChanged.connect(self.outlineData.showItem)
self.outlineData.itemTagClicked.connect(self._tagClicked) self.outlineData.itemTagClicked.connect(self._tagClicked)
self.outlineBar.loadNovelRootRequest.connect(self._rootItemChanged) self.outlineBar.loadNovelRootRequest.connect(self._rootItemChanged)
self.outlineBar.viewColumnToggled.connect(self.outlineView.menuColumnToggled) self.outlineBar.viewColumnToggled.connect(self.outlineTree.menuColumnToggled)
# Function Mappings # Function Mappings
self.getSelectedHandle = self.outlineView.getSelectedHandle self.getSelectedHandle = self.outlineTree.getSelectedHandle
return return
@@ -104,24 +104,24 @@ class GuiOutline(QWidget):
return return
def initOutline(self): def initOutline(self):
self.outlineView.initOutline() self.outlineTree.initOutline()
self.outlineData.initDetails() self.outlineData.initDetails()
return return
def closeOutline(self): def closeOutline(self):
self.outlineView.closeOutline() self.outlineTree.closeOutline()
self.outlineData.updateClasses() self.outlineData.updateClasses()
return return
def refreshView(self, overRide=False, novelChanged=False): def refreshView(self, overRide=False, novelChanged=False):
self.outlineView.refreshTree(overRide=overRide, novelChanged=novelChanged) self.outlineTree.refreshTree(overRide=overRide, novelChanged=novelChanged)
return return
def treeFocus(self): def treeFocus(self):
return self.outlineView.hasFocus() return self.outlineTree.hasFocus()
def setTreeFocus(self): def setTreeFocus(self):
return self.outlineView.setFocus() return self.outlineTree.setFocus()
## ##
# Public Slots # Public Slots
@@ -145,7 +145,7 @@ class GuiOutline(QWidget):
checkboxes whenever a signal is received that the hidden state checkboxes whenever a signal is received that the hidden state
of columns has changed. of columns has changed.
""" """
self.outlineBar.setColumnHiddenState(self.outlineView.hiddenColumns) self.outlineBar.setColumnHiddenState(self.outlineTree.hiddenColumns)
return return
@pyqtSlot(str) @pyqtSlot(str)
@@ -160,10 +160,10 @@ class GuiOutline(QWidget):
def _rootItemChanged(self, handle): def _rootItemChanged(self, handle):
"""The root novel handle has changed or needs to be refreshed. """The root novel handle has changed or needs to be refreshed.
""" """
self.outlineView.refreshTree(rootHandle=(handle or None), overRide=True) self.outlineTree.refreshTree(rootHandle=(handle or None), overRide=True)
return return
# END Class GuiOutline # END Class GuiOutlineView
class GuiOutlineToolBar(QToolBar): class GuiOutlineToolBar(QToolBar):
@@ -271,7 +271,7 @@ class GuiOutlineToolBar(QToolBar):
# END Class GuiOutlineToolBar # END Class GuiOutlineToolBar
class GuiOutlineView(QTreeWidget): class GuiOutlineTree(QTreeWidget):
DEF_WIDTH = { DEF_WIDTH = {
nwOutline.TITLE: 200, nwOutline.TITLE: 200,
@@ -319,7 +319,7 @@ class GuiOutlineView(QTreeWidget):
def __init__(self, theOutline): def __init__(self, theOutline):
QTreeWidget.__init__(self, theOutline) QTreeWidget.__init__(self, theOutline)
logger.debug("Initialising GuiOutlineView ...") logger.debug("Initialising GuiOutlineTree ...")
self.mainConf = novelwriter.CONFIG self.mainConf = novelwriter.CONFIG
self.mainGui = theOutline.mainGui self.mainGui = theOutline.mainGui
@@ -355,7 +355,7 @@ class GuiOutlineView(QTreeWidget):
self.hiddenStateChanged.emit() self.hiddenStateChanged.emit()
logger.debug("GuiOutlineView initialisation complete") logger.debug("GuiOutlineTree initialisation complete")
return return
@@ -717,7 +717,7 @@ class GuiOutlineView(QTreeWidget):
return newItem return newItem
# END Class GuiOutlineView # END Class GuiOutlineTree
class GuiOutlineHeaderMenu(QMenu): class GuiOutlineHeaderMenu(QMenu):
+2 -2
View File
@@ -40,7 +40,7 @@ from PyQt5.QtWidgets import (
from novelwriter.gui import ( from novelwriter.gui import (
GuiDocEditor, GuiDocViewDetails, GuiDocViewer, GuiItemDetails, GuiMainMenu, GuiDocEditor, GuiDocViewDetails, GuiDocViewer, GuiItemDetails, GuiMainMenu,
GuiMainStatus, GuiNovelTree, GuiOutline, GuiProjectView, GuiTheme, GuiMainStatus, GuiNovelTree, GuiOutlineView, GuiProjectView, GuiTheme,
GuiViewsBar GuiViewsBar
) )
from novelwriter.dialogs import ( from novelwriter.dialogs import (
@@ -111,7 +111,7 @@ class GuiMain(QMainWindow):
self.viewMeta = GuiDocViewDetails(self) self.viewMeta = GuiDocViewDetails(self)
self.docViewer = GuiDocViewer(self) self.docViewer = GuiDocViewer(self)
self.itemDetails = GuiItemDetails(self) self.itemDetails = GuiItemDetails(self)
self.outlineView = GuiOutline(self) self.outlineView = GuiOutlineView(self)
self.mainMenu = GuiMainMenu(self) self.mainMenu = GuiMainMenu(self)
self.viewsBar = GuiViewsBar(self) self.viewsBar = GuiViewsBar(self)
+4 -4
View File
@@ -28,7 +28,7 @@ from tools import cmpFiles, buildTestProject, XML_IGNORE, writeFile
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMessageBox, QDialog, QInputDialog from PyQt5.QtWidgets import QMessageBox, QDialog, QInputDialog
from novelwriter.gui import GuiDocEditor, GuiNovelTree, GuiOutline from novelwriter.gui import GuiDocEditor, GuiNovelTree, GuiOutlineView
from novelwriter.enum import nwItemType, nwWidget from novelwriter.enum import nwItemType, nwWidget
from novelwriter.tools import GuiProjectWizard from novelwriter.tools import GuiProjectWizard
from novelwriter.gui.projtree import GuiProjectTree from novelwriter.gui.projtree import GuiProjectTree
@@ -147,12 +147,12 @@ def testGuiMain_ProjectTreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
# Project Outline has focus # Project Outline has focus
nwGUI.switchFocus(nwWidget.OUTLINE) nwGUI.switchFocus(nwWidget.OUTLINE)
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(GuiOutline, "treeFocus", lambda *a: True) mp.setattr(GuiOutlineView, "treeFocus", lambda *a: True)
assert nwGUI.docEditor.docHandle() is None assert nwGUI.docEditor.docHandle() is None
actItem = nwGUI.outlineView.outlineView.topLevelItem(0) actItem = nwGUI.outlineView.outlineTree.topLevelItem(0)
chpItem = actItem.child(0) chpItem = actItem.child(0)
selItem = chpItem.child(0) selItem = chpItem.child(0)
nwGUI.outlineView.outlineView.setCurrentItem(selItem) nwGUI.outlineView.outlineTree.setCurrentItem(selItem)
nwGUI._keyPressReturn() nwGUI._keyPressReturn()
assert nwGUI.docEditor.docHandle() == sHandle assert nwGUI.docEditor.docHandle() == sHandle
assert nwGUI.closeDocument() is True assert nwGUI.closeDocument() is True
+54 -54
View File
@@ -46,57 +46,57 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, fncDir):
nwGUI.rebuildIndex() nwGUI.rebuildIndex()
nwGUI._changeView(nwView.OUTLINE) nwGUI._changeView(nwView.OUTLINE)
outlineMain = nwGUI.outlineView outlineView = nwGUI.outlineView
outlineView = outlineMain.outlineView outlineTree = outlineView.outlineTree
outlineData = outlineMain.outlineData outlineData = outlineView.outlineData
outlineMenu = outlineMain.outlineBar.mColumns outlineMenu = outlineView.outlineBar.mColumns
# Toggle scrollbars # Toggle scrollbars
nwGUI.mainConf.hideVScroll = True nwGUI.mainConf.hideVScroll = True
nwGUI.mainConf.hideHScroll = True nwGUI.mainConf.hideHScroll = True
outlineMain.initOutline() outlineView.initOutline()
assert outlineView.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
assert outlineView.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff
nwGUI.mainConf.hideVScroll = False nwGUI.mainConf.hideVScroll = False
nwGUI.mainConf.hideHScroll = False nwGUI.mainConf.hideHScroll = False
outlineMain.initOutline() outlineView.initOutline()
assert outlineView.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded
assert outlineView.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded
assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded
assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded
# Check focus # Check focus
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QWidget, "hasFocus", lambda *a: True) mp.setattr(QWidget, "hasFocus", lambda *a: True)
assert outlineMain.treeFocus() is True assert outlineView.treeFocus() is True
outlineMain.setTreeFocus() # Can't check. just ensures that it doesn't error outlineView.setTreeFocus() # Can't check. just ensures that it doesn't error
# Option State # Option State
# ============ # ============
pOptions = nwGUI.theProject.options pOptions = nwGUI.theProject.options
colNames = [h.name for h in nwOutline] colNames = [h.name for h in nwOutline]
colItems = [h for h in nwOutline] colItems = [h for h in nwOutline]
colWidth = {h: outlineView.DEF_WIDTH[h] for h in nwOutline} colWidth = {h: outlineTree.DEF_WIDTH[h] for h in nwOutline}
colHidden = {h: outlineView.DEF_HIDDEN[h] for h in nwOutline} colHidden = {h: outlineTree.DEF_HIDDEN[h] for h in nwOutline}
assert outlineView.topLevelItemCount() > 0 assert outlineTree.topLevelItemCount() > 0
# Save header state not allowed # Save header state not allowed
outlineView._lastBuild = 0 outlineTree._lastBuild = 0
outlineView._saveHeaderState() outlineTree._saveHeaderState()
assert pOptions.getValue("GuiOutline", "headerOrder", []) == [] assert pOptions.getValue("GuiOutline", "headerOrder", []) == []
# Allow saving header state # Allow saving header state
outlineView._lastBuild = time.time() outlineTree._lastBuild = time.time()
outlineView._saveHeaderState() outlineTree._saveHeaderState()
assert pOptions.getValue("GuiOutline", "headerOrder", []) == colNames assert pOptions.getValue("GuiOutline", "headerOrder", []) == colNames
assert outlineView._treeOrder == colItems assert outlineTree._treeOrder == colItems
assert outlineView._colWidth == colWidth assert outlineTree._colWidth == colWidth
assert outlineView._colHidden == colHidden assert outlineTree._colHidden == colHidden
# Get default values # Get default values
optItems = pOptions.getValue("GuiOutline", "headerOrder", []) optItems = pOptions.getValue("GuiOutline", "headerOrder", [])
@@ -105,49 +105,49 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, fncDir):
# Add invalid column name # Add invalid column name
pOptions.setValue("GuiOutline", "headerOrder", optItems + ["blabla"]) pOptions.setValue("GuiOutline", "headerOrder", optItems + ["blabla"])
outlineView._loadHeaderState() outlineTree._loadHeaderState()
assert outlineView._treeOrder == colItems assert outlineTree._treeOrder == colItems
assert outlineView._colHidden == colHidden assert outlineTree._colHidden == colHidden
# Add duplicate column name # Add duplicate column name
pOptions.setValue("GuiOutline", "headerOrder", optItems + [optItems[-1]]) pOptions.setValue("GuiOutline", "headerOrder", optItems + [optItems[-1]])
outlineView._loadHeaderState() outlineTree._loadHeaderState()
assert outlineView._treeOrder == colItems assert outlineTree._treeOrder == colItems
assert outlineView._colHidden == colHidden assert outlineTree._colHidden == colHidden
# Invalid column width data # Invalid column width data
pOptions.setValue("GuiOutline", "headerOrder", optItems) pOptions.setValue("GuiOutline", "headerOrder", optItems)
pOptions.setValue("GuiOutline", "columnWidth", {"blabla": None}) pOptions.setValue("GuiOutline", "columnWidth", {"blabla": None})
outlineView._loadHeaderState() outlineTree._loadHeaderState()
assert outlineView._treeOrder == colItems assert outlineTree._treeOrder == colItems
assert outlineView._colHidden == colHidden assert outlineTree._colHidden == colHidden
# Invalid column width data # Invalid column width data
pOptions.setValue("GuiOutline", "headerOrder", optItems) pOptions.setValue("GuiOutline", "headerOrder", optItems)
pOptions.setValue("GuiOutline", "columnWidth", optWidth) pOptions.setValue("GuiOutline", "columnWidth", optWidth)
pOptions.setValue("GuiOutline", "columnHidden", {"bloabla": None}) pOptions.setValue("GuiOutline", "columnHidden", {"bloabla": None})
outlineView._loadHeaderState() outlineTree._loadHeaderState()
assert outlineView._treeOrder == colItems assert outlineTree._treeOrder == colItems
assert outlineView._colHidden == colHidden assert outlineTree._colHidden == colHidden
# Valid settings # Valid settings
pOptions.setValue("GuiOutline", "headerOrder", optItems) pOptions.setValue("GuiOutline", "headerOrder", optItems)
pOptions.setValue("GuiOutline", "columnWidth", optWidth) pOptions.setValue("GuiOutline", "columnWidth", optWidth)
pOptions.setValue("GuiOutline", "columnHidden", optHidden) pOptions.setValue("GuiOutline", "columnHidden", optHidden)
outlineView._loadHeaderState() outlineTree._loadHeaderState()
assert outlineView._treeOrder == colItems assert outlineTree._treeOrder == colItems
assert outlineView._colHidden == colHidden assert outlineTree._colHidden == colHidden
# Header Menu # Header Menu
# =========== # ===========
# Trigger the menu entry for all hidden columns # Trigger the menu entry for all hidden columns
for hItem in nwOutline: for hItem in nwOutline:
if outlineView.DEF_HIDDEN[hItem]: if outlineTree.DEF_HIDDEN[hItem]:
outlineMenu.actionMap[hItem].activate(QAction.Trigger) outlineMenu.actionMap[hItem].activate(QAction.Trigger)
# Now no columns should be hidden # Now no columns should be hidden
outlineView._saveHeaderState() outlineTree._saveHeaderState()
assert not any(pOptions.getValue("GuiOutline", "columnHidden", None).values()) assert not any(pOptions.getValue("GuiOutline", "columnHidden", None).values())
# qtbot.stop() # qtbot.stop()
@@ -169,10 +169,10 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
nwGUI.rebuildIndex() nwGUI.rebuildIndex()
nwGUI._changeView(nwView.OUTLINE) nwGUI._changeView(nwView.OUTLINE)
outlineMain = nwGUI.outlineView outlineView = nwGUI.outlineView
outlineBar = outlineMain.outlineBar outlineBar = outlineView.outlineBar
outlineView = outlineMain.outlineView outlineTree = outlineView.outlineTree
outlineData = outlineMain.outlineData outlineData = outlineView.outlineData
lipHandle = "b3643d0f92e32" lipHandle = "b3643d0f92e32"
@@ -218,10 +218,10 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
# ============= # =============
# First Item # First Item
outlineView.refreshTree() outlineTree.refreshTree()
selItem = outlineView.topLevelItem(0) selItem = outlineTree.topLevelItem(0)
outlineView.setCurrentItem(selItem) outlineTree.setCurrentItem(selItem)
assert outlineData.titleLabel.text() == "<b>Title</b>" assert outlineData.titleLabel.text() == "<b>Title</b>"
assert outlineData.titleValue.text() == "Lorem Ipsum" assert outlineData.titleValue.text() == "Lorem Ipsum"
assert outlineData.fileValue.text() == "Lorem Ipsum" assert outlineData.fileValue.text() == "Lorem Ipsum"
@@ -232,12 +232,12 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
assert outlineData.pCValue.text() == "3" assert outlineData.pCValue.text() == "3"
# Scene One # Scene One
actItem = outlineView.topLevelItem(1) actItem = outlineTree.topLevelItem(1)
chpItem = actItem.child(0) chpItem = actItem.child(0)
selItem = chpItem.child(0) selItem = chpItem.child(0)
outlineView.setCurrentItem(selItem) outlineTree.setCurrentItem(selItem)
tHandle, tLine = outlineView.getSelectedHandle() tHandle, tLine = outlineTree.getSelectedHandle()
assert tHandle == "88243afbe5ed8" assert tHandle == "88243afbe5ed8"
assert tLine == 0 assert tLine == 0
@@ -248,17 +248,17 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
# Click POV Link # Click POV Link
assert outlineData.povKeyValue.text() == "<a href='Bod'>Bod</a>" assert outlineData.povKeyValue.text() == "<a href='Bod'>Bod</a>"
outlineMain._tagClicked("Bod") outlineView._tagClicked("Bod")
assert nwGUI.docViewer.docHandle() == "4c4f28287af27" assert nwGUI.docViewer.docHandle() == "4c4f28287af27"
# Scene One, Section Two # Scene One, Section Two
actItem = outlineView.topLevelItem(1) actItem = outlineTree.topLevelItem(1)
chpItem = actItem.child(0) chpItem = actItem.child(0)
scnItem = chpItem.child(0) scnItem = chpItem.child(0)
selItem = scnItem.child(0) selItem = scnItem.child(0)
outlineView.setCurrentItem(selItem) outlineTree.setCurrentItem(selItem)
tHandle, tLine = outlineView.getSelectedHandle() tHandle, tLine = outlineTree.getSelectedHandle()
assert tHandle == "88243afbe5ed8" assert tHandle == "88243afbe5ed8"
assert tLine == 12 assert tLine == 12
@@ -267,7 +267,7 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum):
assert outlineData.fileValue.text() == "Scene One" assert outlineData.fileValue.text() == "Scene One"
assert outlineData.itemValue.text() == "Finished" assert outlineData.itemValue.text() == "Finished"
outlineView._treeDoubleClick(selItem, 0) outlineTree._treeDoubleClick(selItem, 0)
assert nwGUI.docEditor.docHandle() == "88243afbe5ed8" assert nwGUI.docEditor.docHandle() == "88243afbe5ed8"
# qtbot.stop() # qtbot.stop()