src/eric7/WebBrowser/ClosedTabsManager.py

Sat, 31 Dec 2022 16:23:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Dec 2022 16:23:21 +0100
branch
eric7
changeset 9653
e67609152c5e
parent 9500
5771348ded12
child 10436
f6881d10e995
permissions
-rw-r--r--

Updated copyright for 2023.

# -*- coding: utf-8 -*-

# Copyright (c) 2012 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a class to manage closed tabs.
"""

from dataclasses import dataclass, field

from PyQt6.QtCore import QObject, QUrl, pyqtSignal


@dataclass
class ClosedTab:
    """
    Class implementing a structure to store data about a closed tab.
    """

    url: QUrl = field(default_factory=QUrl)
    title: str = ""
    position: int = -1


class ClosedTabsManager(QObject):
    """
    Class implementing a manager for closed tabs.

    @signal closedTabAvailable(boolean) emitted to signal a change of
        availability of closed tabs
    """

    closedTabAvailable = pyqtSignal(bool)

    def __init__(self, parent=None):
        """
        Constructor

        @param parent reference to the parent object (QObject)
        """
        super().__init__()

        self.__closedTabs = []

    def recordBrowser(self, browser, position):
        """
        Public method to record the data of a browser about to be closed.

        @param browser reference to the browser to be closed (HelpBrowser)
        @param position index of the tab to be closed (integer)
        """
        from eric7.WebBrowser.WebBrowserWindow import WebBrowserWindow

        if WebBrowserWindow.isPrivate():
            return

        if browser.url().isEmpty():
            return

        tab = ClosedTab(browser.url(), browser.title(), position)
        self.__closedTabs.insert(0, tab)
        self.closedTabAvailable.emit(True)

    def getClosedTabAt(self, index):
        """
        Public method to get the indexed closed tab.

        @param index index of the tab to return (integer)
        @return requested tab (ClosedTab)
        """
        tab = (
            self.__closedTabs.pop(index)
            if (len(self.__closedTabs) > 0 and len(self.__closedTabs) > index)
            else ClosedTab()
        )
        self.closedTabAvailable.emit(len(self.__closedTabs) > 0)
        return tab

    def isClosedTabAvailable(self):
        """
        Public method to check for closed tabs.

        @return flag indicating the availability of closed tab data (boolean)
        """
        return len(self.__closedTabs) > 0

    def clearList(self):
        """
        Public method to clear the list of closed tabs.
        """
        self.__closedTabs = []
        self.closedTabAvailable.emit(False)

    def allClosedTabs(self):
        """
        Public method to get a list of all closed tabs.

        @return list of closed tabs (list of ClosedTab)
        """
        return self.__closedTabs

eric ide

mercurial