1# -*- coding: utf-8 -*- 2 3# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> 4# 5 6""" 7Module implementing a class to manage closed tabs. 8""" 9 10from PyQt5.QtCore import pyqtSignal, QUrl, QObject 11 12 13class ClosedTab: 14 """ 15 Class implementing a structure to store data about a closed tab. 16 """ 17 def __init__(self, url=None, title="", position=-1): 18 """ 19 Constructor 20 21 @param url URL of the closed tab (QUrl) 22 @param title title of the closed tab (string) 23 @param position index of the closed tab (integer) 24 """ 25 self.url = QUrl() if url is None else QUrl(url) 26 self.title = title 27 self.position = position 28 29 def __eq__(self, other): 30 """ 31 Special method implementing the equality operator. 32 33 @param other reference to the object to compare against (ClosedTab) 34 @return flag indicating equality of the tabs (boolean) 35 """ 36 return ( 37 self.url == other.url and 38 self.title == other.title and 39 self.position == other.position 40 ) 41 42 43class ClosedTabsManager(QObject): 44 """ 45 Class implementing a manager for closed tabs. 46 47 @signal closedTabAvailable(boolean) emitted to signal a change of 48 availability of closed tabs 49 """ 50 closedTabAvailable = pyqtSignal(bool) 51 52 def __init__(self, parent=None): 53 """ 54 Constructor 55 56 @param parent reference to the parent object (QObject) 57 """ 58 super().__init__() 59 60 self.__closedTabs = [] 61 62 def recordBrowser(self, browser, position): 63 """ 64 Public method to record the data of a browser about to be closed. 65 66 @param browser reference to the browser to be closed (HelpBrowser) 67 @param position index of the tab to be closed (integer) 68 """ 69 import WebBrowser.WebBrowserWindow 70 if WebBrowser.WebBrowserWindow.WebBrowserWindow.isPrivate(): 71 return 72 73 if browser.url().isEmpty(): 74 return 75 76 tab = ClosedTab(browser.url(), browser.title(), position) 77 self.__closedTabs.insert(0, tab) 78 self.closedTabAvailable.emit(True) 79 80 def getClosedTabAt(self, index): 81 """ 82 Public method to get the indexed closed tab. 83 84 @param index index of the tab to return (integer) 85 @return requested tab (ClosedTab) 86 """ 87 tab = ( 88 self.__closedTabs.pop(index) 89 if (len(self.__closedTabs) > 0 and 90 len(self.__closedTabs) > index) else 91 ClosedTab() 92 ) 93 self.closedTabAvailable.emit(len(self.__closedTabs) > 0) 94 return tab 95 96 def isClosedTabAvailable(self): 97 """ 98 Public method to check for closed tabs. 99 100 @return flag indicating the availability of closed tab data (boolean) 101 """ 102 return len(self.__closedTabs) > 0 103 104 def clearList(self): 105 """ 106 Public method to clear the list of closed tabs. 107 """ 108 self.__closedTabs = [] 109 self.closedTabAvailable.emit(False) 110 111 def allClosedTabs(self): 112 """ 113 Public method to get a list of all closed tabs. 114 115 @return list of closed tabs (list of ClosedTab) 116 """ 117 return self.__closedTabs 118