From 683e81c57bfff9b685c34e0babec8e13f94834a2 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 16 Jun 2024 21:13:50 +0200 Subject: [PATCH 1/3] Connect rehighlight tags in editor to index signal on tags change (#1916) --- novelwriter/gui/doceditor.py | 12 +++++++----- novelwriter/guimain.py | 2 +- tests/test_gui/test_gui_doceditor.py | 1 - 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 6581d601..b54df758 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -436,11 +436,6 @@ class GuiDocEditor(QPlainTextEdit): return True - def updateTagHighLighting(self) -> None: - """Rerun the syntax highlighter on all meta data lines.""" - self._qDocument.syntaxHighlighter.rehighlightByType(BLOCK_META) - return - def replaceText(self, text: str) -> None: """Replace the text of the current document with the provided text. This also clears undo history. @@ -1034,6 +1029,13 @@ class GuiDocEditor(QPlainTextEdit): self.beginSearch() return + @pyqtSlot(list, list) + def updateChangedTags(self, updated: list[str], deleted: list[str]) -> None: + """Tags have changed, so just in case we rehighlight them.""" + if updated or deleted: + self._qDocument.syntaxHighlighter.rehighlightByType(BLOCK_META) + return + ## # Private Slots ## diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index ed4b1650..f23d2b4b 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -215,6 +215,7 @@ class GuiMain(QMainWindow): SHARED.spellLanguageChanged.connect(self.mainStatus.setLanguage) SHARED.focusModeChanged.connect(self._focusModeChanged) SHARED.indexChangedTags.connect(self.docViewerPanel.updateChangedTags) + SHARED.indexChangedTags.connect(self.docEditor.updateChangedTags) SHARED.indexScannedText.connect(self.docViewerPanel.projectItemChanged) SHARED.indexScannedText.connect(self.projView.updateItemValues) SHARED.indexScannedText.connect(self.itemDetails.updateViewBox) @@ -745,7 +746,6 @@ class GuiMain(QMainWindow): self.mainStatus.setStatusMessage( self.tr("Indexing completed in {0} ms").format(f"{(tEnd - tStart)*1000.0:.1f}") ) - self.docEditor.updateTagHighLighting() self._updateStatusWordCount() QApplication.restoreOverrideCursor() diff --git a/tests/test_gui/test_gui_doceditor.py b/tests/test_gui/test_gui_doceditor.py index 6c8ed7a6..2ed80e96 100644 --- a/tests/test_gui/test_gui_doceditor.py +++ b/tests/test_gui/test_gui_doceditor.py @@ -1597,7 +1597,6 @@ def testGuiEditor_Tags(qtbot, nwGUI, projPath, ipsumText, mockRnd): docEditor.replaceText(text) nwGUI.saveDocument() assert nwGUI.projView.projTree.revealNewTreeItem(cHandle) - docEditor.updateTagHighLighting() # Follow Tag # ========== From efc94a7fd54bc5bdd89d517c2ce549420139b92f Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 16 Jun 2024 21:18:41 +0200 Subject: [PATCH 2/3] Sort signals in main GUI --- novelwriter/guimain.py | 60 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index f23d2b4b..ec549b5c 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -210,18 +210,18 @@ class GuiMain(QMainWindow): # Connect Signals # =============== + SHARED.focusModeChanged.connect(self._focusModeChanged) + SHARED.indexAvailable.connect(self.docViewerPanel.indexHasAppeared) + SHARED.indexChangedTags.connect(self.docEditor.updateChangedTags) + SHARED.indexChangedTags.connect(self.docViewerPanel.updateChangedTags) + SHARED.indexCleared.connect(self.docViewerPanel.indexWasCleared) + SHARED.indexScannedText.connect(self.docViewerPanel.projectItemChanged) + SHARED.indexScannedText.connect(self.itemDetails.updateViewBox) + SHARED.indexScannedText.connect(self.projView.updateItemValues) + SHARED.mainClockTick.connect(self._timeTick) SHARED.projectStatusChanged.connect(self.mainStatus.updateProjectStatus) SHARED.projectStatusMessage.connect(self.mainStatus.setStatusMessage) SHARED.spellLanguageChanged.connect(self.mainStatus.setLanguage) - SHARED.focusModeChanged.connect(self._focusModeChanged) - SHARED.indexChangedTags.connect(self.docViewerPanel.updateChangedTags) - SHARED.indexChangedTags.connect(self.docEditor.updateChangedTags) - SHARED.indexScannedText.connect(self.docViewerPanel.projectItemChanged) - SHARED.indexScannedText.connect(self.projView.updateItemValues) - SHARED.indexScannedText.connect(self.itemDetails.updateViewBox) - SHARED.indexCleared.connect(self.docViewerPanel.indexWasCleared) - SHARED.indexAvailable.connect(self.docViewerPanel.indexHasAppeared) - SHARED.mainClockTick.connect(self._timeTick) self.mainMenu.requestDocAction.connect(self._passDocumentAction) self.mainMenu.requestDocInsert.connect(self._passDocumentInsert) @@ -232,46 +232,46 @@ class GuiMain(QMainWindow): self.sideBar.requestViewChange.connect(self._changeView) - self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.projView.openDocumentRequest.connect(self._openDocument) - self.projView.wordCountsChanged.connect(self._updateStatusWordCount) + self.projView.projectSettingsRequest.connect(self.showProjectSettingsDialog) + self.projView.rootFolderChanged.connect(self.novelView.updateRootItem) + self.projView.rootFolderChanged.connect(self.outlineView.updateRootItem) + self.projView.rootFolderChanged.connect(self.projView.updateRootItem) + self.projView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.projView.treeItemChanged.connect(self.docEditor.updateDocInfo) self.projView.treeItemChanged.connect(self.docViewer.updateDocInfo) - self.projView.treeItemChanged.connect(self.itemDetails.updateViewBox) self.projView.treeItemChanged.connect(self.docViewerPanel.projectItemChanged) - self.projView.rootFolderChanged.connect(self.outlineView.updateRootItem) - self.projView.rootFolderChanged.connect(self.novelView.updateRootItem) - self.projView.rootFolderChanged.connect(self.projView.updateRootItem) - self.projView.projectSettingsRequest.connect(self.showProjectSettingsDialog) + self.projView.treeItemChanged.connect(self.itemDetails.updateViewBox) + self.projView.wordCountsChanged.connect(self._updateStatusWordCount) - self.novelView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.novelView.openDocumentRequest.connect(self._openDocument) + self.novelView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.projSearch.openDocumentSelectRequest.connect(self._openDocumentSelection) self.projSearch.selectedItemChanged.connect(self.itemDetails.updateViewBox) - self.docEditor.editedStatusChanged.connect(self.mainStatus.updateDocumentStatus) + self.docEditor.closeDocumentRequest.connect(self.closeDocEditor) self.docEditor.docCountsChanged.connect(self.itemDetails.updateCounts) self.docEditor.docCountsChanged.connect(self.projView.updateCounts) - self.docEditor.loadDocumentTagRequest.connect(self._followTag) - self.docEditor.novelStructureChanged.connect(self.novelView.refreshTree) - self.docEditor.novelItemMetaChanged.connect(self.novelView.updateNovelItemMeta) - self.docEditor.statusMessage.connect(self.mainStatus.setStatusMessage) - self.docEditor.spellCheckStateChanged.connect(self.mainMenu.setSpellCheckState) - self.docEditor.closeDocumentRequest.connect(self.closeDocEditor) - self.docEditor.toggleFocusModeRequest.connect(self.toggleFocusMode) - self.docEditor.requestProjectItemSelected.connect(self.projView.setSelectedHandle) - self.docEditor.requestProjectItemRenamed.connect(self.projView.renameTreeItem) - self.docEditor.requestNewNoteCreation.connect(self.projView.createNewNote) self.docEditor.docTextChanged.connect(self.projSearch.textChanged) + self.docEditor.editedStatusChanged.connect(self.mainStatus.updateDocumentStatus) + self.docEditor.loadDocumentTagRequest.connect(self._followTag) + self.docEditor.novelItemMetaChanged.connect(self.novelView.updateNovelItemMeta) + self.docEditor.novelStructureChanged.connect(self.novelView.refreshTree) + self.docEditor.requestNewNoteCreation.connect(self.projView.createNewNote) self.docEditor.requestNextDocument.connect(self.openNextDocument) + self.docEditor.requestProjectItemRenamed.connect(self.projView.renameTreeItem) + self.docEditor.requestProjectItemSelected.connect(self.projView.setSelectedHandle) + self.docEditor.spellCheckStateChanged.connect(self.mainMenu.setSpellCheckState) + self.docEditor.statusMessage.connect(self.mainStatus.setStatusMessage) + self.docEditor.toggleFocusModeRequest.connect(self.toggleFocusMode) + self.docViewer.closeDocumentRequest.connect(self.closeDocViewer) self.docViewer.documentLoaded.connect(self.docViewerPanel.updateHandle) self.docViewer.loadDocumentTagRequest.connect(self._followTag) - self.docViewer.closeDocumentRequest.connect(self.closeDocViewer) self.docViewer.reloadDocumentRequest.connect(self._reloadViewer) - self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility) self.docViewer.requestProjectItemSelected.connect(self.projView.setSelectedHandle) + self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility) self.docViewerPanel.loadDocumentTagRequest.connect(self._followTag) self.docViewerPanel.openDocumentRequest.connect(self._openDocument) From 6540c566729d968f7ed8ec3cc5291db37643de55 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 16 Jun 2024 21:19:42 +0200 Subject: [PATCH 3/3] Remove no longer needed rehighlighting code --- novelwriter/gui/doceditor.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index b54df758..5288b068 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -1924,8 +1924,6 @@ class GuiDocEditor(QPlainTextEdit): ).format(tag)): itemClass = nwKeyWords.KEY_CLASS.get(tBits[0], nwItemClass.NO_CLASS) self.requestNewNoteCreation.emit(tag, itemClass) - QApplication.processEvents() - self._qDocument.syntaxHighlighter.rehighlightBlock(block) return nwTrinary.POSITIVE if exist else nwTrinary.NEGATIVE