diff --git a/novelwriter/gui/__init__.py b/novelwriter/gui/__init__.py index 9560df1b..1892e83d 100644 --- a/novelwriter/gui/__init__.py +++ b/novelwriter/gui/__init__.py @@ -24,7 +24,7 @@ from novelwriter.gui.docviewer import GuiDocViewer, GuiDocViewDetails from novelwriter.gui.itemdetails import GuiItemDetails from novelwriter.gui.mainmenu import GuiMainMenu 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.statusbar import GuiMainStatus from novelwriter.gui.theme import GuiTheme @@ -38,7 +38,7 @@ __all__ = [ "GuiMainMenu", "GuiMainStatus", "GuiNovelTree", - "GuiOutline", + "GuiOutlineView", "GuiProjectView", "GuiTheme", "GuiViewsBar", diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index d2b2eb04..e3283ead 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -4,9 +4,9 @@ novelWriter – GUI Project Outline GUI class for the project outline view File History: -Created: 2022-05-15 [1.7b1] GuiOutline +Created: 2022-05-15 [1.7b1] GuiOutlineView 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: 2020-06-02 [0.7.0] GuiOutlineDetails @@ -52,7 +52,7 @@ from novelwriter.constants import trConst, nwKeyWords, nwLabels logger = logging.getLogger(__name__) -class GuiOutline(QWidget): +class GuiOutlineView(QWidget): loadDocumentTagRequest = pyqtSignal(str, Enum) @@ -64,11 +64,11 @@ class GuiOutline(QWidget): # Build GUI self.outlineBar = GuiOutlineToolBar(self) - self.outlineView = GuiOutlineView(self) + self.outlineTree = GuiOutlineTree(self) self.outlineData = GuiOutlineDetails(self) self.splitOutline = QSplitter(Qt.Vertical) - self.splitOutline.addWidget(self.outlineView) + self.splitOutline.addWidget(self.outlineTree) self.splitOutline.addWidget(self.outlineData) self.splitOutline.setSizes(self.mainConf.getOutlinePanePos()) @@ -81,14 +81,14 @@ class GuiOutline(QWidget): self.setLayout(self.outerBox) # Connect Signals - self.outlineView.hiddenStateChanged.connect(self._updateMenuColumns) - self.outlineView.activeItemChanged.connect(self.outlineData.showItem) + self.outlineTree.hiddenStateChanged.connect(self._updateMenuColumns) + self.outlineTree.activeItemChanged.connect(self.outlineData.showItem) self.outlineData.itemTagClicked.connect(self._tagClicked) self.outlineBar.loadNovelRootRequest.connect(self._rootItemChanged) - self.outlineBar.viewColumnToggled.connect(self.outlineView.menuColumnToggled) + self.outlineBar.viewColumnToggled.connect(self.outlineTree.menuColumnToggled) # Function Mappings - self.getSelectedHandle = self.outlineView.getSelectedHandle + self.getSelectedHandle = self.outlineTree.getSelectedHandle return @@ -104,24 +104,24 @@ class GuiOutline(QWidget): return def initOutline(self): - self.outlineView.initOutline() + self.outlineTree.initOutline() self.outlineData.initDetails() return def closeOutline(self): - self.outlineView.closeOutline() + self.outlineTree.closeOutline() self.outlineData.updateClasses() return def refreshView(self, overRide=False, novelChanged=False): - self.outlineView.refreshTree(overRide=overRide, novelChanged=novelChanged) + self.outlineTree.refreshTree(overRide=overRide, novelChanged=novelChanged) return def treeFocus(self): - return self.outlineView.hasFocus() + return self.outlineTree.hasFocus() def setTreeFocus(self): - return self.outlineView.setFocus() + return self.outlineTree.setFocus() ## # Public Slots @@ -145,7 +145,7 @@ class GuiOutline(QWidget): checkboxes whenever a signal is received that the hidden state of columns has changed. """ - self.outlineBar.setColumnHiddenState(self.outlineView.hiddenColumns) + self.outlineBar.setColumnHiddenState(self.outlineTree.hiddenColumns) return @pyqtSlot(str) @@ -160,10 +160,10 @@ class GuiOutline(QWidget): def _rootItemChanged(self, handle): """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 -# END Class GuiOutline +# END Class GuiOutlineView class GuiOutlineToolBar(QToolBar): @@ -271,7 +271,7 @@ class GuiOutlineToolBar(QToolBar): # END Class GuiOutlineToolBar -class GuiOutlineView(QTreeWidget): +class GuiOutlineTree(QTreeWidget): DEF_WIDTH = { nwOutline.TITLE: 200, @@ -319,7 +319,7 @@ class GuiOutlineView(QTreeWidget): def __init__(self, theOutline): QTreeWidget.__init__(self, theOutline) - logger.debug("Initialising GuiOutlineView ...") + logger.debug("Initialising GuiOutlineTree ...") self.mainConf = novelwriter.CONFIG self.mainGui = theOutline.mainGui @@ -355,7 +355,7 @@ class GuiOutlineView(QTreeWidget): self.hiddenStateChanged.emit() - logger.debug("GuiOutlineView initialisation complete") + logger.debug("GuiOutlineTree initialisation complete") return @@ -717,7 +717,7 @@ class GuiOutlineView(QTreeWidget): return newItem -# END Class GuiOutlineView +# END Class GuiOutlineTree class GuiOutlineHeaderMenu(QMenu): diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 24c2180d..8c0e0e51 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -40,7 +40,7 @@ from PyQt5.QtWidgets import ( from novelwriter.gui import ( GuiDocEditor, GuiDocViewDetails, GuiDocViewer, GuiItemDetails, GuiMainMenu, - GuiMainStatus, GuiNovelTree, GuiOutline, GuiProjectView, GuiTheme, + GuiMainStatus, GuiNovelTree, GuiOutlineView, GuiProjectView, GuiTheme, GuiViewsBar ) from novelwriter.dialogs import ( @@ -111,7 +111,7 @@ class GuiMain(QMainWindow): self.viewMeta = GuiDocViewDetails(self) self.docViewer = GuiDocViewer(self) self.itemDetails = GuiItemDetails(self) - self.outlineView = GuiOutline(self) + self.outlineView = GuiOutlineView(self) self.mainMenu = GuiMainMenu(self) self.viewsBar = GuiViewsBar(self) diff --git a/tests/test_gui/test_gui_guimain.py b/tests/test_gui/test_gui_guimain.py index 02c97617..cf38c7ea 100644 --- a/tests/test_gui/test_gui_guimain.py +++ b/tests/test_gui/test_gui_guimain.py @@ -28,7 +28,7 @@ from tools import cmpFiles, buildTestProject, XML_IGNORE, writeFile from PyQt5.QtCore import Qt 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.tools import GuiProjectWizard from novelwriter.gui.projtree import GuiProjectTree @@ -147,12 +147,12 @@ def testGuiMain_ProjectTreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): # Project Outline has focus nwGUI.switchFocus(nwWidget.OUTLINE) 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 - actItem = nwGUI.outlineView.outlineView.topLevelItem(0) + actItem = nwGUI.outlineView.outlineTree.topLevelItem(0) chpItem = actItem.child(0) selItem = chpItem.child(0) - nwGUI.outlineView.outlineView.setCurrentItem(selItem) + nwGUI.outlineView.outlineTree.setCurrentItem(selItem) nwGUI._keyPressReturn() assert nwGUI.docEditor.docHandle() == sHandle assert nwGUI.closeDocument() is True diff --git a/tests/test_gui/test_gui_outline.py b/tests/test_gui/test_gui_outline.py index c8aa893d..1038404a 100644 --- a/tests/test_gui/test_gui_outline.py +++ b/tests/test_gui/test_gui_outline.py @@ -46,57 +46,57 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, fncDir): nwGUI.rebuildIndex() nwGUI._changeView(nwView.OUTLINE) - outlineMain = nwGUI.outlineView - outlineView = outlineMain.outlineView - outlineData = outlineMain.outlineData - outlineMenu = outlineMain.outlineBar.mColumns + outlineView = nwGUI.outlineView + outlineTree = outlineView.outlineTree + outlineData = outlineView.outlineData + outlineMenu = outlineView.outlineBar.mColumns # Toggle scrollbars nwGUI.mainConf.hideVScroll = True nwGUI.mainConf.hideHScroll = True - outlineMain.initOutline() - assert outlineView.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff - assert outlineView.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff + outlineView.initOutline() + assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff + assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAlwaysOff assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAlwaysOff nwGUI.mainConf.hideVScroll = False nwGUI.mainConf.hideHScroll = False - outlineMain.initOutline() - assert outlineView.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded - assert outlineView.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded + outlineView.initOutline() + assert outlineTree.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded + assert outlineTree.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineData.verticalScrollBarPolicy() == Qt.ScrollBarAsNeeded assert outlineData.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded # Check focus with monkeypatch.context() as mp: 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 # ============ pOptions = nwGUI.theProject.options colNames = [h.name for h in nwOutline] colItems = [h for h in nwOutline] - colWidth = {h: outlineView.DEF_WIDTH[h] for h in nwOutline} - colHidden = {h: outlineView.DEF_HIDDEN[h] for h in nwOutline} + colWidth = {h: outlineTree.DEF_WIDTH[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 - outlineView._lastBuild = 0 - outlineView._saveHeaderState() + outlineTree._lastBuild = 0 + outlineTree._saveHeaderState() assert pOptions.getValue("GuiOutline", "headerOrder", []) == [] # Allow saving header state - outlineView._lastBuild = time.time() - outlineView._saveHeaderState() + outlineTree._lastBuild = time.time() + outlineTree._saveHeaderState() assert pOptions.getValue("GuiOutline", "headerOrder", []) == colNames - assert outlineView._treeOrder == colItems - assert outlineView._colWidth == colWidth - assert outlineView._colHidden == colHidden + assert outlineTree._treeOrder == colItems + assert outlineTree._colWidth == colWidth + assert outlineTree._colHidden == colHidden # Get default values optItems = pOptions.getValue("GuiOutline", "headerOrder", []) @@ -105,49 +105,49 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, fncDir): # Add invalid column name pOptions.setValue("GuiOutline", "headerOrder", optItems + ["blabla"]) - outlineView._loadHeaderState() - assert outlineView._treeOrder == colItems - assert outlineView._colHidden == colHidden + outlineTree._loadHeaderState() + assert outlineTree._treeOrder == colItems + assert outlineTree._colHidden == colHidden # Add duplicate column name pOptions.setValue("GuiOutline", "headerOrder", optItems + [optItems[-1]]) - outlineView._loadHeaderState() - assert outlineView._treeOrder == colItems - assert outlineView._colHidden == colHidden + outlineTree._loadHeaderState() + assert outlineTree._treeOrder == colItems + assert outlineTree._colHidden == colHidden # Invalid column width data pOptions.setValue("GuiOutline", "headerOrder", optItems) pOptions.setValue("GuiOutline", "columnWidth", {"blabla": None}) - outlineView._loadHeaderState() - assert outlineView._treeOrder == colItems - assert outlineView._colHidden == colHidden + outlineTree._loadHeaderState() + assert outlineTree._treeOrder == colItems + assert outlineTree._colHidden == colHidden # Invalid column width data pOptions.setValue("GuiOutline", "headerOrder", optItems) pOptions.setValue("GuiOutline", "columnWidth", optWidth) pOptions.setValue("GuiOutline", "columnHidden", {"bloabla": None}) - outlineView._loadHeaderState() - assert outlineView._treeOrder == colItems - assert outlineView._colHidden == colHidden + outlineTree._loadHeaderState() + assert outlineTree._treeOrder == colItems + assert outlineTree._colHidden == colHidden # Valid settings pOptions.setValue("GuiOutline", "headerOrder", optItems) pOptions.setValue("GuiOutline", "columnWidth", optWidth) pOptions.setValue("GuiOutline", "columnHidden", optHidden) - outlineView._loadHeaderState() - assert outlineView._treeOrder == colItems - assert outlineView._colHidden == colHidden + outlineTree._loadHeaderState() + assert outlineTree._treeOrder == colItems + assert outlineTree._colHidden == colHidden # Header Menu # =========== # Trigger the menu entry for all hidden columns for hItem in nwOutline: - if outlineView.DEF_HIDDEN[hItem]: + if outlineTree.DEF_HIDDEN[hItem]: outlineMenu.actionMap[hItem].activate(QAction.Trigger) # Now no columns should be hidden - outlineView._saveHeaderState() + outlineTree._saveHeaderState() assert not any(pOptions.getValue("GuiOutline", "columnHidden", None).values()) # qtbot.stop() @@ -169,10 +169,10 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum): nwGUI.rebuildIndex() nwGUI._changeView(nwView.OUTLINE) - outlineMain = nwGUI.outlineView - outlineBar = outlineMain.outlineBar - outlineView = outlineMain.outlineView - outlineData = outlineMain.outlineData + outlineView = nwGUI.outlineView + outlineBar = outlineView.outlineBar + outlineTree = outlineView.outlineTree + outlineData = outlineView.outlineData lipHandle = "b3643d0f92e32" @@ -218,10 +218,10 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum): # ============= # First Item - outlineView.refreshTree() - selItem = outlineView.topLevelItem(0) + outlineTree.refreshTree() + selItem = outlineTree.topLevelItem(0) - outlineView.setCurrentItem(selItem) + outlineTree.setCurrentItem(selItem) assert outlineData.titleLabel.text() == "Title" assert outlineData.titleValue.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" # Scene One - actItem = outlineView.topLevelItem(1) + actItem = outlineTree.topLevelItem(1) chpItem = actItem.child(0) selItem = chpItem.child(0) - outlineView.setCurrentItem(selItem) - tHandle, tLine = outlineView.getSelectedHandle() + outlineTree.setCurrentItem(selItem) + tHandle, tLine = outlineTree.getSelectedHandle() assert tHandle == "88243afbe5ed8" assert tLine == 0 @@ -248,17 +248,17 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum): # Click POV Link assert outlineData.povKeyValue.text() == "Bod" - outlineMain._tagClicked("Bod") + outlineView._tagClicked("Bod") assert nwGUI.docViewer.docHandle() == "4c4f28287af27" # Scene One, Section Two - actItem = outlineView.topLevelItem(1) + actItem = outlineTree.topLevelItem(1) chpItem = actItem.child(0) scnItem = chpItem.child(0) selItem = scnItem.child(0) - outlineView.setCurrentItem(selItem) - tHandle, tLine = outlineView.getSelectedHandle() + outlineTree.setCurrentItem(selItem) + tHandle, tLine = outlineTree.getSelectedHandle() assert tHandle == "88243afbe5ed8" assert tLine == 12 @@ -267,7 +267,7 @@ def testGuiOutline_Content(qtbot, monkeypatch, nwGUI, nwLipsum): assert outlineData.fileValue.text() == "Scene One" assert outlineData.itemValue.text() == "Finished" - outlineView._treeDoubleClick(selItem, 0) + outlineTree._treeDoubleClick(selItem, 0) assert nwGUI.docEditor.docHandle() == "88243afbe5ed8" # qtbot.stop()