Make some improvements and update tests
This commit is contained in:
@@ -155,12 +155,12 @@ class GuiDocEditor(QPlainTextEdit):
|
|||||||
self.followTag1 = QShortcut(self)
|
self.followTag1 = QShortcut(self)
|
||||||
self.followTag1.setKey(Qt.Key_Return | Qt.ControlModifier)
|
self.followTag1.setKey(Qt.Key_Return | Qt.ControlModifier)
|
||||||
self.followTag1.setContext(Qt.WidgetShortcut)
|
self.followTag1.setContext(Qt.WidgetShortcut)
|
||||||
self.followTag1.activated.connect(self._followTag)
|
self.followTag1.activated.connect(self._processTag)
|
||||||
|
|
||||||
self.followTag2 = QShortcut(self)
|
self.followTag2 = QShortcut(self)
|
||||||
self.followTag2.setKey(Qt.Key_Enter | Qt.ControlModifier)
|
self.followTag2.setKey(Qt.Key_Enter | Qt.ControlModifier)
|
||||||
self.followTag2.setContext(Qt.WidgetShortcut)
|
self.followTag2.setContext(Qt.WidgetShortcut)
|
||||||
self.followTag2.activated.connect(self._followTag)
|
self.followTag2.activated.connect(self._processTag)
|
||||||
|
|
||||||
# Set Up Document Word Counter
|
# Set Up Document Word Counter
|
||||||
self.wcTimerDoc = QTimer()
|
self.wcTimerDoc = QTimer()
|
||||||
@@ -919,7 +919,7 @@ class GuiDocEditor(QPlainTextEdit):
|
|||||||
follow tag function.
|
follow tag function.
|
||||||
"""
|
"""
|
||||||
if qApp.keyboardModifiers() == Qt.ControlModifier:
|
if qApp.keyboardModifiers() == Qt.ControlModifier:
|
||||||
self._followTag(self.cursorForPosition(event.pos()))
|
self._processTag(self.cursorForPosition(event.pos()))
|
||||||
super().mouseReleaseEvent(event)
|
super().mouseReleaseEvent(event)
|
||||||
self.docFooter.updateLineCount()
|
self.docFooter.updateLineCount()
|
||||||
return
|
return
|
||||||
@@ -1008,14 +1008,14 @@ class GuiDocEditor(QPlainTextEdit):
|
|||||||
ctxMenu = QMenu(self)
|
ctxMenu = QMenu(self)
|
||||||
|
|
||||||
# Follow
|
# Follow
|
||||||
status = self._followTag(cursor=pCursor, process=False)
|
status = self._processTag(cursor=pCursor, follow=False)
|
||||||
if status == nwTrinary.POSITIVE:
|
if status == nwTrinary.POSITIVE:
|
||||||
aTag = ctxMenu.addAction(self.tr("Follow Tag"))
|
aTag = ctxMenu.addAction(self.tr("Follow Tag"))
|
||||||
aTag.triggered.connect(lambda: self._followTag(cursor=pCursor, process=True))
|
aTag.triggered.connect(lambda: self._processTag(cursor=pCursor, follow=True))
|
||||||
ctxMenu.addSeparator()
|
ctxMenu.addSeparator()
|
||||||
elif status == nwTrinary.NEGATIVE:
|
elif status == nwTrinary.NEGATIVE:
|
||||||
aTag = ctxMenu.addAction(self.tr("Create Note for Tag"))
|
aTag = ctxMenu.addAction(self.tr("Create Note for Tag"))
|
||||||
aTag.triggered.connect(lambda: self._followTag(cursor=pCursor, process=True))
|
aTag.triggered.connect(lambda: self._processTag(cursor=pCursor, create=True))
|
||||||
ctxMenu.addSeparator()
|
ctxMenu.addSeparator()
|
||||||
|
|
||||||
# Cut, Copy and Paste
|
# Cut, Copy and Paste
|
||||||
@@ -1696,7 +1696,8 @@ class GuiDocEditor(QPlainTextEdit):
|
|||||||
# Internal Functions
|
# Internal Functions
|
||||||
##
|
##
|
||||||
|
|
||||||
def _followTag(self, cursor: QTextCursor | None = None, process: bool = True) -> nwTrinary:
|
def _processTag(self, cursor: QTextCursor | None = None,
|
||||||
|
follow: bool = True, create: bool = False) -> nwTrinary:
|
||||||
"""Activated by Ctrl+Enter. Checks that we're in a block
|
"""Activated by Ctrl+Enter. Checks that we're in a block
|
||||||
starting with '@'. We then find the tag under the cursor and
|
starting with '@'. We then find the tag under the cursor and
|
||||||
check that it is not the tag itself. If all this is fine, we
|
check that it is not the tag itself. If all this is fine, we
|
||||||
@@ -1734,10 +1735,10 @@ class GuiDocEditor(QPlainTextEdit):
|
|||||||
# The keyword cannot be looked up, so we ignore that
|
# The keyword cannot be looked up, so we ignore that
|
||||||
return nwTrinary.UNKNOWN
|
return nwTrinary.UNKNOWN
|
||||||
|
|
||||||
if process and exist:
|
if follow and exist:
|
||||||
logger.debug("Attempting to follow tag '%s'", tag)
|
logger.debug("Attempting to follow tag '%s'", tag)
|
||||||
self.loadDocumentTagRequest.emit(tag, nwDocMode.VIEW)
|
self.loadDocumentTagRequest.emit(tag, nwDocMode.VIEW)
|
||||||
elif process and not exist:
|
elif create and not exist:
|
||||||
if SHARED.question(self.tr(
|
if SHARED.question(self.tr(
|
||||||
"Do you want to create a new project note for the tag '{0}'?"
|
"Do you want to create a new project note for the tag '{0}'?"
|
||||||
).format(tag)):
|
).format(tag)):
|
||||||
|
|||||||
@@ -579,8 +579,7 @@ class GuiProjectTree(QTreeWidget):
|
|||||||
if rHandle:
|
if rHandle:
|
||||||
tHandle = SHARED.project.newFile(tag, rHandle)
|
tHandle = SHARED.project.newFile(tag, rHandle)
|
||||||
if tHandle:
|
if tHandle:
|
||||||
text = f"# {tag}\n\n@tag: {tag}\n\n"
|
SHARED.project.writeNewFile(tHandle, 1, False, f"@tag: {tag}\n\n")
|
||||||
SHARED.project.writeNewFile(tHandle, 1, False, text)
|
|
||||||
self.revealNewTreeItem(tHandle, wordCount=True)
|
self.revealNewTreeItem(tHandle, wordCount=True)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ from PyQt5.QtGui import QTextBlock, QTextCursor, QTextOption
|
|||||||
from PyQt5.QtWidgets import QAction, qApp
|
from PyQt5.QtWidgets import QAction, qApp
|
||||||
|
|
||||||
from novelwriter import CONFIG, SHARED
|
from novelwriter import CONFIG, SHARED
|
||||||
from novelwriter.enum import nwDocAction, nwDocInsert, nwItemLayout, nwWidget
|
from novelwriter.enum import nwDocAction, nwDocInsert, nwItemLayout, nwTrinary, nwWidget
|
||||||
from novelwriter.constants import nwKeyWords, nwUnicode
|
from novelwriter.constants import nwKeyWords, nwUnicode
|
||||||
from novelwriter.core.index import countWords
|
from novelwriter.core.index import countWords
|
||||||
from novelwriter.gui.doceditor import GuiDocEditor
|
from novelwriter.gui.doceditor import GuiDocEditor
|
||||||
@@ -1041,7 +1041,7 @@ def testGuiEditor_Tags(qtbot, nwGUI, projPath, ipsumText, mockRnd):
|
|||||||
assert nwGUI.openDocument(C.hSceneDoc) is True
|
assert nwGUI.openDocument(C.hSceneDoc) is True
|
||||||
|
|
||||||
# Create Scene
|
# Create Scene
|
||||||
text = "### A Scene\n\n@char: Jane, John\n\n" + ipsumText[0] + "\n\n"
|
text = "### A Scene\n\n@char: Jane, John\n\n@object: Gun\n\n@:\n\n" + ipsumText[0] + "\n\n"
|
||||||
nwGUI.docEditor.replaceText(text)
|
nwGUI.docEditor.replaceText(text)
|
||||||
|
|
||||||
# Create Character
|
# Create Character
|
||||||
@@ -1059,34 +1059,44 @@ def testGuiEditor_Tags(qtbot, nwGUI, projPath, ipsumText, mockRnd):
|
|||||||
|
|
||||||
# Empty Block
|
# Empty Block
|
||||||
nwGUI.docEditor.setCursorLine(2)
|
nwGUI.docEditor.setCursorLine(2)
|
||||||
assert nwGUI.docEditor._followTag() is False
|
assert nwGUI.docEditor._processTag() is nwTrinary.UNKNOWN
|
||||||
|
|
||||||
# Not On Tag
|
# Not On Tag
|
||||||
nwGUI.docEditor.setCursorLine(1)
|
nwGUI.docEditor.setCursorLine(1)
|
||||||
assert nwGUI.docEditor._followTag() is False
|
assert nwGUI.docEditor._processTag() is nwTrinary.UNKNOWN
|
||||||
|
|
||||||
# On Tag Keyword
|
# On Tag Keyword
|
||||||
nwGUI.docEditor.setCursorPosition(15)
|
nwGUI.docEditor.setCursorPosition(15)
|
||||||
assert nwGUI.docEditor._followTag() is False
|
assert nwGUI.docEditor._processTag() is nwTrinary.UNKNOWN
|
||||||
|
|
||||||
# On Unknown Tag
|
|
||||||
nwGUI.docEditor.setCursorPosition(28)
|
|
||||||
assert nwGUI.docEditor._followTag() is True
|
|
||||||
assert nwGUI.docViewer._docHandle is None
|
|
||||||
|
|
||||||
# On Known Tag, No Follow
|
# On Known Tag, No Follow
|
||||||
nwGUI.docEditor.setCursorPosition(22)
|
nwGUI.docEditor.setCursorPosition(22)
|
||||||
assert nwGUI.docEditor._followTag(loadTag=False) is True
|
assert nwGUI.docEditor._processTag(follow=False) is nwTrinary.POSITIVE
|
||||||
assert nwGUI.docViewer._docHandle is None
|
assert nwGUI.docViewer._docHandle is None
|
||||||
|
|
||||||
# On Known Tag, Follow
|
# On Known Tag, Follow
|
||||||
nwGUI.docEditor.setCursorPosition(22)
|
nwGUI.docEditor.setCursorPosition(22)
|
||||||
assert nwGUI.docViewer._docHandle is None
|
assert nwGUI.docViewer._docHandle is None
|
||||||
assert nwGUI.docEditor._followTag(loadTag=True) is True
|
assert nwGUI.docEditor._processTag(follow=True) is nwTrinary.POSITIVE
|
||||||
assert nwGUI.docViewer._docHandle == cHandle
|
assert nwGUI.docViewer._docHandle == cHandle
|
||||||
assert nwGUI.closeDocViewer() is True
|
assert nwGUI.closeDocViewer() is True
|
||||||
assert nwGUI.docViewer._docHandle is None
|
assert nwGUI.docViewer._docHandle is None
|
||||||
|
|
||||||
|
# On Unknown Tag, Create It
|
||||||
|
assert "0000000000011" not in SHARED.project.tree
|
||||||
|
nwGUI.docEditor.setCursorPosition(28)
|
||||||
|
assert nwGUI.docEditor._processTag(create=True) is nwTrinary.NEGATIVE
|
||||||
|
assert "0000000000011" in SHARED.project.tree
|
||||||
|
|
||||||
|
# On Unknown Tag, Missing Root
|
||||||
|
assert "0000000000012" not in SHARED.project.tree
|
||||||
|
nwGUI.docEditor.setCursorPosition(42)
|
||||||
|
assert nwGUI.docEditor._processTag(create=True) is nwTrinary.NEGATIVE
|
||||||
|
assert "0000000000012" not in SHARED.project.tree
|
||||||
|
|
||||||
|
nwGUI.docEditor.setCursorPosition(47)
|
||||||
|
assert nwGUI.docEditor._processTag() is nwTrinary.UNKNOWN
|
||||||
|
|
||||||
# qtbot.stop()
|
# qtbot.stop()
|
||||||
|
|
||||||
# END Test testGuiEditor_Tags
|
# END Test testGuiEditor_Tags
|
||||||
|
|||||||
Reference in New Issue
Block a user