Wrap project tree in an outer widget with a toolbar
This commit is contained in:
@@ -107,7 +107,7 @@ class GuiPreferences(PagedDialog):
|
|||||||
), nwAlert.INFO)
|
), nwAlert.INFO)
|
||||||
|
|
||||||
if refreshTree:
|
if refreshTree:
|
||||||
self.theParent.treeView.buildTree()
|
self.theParent.treeView.populateTree()
|
||||||
|
|
||||||
self._saveWindowSize()
|
self._saveWindowSize()
|
||||||
self.accept()
|
self.accept()
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ 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 GuiOutline
|
||||||
from novelwriter.gui.projtree import GuiProjectTree
|
from novelwriter.gui.projtree import GuiProjectWiew
|
||||||
from novelwriter.gui.statusbar import GuiMainStatus
|
from novelwriter.gui.statusbar import GuiMainStatus
|
||||||
from novelwriter.gui.theme import GuiTheme
|
from novelwriter.gui.theme import GuiTheme
|
||||||
from novelwriter.gui.viewsbar import GuiViewsBar
|
from novelwriter.gui.viewsbar import GuiViewsBar
|
||||||
@@ -39,7 +39,7 @@ __all__ = [
|
|||||||
"GuiMainStatus",
|
"GuiMainStatus",
|
||||||
"GuiNovelTree",
|
"GuiNovelTree",
|
||||||
"GuiOutline",
|
"GuiOutline",
|
||||||
"GuiProjectTree",
|
"GuiProjectWiew",
|
||||||
"GuiTheme",
|
"GuiTheme",
|
||||||
"GuiViewsBar",
|
"GuiViewsBar",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ class GuiItemDetails(QWidget):
|
|||||||
return
|
return
|
||||||
|
|
||||||
@pyqtSlot(str, int, int, int)
|
@pyqtSlot(str, int, int, int)
|
||||||
def doUpdateCounts(self, tHandle, cC, wC, pC):
|
def updateCounts(self, tHandle, cC, wC, pC):
|
||||||
"""Update the counts if the handle is the same as the one we're
|
"""Update the counts if the handle is the same as the one we're
|
||||||
already showing. Otherwise, do nothing.
|
already showing. Otherwise, do nothing.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ class GuiOutline(QWidget):
|
|||||||
self.mainConf = novelwriter.CONFIG
|
self.mainConf = novelwriter.CONFIG
|
||||||
self.theParent = theParent
|
self.theParent = theParent
|
||||||
|
|
||||||
|
# Build GUI
|
||||||
self.outlineBar = GuiOutlineToolBar(self)
|
self.outlineBar = GuiOutlineToolBar(self)
|
||||||
self.outlineView = GuiOutlineView(self)
|
self.outlineView = GuiOutlineView(self)
|
||||||
self.outlineData = GuiOutlineDetails(self)
|
self.outlineData = GuiOutlineDetails(self)
|
||||||
@@ -225,6 +226,8 @@ class GuiOutlineToolBar(QToolBar):
|
|||||||
|
|
||||||
logger.debug("GuiOutlineToolBar initialisation complete")
|
logger.debug("GuiOutlineToolBar initialisation complete")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
# Methods
|
# Methods
|
||||||
##
|
##
|
||||||
|
|||||||
+152
-33
@@ -6,6 +6,8 @@ GUI classes for the main window project tree
|
|||||||
File History:
|
File History:
|
||||||
Created: 2018-09-29 [0.0.1] GuiProjectTree
|
Created: 2018-09-29 [0.0.1] GuiProjectTree
|
||||||
Created: 2020-06-04 [0.7] GuiProjectTreeMenu
|
Created: 2020-06-04 [0.7] GuiProjectTreeMenu
|
||||||
|
Created: 2022-06-06 [1.7b1] GuiProjectWiew
|
||||||
|
Created: 2022-06-06 [1.7b1] GuiProjectToolBar
|
||||||
|
|
||||||
This file is a part of novelWriter
|
This file is a part of novelWriter
|
||||||
Copyright 2018–2022, Veronica Berglyd Olsen
|
Copyright 2018–2022, Veronica Berglyd Olsen
|
||||||
@@ -34,7 +36,8 @@ from PyQt5.QtCore import Qt, QSize, pyqtSignal, pyqtSlot
|
|||||||
from PyQt5.QtGui import QIcon
|
from PyQt5.QtGui import QIcon
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QTreeWidget, QTreeWidgetItem, QAbstractItemView, QMenu, QAction, QFrame,
|
QTreeWidget, QTreeWidgetItem, QAbstractItemView, QMenu, QAction, QFrame,
|
||||||
QDialog, QHeaderView
|
QDialog, QHeaderView, QWidget, QVBoxLayout, QToolBar, QLabel, QToolButton,
|
||||||
|
QSizePolicy
|
||||||
)
|
)
|
||||||
|
|
||||||
from novelwriter.core import NWDoc
|
from novelwriter.core import NWDoc
|
||||||
@@ -45,12 +48,11 @@ from novelwriter.dialogs.itemeditor import GuiItemEditor
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class GuiProjectTree(QTreeWidget):
|
class GuiProjectWiew(QWidget):
|
||||||
|
"""This is a wrapper class holding all the elements of the project
|
||||||
C_NAME = 0
|
tree. The core object is the project tree itself. Most methods
|
||||||
C_COUNT = 1
|
available are mapped through to the project tree class.
|
||||||
C_EXPORT = 2
|
"""
|
||||||
C_STATUS = 3
|
|
||||||
|
|
||||||
# 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)
|
||||||
@@ -63,14 +65,143 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
openDocumentRequest = pyqtSignal(str, Enum)
|
openDocumentRequest = pyqtSignal(str, Enum)
|
||||||
|
|
||||||
def __init__(self, theParent):
|
def __init__(self, theParent):
|
||||||
QTreeWidget.__init__(self, theParent)
|
QWidget.__init__(self, theParent)
|
||||||
|
|
||||||
|
self.theParent = theParent
|
||||||
|
|
||||||
|
# Build GUI
|
||||||
|
self.projBar = GuiProjectToolBar(self)
|
||||||
|
self.projTree = GuiProjectTree(self)
|
||||||
|
|
||||||
|
# Assemble
|
||||||
|
self.outerBox = QVBoxLayout()
|
||||||
|
self.outerBox.addWidget(self.projBar)
|
||||||
|
self.outerBox.addWidget(self.projTree)
|
||||||
|
self.outerBox.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.outerBox.setSpacing(0)
|
||||||
|
|
||||||
|
self.setLayout(self.outerBox)
|
||||||
|
|
||||||
|
# Function Mappings
|
||||||
|
self.newTreeItem = self.projTree.newTreeItem
|
||||||
|
self.revealNewTreeItem = self.projTree.revealNewTreeItem
|
||||||
|
self.moveTreeItem = self.projTree.moveTreeItem
|
||||||
|
self.editTreeItem = self.projTree.editTreeItem
|
||||||
|
self.getTreeFromHandle = self.projTree.getTreeFromHandle
|
||||||
|
self.emptyTrash = self.projTree.emptyTrash
|
||||||
|
self.deleteItem = self.projTree.deleteItem
|
||||||
|
self.setTreeItemValues = self.projTree.setTreeItemValues
|
||||||
|
self.propagateCount = self.projTree.propagateCount
|
||||||
|
self.undoLastMove = self.projTree.undoLastMove
|
||||||
|
self.getSelectedHandle = self.projTree.getSelectedHandle
|
||||||
|
self.setSelectedHandle = self.projTree.setSelectedHandle
|
||||||
|
self.changedSince = self.projTree.changedSince
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
##
|
||||||
|
# Methods
|
||||||
|
##
|
||||||
|
|
||||||
|
def initSettings(self):
|
||||||
|
self.projTree.initSettings()
|
||||||
|
return
|
||||||
|
|
||||||
|
def clearProject(self):
|
||||||
|
self.projTree.clearTree()
|
||||||
|
return
|
||||||
|
|
||||||
|
def saveProjectTree(self):
|
||||||
|
self.projTree.saveTreeOrder()
|
||||||
|
return
|
||||||
|
|
||||||
|
def populateTree(self):
|
||||||
|
self.projTree.buildTree()
|
||||||
|
return
|
||||||
|
|
||||||
|
def treeFocus(self):
|
||||||
|
return self.projTree.hasFocus()
|
||||||
|
|
||||||
|
##
|
||||||
|
# Public Solts
|
||||||
|
##
|
||||||
|
|
||||||
|
@pyqtSlot(str, int, int, int)
|
||||||
|
def updateCounts(self, tHandle, cCount, wCount, pCount):
|
||||||
|
"""Slot for updating the word count of a specific item.
|
||||||
|
"""
|
||||||
|
self.projTree.propagateCount(tHandle, wCount, countChildren=True)
|
||||||
|
self.wordCountsChanged.emit()
|
||||||
|
return
|
||||||
|
|
||||||
|
# END Class GuiProjectWiew
|
||||||
|
|
||||||
|
|
||||||
|
class GuiProjectToolBar(QToolBar):
|
||||||
|
|
||||||
|
def __init__(self, theWidget):
|
||||||
|
QTreeWidget.__init__(self, theWidget)
|
||||||
|
|
||||||
|
logger.debug("Initialising GuiProjectToolBar ...")
|
||||||
|
|
||||||
|
self.mainConf = novelwriter.CONFIG
|
||||||
|
self.theParent = theWidget.theParent
|
||||||
|
self.theProject = theWidget.theParent.theProject
|
||||||
|
self.theTheme = theWidget.theParent.theTheme
|
||||||
|
|
||||||
|
iPx = self.theTheme.baseIconSize
|
||||||
|
mPx = self.mainConf.pxInt(12)
|
||||||
|
|
||||||
|
self.setMovable(False)
|
||||||
|
self.setIconSize(QSize(iPx, iPx))
|
||||||
|
self.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.setStyleSheet("QToolBar {border: 0px;}")
|
||||||
|
|
||||||
|
# Novel Selector
|
||||||
|
self.projLabel = QLabel(self.tr("Project"))
|
||||||
|
self.projLabel.setContentsMargins(0, 0, mPx, 0)
|
||||||
|
self.projLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||||
|
|
||||||
|
# Itemss Menu
|
||||||
|
self.tbItems = QToolButton(self)
|
||||||
|
self.tbItems.setIcon(self.theTheme.getIcon("add"))
|
||||||
|
self.tbItems.setPopupMode(QToolButton.InstantPopup)
|
||||||
|
|
||||||
|
# Settings Menu
|
||||||
|
self.tbSettings = QToolButton(self)
|
||||||
|
self.tbSettings.setIcon(self.theTheme.getIcon("menu"))
|
||||||
|
self.tbSettings.setPopupMode(QToolButton.InstantPopup)
|
||||||
|
|
||||||
|
# Assemble
|
||||||
|
self.addWidget(self.projLabel)
|
||||||
|
self.addSeparator()
|
||||||
|
self.addWidget(self.tbItems)
|
||||||
|
self.addWidget(self.tbSettings)
|
||||||
|
|
||||||
|
logger.debug("GuiProjectToolBar initialisation complete")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
# END Class GuiProjectToolBar
|
||||||
|
|
||||||
|
|
||||||
|
class GuiProjectTree(QTreeWidget):
|
||||||
|
|
||||||
|
C_NAME = 0
|
||||||
|
C_COUNT = 1
|
||||||
|
C_EXPORT = 2
|
||||||
|
C_STATUS = 3
|
||||||
|
|
||||||
|
def __init__(self, theWidget):
|
||||||
|
QTreeWidget.__init__(self, theWidget)
|
||||||
|
|
||||||
logger.debug("Initialising GuiProjectTree ...")
|
logger.debug("Initialising GuiProjectTree ...")
|
||||||
|
|
||||||
self.mainConf = novelwriter.CONFIG
|
self.mainConf = novelwriter.CONFIG
|
||||||
self.theParent = theParent
|
self.theWidget = theWidget
|
||||||
self.theTheme = theParent.theTheme
|
self.theParent = theWidget.theParent
|
||||||
self.theProject = theParent.theProject
|
self.theTheme = theWidget.theParent.theTheme
|
||||||
|
self.theProject = theWidget.theParent.theProject
|
||||||
|
|
||||||
# Internal Variables
|
# Internal Variables
|
||||||
self._treeMap = {}
|
self._treeMap = {}
|
||||||
@@ -125,13 +256,13 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
self.itemSelectionChanged.connect(self._treeSelectionChange)
|
self.itemSelectionChanged.connect(self._treeSelectionChange)
|
||||||
|
|
||||||
# Set custom settings
|
# Set custom settings
|
||||||
self.initTree()
|
self.initSettings()
|
||||||
|
|
||||||
logger.debug("GuiProjectTree initialisation complete")
|
logger.debug("GuiProjectTree initialisation complete")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def initTree(self):
|
def initSettings(self):
|
||||||
"""Set or update tree widget settings.
|
"""Set or update tree widget settings.
|
||||||
"""
|
"""
|
||||||
# Scroll bars
|
# Scroll bars
|
||||||
@@ -248,7 +379,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
# Get Word Counts
|
# Get Word Counts
|
||||||
_, wC, _ = pIndex.getCounts(tHandle)
|
_, wC, _ = pIndex.getCounts(tHandle)
|
||||||
self.propagateCount(tHandle, wC)
|
self.propagateCount(tHandle, wC)
|
||||||
self.wordCountsChanged.emit()
|
self.theWidget.wordCountsChanged.emit()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -494,7 +625,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
self._deleteTreeItem(dHandle)
|
self._deleteTreeItem(dHandle)
|
||||||
|
|
||||||
self._alertTreeChange(tHandle=tHandle, flush=autoFlush)
|
self._alertTreeChange(tHandle=tHandle, flush=autoFlush)
|
||||||
self.wordCountsChanged.emit()
|
self.theWidget.wordCountsChanged.emit()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# The item is not already in the trash folder, so we
|
# The item is not already in the trash folder, so we
|
||||||
@@ -690,18 +821,6 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
"""
|
"""
|
||||||
return self._timeChanged > checkTime
|
return self._timeChanged > checkTime
|
||||||
|
|
||||||
##
|
|
||||||
# Public Solts
|
|
||||||
##
|
|
||||||
|
|
||||||
@pyqtSlot(str, int, int, int)
|
|
||||||
def doUpdateCounts(self, tHandle, cCount, wCount, pCount):
|
|
||||||
"""Slot for updating the word count of a specific item.
|
|
||||||
"""
|
|
||||||
self.propagateCount(tHandle, wCount, countChildren=True)
|
|
||||||
self.wordCountsChanged.emit()
|
|
||||||
return
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Private Slots
|
# Private Slots
|
||||||
##
|
##
|
||||||
@@ -712,7 +831,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
"""
|
"""
|
||||||
tHandle = self.getSelectedHandle()
|
tHandle = self.getSelectedHandle()
|
||||||
if tHandle is not None:
|
if tHandle is not None:
|
||||||
self.selectedItemChanged.emit(tHandle)
|
self.theWidget.selectedItemChanged.emit(tHandle)
|
||||||
return
|
return
|
||||||
|
|
||||||
@pyqtSlot("QTreeWidgetItem*", int)
|
@pyqtSlot("QTreeWidgetItem*", int)
|
||||||
@@ -729,7 +848,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if tItem.itemType == nwItemType.FILE:
|
if tItem.itemType == nwItemType.FILE:
|
||||||
self.openDocumentRequest.emit(tHandle, nwDocMode.EDIT)
|
self.theWidget.openDocumentRequest.emit(tHandle, nwDocMode.EDIT)
|
||||||
else:
|
else:
|
||||||
trItem = self._getTreeItem(tHandle)
|
trItem = self._getTreeItem(tHandle)
|
||||||
if trItem is not None:
|
if trItem is not None:
|
||||||
@@ -781,7 +900,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if tItem.itemType == nwItemType.FILE:
|
if tItem.itemType == nwItemType.FILE:
|
||||||
self.openDocumentRequest.emit(tHandle, nwDocMode.VIEW)
|
self.theWidget.openDocumentRequest.emit(tHandle, nwDocMode.VIEW)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -988,11 +1107,11 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
|
|
||||||
itemType = tItem.itemType
|
itemType = tItem.itemType
|
||||||
if itemType == nwItemType.ROOT:
|
if itemType == nwItemType.ROOT:
|
||||||
self.rootFolderChanged.emit(tHandle)
|
self.theWidget.rootFolderChanged.emit(tHandle)
|
||||||
elif itemType == nwItemType.FILE and tItem.isNovelLike():
|
elif itemType == nwItemType.FILE and tItem.isNovelLike():
|
||||||
self.novelItemChanged.emit(tHandle)
|
self.theWidget.novelItemChanged.emit(tHandle)
|
||||||
|
|
||||||
self.treeItemChanged.emit(tHandle)
|
self.theWidget.treeItemChanged.emit(tHandle)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
+10
-10
@@ -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, GuiProjectTree, GuiTheme,
|
GuiMainStatus, GuiNovelTree, GuiOutline, GuiProjectWiew, GuiTheme,
|
||||||
GuiViewsBar
|
GuiViewsBar
|
||||||
)
|
)
|
||||||
from novelwriter.dialogs import (
|
from novelwriter.dialogs import (
|
||||||
@@ -105,7 +105,7 @@ class GuiMain(QMainWindow):
|
|||||||
|
|
||||||
# Main GUI Elements
|
# Main GUI Elements
|
||||||
self.statusBar = GuiMainStatus(self)
|
self.statusBar = GuiMainStatus(self)
|
||||||
self.treeView = GuiProjectTree(self)
|
self.treeView = GuiProjectWiew(self)
|
||||||
self.novelView = GuiNovelTree(self)
|
self.novelView = GuiNovelTree(self)
|
||||||
self.docEditor = GuiDocEditor(self)
|
self.docEditor = GuiDocEditor(self)
|
||||||
self.viewMeta = GuiDocViewDetails(self)
|
self.viewMeta = GuiDocViewDetails(self)
|
||||||
@@ -208,8 +208,8 @@ class GuiMain(QMainWindow):
|
|||||||
|
|
||||||
self.docEditor.spellDictionaryChanged.connect(self.statusBar.setLanguage)
|
self.docEditor.spellDictionaryChanged.connect(self.statusBar.setLanguage)
|
||||||
self.docEditor.docEditedStatusChanged.connect(self.statusBar.doUpdateDocumentStatus)
|
self.docEditor.docEditedStatusChanged.connect(self.statusBar.doUpdateDocumentStatus)
|
||||||
self.docEditor.docCountsChanged.connect(self.treeMeta.doUpdateCounts)
|
self.docEditor.docCountsChanged.connect(self.treeMeta.updateCounts)
|
||||||
self.docEditor.docCountsChanged.connect(self.treeView.doUpdateCounts)
|
self.docEditor.docCountsChanged.connect(self.treeView.updateCounts)
|
||||||
self.docEditor.loadDocumentTagRequest.connect(self._followTag)
|
self.docEditor.loadDocumentTagRequest.connect(self._followTag)
|
||||||
|
|
||||||
self.docViewer.loadDocumentTagRequest.connect(self._followTag)
|
self.docViewer.loadDocumentTagRequest.connect(self._followTag)
|
||||||
@@ -291,7 +291,7 @@ class GuiMain(QMainWindow):
|
|||||||
"""Wrapper function to clear all sub-elements of the main GUI.
|
"""Wrapper function to clear all sub-elements of the main GUI.
|
||||||
"""
|
"""
|
||||||
# Project Area
|
# Project Area
|
||||||
self.treeView.clearTree()
|
self.treeView.clearProject()
|
||||||
self.novelView.clearTree()
|
self.novelView.clearTree()
|
||||||
self.treeMeta.clearDetails()
|
self.treeMeta.clearDetails()
|
||||||
|
|
||||||
@@ -541,7 +541,7 @@ class GuiMain(QMainWindow):
|
|||||||
logger.error("No project open")
|
logger.error("No project open")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self.treeView.saveTreeOrder()
|
self.treeView.saveProjectTree()
|
||||||
if self.theProject.saveProject(autoSave=autoSave):
|
if self.theProject.saveProject(autoSave=autoSave):
|
||||||
self.theProject.index.saveIndex()
|
self.theProject.index.saveIndex()
|
||||||
|
|
||||||
@@ -789,7 +789,7 @@ class GuiMain(QMainWindow):
|
|||||||
|
|
||||||
tHandle = None
|
tHandle = None
|
||||||
tLine = None
|
tLine = None
|
||||||
if self.treeView.hasFocus():
|
if self.treeView.treeFocus():
|
||||||
tHandle = self.treeView.getSelectedHandle()
|
tHandle = self.treeView.getSelectedHandle()
|
||||||
elif self.novelView.hasFocus():
|
elif self.novelView.hasFocus():
|
||||||
tHandle, tLine = self.novelView.getSelectedHandle()
|
tHandle, tLine = self.novelView.getSelectedHandle()
|
||||||
@@ -824,7 +824,7 @@ class GuiMain(QMainWindow):
|
|||||||
def rebuildTrees(self):
|
def rebuildTrees(self):
|
||||||
"""Rebuild the project tree.
|
"""Rebuild the project tree.
|
||||||
"""
|
"""
|
||||||
self.treeView.buildTree()
|
self.treeView.populateTree()
|
||||||
self.novelView.refreshTree()
|
self.novelView.refreshTree()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -847,7 +847,7 @@ class GuiMain(QMainWindow):
|
|||||||
qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
|
qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
|
||||||
tStart = time()
|
tStart = time()
|
||||||
|
|
||||||
self.treeView.saveTreeOrder()
|
self.treeView.saveProjectTree()
|
||||||
self.theProject.index.clearIndex()
|
self.theProject.index.clearIndex()
|
||||||
|
|
||||||
for tItem in self.theProject.tree:
|
for tItem in self.theProject.tree:
|
||||||
@@ -919,7 +919,7 @@ class GuiMain(QMainWindow):
|
|||||||
self.saveDocument()
|
self.saveDocument()
|
||||||
self.docEditor.initEditor()
|
self.docEditor.initEditor()
|
||||||
self.docViewer.initViewer()
|
self.docViewer.initViewer()
|
||||||
self.treeView.initTree()
|
self.treeView.initSettings()
|
||||||
self.novelView.initTree()
|
self.novelView.initTree()
|
||||||
self.projView.initOutline()
|
self.projView.initOutline()
|
||||||
self._updateStatusWordCount()
|
self._updateStatusWordCount()
|
||||||
|
|||||||
@@ -56,11 +56,11 @@ def testDlgMerge_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
# Add Project Content
|
# Add Project Content
|
||||||
monkeypatch.setattr(GuiItemEditor, "exec_", lambda *a: QDialog.Accepted)
|
monkeypatch.setattr(GuiItemEditor, "exec_", lambda *a: QDialog.Accepted)
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hChapterDir).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hChapterDir).setSelected(True)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE)
|
||||||
|
|
||||||
assert nwGUI.saveProject() is True
|
assert nwGUI.saveProject() is True
|
||||||
assert nwGUI.closeProject() is True
|
assert nwGUI.closeProject() is True
|
||||||
@@ -82,8 +82,8 @@ def testDlgMerge_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
|
|
||||||
# Open the Merge tool
|
# Open the Merge tool
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hChapterDir).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hChapterDir).setSelected(True)
|
||||||
|
|
||||||
monkeypatch.setattr(GuiDocMerge, "exec_", lambda *a: None)
|
monkeypatch.setattr(GuiDocMerge, "exec_", lambda *a: None)
|
||||||
nwGUI.mainMenu.aMergeDocs.activate(QAction.Trigger)
|
nwGUI.mainMenu.aMergeDocs.activate(QAction.Trigger)
|
||||||
@@ -101,27 +101,27 @@ def testDlgMerge_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
assert nwMerge.listBox.count() == 0
|
assert nwMerge.listBox.count() == 0
|
||||||
|
|
||||||
# No item selected
|
# No item selected
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
assert nwMerge._populateList() is False
|
assert nwMerge._populateList() is False
|
||||||
assert nwMerge.listBox.count() == 0
|
assert nwMerge.listBox.count() == 0
|
||||||
|
|
||||||
# Non-existing item
|
# Non-existing item
|
||||||
with monkeypatch.context() as mp:
|
with monkeypatch.context() as mp:
|
||||||
mp.setattr(NWTree, "__getitem__", lambda *a: None)
|
mp.setattr(NWTree, "__getitem__", lambda *a: None)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hChapterDir).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hChapterDir).setSelected(True)
|
||||||
assert nwMerge._populateList() is False
|
assert nwMerge._populateList() is False
|
||||||
assert nwMerge.listBox.count() == 0
|
assert nwMerge.listBox.count() == 0
|
||||||
|
|
||||||
# Select a non-folder
|
# Select a non-folder
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hChapterOne).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hChapterOne).setSelected(True)
|
||||||
assert nwMerge._populateList() is False
|
assert nwMerge._populateList() is False
|
||||||
assert nwMerge.listBox.count() == 0
|
assert nwMerge.listBox.count() == 0
|
||||||
|
|
||||||
# Select the chapter folder
|
# Select the chapter folder
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hChapterDir).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hChapterDir).setSelected(True)
|
||||||
assert nwMerge._populateList() is True
|
assert nwMerge._populateList() is True
|
||||||
assert nwMerge.listBox.count() == 5
|
assert nwMerge.listBox.count() == 5
|
||||||
|
|
||||||
|
|||||||
@@ -60,9 +60,9 @@ def testDlgSplit_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
# Add Project Content
|
# Add Project Content
|
||||||
monkeypatch.setattr(GuiItemEditor, "exec_", lambda *a: QDialog.Accepted)
|
monkeypatch.setattr(GuiItemEditor, "exec_", lambda *a: QDialog.Accepted)
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hNovelRoot).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hNovelRoot).setSelected(True)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE)
|
||||||
|
|
||||||
assert nwGUI.saveProject() is True
|
assert nwGUI.saveProject() is True
|
||||||
assert nwGUI.closeProject() is True
|
assert nwGUI.closeProject() is True
|
||||||
@@ -89,8 +89,8 @@ def testDlgSplit_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
|
|
||||||
# Open the Split tool
|
# Open the Split tool
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hToSplit).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hToSplit).setSelected(True)
|
||||||
|
|
||||||
monkeypatch.setattr(GuiDocSplit, "exec_", lambda *a: None)
|
monkeypatch.setattr(GuiDocSplit, "exec_", lambda *a: None)
|
||||||
nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger)
|
nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger)
|
||||||
@@ -109,7 +109,7 @@ def testDlgSplit_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
|
|
||||||
# No item selected
|
# No item selected
|
||||||
nwSplit.sourceItem = None
|
nwSplit.sourceItem = None
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
assert nwSplit._populateList() is False
|
assert nwSplit._populateList() is False
|
||||||
assert nwSplit.listBox.count() == 0
|
assert nwSplit.listBox.count() == 0
|
||||||
|
|
||||||
@@ -117,15 +117,15 @@ def testDlgSplit_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
with monkeypatch.context() as mp:
|
with monkeypatch.context() as mp:
|
||||||
mp.setattr(NWTree, "__getitem__", lambda *a: None)
|
mp.setattr(NWTree, "__getitem__", lambda *a: None)
|
||||||
nwSplit.sourceItem = None
|
nwSplit.sourceItem = None
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hToSplit).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hToSplit).setSelected(True)
|
||||||
assert nwSplit._populateList() is False
|
assert nwSplit._populateList() is False
|
||||||
assert nwSplit.listBox.count() == 0
|
assert nwSplit.listBox.count() == 0
|
||||||
|
|
||||||
# Select a non-file
|
# Select a non-file
|
||||||
nwSplit.sourceItem = None
|
nwSplit.sourceItem = None
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem(hChapterDir).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(hChapterDir).setSelected(True)
|
||||||
assert nwSplit._populateList() is False
|
assert nwSplit._populateList() is False
|
||||||
assert nwSplit.listBox.count() == 0
|
assert nwSplit.listBox.count() == 0
|
||||||
|
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ from tools import getGuiItem, buildTestProject
|
|||||||
|
|
||||||
from PyQt5.QtWidgets import QAction, QDialog, QMessageBox
|
from PyQt5.QtWidgets import QAction, QDialog, QMessageBox
|
||||||
|
|
||||||
from novelwriter.gui import GuiProjectTree
|
|
||||||
from novelwriter.enum import nwItemLayout, nwItemType
|
from novelwriter.enum import nwItemLayout, nwItemType
|
||||||
from novelwriter.dialogs import GuiItemEditor
|
from novelwriter.dialogs import GuiItemEditor
|
||||||
from novelwriter.core.tree import NWTree
|
from novelwriter.core.tree import NWTree
|
||||||
|
from novelwriter.gui.projtree import GuiProjectTree
|
||||||
|
|
||||||
statusKeys = ["s000000", "s000001", "s000002", "s000003"]
|
statusKeys = ["s000000", "s000001", "s000002", "s000003"]
|
||||||
importKeys = ["i000004", "i000005", "i000006", "i000007"]
|
importKeys = ["i000004", "i000005", "i000006", "i000007"]
|
||||||
@@ -52,7 +52,7 @@ def testDlgItemEditor_Dialog(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
tHandle = "000000000000f"
|
tHandle = "000000000000f"
|
||||||
|
|
||||||
# No Selection
|
# No Selection
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
assert nwGUI.editItem() is False
|
assert nwGUI.editItem() is False
|
||||||
|
|
||||||
# Force opening from editor
|
# Force opening from editor
|
||||||
@@ -163,9 +163,9 @@ def testDlgItemEditor_Note(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
assert nwGUI.theProject.importItems.name(importKeys[1]) == "Minor"
|
assert nwGUI.theProject.importItems.name(importKeys[1]) == "Minor"
|
||||||
|
|
||||||
# Create Note
|
# Create Note
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem("000000000000a").setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem("000000000000a").setSelected(True)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE, None)
|
||||||
|
|
||||||
# Open Note
|
# Open Note
|
||||||
assert nwGUI.openDocument("0000000000010")
|
assert nwGUI.openDocument("0000000000010")
|
||||||
|
|||||||
@@ -54,9 +54,9 @@ def testGuiViewer_Main(qtbot, monkeypatch, nwGUI, nwLipsum):
|
|||||||
nwGUI.treeView.setSelectedHandle("88243afbe5ed8")
|
nwGUI.treeView.setSelectedHandle("88243afbe5ed8")
|
||||||
|
|
||||||
# Middle-click the selected item
|
# Middle-click the selected item
|
||||||
theItem = nwGUI.treeView._getTreeItem("88243afbe5ed8")
|
theItem = nwGUI.treeView.projTree._getTreeItem("88243afbe5ed8")
|
||||||
theRect = nwGUI.treeView.visualItemRect(theItem)
|
theRect = nwGUI.treeView.projTree.visualItemRect(theItem)
|
||||||
qtbot.mouseClick(nwGUI.treeView.viewport(), Qt.MidButton, pos=theRect.center())
|
qtbot.mouseClick(nwGUI.treeView.projTree.viewport(), Qt.MidButton, pos=theRect.center())
|
||||||
assert nwGUI.docViewer.docHandle() == "88243afbe5ed8"
|
assert nwGUI.docViewer.docHandle() == "88243afbe5ed8"
|
||||||
|
|
||||||
# Reload the text
|
# Reload the text
|
||||||
|
|||||||
@@ -28,11 +28,10 @@ from tools import cmpFiles, buildTestProject, XML_IGNORE, writeFile
|
|||||||
from PyQt5.QtCore import Qt
|
from PyQt5.QtCore import Qt
|
||||||
from PyQt5.QtWidgets import QMessageBox, QDialog
|
from PyQt5.QtWidgets import QMessageBox, QDialog
|
||||||
|
|
||||||
from novelwriter.gui import (
|
from novelwriter.gui import GuiDocEditor, GuiNovelTree, GuiOutline
|
||||||
GuiDocEditor, GuiProjectTree, GuiNovelTree, GuiOutline
|
|
||||||
)
|
|
||||||
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.dialogs.itemeditor import GuiItemEditor
|
from novelwriter.dialogs.itemeditor import GuiItemEditor
|
||||||
|
|
||||||
keyDelay = 2
|
keyDelay = 2
|
||||||
@@ -126,7 +125,7 @@ def testGuiMain_ProjectTreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd):
|
|||||||
with monkeypatch.context() as mp:
|
with monkeypatch.context() as mp:
|
||||||
mp.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
mp.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
||||||
assert nwGUI.docEditor.docHandle() is None
|
assert nwGUI.docEditor.docHandle() is None
|
||||||
nwGUI.treeView._getTreeItem(sHandle).setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem(sHandle).setSelected(True)
|
||||||
nwGUI._keyPressReturn()
|
nwGUI._keyPressReturn()
|
||||||
assert nwGUI.docEditor.docHandle() == sHandle
|
assert nwGUI.docEditor.docHandle() == sHandle
|
||||||
assert nwGUI.closeDocument() is True
|
assert nwGUI.closeDocument() is True
|
||||||
@@ -220,14 +219,14 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
|
|||||||
assert nwGUI.theProject.spellCheck is False
|
assert nwGUI.theProject.spellCheck is False
|
||||||
|
|
||||||
# Check that tree items have been created
|
# Check that tree items have been created
|
||||||
assert nwGUI.treeView._getTreeItem("0000000000008") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("0000000000008") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("0000000000009") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("0000000000009") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000a") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000a") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000b") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000b") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000c") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000c") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000d") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000d") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000e") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000e") is not None
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000f") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000f") is not None
|
||||||
|
|
||||||
nwGUI.mainMenu.aSpellCheck.setChecked(True)
|
nwGUI.mainMenu.aSpellCheck.setChecked(True)
|
||||||
assert nwGUI.mainMenu._toggleSpellCheck()
|
assert nwGUI.mainMenu._toggleSpellCheck()
|
||||||
@@ -240,9 +239,9 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
|
|||||||
|
|
||||||
# Add a Character File
|
# Add a Character File
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem("000000000000a").setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem("000000000000a").setSelected(True)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE, None)
|
||||||
assert nwGUI.openSelectedItem()
|
assert nwGUI.openSelectedItem()
|
||||||
|
|
||||||
# Type something into the document
|
# Type something into the document
|
||||||
@@ -262,9 +261,9 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
|
|||||||
|
|
||||||
# Add a Plot File
|
# Add a Plot File
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem("0000000000009").setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem("0000000000009").setSelected(True)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE, None)
|
||||||
assert nwGUI.openSelectedItem()
|
assert nwGUI.openSelectedItem()
|
||||||
|
|
||||||
# Type something into the document
|
# Type something into the document
|
||||||
@@ -284,9 +283,9 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
|
|||||||
|
|
||||||
# Add a World File
|
# Add a World File
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem("000000000000b").setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem("000000000000b").setSelected(True)
|
||||||
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
|
nwGUI.treeView.projTree.newTreeItem(nwItemType.FILE, None)
|
||||||
assert nwGUI.openSelectedItem()
|
assert nwGUI.openSelectedItem()
|
||||||
|
|
||||||
# Add Some Text
|
# Add Some Text
|
||||||
@@ -315,10 +314,10 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
|
|||||||
|
|
||||||
# Select the 'New Scene' file
|
# Select the 'New Scene' file
|
||||||
nwGUI.switchFocus(nwWidget.TREE)
|
nwGUI.switchFocus(nwWidget.TREE)
|
||||||
nwGUI.treeView.clearSelection()
|
nwGUI.treeView.projTree.clearSelection()
|
||||||
nwGUI.treeView._getTreeItem("0000000000008").setExpanded(True)
|
nwGUI.treeView.projTree._getTreeItem("0000000000008").setExpanded(True)
|
||||||
nwGUI.treeView._getTreeItem("000000000000d").setExpanded(True)
|
nwGUI.treeView.projTree._getTreeItem("000000000000d").setExpanded(True)
|
||||||
nwGUI.treeView._getTreeItem("000000000000f").setSelected(True)
|
nwGUI.treeView.projTree._getTreeItem("000000000000f").setSelected(True)
|
||||||
assert nwGUI.openSelectedItem()
|
assert nwGUI.openSelectedItem()
|
||||||
|
|
||||||
# Type something into the document
|
# Type something into the document
|
||||||
|
|||||||
@@ -467,7 +467,7 @@ def testGuiMenu_Insert(qtbot, monkeypatch, nwGUI, fncDir, fncProj, mockRnd):
|
|||||||
|
|
||||||
buildTestProject(nwGUI, fncProj)
|
buildTestProject(nwGUI, fncProj)
|
||||||
|
|
||||||
assert nwGUI.treeView._getTreeItem("000000000000f") is not None
|
assert nwGUI.treeView.projTree._getTreeItem("000000000000f") is not None
|
||||||
assert nwGUI.openDocument("000000000000f") is True
|
assert nwGUI.openDocument("000000000000f") is True
|
||||||
nwGUI.docEditor.clear()
|
nwGUI.docEditor.clear()
|
||||||
|
|
||||||
@@ -476,10 +476,10 @@ def testGuiMenu_Insert(qtbot, monkeypatch, nwGUI, fncDir, fncProj, mockRnd):
|
|||||||
assert nwGUI.docEditor.getText() == "hello world"
|
assert nwGUI.docEditor.getText() == "hello world"
|
||||||
nwGUI.docEditor.clear()
|
nwGUI.docEditor.clear()
|
||||||
|
|
||||||
assert not nwGUI.docEditor.insertText(nwDocInsert.NO_INSERT)
|
assert nwGUI.docEditor.insertText(nwDocInsert.NO_INSERT) is False
|
||||||
assert nwGUI.docEditor.isEmpty()
|
assert nwGUI.docEditor.isEmpty()
|
||||||
|
|
||||||
assert not nwGUI.docEditor.insertText(None)
|
assert nwGUI.docEditor.insertText(None) is False
|
||||||
assert nwGUI.docEditor.isEmpty()
|
assert nwGUI.docEditor.isEmpty()
|
||||||
|
|
||||||
# qtbot.stopForInteraction()
|
# qtbot.stopForInteraction()
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd)
|
|||||||
buildTestProject(nwGUI, prjDir)
|
buildTestProject(nwGUI, prjDir)
|
||||||
|
|
||||||
# No itemType set
|
# No itemType set
|
||||||
nwTree.clearSelection()
|
nwTree.projTree.clearSelection()
|
||||||
assert nwTree.newTreeItem(None) is False
|
assert nwTree.newTreeItem(None) is False
|
||||||
|
|
||||||
# Root Items
|
# Root Items
|
||||||
@@ -69,7 +69,7 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd)
|
|||||||
# =================
|
# =================
|
||||||
|
|
||||||
# No location selected for new item
|
# No location selected for new item
|
||||||
nwTree.clearSelection()
|
nwTree.projTree.clearSelection()
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
assert nwTree.newTreeItem(nwItemType.FILE) is False
|
assert nwTree.newTreeItem(nwItemType.FILE) is False
|
||||||
assert nwTree.newTreeItem(nwItemType.FOLDER) is False
|
assert nwTree.newTreeItem(nwItemType.FOLDER) is False
|
||||||
@@ -116,7 +116,7 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd)
|
|||||||
nwGUI.theProject.tree["0000000000013"].setParent("0000000000011")
|
nwGUI.theProject.tree["0000000000013"].setParent("0000000000011")
|
||||||
|
|
||||||
# Get the trash folder
|
# Get the trash folder
|
||||||
nwTree._addTrashRoot()
|
nwTree.projTree._addTrashRoot()
|
||||||
trashHandle = nwGUI.theProject.trashFolder()
|
trashHandle = nwGUI.theProject.trashFolder()
|
||||||
nwTree.setSelectedHandle(trashHandle)
|
nwTree.setSelectedHandle(trashHandle)
|
||||||
assert nwTree.newTreeItem(nwItemType.FILE) is False
|
assert nwTree.newTreeItem(nwItemType.FILE) is False
|
||||||
@@ -182,7 +182,7 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd):
|
|||||||
monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
||||||
|
|
||||||
# Move with no selections
|
# Move with no selections
|
||||||
nwTree.clearSelection()
|
nwTree.projTree.clearSelection()
|
||||||
assert nwTree.moveTreeItem(1) is False
|
assert nwTree.moveTreeItem(1) is False
|
||||||
|
|
||||||
# Move second item up twice (should give same result)
|
# Move second item up twice (should give same result)
|
||||||
@@ -304,13 +304,13 @@ def testGuiProjTree_DeleteItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockR
|
|||||||
monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
||||||
|
|
||||||
# No selection made
|
# No selection made
|
||||||
nwTree.clearSelection()
|
nwTree.projTree.clearSelection()
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
assert nwTree.deleteItem() is False
|
assert nwTree.deleteItem() is False
|
||||||
assert "no item to delete" in caplog.text
|
assert "no item to delete" in caplog.text
|
||||||
|
|
||||||
# Not a valid handle
|
# Not a valid handle
|
||||||
nwTree.clearSelection()
|
nwTree.projTree.clearSelection()
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
assert nwTree.deleteItem("0000000000000") is False
|
assert nwTree.deleteItem("0000000000000") is False
|
||||||
assert "Could not find tree item" in caplog.text
|
assert "Could not find tree item" in caplog.text
|
||||||
@@ -326,10 +326,10 @@ def testGuiProjTree_DeleteItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockR
|
|||||||
# ===========
|
# ===========
|
||||||
|
|
||||||
# Block adding trash folder
|
# Block adding trash folder
|
||||||
funcPointer = nwTree._addTrashRoot
|
funcPointer = nwTree.projTree._addTrashRoot
|
||||||
nwTree._addTrashRoot = lambda *a: None
|
nwTree.projTree._addTrashRoot = lambda *a: None
|
||||||
assert nwTree.deleteItem("0000000000012") is False
|
assert nwTree.deleteItem("0000000000012") is False
|
||||||
nwTree._addTrashRoot = funcPointer
|
nwTree.projTree._addTrashRoot = funcPointer
|
||||||
|
|
||||||
# Delete last two documents, which also adds the trash folder
|
# Delete last two documents, which also adds the trash folder
|
||||||
assert nwTree.deleteItem("0000000000012") is True
|
assert nwTree.deleteItem("0000000000012") is True
|
||||||
@@ -441,7 +441,7 @@ def testGuiProjTree_DeleteItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockR
|
|||||||
assert os.path.isfile(os.path.join(fncDir, "project", "content", "000000000000e.nwd"))
|
assert os.path.isfile(os.path.join(fncDir, "project", "content", "000000000000e.nwd"))
|
||||||
|
|
||||||
# Delete proper
|
# Delete proper
|
||||||
assert nwTree._deleteTreeItem("000000000000e") is True
|
assert nwTree.projTree._deleteTreeItem("000000000000e") is True
|
||||||
assert not os.path.isfile(os.path.join(fncDir, "project", "content", "000000000000e.nwd"))
|
assert not os.path.isfile(os.path.join(fncDir, "project", "content", "000000000000e.nwd"))
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
|
|||||||
Reference in New Issue
Block a user