Mon, 11 Oct 2021 19:59:45 +0200
Continued implementing the embedded help viewer widget.
# -*- coding: utf-8 -*- # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing a widget showing the list of open pages. """ from PyQt6.QtCore import pyqtSlot, pyqtSignal from PyQt6.QtWidgets import ( QWidget, QLabel, QListWidget, QListWidgetItem, QVBoxLayout, QAbstractItemView ) class OpenPagesWidget(QWidget): """ Class implementing a widget showing the list of open pages. """ currentChanged = pyqtSignal(int) def __init__(self, stack, parent=None): """ Constructor @param stack reference to the stack widget containing the open help pages @type QStackedWidget @param parent reference to the parent widget (defaults to None) @type QWidget (optional) """ super().__init__(parent) self.setObjectName("OpenPagesWidget") self.__layout = QVBoxLayout() self.__layout.setContentsMargins(0, 0, 0, 0) self.__title = QLabel(self.tr("Open Pages"), self) self.__layout.addWidget(self.__title) self.__openPagesList = QListWidget(self) self.__openPagesList.setAlternatingRowColors(True) self.__openPagesList.setSelectionMode( QAbstractItemView.SelectionMode.ExtendedSelection) self.__openPagesList.currentRowChanged.connect( self.__currentRowChanged) self.__layout.addWidget(self.__openPagesList) self.setLayout(self.__layout) self.__stack = stack self.__stack.currentChanged.connect(self.__currentPageChanged) self.__defaultFont = self.__openPagesList.font() self.__boldFont = self.__openPagesList.font() self.__boldFont.setBold(True) @pyqtSlot(int) def __currentPageChanged(self, index): """ Private slot to handle a change of the shown page. @param index index of the current page @type int """ for row in range(self.__openPagesList.count()): itm = self.__openPagesList.item(index) itm.setFont( self.__boldFont if row == index else self.__defaultFont ) @pyqtSlot(int) def __currentRowChanged(self, row): """ Private slot handling a change of the current row. @param row current row @type int """ self.__stack.setCurrentIndex(row) self.currentChanged.emit(row) def addPage(self, viewer): """ Public method to add a viewer page to our list. @param viewer reference to the viewer object @type HelpViewerImpl """ QListWidgetItem(viewer.title(), self.__openPagesList) viewer.titleChanged.connect( lambda: self.__viewerTitleChanged(viewer)) self.__currentPageChanged(self.__openPagesList.count() - 1) def __viewerTitleChanged(self, viewer): """ Private method to handle the change of a viewer title. @param viewer reference to the viewer that change title @type HelpViewerImpl """ index = self.__stack.indexOf(viewer) itm = self.__openPagesList.item(index) itm.setText(viewer.title()) self.currentChanged.emit(index)