Connect the edit and view buttons

This commit is contained in:
Veronica Berglyd Olsen
2023-11-15 21:38:45 +01:00
parent 565350fcfb
commit 2fc8e43e71
2 changed files with 55 additions and 7 deletions
+52 -7
View File
@@ -25,7 +25,9 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import QSize, Qt, pyqtSlot from enum import Enum
from PyQt5.QtCore import QModelIndex, QSize, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QAbstractItemView, QFrame, QHeaderView, QTabWidget, QTreeWidget, QAbstractItemView, QFrame, QHeaderView, QTabWidget, QTreeWidget,
QTreeWidgetItem, QVBoxLayout, QWidget QTreeWidgetItem, QVBoxLayout, QWidget
@@ -34,13 +36,16 @@ from PyQt5.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.constants import nwHeaders, nwLabels, nwLists, trConst from novelwriter.constants import nwHeaders, nwLabels, nwLists, trConst
from novelwriter.core.index import IndexHeading, IndexItem from novelwriter.core.index import IndexHeading, IndexItem
from novelwriter.enum import nwItemClass from novelwriter.enum import nwDocMode, nwItemClass
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class GuiDocViewerPanel(QWidget): class GuiDocViewerPanel(QWidget):
loadDocumentTagRequest = pyqtSignal(str, Enum)
openDocumentRequest = pyqtSignal(str, Enum, str, bool)
def __init__(self, parent: QWidget) -> None: def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
@@ -180,21 +185,23 @@ class _ViewPanelBackRefs(QTreeWidget):
D_HANDLE = Qt.ItemDataRole.UserRole D_HANDLE = Qt.ItemDataRole.UserRole
D_TITLE = Qt.ItemDataRole.UserRole + 1 D_TITLE = Qt.ItemDataRole.UserRole + 1
def __init__(self, parent: QWidget) -> None: def __init__(self, docViewerPanel: GuiDocViewerPanel) -> None:
super().__init__(parent=parent) super().__init__(parent=docViewerPanel)
self.docViewerPanel = docViewerPanel
self._treeMap: dict[str, QTreeWidgetItem] = {} self._treeMap: dict[str, QTreeWidgetItem] = {}
iPx = SHARED.theme.baseIconSize iPx = SHARED.theme.baseIconSize
cMg = CONFIG.pxInt(6) cMg = CONFIG.pxInt(6)
# Content
self.setHeaderLabels([self.tr("Document"), "", "", self.tr("First Heading")]) self.setHeaderLabels([self.tr("Document"), "", "", self.tr("First Heading")])
self.setIndentation(0) self.setIndentation(0)
self.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection) self.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection)
self.setIconSize(QSize(iPx, iPx)) self.setIconSize(QSize(iPx, iPx))
self.setFrameStyle(QFrame.Shape.NoFrame) self.setFrameStyle(QFrame.Shape.NoFrame)
# Set Header Sizes
treeHeader = self.header() treeHeader = self.header()
treeHeader.setStretchLastSection(True) treeHeader.setStretchLastSection(True)
treeHeader.setSectionResizeMode(self.C_DOC, QHeaderView.ResizeMode.ResizeToContents) treeHeader.setSectionResizeMode(self.C_DOC, QHeaderView.ResizeMode.ResizeToContents)
@@ -204,9 +211,13 @@ class _ViewPanelBackRefs(QTreeWidget):
treeHeader.resizeSection(self.C_EDIT, iPx + cMg) treeHeader.resizeSection(self.C_EDIT, iPx + cMg)
treeHeader.resizeSection(self.C_VIEW, iPx + cMg) treeHeader.resizeSection(self.C_VIEW, iPx + cMg)
# Cache Icons Locally
self._editIcon = SHARED.theme.getIcon("edit") self._editIcon = SHARED.theme.getIcon("edit")
self._viewIcon = SHARED.theme.getIcon("view") self._viewIcon = SHARED.theme.getIcon("view")
# Signals
self.clicked.connect(self._treeItemClicked)
return return
def refreshContent(self, dHandle: str | None) -> None: def refreshContent(self, dHandle: str | None) -> None:
@@ -228,6 +239,20 @@ class _ViewPanelBackRefs(QTreeWidget):
self._setTreeItemValues(tHandle, sTitle, hItem) self._setTreeItemValues(tHandle, sTitle, hItem)
return return
##
# Private Slots
##
@pyqtSlot("QModelIndex")
def _treeItemClicked(self, index: QModelIndex) -> None:
"""The user clicked on an item in the tree."""
tHandle = index.siblingAtColumn(self.C_DATA).data(self.D_HANDLE)
if index.column() == self.C_EDIT:
self.docViewerPanel.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "", True)
elif index.column() == self.C_VIEW:
self.docViewerPanel.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "", True)
return
## ##
# Internal Functions # Internal Functions
## ##
@@ -282,8 +307,10 @@ class _ViewPanelKeyWords(QTreeWidget):
D_TAG = Qt.ItemDataRole.UserRole D_TAG = Qt.ItemDataRole.UserRole
D_HANDLE = Qt.ItemDataRole.UserRole + 1 D_HANDLE = Qt.ItemDataRole.UserRole + 1
def __init__(self, parent: QWidget, itemClass: nwItemClass) -> None: def __init__(self, docViewerPanel: GuiDocViewerPanel, itemClass: nwItemClass) -> None:
super().__init__(parent=parent) super().__init__(parent=docViewerPanel)
self.docViewerPanel = docViewerPanel
self._tagMap: dict[str, QTreeWidgetItem] = {} self._tagMap: dict[str, QTreeWidgetItem] = {}
@@ -304,6 +331,7 @@ class _ViewPanelKeyWords(QTreeWidget):
treeHeader.setSectionResizeMode(self.C_NAME, QHeaderView.ResizeMode.ResizeToContents) treeHeader.setSectionResizeMode(self.C_NAME, QHeaderView.ResizeMode.ResizeToContents)
treeHeader.setSectionResizeMode(self.C_EDIT, QHeaderView.ResizeMode.Fixed) treeHeader.setSectionResizeMode(self.C_EDIT, QHeaderView.ResizeMode.Fixed)
treeHeader.setSectionResizeMode(self.C_VIEW, QHeaderView.ResizeMode.Fixed) treeHeader.setSectionResizeMode(self.C_VIEW, QHeaderView.ResizeMode.Fixed)
treeHeader.setSectionResizeMode(self.C_DOC, QHeaderView.ResizeMode.ResizeToContents)
treeHeader.resizeSection(self.C_EDIT, iPx + cMg) treeHeader.resizeSection(self.C_EDIT, iPx + cMg)
treeHeader.resizeSection(self.C_VIEW, iPx + cMg) treeHeader.resizeSection(self.C_VIEW, iPx + cMg)
@@ -312,6 +340,9 @@ class _ViewPanelKeyWords(QTreeWidget):
self._editIcon = SHARED.theme.getIcon("edit") self._editIcon = SHARED.theme.getIcon("edit")
self._viewIcon = SHARED.theme.getIcon("view") self._viewIcon = SHARED.theme.getIcon("view")
# Signals
self.clicked.connect(self._treeItemClicked)
return return
def count(self) -> int: def count(self) -> int:
@@ -360,4 +391,18 @@ class _ViewPanelKeyWords(QTreeWidget):
return True return True
return False return False
##
# Private Slots
##
@pyqtSlot("QModelIndex")
def _treeItemClicked(self, index: QModelIndex) -> None:
"""The user clicked on an item in the tree."""
tag = index.siblingAtColumn(self.C_DATA).data(self.D_TAG)
if index.column() == self.C_EDIT:
self.docViewerPanel.loadDocumentTagRequest.emit(tag, nwDocMode.EDIT)
elif index.column() == self.C_VIEW:
self.docViewerPanel.loadDocumentTagRequest.emit(tag, nwDocMode.VIEW)
return
# END Class _ViewPanelRefs # END Class _ViewPanelRefs
+3
View File
@@ -286,6 +286,9 @@ class GuiMain(QMainWindow):
self.docViewer.loadDocumentTagRequest.connect(self._followTag) self.docViewer.loadDocumentTagRequest.connect(self._followTag)
self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility) self.docViewer.togglePanelVisibility.connect(self._toggleViewerPanelVisibility)
self.docViewerPanel.loadDocumentTagRequest.connect(self._followTag)
self.docViewerPanel.openDocumentRequest.connect(self._openDocument)
self.outlineView.loadDocumentTagRequest.connect(self._followTag) self.outlineView.loadDocumentTagRequest.connect(self._followTag)
self.outlineView.openDocumentRequest.connect(self._openDocument) self.outlineView.openDocumentRequest.connect(self._openDocument)