Connect the edit and view buttons
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user