Clean up the viewer panel code a bit

This commit is contained in:
Veronica Berglyd Olsen
2023-11-15 22:09:18 +01:00
parent f51223e7c3
commit 3d17d8e08c
+25 -40
View File
@@ -43,8 +43,8 @@ logger = logging.getLogger(__name__)
class GuiDocViewerPanel(QWidget): class GuiDocViewerPanel(QWidget):
loadDocumentTagRequest = pyqtSignal(str, Enum)
openDocumentRequest = pyqtSignal(str, Enum, str, bool) openDocumentRequest = pyqtSignal(str, Enum, str, bool)
loadDocumentTagRequest = pyqtSignal(str, Enum)
def __init__(self, parent: QWidget) -> None: def __init__(self, parent: QWidget) -> None:
super().__init__(parent=parent) super().__init__(parent=parent)
@@ -183,13 +183,11 @@ class _ViewPanelBackRefs(QTreeWidget):
C_TITLE = 3 C_TITLE = 3
D_HANDLE = Qt.ItemDataRole.UserRole D_HANDLE = Qt.ItemDataRole.UserRole
D_TITLE = Qt.ItemDataRole.UserRole + 1
def __init__(self, docViewerPanel: GuiDocViewerPanel) -> None: def __init__(self, parent: GuiDocViewerPanel) -> None:
super().__init__(parent=docViewerPanel) super().__init__(parent=parent)
self.docViewerPanel = docViewerPanel
self._parent = parent
self._treeMap: dict[str, QTreeWidgetItem] = {} self._treeMap: dict[str, QTreeWidgetItem] = {}
iPx = SHARED.theme.baseIconSize iPx = SHARED.theme.baseIconSize
@@ -232,8 +230,7 @@ class _ViewPanelBackRefs(QTreeWidget):
def refreshDocument(self, tHandle: str) -> None: def refreshDocument(self, tHandle: str) -> None:
"""Refresh document meta data.""" """Refresh document meta data."""
iItem = SHARED.project.index.getItemData(tHandle) if iItem := SHARED.project.index.getItemData(tHandle):
if iItem:
for sTitle, hItem in iItem.items(): for sTitle, hItem in iItem.items():
if f"{tHandle}:{sTitle}" in self._treeMap: if f"{tHandle}:{sTitle}" in self._treeMap:
self._setTreeItemValues(tHandle, sTitle, hItem) self._setTreeItemValues(tHandle, sTitle, hItem)
@@ -245,12 +242,12 @@ class _ViewPanelBackRefs(QTreeWidget):
@pyqtSlot("QModelIndex") @pyqtSlot("QModelIndex")
def _treeItemClicked(self, index: QModelIndex) -> None: def _treeItemClicked(self, index: QModelIndex) -> None:
"""The user clicked on an item in the tree.""" """Emit document open signal on user click."""
tHandle = index.siblingAtColumn(self.C_DATA).data(self.D_HANDLE) tHandle = index.siblingAtColumn(self.C_DATA).data(self.D_HANDLE)
if index.column() == self.C_EDIT: if index.column() == self.C_EDIT:
self.docViewerPanel.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "", True) self._parent.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "", True)
elif index.column() == self.C_VIEW: elif index.column() == self.C_VIEW:
self.docViewerPanel.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "", True) self._parent.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "", True)
return return
## ##
@@ -259,8 +256,7 @@ class _ViewPanelBackRefs(QTreeWidget):
def _setTreeItemValues(self, tHandle: str, sTitle: str, hItem: IndexHeading) -> None: def _setTreeItemValues(self, tHandle: str, sTitle: str, hItem: IndexHeading) -> None:
"""Add or update a tree item.""" """Add or update a tree item."""
nwItem = SHARED.project.tree[tHandle] if (nwItem := SHARED.project.tree[tHandle]) is None:
if nwItem is None:
return return
docIcon = SHARED.theme.getItemIcon( docIcon = SHARED.theme.getItemIcon(
@@ -271,10 +267,7 @@ class _ViewPanelBackRefs(QTreeWidget):
hDec = SHARED.theme.getHeaderDecorationNarrow(iLevel) hDec = SHARED.theme.getHeaderDecorationNarrow(iLevel)
tKey = f"{tHandle}:{sTitle}" tKey = f"{tHandle}:{sTitle}"
if tKey in self._treeMap: trItem = self._treeMap[tKey] if tKey in self._treeMap else QTreeWidgetItem()
trItem = self._treeMap[tKey]
else:
trItem = QTreeWidgetItem()
trItem.setIcon(self.C_DOC, docIcon) trItem.setIcon(self.C_DOC, docIcon)
trItem.setText(self.C_DOC, nwItem.itemName) trItem.setText(self.C_DOC, nwItem.itemName)
@@ -282,9 +275,7 @@ class _ViewPanelBackRefs(QTreeWidget):
trItem.setIcon(self.C_VIEW, self._viewIcon) trItem.setIcon(self.C_VIEW, self._viewIcon)
trItem.setText(self.C_TITLE, hItem.title) trItem.setText(self.C_TITLE, hItem.title)
trItem.setData(self.C_TITLE, Qt.ItemDataRole.DecorationRole, hDec) trItem.setData(self.C_TITLE, Qt.ItemDataRole.DecorationRole, hDec)
trItem.setData(self.C_DATA, self.D_HANDLE, tHandle) trItem.setData(self.C_DATA, self.D_HANDLE, tHandle)
trItem.setData(self.C_DATA, self.D_TITLE, sTitle)
if tKey not in self._treeMap: if tKey not in self._treeMap:
self.addTopLevelItem(trItem) self.addTopLevelItem(trItem)
@@ -304,15 +295,13 @@ class _ViewPanelKeyWords(QTreeWidget):
C_DOC = 3 C_DOC = 3
C_TITLE = 4 C_TITLE = 4
D_TAG = Qt.ItemDataRole.UserRole D_TAG = Qt.ItemDataRole.UserRole
D_HANDLE = Qt.ItemDataRole.UserRole + 1
def __init__(self, docViewerPanel: GuiDocViewerPanel, itemClass: nwItemClass) -> None: def __init__(self, parent: GuiDocViewerPanel, itemClass: nwItemClass) -> None:
super().__init__(parent=docViewerPanel) super().__init__(parent=parent)
self.docViewerPanel = docViewerPanel self._parent = parent
self._treeMap: dict[str, QTreeWidgetItem] = {}
self._tagMap: dict[str, QTreeWidgetItem] = {}
iPx = SHARED.theme.baseIconSize iPx = SHARED.theme.baseIconSize
cMg = CONFIG.pxInt(6) cMg = CONFIG.pxInt(6)
@@ -351,7 +340,7 @@ class _ViewPanelKeyWords(QTreeWidget):
def clearContent(self) -> None: def clearContent(self) -> None:
"""Clear the list.""" """Clear the list."""
self._tagMap = {} self._treeMap = {}
self.clear() self.clear()
return return
@@ -367,10 +356,7 @@ class _ViewPanelKeyWords(QTreeWidget):
# This can not use a get call to the dictionary as that creates # This can not use a get call to the dictionary as that creates
# some weird issue with Qt, so we need to do this with an if # some weird issue with Qt, so we need to do this with an if
if tag in self._tagMap: trItem = self._treeMap[tag] if tag in self._treeMap else QTreeWidgetItem()
trItem = self._tagMap[tag]
else:
trItem = QTreeWidgetItem()
trItem.setText(self.C_NAME, name) trItem.setText(self.C_NAME, name)
trItem.setIcon(self.C_NAME, self._classIcon) trItem.setIcon(self.C_NAME, self._classIcon)
@@ -381,19 +367,18 @@ class _ViewPanelKeyWords(QTreeWidget):
trItem.setText(self.C_TITLE, hItem.title) trItem.setText(self.C_TITLE, hItem.title)
trItem.setData(self.C_TITLE, Qt.ItemDataRole.DecorationRole, hDec) trItem.setData(self.C_TITLE, Qt.ItemDataRole.DecorationRole, hDec)
trItem.setData(self.C_DATA, self.D_TAG, tag) trItem.setData(self.C_DATA, self.D_TAG, tag)
trItem.setData(self.C_DATA, self.D_HANDLE, iItem.handle)
if tag not in self._tagMap: if tag not in self._treeMap:
self.addTopLevelItem(trItem) self.addTopLevelItem(trItem)
self._tagMap[tag] = trItem self._treeMap[tag] = trItem
return return
def removeEntry(self, tag: str) -> bool: def removeEntry(self, tag: str) -> bool:
"""Remove a tag from the list.""" """Remove a tag from the list."""
if tag in self._tagMap: if tag in self._treeMap:
self.takeTopLevelItem(self.indexOfTopLevelItem(self._tagMap[tag])) self.takeTopLevelItem(self.indexOfTopLevelItem(self._treeMap[tag]))
self._tagMap.pop(tag, None) self._treeMap.pop(tag, None)
return True return True
return False return False
@@ -403,12 +388,12 @@ class _ViewPanelKeyWords(QTreeWidget):
@pyqtSlot("QModelIndex") @pyqtSlot("QModelIndex")
def _treeItemClicked(self, index: QModelIndex) -> None: def _treeItemClicked(self, index: QModelIndex) -> None:
"""The user clicked on an item in the tree.""" """Emit follow tag signal on user click."""
tag = index.siblingAtColumn(self.C_DATA).data(self.D_TAG) tag = index.siblingAtColumn(self.C_DATA).data(self.D_TAG)
if index.column() == self.C_EDIT: if index.column() == self.C_EDIT:
self.docViewerPanel.loadDocumentTagRequest.emit(tag, nwDocMode.EDIT) self._parent.loadDocumentTagRequest.emit(tag, nwDocMode.EDIT)
elif index.column() == self.C_VIEW: elif index.column() == self.C_VIEW:
self.docViewerPanel.loadDocumentTagRequest.emit(tag, nwDocMode.VIEW) self._parent.loadDocumentTagRequest.emit(tag, nwDocMode.VIEW)
return return
# END Class _ViewPanelRefs # END Class _ViewPanelRefs