Add an edit button to the viewer (#1963)

This commit is contained in:
Veronica Berglyd Olsen
2024-11-08 17:30:10 +01:00
parent 87ae7585e8
commit b28921d6c2
3 changed files with 31 additions and 7 deletions
+22 -5
View File
@@ -58,12 +58,13 @@ logger = logging.getLogger(__name__)
class GuiDocViewer(QTextBrowser): class GuiDocViewer(QTextBrowser):
closeDocumentRequest = pyqtSignal()
documentLoaded = pyqtSignal(str) documentLoaded = pyqtSignal(str)
loadDocumentTagRequest = pyqtSignal(str, Enum) loadDocumentTagRequest = pyqtSignal(str, Enum)
closeDocumentRequest = pyqtSignal() openDocumentRequest = pyqtSignal(str, Enum, str, bool)
reloadDocumentRequest = pyqtSignal() reloadDocumentRequest = pyqtSignal()
togglePanelVisibility = pyqtSignal()
requestProjectItemSelected = pyqtSignal(str, bool) requestProjectItemSelected = pyqtSignal(str, bool)
togglePanelVisibility = pyqtSignal()
def __init__(self, parent: QWidget) -> None: def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
@@ -640,6 +641,11 @@ class GuiDocViewHeader(QWidget):
self.forwardButton.setToolTip(self.tr("Go Forward")) self.forwardButton.setToolTip(self.tr("Go Forward"))
self.forwardButton.clicked.connect(self.docViewer.navForward) self.forwardButton.clicked.connect(self.docViewer.navForward)
self.editButton = NIconToolButton(self, iSz)
self.editButton.setVisible(False)
self.editButton.setToolTip(self.tr("Open in Editor"))
self.editButton.clicked.connect(self._editDocument)
self.refreshButton = NIconToolButton(self, iSz) self.refreshButton = NIconToolButton(self, iSz)
self.refreshButton.setVisible(False) self.refreshButton.setVisible(False)
self.refreshButton.setToolTip(self.tr("Reload")) self.refreshButton.setToolTip(self.tr("Reload"))
@@ -658,7 +664,7 @@ class GuiDocViewHeader(QWidget):
self.outerBox.addSpacing(mPx) self.outerBox.addSpacing(mPx)
self.outerBox.addWidget(self.itemTitle, 1) self.outerBox.addWidget(self.itemTitle, 1)
self.outerBox.addSpacing(mPx) self.outerBox.addSpacing(mPx)
self.outerBox.addSpacing(iPx) self.outerBox.addWidget(self.editButton, 0)
self.outerBox.addWidget(self.refreshButton, 0) self.outerBox.addWidget(self.refreshButton, 0)
self.outerBox.addWidget(self.closeButton, 0) self.outerBox.addWidget(self.closeButton, 0)
self.outerBox.setSpacing(0) self.outerBox.setSpacing(0)
@@ -692,8 +698,9 @@ class GuiDocViewHeader(QWidget):
self.outlineButton.setVisible(False) self.outlineButton.setVisible(False)
self.backButton.setVisible(False) self.backButton.setVisible(False)
self.forwardButton.setVisible(False) self.forwardButton.setVisible(False)
self.closeButton.setVisible(False) self.editButton.setVisible(False)
self.refreshButton.setVisible(False) self.refreshButton.setVisible(False)
self.closeButton.setVisible(False)
return return
def setOutline(self, data: dict[str, tuple[str, int]]) -> None: def setOutline(self, data: dict[str, tuple[str, int]]) -> None:
@@ -727,6 +734,7 @@ class GuiDocViewHeader(QWidget):
self.outlineButton.setThemeIcon("list") self.outlineButton.setThemeIcon("list")
self.backButton.setThemeIcon("backward") self.backButton.setThemeIcon("backward")
self.forwardButton.setThemeIcon("forward") self.forwardButton.setThemeIcon("forward")
self.editButton.setThemeIcon("edit")
self.refreshButton.setThemeIcon("refresh") self.refreshButton.setThemeIcon("refresh")
self.closeButton.setThemeIcon("close") self.closeButton.setThemeIcon("close")
@@ -734,6 +742,7 @@ class GuiDocViewHeader(QWidget):
self.outlineButton.setStyleSheet(buttonStyle) self.outlineButton.setStyleSheet(buttonStyle)
self.backButton.setStyleSheet(buttonStyle) self.backButton.setStyleSheet(buttonStyle)
self.forwardButton.setStyleSheet(buttonStyle) self.forwardButton.setStyleSheet(buttonStyle)
self.editButton.setStyleSheet(buttonStyle)
self.refreshButton.setStyleSheet(buttonStyle) self.refreshButton.setStyleSheet(buttonStyle)
self.closeButton.setStyleSheet(buttonStyle) self.closeButton.setStyleSheet(buttonStyle)
@@ -776,8 +785,9 @@ class GuiDocViewHeader(QWidget):
self.backButton.setVisible(True) self.backButton.setVisible(True)
self.forwardButton.setVisible(True) self.forwardButton.setVisible(True)
self.outlineButton.setVisible(True) self.outlineButton.setVisible(True)
self.closeButton.setVisible(True) self.editButton.setVisible(True)
self.refreshButton.setVisible(True) self.refreshButton.setVisible(True)
self.closeButton.setVisible(True)
return return
@@ -804,6 +814,13 @@ class GuiDocViewHeader(QWidget):
self.docViewer.reloadDocumentRequest.emit() self.docViewer.reloadDocumentRequest.emit()
return return
@pyqtSlot()
def _editDocument(self) -> None:
"""Open the document in the editor."""
if tHandle := self._docHandle:
self.docViewer.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "", True)
return
## ##
# Events # Events
## ##
+1
View File
@@ -270,6 +270,7 @@ class GuiMain(QMainWindow):
self.docViewer.closeDocumentRequest.connect(self.closeDocViewer) self.docViewer.closeDocumentRequest.connect(self.closeDocViewer)
self.docViewer.documentLoaded.connect(self.docViewerPanel.updateHandle) self.docViewer.documentLoaded.connect(self.docViewerPanel.updateHandle)
self.docViewer.loadDocumentTagRequest.connect(self._followTag) self.docViewer.loadDocumentTagRequest.connect(self._followTag)
self.docViewer.openDocumentRequest.connect(self._openDocument)
self.docViewer.reloadDocumentRequest.connect(self._reloadViewer) self.docViewer.reloadDocumentRequest.connect(self._reloadViewer)
self.docViewer.requestProjectItemSelected.connect(self.projView.setSelectedHandle) self.docViewer.requestProjectItemSelected.connect(self.projView.setSelectedHandle)
self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility) self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility)
+8 -2
View File
@@ -31,7 +31,6 @@ from PyQt5.QtWidgets import QAction, QApplication, QMenu
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.enum import nwDocAction from novelwriter.enum import nwDocAction
from novelwriter.formats.toqdoc import ToQTextDocument from novelwriter.formats.toqdoc import ToQTextDocument
from novelwriter.gui.docviewer import GuiDocViewer
from novelwriter.types import QtModNone, QtMouseLeft from novelwriter.types import QtModNone, QtMouseLeft
from tests.mocked import causeException from tests.mocked import causeException
@@ -42,7 +41,8 @@ def testGuiViewer_Main(qtbot, monkeypatch, nwGUI, prjLipsum):
"""Test the document viewer.""" """Test the document viewer."""
# Open project # Open project
assert nwGUI.openProject(prjLipsum) assert nwGUI.openProject(prjLipsum)
docViewer: GuiDocViewer = nwGUI.docViewer docEditor = nwGUI.docEditor
docViewer = nwGUI.docViewer
# Select a document in the project tree # Select a document in the project tree
nwGUI.projView.setSelectedHandle("88243afbe5ed8") nwGUI.projView.setSelectedHandle("88243afbe5ed8")
@@ -74,6 +74,12 @@ def testGuiViewer_Main(qtbot, monkeypatch, nwGUI, prjLipsum):
docViewer.docHeader._refreshDocument() docViewer.docHeader._refreshDocument()
assert docViewer.toPlainText() == origText assert docViewer.toPlainText() == origText
# Open in editor
nwGUI.closeDocument()
assert docEditor.docHandle is None
docViewer.docHeader._editDocument()
assert docEditor.docHandle == docViewer.docHandle
# Select word # Select word
cursor = docViewer.textCursor() cursor = docViewer.textCursor()
cursor.setPosition(100) cursor.setPosition(100)