Continued porting the web browser. QtWebEngine

Thu, 18 Feb 2016 20:19:33 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 18 Feb 2016 20:19:33 +0100
branch
QtWebEngine
changeset 4745
285bfd224a1b
parent 4744
ad3f6c1caf8d
child 4749
750577d35452

Continued porting the web browser.

- continued the passwords stuff

WebBrowser/Bookmarks/BookmarksManager.py file | annotate | diff | comparison | revisions
WebBrowser/JavaScript/ExternalJsObject.py file | annotate | diff | comparison | revisions
WebBrowser/Network/NetworkManager.py file | annotate | diff | comparison | revisions
WebBrowser/OpenSearch/OpenSearchManager.py file | annotate | diff | comparison | revisions
WebBrowser/Passwords/PasswordReader.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserPage.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserTabWidget.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserWindow.py file | annotate | diff | comparison | revisions
--- a/WebBrowser/Bookmarks/BookmarksManager.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/Bookmarks/BookmarksManager.py	Thu Feb 18 20:19:33 2016 +0100
@@ -186,8 +186,6 @@
         
         for node in others:
             self.__menu.add(node)
-        
-        self.__convertFromOldBookmarks()
     
     def save(self):
         """
@@ -396,32 +394,6 @@
                 self.tr("""Error exporting bookmarks to <b>{0}</b>.""")
                 .format(fileName))
     
-    # TODO: Bookmarks: remove this obsolete method
-    def __convertFromOldBookmarks(self):
-        """
-        Private method to convert the old bookmarks into the new ones.
-        """
-        bmNames = Preferences.Prefs.settings.value('Bookmarks/Names')
-        bmFiles = Preferences.Prefs.settings.value('Bookmarks/Files')
-        
-        if bmNames is not None and bmFiles is not None:
-            if len(bmNames) == len(bmFiles):
-                convertedRootNode = BookmarkNode(BookmarkNode.Folder)
-                convertedRootNode.title = self.tr("Converted {0}")\
-                    .format(QDate.currentDate().toString(
-                        Qt.SystemLocaleShortDate))
-                for i in range(len(bmNames)):
-                    node = BookmarkNode(BookmarkNode.Bookmark,
-                                        convertedRootNode)
-                    node.title = bmNames[i]
-                    url = QUrl(bmFiles[i])
-                    if not url.scheme():
-                        url.setScheme("file")
-                    node.url = url.toString()
-                self.addBookmark(self.menu(), convertedRootNode)
-                
-                Preferences.Prefs.settings.remove('Bookmarks')
-    
     def iconChanged(self, url):
         """
         Public slot to update the icon image for an URL.
--- a/WebBrowser/JavaScript/ExternalJsObject.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/JavaScript/ExternalJsObject.py	Thu Feb 18 20:19:33 2016 +0100
@@ -15,10 +15,12 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import QObject
+from PyQt5.QtCore import pyqtSlot, QObject, QUrl
 
 from .AutoFillJsObject import AutoFillJsObject
 
+import WebBrowser.WebBrowserWindow
+
 
 class ExternalJsObject(QObject):
     """
@@ -45,6 +47,7 @@
         """
         return self.__page
     
+    @pyqtSlot(result=QObject)
     def speedDial(self):
         """
         Public method returning a reference to a speed dial object.
@@ -59,6 +62,7 @@
 ##        return WebBrowser.WebBrowserWindow.WebBrowserWindow.speedDial()
         return None
     
+    @pyqtSlot(result=QObject)
     def autoFill(self):
         """
         Public method returning a reference to the auto fill object.
