WebBrowser/WebBrowserView.py

changeset 5785
7c7c5f9e4fad
parent 5784
362bbcc49ac1
child 5793
4ff73b969ab1
--- a/WebBrowser/WebBrowserView.py	Tue Jul 04 19:44:30 2017 +0200
+++ b/WebBrowser/WebBrowserView.py	Wed Jul 05 19:38:06 2017 +0200
@@ -1904,17 +1904,38 @@
     
     def storeSessionData(self, data):
         """
+        Public method to store session data to be restored later on.
         
+        @param data dictionary with session data to be restored
+        @type dict
         """
         self.__restoreData = data
     
+    def __showEventSlot(self):
+        """
+        Private slot to perform actions when the view is shown and the event
+        loop is running.
+        """
+        if self.__restoreData:
+            self.loadFromSessionData(self.__restoreData)
+            self.__restoreData = None
+    
     def showEvent(self, evt):
         """
+        Protected method to handle show events.
         
+        @param evt reference to the show event object
+        @type QShowEvent
+        """
+        super(WebBrowserView, self).showEvent(evt)
+        self.activateSession()
+    
+    def activateSession(self):
+        """
+        Private slot to activate a restored session.
         """
         if self.__restoreData:
-            self.loadFromSessionData(self.__restoreData)
-        self.__restoreData = None
+            QTimer.singleShot(0, self.__showEventSlot)
     
     def getSessionData(self):
         """
@@ -1927,15 +1948,14 @@
             # page has not been shown yet
             return self.__restoreData
         
-        
         sessionData = {}
-##        page = self.page()
+        page = self.page()
         
         # 1. zoom factor
-        sessionData["ZoomFactor"] = self.__page.zoomFactor()
+        sessionData["ZoomFactor"] = page.zoomFactor()
         
         # 2. scroll position
-        scrollPos = self.__page.scrollPosition()
+        scrollPos = page.scrollPosition()
         sessionData["ScrollPosition"] = {
             "x": scrollPos.x(),
             "y": scrollPos.y(),
@@ -1944,11 +1964,11 @@
         # 3. page history
         historyArray = QByteArray()
         stream = QDataStream(historyArray, QIODevice.WriteOnly)
-        stream << self.__page.history()
+        stream << page.history()
         sessionData["History"] = str(
             historyArray.toBase64(QByteArray.Base64UrlEncoding),
             encoding="ascii")
-        sessionData["HistoryIndex"] = self.__page.history().currentItemIndex()
+        sessionData["HistoryIndex"] = page.history().currentItemIndex()
         
         # 4. current URL and title
         sessionData["Url"] = self.url().toString()
@@ -1957,7 +1977,7 @@
         # 5. web icon
         iconArray = QByteArray()
         stream = QDataStream(iconArray, QIODevice.WriteOnly)
-        stream << self.__page.icon()
+        stream << page.icon()
         sessionData["Icon"] = str(iconArray.toBase64(), encoding="ascii")
         
         return sessionData
@@ -1970,7 +1990,9 @@
             generated by getSessionData()
         @type dict
         """
-##        page = self.page()
+        page = self.page()
+        # blank the page
+        page.setUrl(QUrl("about:blank"))
         
         # 1. page history
         if "History" in sessionData:
@@ -1978,18 +2000,52 @@
                 sessionData["History"].encode("ascii"),
                 QByteArray.Base64UrlEncoding)
             stream = QDataStream(historyArray, QIODevice.ReadOnly)
-            stream >> self.__page.history()
+            stream >> page.history()
             
             if "HistoryIndex" in sessionData:
-                item = self.__page.history().itemAt(sessionData["HistoryIndex"])
+                item = page.history().itemAt(sessionData["HistoryIndex"])
                 if item is not None:
-                    self.__page.history().goToItem(item)
+                    page.history().goToItem(item)
         
         # 2. zoom factor
         if "ZoomFactor" in sessionData:
-            self.__page.setZoomFactor(sessionData["ZoomFactor"])
+            page.setZoomFactor(sessionData["ZoomFactor"])
         
         # 3. scroll position
         if "ScrollPosition" in sessionData:
             scrollPos = sessionData["ScrollPosition"]
-            self.__page.scrollTo(QPointF(scrollPos["x"], scrollPos["y"]))
+            page.scrollTo(QPointF(scrollPos["x"], scrollPos["y"]))
+    
+    def extractSessionMetaData(self, sessionData):
+        """
+        Public method to extract some session meta data elements needed by the
+        tab widget in case of deferred loading.
+        
+        @param sessionData dictionary containing the session data as
+            generated by getSessionData()
+        @type dict
+        @return tuple containing the title, URL and web icon
+        @rtype tuple of (str, str, QIcon)
+        """
+        if "Title" in sessionData:
+            title = sessionData["Title"]
+        else:
+            title = ""
+        
+        if "Url" in sessionData:
+            urlStr = sessionData["Url"]
+        else:
+            urlStr = ""
+        
+        if "Icon" in sessionData:
+            iconArray = QByteArray.fromBase64(
+                sessionData["Icon"].encode("ascii"))
+            stream = QDataStream(iconArray, QIODevice.ReadOnly)
+            icon = QIcon()
+            stream >> icon
+        else:
+            from .Tools import WebIconProvider
+            icon = WebIconProvider.instance().iconForUrl(
+                QUrl.fromUserInput(urlStr))
+        
+        return title, urlStr, icon

eric ide

mercurial