eric7/HelpViewer/OpenPagesWidget.py

Mon, 11 Oct 2021 19:59:45 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 11 Oct 2021 19:59:45 +0200
branch
eric7
changeset 8680
85503ff2fce9
parent 8679
fd172973428e
child 8683
e8a907801549
permissions
-rw-r--r--

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)

eric ide

mercurial