Add an edit button to the viewer (#1963)
This commit is contained in:
@@ -58,12 +58,13 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class GuiDocViewer(QTextBrowser):
|
||||
|
||||
closeDocumentRequest = pyqtSignal()
|
||||
documentLoaded = pyqtSignal(str)
|
||||
loadDocumentTagRequest = pyqtSignal(str, Enum)
|
||||
closeDocumentRequest = pyqtSignal()
|
||||
openDocumentRequest = pyqtSignal(str, Enum, str, bool)
|
||||
reloadDocumentRequest = pyqtSignal()
|
||||
togglePanelVisibility = pyqtSignal()
|
||||
requestProjectItemSelected = pyqtSignal(str, bool)
|
||||
togglePanelVisibility = pyqtSignal()
|
||||
|
||||
def __init__(self, parent: QWidget) -> None:
|
||||
super().__init__(parent=parent)
|
||||
@@ -640,6 +641,11 @@ class GuiDocViewHeader(QWidget):
|
||||
self.forwardButton.setToolTip(self.tr("Go Forward"))
|
||||
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.setVisible(False)
|
||||
self.refreshButton.setToolTip(self.tr("Reload"))
|
||||
@@ -658,7 +664,7 @@ class GuiDocViewHeader(QWidget):
|
||||
self.outerBox.addSpacing(mPx)
|
||||
self.outerBox.addWidget(self.itemTitle, 1)
|
||||
self.outerBox.addSpacing(mPx)
|
||||
self.outerBox.addSpacing(iPx)
|
||||
self.outerBox.addWidget(self.editButton, 0)
|
||||
self.outerBox.addWidget(self.refreshButton, 0)
|
||||
self.outerBox.addWidget(self.closeButton, 0)
|
||||
self.outerBox.setSpacing(0)
|
||||
@@ -692,8 +698,9 @@ class GuiDocViewHeader(QWidget):
|
||||
self.outlineButton.setVisible(False)
|
||||
self.backButton.setVisible(False)
|
||||
self.forwardButton.setVisible(False)
|
||||
self.closeButton.setVisible(False)
|
||||
self.editButton.setVisible(False)
|
||||
self.refreshButton.setVisible(False)
|
||||
self.closeButton.setVisible(False)
|
||||
return
|
||||
|
||||
def setOutline(self, data: dict[str, tuple[str, int]]) -> None:
|
||||
@@ -727,6 +734,7 @@ class GuiDocViewHeader(QWidget):
|
||||
self.outlineButton.setThemeIcon("list")
|
||||
self.backButton.setThemeIcon("backward")
|
||||
self.forwardButton.setThemeIcon("forward")
|
||||
self.editButton.setThemeIcon("edit")
|
||||
self.refreshButton.setThemeIcon("refresh")
|
||||
self.closeButton.setThemeIcon("close")
|
||||
|
||||
@@ -734,6 +742,7 @@ class GuiDocViewHeader(QWidget):
|
||||
self.outlineButton.setStyleSheet(buttonStyle)
|
||||
self.backButton.setStyleSheet(buttonStyle)
|
||||
self.forwardButton.setStyleSheet(buttonStyle)
|
||||
self.editButton.setStyleSheet(buttonStyle)
|
||||
self.refreshButton.setStyleSheet(buttonStyle)
|
||||
self.closeButton.setStyleSheet(buttonStyle)
|
||||
|
||||
@@ -776,8 +785,9 @@ class GuiDocViewHeader(QWidget):
|
||||
self.backButton.setVisible(True)
|
||||
self.forwardButton.setVisible(True)
|
||||
self.outlineButton.setVisible(True)
|
||||
self.closeButton.setVisible(True)
|
||||
self.editButton.setVisible(True)
|
||||
self.refreshButton.setVisible(True)
|
||||
self.closeButton.setVisible(True)
|
||||
|
||||
return
|
||||
|
||||
@@ -804,6 +814,13 @@ class GuiDocViewHeader(QWidget):
|
||||
self.docViewer.reloadDocumentRequest.emit()
|
||||
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
|
||||
##
|
||||
|
||||
@@ -270,6 +270,7 @@ class GuiMain(QMainWindow):
|
||||
self.docViewer.closeDocumentRequest.connect(self.closeDocViewer)
|
||||
self.docViewer.documentLoaded.connect(self.docViewerPanel.updateHandle)
|
||||
self.docViewer.loadDocumentTagRequest.connect(self._followTag)
|
||||
self.docViewer.openDocumentRequest.connect(self._openDocument)
|
||||
self.docViewer.reloadDocumentRequest.connect(self._reloadViewer)
|
||||
self.docViewer.requestProjectItemSelected.connect(self.projView.setSelectedHandle)
|
||||
self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility)
|
||||
|
||||
@@ -31,7 +31,6 @@ from PyQt5.QtWidgets import QAction, QApplication, QMenu
|
||||
from novelwriter import CONFIG, SHARED
|
||||
from novelwriter.enum import nwDocAction
|
||||
from novelwriter.formats.toqdoc import ToQTextDocument
|
||||
from novelwriter.gui.docviewer import GuiDocViewer
|
||||
from novelwriter.types import QtModNone, QtMouseLeft
|
||||
|
||||
from tests.mocked import causeException
|
||||
@@ -42,7 +41,8 @@ def testGuiViewer_Main(qtbot, monkeypatch, nwGUI, prjLipsum):
|
||||
"""Test the document viewer."""
|
||||
# Open project
|
||||
assert nwGUI.openProject(prjLipsum)
|
||||
docViewer: GuiDocViewer = nwGUI.docViewer
|
||||
docEditor = nwGUI.docEditor
|
||||
docViewer = nwGUI.docViewer
|
||||
|
||||
# Select a document in the project tree
|
||||
nwGUI.projView.setSelectedHandle("88243afbe5ed8")
|
||||
@@ -74,6 +74,12 @@ def testGuiViewer_Main(qtbot, monkeypatch, nwGUI, prjLipsum):
|
||||
docViewer.docHeader._refreshDocument()
|
||||
assert docViewer.toPlainText() == origText
|
||||
|
||||
# Open in editor
|
||||
nwGUI.closeDocument()
|
||||
assert docEditor.docHandle is None
|
||||
docViewer.docHeader._editDocument()
|
||||
assert docEditor.docHandle == docViewer.docHandle
|
||||
|
||||
# Select word
|
||||
cursor = docViewer.textCursor()
|
||||
cursor.setPosition(100)
|
||||
|
||||
Reference in New Issue
Block a user