@@ -68,11 +72,16 @@
         """
         return self.__autoFill
     
-    # TODO: OpenSearch
-##void ExternalJsObject::AddSearchProvider(const QString &engineUrl)
-##{ Slot
-##    mApp->searchEnginesManager()->addEngine(QUrl(engineUrl));
-##}
+    @pyqtSlot(str)
+    def AddSearchProvider(self, engineUrl):
+        """
+        Public slot to add a search provider.
+        
+        @param engineUrl engineUrl of the XML file defining the search provider
+        @type str
+        """
+        WebBrowser.WebBrowserWindow.WebBrowserWindow.openSearchManager()\
+        .addEngine(QUrl(engineUrl))
 ##
 ##int ExternalJsObject::IsSearchProviderInstalled(const QString &engineURL)
 ##{ Slot
--- a/WebBrowser/Network/NetworkManager.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/Network/NetworkManager.py	Thu Feb 18 20:19:33 2016 +0100
@@ -95,27 +95,24 @@
                 .format(urlRoot)
         
         from UI.AuthenticationDialog import AuthenticationDialog
-        # TODO: Password Manager
-##        import WebBrowser.WebBrowserWindow
+        import WebBrowser.WebBrowserWindow
         
         dlg = AuthenticationDialog(info, auth.user(),
                                    Preferences.getUser("SavePasswords"),
                                    Preferences.getUser("SavePasswords"))
-        # TODO: Password Manager
-##        if Preferences.getUser("SavePasswords"):
-##            username, password = \
-##                WebBrowser.WebBrowserWindow.WebBrowserWindow.passwordManager()\
-##                .getLogin(url, realm)
-##            if username:
-##                dlg.setData(username, password)
+        if Preferences.getUser("SavePasswords"):
+            username, password = \
+                WebBrowser.WebBrowserWindow.WebBrowserWindow.passwordManager()\
+                .getLogin(url, realm)
+            if username:
+                dlg.setData(username, password)
         if dlg.exec_() == QDialog.Accepted:
             username, password = dlg.getData()
             auth.setUser(username)
             auth.setPassword(password)
-            # TODO: Password Manager
-##            if Preferences.getUser("SavePasswords"):
-##                WebBrowser.WebBrowserWindow.WebBrowserWindow.passwordManager()\
-##                .setLogin(url, realm, username, password)
+            if Preferences.getUser("SavePasswords"):
+                WebBrowser.WebBrowserWindow.WebBrowserWindow.passwordManager()\
+                .setLogin(url, realm, username, password)
     
     def proxyAuthentication(self, hostname, auth):
         """
--- a/WebBrowser/OpenSearch/OpenSearchManager.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/OpenSearch/OpenSearchManager.py	Thu Feb 18 20:19:33 2016 +0100
@@ -226,7 +226,6 @@
         
         return True
     
-    # TODO: Open Search: implement this right
     def addEngineFromForm(self, res, view):
         """
         Private method to add a new search engine from a form.
--- a/WebBrowser/Passwords/PasswordReader.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/Passwords/PasswordReader.py	Thu Feb 18 20:19:33 2016 +0100
@@ -112,7 +112,6 @@
         if not self.isStartElement() and self.name() != "Forms":
             return
         
-        # TODO: Passwords: adjust reader to new login form
         while not self.atEnd():
             self.readNext()
             if self.isStartElement():
--- a/WebBrowser/WebBrowserPage.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/WebBrowserPage.py	Thu Feb 18 20:19:33 2016 +0100
@@ -50,47 +50,6 @@
 ###############################################################################
 ##
 ##
-##class JavaScriptExternalObject(QObject):
-##    """
-##    Class implementing an external javascript object to add search providers.
-##    """
-##    def __init__(self, mw, parent=None):
-##        """
-##        Constructor
-##        
-##        @param mw reference to the main window 8HelpWindow)
-##        @param parent reference to the parent object (QObject)
-##        """
-##        super(JavaScriptExternalObject, self).__init__(parent)
-##        
-##        self.__mw = mw
-##    
-##    @pyqtSlot(str)
-##    def AddSearchProvider(self, url):
-##        """
-##        Public slot to add a search provider.
-##        
-##        @param url url of the XML file defining the search provider (string)
-##        """
-##        self.__mw.openSearchManager().addEngine(QUrl(url))
-##
-##
-##class LinkedResource(object):
-##    """
-##    Class defining a data structure for linked resources.
-##    """
-##    def __init__(self):
-##        """
-##        Constructor
-##        """
-##        self.rel = ""
-##        self.type_ = ""
-##        self.href = ""
-##        self.title = ""
-##
-###############################################################################
-##
-##
 ##class JavaScriptEricObject(QObject):
 ##    """
 ##    Class implementing an external javascript object to search via the
@@ -173,7 +132,7 @@
         """
         super(WebBrowserPage, self).__init__(parent)
         
-        self.setupWebChannel()
+        self.__setupWebChannel()
         
 ##        self.setPluginFactory(self.webPluginFactory())
 ##        
@@ -764,13 +723,14 @@
         """
         return WebHitTestResult(self, pos)
     
-    def setupWebChannel(self):
+    def __setupWebChannel(self):
         """
-        Public method to setup a web channel to our external object.
+        Private method to setup a web channel to our external object.
         """
