15 pass |
15 pass |
16 |
16 |
17 import os |
17 import os |
18 |
18 |
19 from PyQt5.QtCore import pyqtSignal, QUrl, QFileInfo, Qt, QTimer, QEvent, \ |
19 from PyQt5.QtCore import pyqtSignal, QUrl, QFileInfo, Qt, QTimer, QEvent, \ |
20 QPoint, QDateTime, QStandardPaths |
20 QPoint, QPointF, QDateTime, QStandardPaths, QByteArray, QIODevice, \ |
|
21 QDataStream |
21 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \ |
22 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \ |
22 QContextMenuEvent, QPixmap |
23 QContextMenuEvent, QPixmap |
23 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication |
24 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication |
24 from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, \ |
25 from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, \ |
25 QWebEngineDownloadItem |
26 QWebEngineDownloadItem |
120 |
121 |
121 self.__mw.personalInformationManager().connectPage(self.page()) |
122 self.__mw.personalInformationManager().connectPage(self.page()) |
122 |
123 |
123 self.__inspector = None |
124 self.__inspector = None |
124 WebInspector.registerView(self) |
125 WebInspector.registerView(self) |
|
126 |
|
127 self.__restoreData = None |
125 |
128 |
126 if qVersionTuple() >= (5, 8, 0): |
129 if qVersionTuple() >= (5, 8, 0): |
127 if self.parentWidget() is not None: |
130 if self.parentWidget() is not None: |
128 self.parentWidget().installEventFilter(self) |
131 self.parentWidget().installEventFilter(self) |
129 |
132 |
1892 def __resetSpeedDials(self): |
1895 def __resetSpeedDials(self): |
1893 """ |
1896 """ |
1894 Private slot to reset all speed dials to the default pages. |
1897 Private slot to reset all speed dials to the default pages. |
1895 """ |
1898 """ |
1896 self.__speedDial.resetDials() |
1899 self.__speedDial.resetDials() |
|
1900 |
|
1901 ########################################################################### |
|
1902 ## Methods below implement session related functions |
|
1903 ########################################################################### |
|
1904 |
|
1905 def storeSessionData(self, data): |
|
1906 """ |
|
1907 |
|
1908 """ |
|
1909 self.__restoreData = data |
|
1910 |
|
1911 def showEvent(self, evt): |
|
1912 """ |
|
1913 |
|
1914 """ |
|
1915 if self.__restoreData: |
|
1916 self.loadFromSessionData(self.__restoreData) |
|
1917 self.__restoreData = None |
|
1918 |
|
1919 def getSessionData(self): |
|
1920 """ |
|
1921 Public method to populate the session data. |
|
1922 |
|
1923 @return dictionary containing the session data |
|
1924 @rtype dict |
|
1925 """ |
|
1926 if self.__restoreData: |
|
1927 # page has not been shown yet |
|
1928 return self.__restoreData |
|
1929 |
|
1930 |
|
1931 sessionData = {} |
|
1932 ## page = self.page() |
|
1933 |
|
1934 # 1. zoom factor |
|
1935 sessionData["ZoomFactor"] = self.__page.zoomFactor() |
|
1936 |
|
1937 # 2. scroll position |
|
1938 scrollPos = self.__page.scrollPosition() |
|
1939 sessionData["ScrollPosition"] = { |
|
1940 "x": scrollPos.x(), |
|
1941 "y": scrollPos.y(), |
|
1942 } |
|
1943 |
|
1944 # 3. page history |
|
1945 historyArray = QByteArray() |
|
1946 stream = QDataStream(historyArray, QIODevice.WriteOnly) |
|
1947 stream << self.__page.history() |
|
1948 sessionData["History"] = str( |
|
1949 historyArray.toBase64(QByteArray.Base64UrlEncoding), |
|
1950 encoding="ascii") |
|
1951 sessionData["HistoryIndex"] = self.__page.history().currentItemIndex() |
|
1952 |
|
1953 # 4. current URL and title |
|
1954 sessionData["Url"] = self.url().toString() |
|
1955 sessionData["Title"] = self.title() |
|
1956 |
|
1957 # 5. web icon |
|
1958 iconArray = QByteArray() |
|
1959 stream = QDataStream(iconArray, QIODevice.WriteOnly) |
|
1960 stream << self.__page.icon() |
|
1961 sessionData["Icon"] = str(iconArray.toBase64(), encoding="ascii") |
|
1962 |
|
1963 return sessionData |
|
1964 |
|
1965 def loadFromSessionData(self, sessionData): |
|
1966 """ |
|
1967 Public method to load the session data. |
|
1968 |
|
1969 @param sessionData dictionary containing the session data as |
|
1970 generated by getSessionData() |
|
1971 @type dict |
|
1972 """ |
|
1973 ## page = self.page() |
|
1974 |
|
1975 # 1. page history |
|
1976 if "History" in sessionData: |
|
1977 historyArray = QByteArray.fromBase64( |
|
1978 sessionData["History"].encode("ascii"), |
|
1979 QByteArray.Base64UrlEncoding) |
|
1980 stream = QDataStream(historyArray, QIODevice.ReadOnly) |
|
1981 stream >> self.__page.history() |
|
1982 |
|
1983 if "HistoryIndex" in sessionData: |
|
1984 item = self.__page.history().itemAt(sessionData["HistoryIndex"]) |
|
1985 if item is not None: |
|
1986 self.__page.history().goToItem(item) |
|
1987 |
|
1988 # 2. zoom factor |
|
1989 if "ZoomFactor" in sessionData: |
|
1990 self.__page.setZoomFactor(sessionData["ZoomFactor"]) |
|
1991 |
|
1992 # 3. scroll position |
|
1993 if "ScrollPosition" in sessionData: |
|
1994 scrollPos = sessionData["ScrollPosition"] |
|
1995 self.__page.scrollTo(QPointF(scrollPos["x"], scrollPos["y"])) |