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
from PyQt5.QtCore import QSize, Qt, pyqtSlot
from enum import Enum
from PyQt5.QtCore import QModelIndex, QSize, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import (
QAbstractItemView, QFrame, QHeaderView, QTabWidget, QTreeWidget,
QTreeWidgetItem, QVBoxLayout, QWidget
@@ -34,13 +36,16 @@ from PyQt5.QtWidgets import (
from novelwriter import CONFIG, SHARED
from novelwriter.constants import nwHeaders, nwLabels, nwLists, trConst
from novelwriter.core.index import IndexHeading, IndexItem
from novelwriter.enum import nwItemClass
from novelwriter.enum import nwDocMode, nwItemClass
logger = logging.getLogger(__name__)
class GuiDocViewerPanel(QWidget):
loadDocumentTagRequest = pyqtSignal(str, Enum)
openDocumentRequest = pyqtSignal(str, Enum, str, bool)
def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent)
@@ -180,21 +185,23 @@ class _ViewPanelBackRefs(QTreeWidget):
D_HANDLE = Qt.ItemDataRole.UserRole
D_TITLE = Qt.ItemDataRole.UserRole + 1
def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent)
def __init__(self, docViewerPanel: GuiDocViewerPanel) -> None:
super().__init__(parent=docViewerPanel)
self.docViewerPanel = docViewerPanel
self._treeMap: dict[str, QTreeWidgetItem] = {}
iPx = SHARED.theme.baseIconSize
cMg = CONFIG.pxInt(6)
# Content
self.setHeaderLabels([self.tr("Document"), "", "", self.tr("First Heading")])
self.setIndentation(0)
self.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection)
self.setIconSize(QSize(iPx, iPx))
self.setFrameStyle(QFrame.Shape.NoFrame)
# Set Header Sizes
treeHeader = self.header()
treeHeader.setStretchLastSection(True)
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_VIEW, iPx + cMg)
# Cache Icons Locally
self._editIcon = SHARED.theme.getIcon("edit")
self._viewIcon = SHARED.theme.getIcon("view")
# Signals
self.clicked.connect(self._treeItemClicked)
return
def refreshContent(self, dHandle: str | None) -> None:
@@ -228,6 +239,20 @@ class _ViewPanelBackRefs(QTreeWidget):
self._setTreeItemValues(tHandle, sTitle, hItem)
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
##
@@ -282,8 +307,10 @@ class _ViewPanelKeyWords(QTreeWidget):
D_TAG = Qt.ItemDataRole.UserRole
D_HANDLE = Qt.ItemDataRole.UserRole + 1
def __init__(self, parent: QWidget, itemClass: nwItemClass) -> None:
super().__init__(parent=parent)
def __init__(self, docViewerPanel: GuiDocViewerPanel, itemClass: nwItemClass) -> None:
super().__init__(parent=docViewerPanel)
self.docViewerPanel = docViewerPanel
self._tagMap: dict[str, QTreeWidgetItem] = {}
@@ -304,6 +331,7 @@ class _ViewPanelKeyWords(QTreeWidget):
treeHeader.setSectionResizeMode(self.C_NAME, QHeaderView.ResizeMode.ResizeToContents)
treeHeader.setSectionResizeMode(self.C_EDIT, 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_VIEW, iPx + cMg)
@@ -312,6 +340,9 @@ class _ViewPanelKeyWords(QTreeWidget):
self._editIcon = SHARED.theme.getIcon("edit")
self._viewIcon = SHARED.theme.getIcon("view")
# Signals
self.clicked.connect(self._treeItemClicked)
return
def count(self) -> int:
@@ -360,4 +391,18 @@ class _ViewPanelKeyWords(QTreeWidget):
return True
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
+3
View File
@@ -286,6 +286,9 @@ class GuiMain(QMainWindow):
self.docViewer.loadDocumentTagRequest.connect(self._followTag)
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.openDocumentRequest.connect(self._openDocument)