+        self.__externalJsObject = ExternalJsObject(self)
         oldChannel = self.webChannel()
         newChannel = QWebChannel(self)
-        newChannel.registerObject("eric_object", ExternalJsObject(self))
+        newChannel.registerObject("eric_object", self.__externalJsObject)
         self.setWebChannel(newChannel)
         
         if oldChannel:
@@ -788,3 +748,10 @@
         """
         return WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager()\
             .certificateError(error, self.view())
+    
+    ##############################################
+    ## Methods below deal with JavaScript messages
+    ##############################################
+    
+    def javaScriptConsoleMessage(self, level, message, lineNumber,  sourceId):
+        print("JS-console:", message, lineNumber, sourceId)
--- a/WebBrowser/WebBrowserTabWidget.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/WebBrowserTabWidget.py	Thu Feb 18 20:19:33 2016 +0100
@@ -445,18 +445,24 @@
         """
         self.closeBrowserAt(self.currentIndex())
     
-    def closeAllBrowsers(self):
+    def closeAllBrowsers(self, shutdown=False):
         """
         Public slot called to handle the close all action.
+        
+        @param shutdown flag indicating a shutdown action
+        @type bool
         """
         for index in range(self.count() - 1, -1, -1):
-            self.closeBrowserAt(index)
+            self.closeBrowserAt(index, shutdown=shutdown)
     
-    def closeBrowserAt(self, index):
+    def closeBrowserAt(self, index, shutdown=False):
         """
         Public slot to close a browser based on its index.
         
-        @param index index of browser to close (integer)
+        @param index index of browser to close
+        @type int
+        @param shutdown flag indicating a shutdown action
+        @type bool
         """
         browser = self.widget(index)
         if browser is None:
@@ -487,7 +493,7 @@
         browser.deleteLater()
         del browser
         
-        if self.count() == 0:
+        if self.count() == 0 and not shutdown:
             self.newBrowser()
         else:
             self.currentChanged[int].emit(self.currentIndex())
--- a/WebBrowser/WebBrowserView.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/WebBrowserView.py	Thu Feb 18 20:19:33 2016 +0100
@@ -1045,7 +1045,6 @@
 ##        url = act.data()
 ##        self.__mw.downloadManager().download(url, True, mainWindow=self.__mw)
     
-    # TODO: this needs to be changed
     def __pauseMedia(self):
         """
         Private slot to pause or play the selected media.
@@ -1071,22 +1070,21 @@
 ##        url = act.data()
 ##        self.__mw.requestVirusTotalScan(url)
     
-    # TODO OpenSearch
-##    def __searchRequested(self, act):
-##        """
-##        Private slot to search for some text with a selected search engine.
-##        
-##        @param act reference to the action that triggered this slot (QAction)
-##        """
-##        searchText = self.selectedText()
-##        
-##        if not searchText:
-##            return
-##        
-##        engineName = act.data()
-##        if engineName:
-##            engine = self.__mw.openSearchManager().engine(engineName)
-##            self.search.emit(engine.searchUrl(searchText))
+    def __searchRequested(self, act):
+        """
+        Private slot to search for some text with a selected search engine.
+        
+        @param act reference to the action that triggered this slot (QAction)
+        """
+        searchText = self.selectedText()
+        
+        if not searchText:
+            return
+        
+        engineName = act.data()
+        if engineName:
+            engine = self.__mw.openSearchManager().engine(engineName)
+            self.search.emit(engine.searchUrl(searchText))
     
     def __addSearchEngine(self):
         """
--- a/WebBrowser/WebBrowserWindow.py	Wed Feb 17 19:49:51 2016 +0100
+++ b/WebBrowser/WebBrowserWindow.py	Thu Feb 18 20:19:33 2016 +0100
@@ -53,8 +53,8 @@
 ##
 ##from .data import icons_rc          # __IGNORE_WARNING__
 ##from .data import html_rc           # __IGNORE_WARNING__
-##from .data import javascript_rc     # __IGNORE_WARNING__
-##
+from .data import javascript_rc     # __IGNORE_WARNING__
+
 
 from .Tools import Scripts, WebBrowserTools, WebIconProvider
 
@@ -2513,7 +2513,7 @@
 ##        
         self.searchEdit.saveSearches()
         
-        self.__tabWidget.closeAllBrowsers()
+        self.__tabWidget.closeAllBrowsers(shutdown=True)
         
         state = self.saveState()
         Preferences.setWebBrowser("WebBrowserState", state)

eric ide

mercurial