Continued getting the basic web browser functions going. QtWebEngine

Thu, 04 Feb 2016 19:39:54 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 04 Feb 2016 19:39:54 +0100
branch
QtWebEngine
changeset 4715
79009bc4acd5
parent 4713
8dca047daf4b
child 4717
5841f229baf7

Continued getting the basic web browser functions going.

Preferences/__init__.py file | annotate | diff | comparison | revisions
WebBrowser/SearchWidget.py file | annotate | diff | comparison | revisions
WebBrowser/UrlBar/UrlBar.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserPage.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserTabBar.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/Preferences/__init__.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/Preferences/__init__.py	Thu Feb 04 19:39:54 2016 +0100
@@ -1008,8 +1008,10 @@
         "SingleWebBrowserWindow": True,
         "SaveGeometry": True,
         "WebBrowserState": QByteArray(),
-        "StartupBehavior": 1,      # show speed dial
-        "HomePage": "eric:home",
+##        "StartupBehavior": 1,      # show speed dial
+##        "HomePage": "eric:home",
+        "StartupBehavior": 0,      # show home page
+        "HomePage": "http://eric-ide.python-projects.org",     # TODO: eric: scheme
         "WarnOnMultipleClose": True,
         "DefaultScheme": "https://",
     }
--- a/WebBrowser/SearchWidget.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/SearchWidget.py	Thu Feb 04 19:39:54 2016 +0100
@@ -12,7 +12,6 @@
 from PyQt5.QtCore import pyqtSlot, Qt
 from PyQt5.QtGui import QPalette, QBrush, QColor
 from PyQt5.QtWidgets import QWidget
-##from PyQt5.QtWebKitWidgets import QWebPage
 
 from .Ui_SearchWidget import Ui_SearchWidget
 
@@ -88,13 +87,22 @@
             return
         
         # TODO: adjust this to the browser API
-        # TODO: use the callback interface of QWebEnginePage
-        if not self.__mainWindow.currentBrowser().findNextPrev(
-                self.findtextCombo.currentText(),
-                self.caseCheckBox.isChecked(),
-                self.__findBackwards,
-                self.wrapCheckBox.isChecked(),
-                False):
+        self.__mainWindow.currentBrowser().findNextPrev(
+            self.findtextCombo.currentText(),
+            self.caseCheckBox.isChecked(),
+            self.__findBackwards,
+            self.wrapCheckBox.isChecked(),
+            False,
+            self.__findNextPrevCallback)
+    
+    def __findNextPrevCallback(self, found):
+        """
+        Private method to process the result of the last search.
+        
+        @param found flag indicating if the last search succeeded
+        @type bool
+        """
+        if not found:
             self.infoLabel.setText(self.tr("Expression was not found."))
             self.__setFindtextComboBackground(True)
 ##    
--- a/WebBrowser/UrlBar/UrlBar.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/UrlBar/UrlBar.py	Thu Feb 04 19:39:54 2016 +0100
@@ -55,29 +55,34 @@
 ##        self.__privateMode = QWebSettings.globalSettings().testAttribute(
 ##            QWebSettings.PrivateBrowsingEnabled)
         
-        # TODO: re-enable once bookmarks are done
+        # TODO: Bookmarks
 ##        self.__bmActiveIcon = UI.PixmapCache.getIcon("bookmark16.png")
 ##        self.__bmInactiveIcon = QIcon(
 ##            self.__bmActiveIcon.pixmap(16, 16, QIcon.Disabled))
         
+        # TODO: FavIcon
 ##        self.__favicon = FavIconLabel(self)
 ##        self.addWidget(self.__favicon, E5LineEdit.LeftSide)
-##        
+        
+        # TODO: SSL
 ##        self.__sslLabel = SslLabel(self)
 ##        self.addWidget(self.__sslLabel, E5LineEdit.LeftSide)
 ##        self.__sslLabel.setVisible(False)
-##        
+        
+        # TODO: Privacy
 ##        self.__privacyButton = E5LineEditButton(self)
 ##        self.__privacyButton.setIcon(
 ##            UI.PixmapCache.getIcon("privateBrowsing.png"))
 ##        self.addWidget(self.__privacyButton, E5LineEdit.RightSide)
 ##        self.__privacyButton.setVisible(self.__privateMode)
-##        
+        
+        # TODO: RSS
 ##        self.__rssButton = E5LineEditButton(self)
 ##        self.__rssButton.setIcon(UI.PixmapCache.getIcon("rss16.png"))
 ##        self.addWidget(self.__rssButton, E5LineEdit.RightSide)
 ##        self.__rssButton.setVisible(False)
         
+        # TODO: Bookmarks
 ##        self.__bookmarkButton = E5LineEditButton(self)
 ##        self.addWidget(self.__bookmarkButton, E5LineEdit.RightSide)
 ##        self.__bookmarkButton.setVisible(False)
@@ -87,19 +92,24 @@
         self.addWidget(self.__clearButton, E5LineEdit.RightSide)
         self.__clearButton.setVisible(False)
         
+        # TODO: Bookmarks
 ##        self.__bookmarkButton.clicked.connect(self.__showBookmarkInfo)
+        # TODO: RSS
+##        self.__rssButton.clicked.connect(self.__rssClicked)
+        # TODO: Privacy
 ##        self.__privacyButton.clicked.connect(self.__privacyClicked)
-##        self.__rssButton.clicked.connect(self.__rssClicked)
         self.__clearButton.clicked.connect(self.clear)
 ##        self.__mw.privacyChanged.connect(self.__privacyButton.setVisible)
         self.textChanged.connect(self.__textChanged)
         
+        # TODO: Bookmarks
 ##        Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
 ##            .entryChanged.connect(self.__bookmarkChanged)
 ##        Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
 ##            .entryAdded.connect(self.__bookmarkChanged)
 ##        Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
 ##            .entryRemoved.connect(self.__bookmarkChanged)
+        # TODO: Speed Dial
 ##        Helpviewer.HelpWindow.HelpWindow.speedDial().pagesChanged.connect(
 ##            self.__bookmarkChanged)
     
@@ -110,13 +120,15 @@
         @param browser reference to the browser widget (WebBrowserView)
         """
         self.__browser = browser
+        # TODO: FavIcon
 ##        self.__favicon.setBrowser(browser)
         
         self.__browser.urlChanged.connect(self.__browserUrlChanged)
         self.__browser.loadProgress.connect(self.update)
         self.__browser.loadFinished.connect(self.__loadFinished)
         self.__browser.loadStarted.connect(self.__loadStarted)
-##        
+        
+        # TODO: SSL
 ##        self.__sslLabel.clicked.connect(self.__browser.page().showSslInfo)
     
     def browser(self):
@@ -147,9 +159,12 @@
         Private slot to perform actions before the page is loaded.
         """
         pass
+        # TODO: SSL
 ##        self.__sslLabel.setVisible(False)
+        # TODO: Bookmarks
 ##        self.__bookmarkButton.setVisible(False)
     
+    # TODO: Bookmarks
 ##    def __checkBookmark(self):
 ##        """
 ##        Private slot to check the current URL for the bookmarked state.
@@ -176,18 +191,18 @@
         """
         pass
 ##        try:
-        # TODO: re-enable once Bookmarks are done
+        # TODO: Bookmarks
 ##        if self.__browser.url().scheme() in ["eric", "about"]:
 ##            self.__bookmarkButton.setVisible(False)
 ##        else:
 ##            self.__checkBookmark()
 ##            self.__bookmarkButton.setVisible(True)
         
-        # TODO: re-enable once RSS is done
+        # TODO: RSS
 ##        if ok:
 ##            self.__rssButton.setVisible(self.__browser.checkRSS())
         
-        # TODO: do the SSL certificate stuff (if possible)
+        # TODO: SSL certificate stuff (if possible)
 ##        if ok and \
 ##           self.__browser.url().scheme() == "https" and \
 ##           QSslCertificate is not None:
@@ -217,6 +232,7 @@
 ##        except RuntimeError:
 ##            pass
     
+    # TODO: Privacy
 ##    def setPrivateMode(self, on):
 ##        """
 ##        Public method to set the private mode.
@@ -246,6 +262,7 @@
         """
         self.update()
     
+    # TODO: Bookmarks
 ##    def __showBookmarkInfo(self):
 ##        """
 ##        Private slot to show a dialog with some bookmark info.
@@ -283,6 +300,7 @@
         
         @param evt reference to the paint event (QPaintEvent)
         """
+        # TODO: Privacy
 ##        if self.__privateMode:
 ##            backgroundColor = QColor(220, 220, 220)     # light gray
 ##            foregroundColor = Qt.black
--- a/WebBrowser/WebBrowserPage.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/WebBrowserPage.py	Thu Feb 04 19:39:54 2016 +0100
@@ -457,7 +457,7 @@
 ##        """
 ##        return self.__adBlockedEntries
     
-    # TODO: re-enable once User Agent Manager is done
+    # TODO: User Agent Manager
 ##    def userAgent(self, resolveEmpty=False):
 ##        """
 ##        Public method to get the global user agent setting.
--- a/WebBrowser/WebBrowserTabBar.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/WebBrowserTabBar.py	Thu Feb 04 19:39:54 2016 +0100
@@ -37,12 +37,11 @@
         
         self.setMouseTracking(True)
     
-    def __showTabPreview(self):
-        """
-        Private slot to show the tab preview.
-        """
-        pass
-        # TODO: page preview
+    # TODO: page preview
+##    def __showTabPreview(self):
+##        """
+##        Private slot to show the tab preview.
+##        """
 ##        indexedBrowser = self.__tabWidget.browserAt(
 ##            self.__currentTabPreviewIndex)
 ##        currentBrowser = self.__tabWidget.currentBrowser()
@@ -84,7 +83,7 @@
         if self.count() == 1:
             return
         
-        E5WheelTabBar.mouseMoveEvent(self, evt)
+        super(WebBrowserTabBar, self).mouseMoveEvent(evt)
         
         # TODO: page preview
 ##        if Preferences.getHelp("ShowPreview"):
@@ -124,7 +123,7 @@
 ##                self.__previewPopup.hide()
 ##            self.__currentTabPreviewIndex = -1
         
-        E5WheelTabBar.leaveEvent(self, evt)
+        super(WebBrowserTabBar, self).leaveEvent(evt)
     
     def mousePressEvent(self, evt):
         """
@@ -138,7 +137,7 @@
 ##                self.__previewPopup.hide()
 ##            self.__currentTabPreviewIndex = -1
         
-        E5WheelTabBar.mousePressEvent(self, evt)
+        super(WebBrowserTabBar, self).mousePressEvent(evt)
     
     def event(self, evt):
         """
@@ -157,7 +156,7 @@
 ##            evt.setAccepted(True)
 ##            return True
         
-        return E5WheelTabBar.event(self, evt)
+        return super(WebBrowserTabBar, self).event(evt)
     
     def tabRemoved(self, index):
         """
--- a/WebBrowser/WebBrowserTabWidget.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/WebBrowserTabWidget.py	Thu Feb 04 19:39:54 2016 +0100
@@ -21,7 +21,6 @@
 from E5Gui import E5MessageBox
 from E5Gui.E5Application import e5App
 
-# TODO: implement this
 from .WebBrowserView import WebBrowserView
 
 import UI.PixmapCache
@@ -60,10 +59,9 @@
         """
         super(WebBrowserTabWidget, self).__init__(parent, dnd=True)
         
-        # TODO: implement this
-##        from .WebBrowserTabBar import WebBrowserTabBar
-##        self.__tabBar = WebBrowserTabBar(self)
-##        self.setCustomTabBar(True, self.__tabBar)
+        from .WebBrowserTabBar import WebBrowserTabBar
+        self.__tabBar = WebBrowserTabBar(self)
+        self.setCustomTabBar(True, self.__tabBar)
         
         self.__mainWindow = parent
         
@@ -71,7 +69,7 @@
         self.setDocumentMode(True)
         self.setElideMode(Qt.ElideNone)
         
-        # TODO: re-enable once Closed Tabs Manager is done
+        # TODO: Closed Tabs Manager
 ##        from .ClosedTabsManager import ClosedTabsManager
 ##        self.__closedTabsManager = ClosedTabsManager(self)
 ##        self.__closedTabsManager.closedTabAvailable.connect(
@@ -79,7 +77,7 @@
         
         from .UrlBar.StackedUrlBar import StackedUrlBar
         self.__stackedUrlBar = StackedUrlBar(self)
-##        self.__tabBar.tabMoved.connect(self.__stackedUrlBar.moveBar)
+        self.__tabBar.tabMoved.connect(self.__stackedUrlBar.moveBar)
         
         self.__tabContextMenuIndex = -1
         self.currentChanged[int].connect(self.__currentChanged)
@@ -105,7 +103,7 @@
         self.__navigationButton.setEnabled(False)
         self.__rightCornerWidgetLayout.addWidget(self.__navigationButton)
         
-        # TODO: re-enable once Closed Tabs Manager is done
+        # TODO: Closed Tabs Manager
 ##        self.__closedTabsMenu = QMenu(self)
 ##        self.__closedTabsMenu.aboutToShow.connect(
 ##            self.__aboutToShowClosedTabsMenu)
@@ -837,7 +835,8 @@
         
         @return flag indicating a shut down (boolean)
         """
-        if self.count() > 1 and Preferences.getHelp("WarnOnMultipleClose"):
+        if self.count() > 1 and Preferences.getWebBrowser(
+                "WarnOnMultipleClose"):
             mb = E5MessageBox.E5MessageBox(
                 E5MessageBox.Information,
                 self.tr("Are you sure you want to close the window?"),
@@ -917,7 +916,7 @@
         @param path path string to guess an URL for (string)
         @return guessed URL (QUrl)
         """
-        # TODO: re-enable once Open Search is done
+        # TODO: Open Search
 ##        manager = self.__mainWindow.openSearchManager()
 ##        path = Utilities.fromNativeSeparators(path)
 ##        url = manager.convertKeywordSearchToUrl(path)
@@ -962,7 +961,7 @@
             elif browser.url() != "":
                 browser.setFocus()
     
-    # TODO: re-enable once Closed Tabs Manager is done
+    # TODO: Closed Tabs Manager
 ##    def restoreClosedTab(self):
 ##        """
 ##        Public slot to restore the most recently closed tab.
--- a/WebBrowser/WebBrowserView.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/WebBrowserView.py	Thu Feb 04 19:39:54 2016 +0100
@@ -10,7 +10,7 @@
 
 from __future__ import unicode_literals
 try:
-    str = unicode
+    str = unicode           # __IGNORE_EXCEPTION__
 except NameError:
     pass
 
@@ -228,13 +228,16 @@
         
 ##        self.page().databaseQuotaExceeded.connect(self.__databaseQuotaExceeded)
         
-        # TODO: re-enable onece Open Search is done
+        # TODO: Open Search
 ##        self.__mw.openSearchManager().currentEngineChanged.connect(
 ##            self.__currentEngineChanged)
         
+        self.__rwhvqt = None
+        # TODO: eventFilter (see below)
+##        self.installEventFilter(self)
         self.setAcceptDrops(True)
         
-        # TODO: re-enable for Access Keys
+        # TODO: Access Keys
 ##        self.__enableAccessKeys = Preferences.getHelp("AccessKeysEnabled")
 ##        self.__accessKeysPressed = False
 ##        self.__accessKeyLabels = []
@@ -247,8 +250,9 @@
         
         self.__clickedFrame = None
         
-        # TODO: re-enable once done
+        # TODO: PIM
 ##        self.__mw.personalInformationManager().connectPage(self.page())
+        # TODO: GreaseMonkey
 ##        self.__mw.greaseMonkeyManager().connectPage(self.page())
 ##        
 ##        self.__inspector = None
@@ -459,6 +463,8 @@
         """
         Public slot to move to the first page loaded.
         """
+##        homeUrl = QUrl("http://localhost")
+##        # TODO: eric: scheme or Configuration page
         homeUrl = QUrl(Preferences.getWebBrowser("HomePage"))
         self.setSource(homeUrl)
         self.__urlChanged(self.history().currentItem().url())
@@ -524,7 +530,7 @@
         if value != self.zoomValue():
             self.setZoomFactor(value / 100.0)
             self.__currentZoom = value
-            # TODO: re-enable this when Zoom Manager is done
+            # TODO: Zoom Manager
 ##            if saveValue:
 ##                Helpviewer.HelpWindow.HelpWindow.zoomManager().setZoomValue(
 ##                    self.url(), value)
@@ -606,7 +612,7 @@
         else:
             self.findText(txt, findFlags, callback)
     
-    # TODO: re-enable once WebBrowserWebElement is done
+    # TODO: WebBrowserWebElement
 ##    def __isMediaElement(self, element):
 ##        """
 ##        Private method to check, if the given element is a media element.
@@ -625,12 +631,12 @@
         @param evt reference to the context menu event object
             (QContextMenuEvent)
         """
-        # TODO: re-enable once User Agent is done
+        # TODO: User Agent
 ##        from .UserAgent.UserAgentMenu import UserAgentMenu
         menu = QMenu(self)
         
 ##        frameAtPos = self.page().frameAt(evt.pos())
-        # TODO: re-enable once WebHitTestResult is done
+        # TODO: WebHitTestResult
 ##        hit = self.page().hitTestContent(evt.pos())
 ##        if not hit.linkUrl().isEmpty():
 ##            menu.addAction(
@@ -763,7 +769,7 @@
         if not menu.isEmpty():
             menu.addSeparator()
         
-        # TODO: re-enable once PIM is done
+        # TODO: PIM
 ##        self.__mw.personalInformationManager().createSubMenu(menu, self, hit)
         
         menu.addAction(self.__mw.newTabAct)
@@ -812,14 +818,15 @@
 ##            menu.addMenu(fmenu)
 ##            menu.addSeparator()
         
-        menu.addAction(
-            UI.PixmapCache.getIcon("bookmark22.png"),
-            self.tr("Bookmark this Page"), self.addBookmark)
+        # TODO: Bookmarks
+##        menu.addAction(
+##            UI.PixmapCache.getIcon("bookmark22.png"),
+##            self.tr("Bookmark this Page"), self.addBookmark)
         menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
             self.tr("Send Page Link"), self.__sendLink).setData(self.url())
         menu.addSeparator()
-        # TODO: re-enable once User Agent is done
+        # TODO: User Agent
 ##        self.__userAgentMenu = UserAgentMenu(self.tr("User Agent"),
 ##                                             url=self.url())
 ##        menu.addMenu(self.__userAgentMenu)
@@ -841,7 +848,7 @@
         menu.addAction(self.__mw.findAct)
         menu.addSeparator()
         if self.selectedText():
-            # TODO: re-enable once Open Search is done
+            # TODO: Open Search
 ##            self.__searchMenu = menu.addMenu(self.tr("Search with..."))
 ##            
 ##            from .OpenSearch.OpenSearchEngineAction import \
@@ -856,7 +863,7 @@
 ##            
 ##            menu.addSeparator()
             
-            # TODO: re-enable once Languages Dialog is done
+            # TODO: Languages Dialog
 ##            from .HelpLanguagesDialog import HelpLanguagesDialog
 ##            languages = Preferences.toList(
 ##                Preferences.Prefs.settings.value(
@@ -896,7 +903,7 @@
 ##                           self.__addSearchEngine).setData(element)
 ##            menu.addSeparator()
         
-        # TODO: re-enable once Web Inspector is done
+        # TODO: Web Inspector
 ##        menu.addAction(
 ##            UI.PixmapCache.getIcon("webInspector.png"),
 ##            self.tr("Web Inspector..."), self.__webInspector)
@@ -1306,10 +1313,7 @@
         
         @param evt reference to the wheel event (QWheelEvent)
         """
-        if qVersion() >= "5.0.0":
-            delta = evt.angleDelta().y()
-        else:
-            delta = evt.delta()
+        delta = evt.angleDelta().y()
         if evt.modifiers() & Qt.ControlModifier:
             if delta < 0:
                 self.zoomOut()
@@ -1328,45 +1332,45 @@
         
         super(WebBrowserView, self).wheelEvent(evt)
     
-    def keyPressEvent(self, evt):
-        """
-        Protected method called by a key press.
-        
-        @param evt reference to the key event (QKeyEvent)
-        """
-        # TODO: PIM
-##        if self.__mw.personalInformationManager().viewKeyPressEvent(self, evt):
-##            return
-        
-        # TODO: Access Keys
-##        if self.__enableAccessKeys:
-##            self.__accessKeysPressed = (
-##                evt.modifiers() == Qt.ControlModifier and
-##                evt.key() == Qt.Key_Control)
-##            if not self.__accessKeysPressed:
-##                if self.__checkForAccessKey(evt):
-##                    self.__hideAccessKeys()
-##                    evt.accept()
-##                    return
-##                self.__hideAccessKeys()
-##            else:
-##                QTimer.singleShot(300, self.__accessKeyShortcut)
-        
-        self.__ctrlPressed = (evt.key() == Qt.Key_Control)
-        super(WebBrowserView, self).keyPressEvent(evt)
-    
-    def keyReleaseEvent(self, evt):
-        """
-        Protected method called by a key release.
-        
-        @param evt reference to the key event (QKeyEvent)
-        """
-        # TODO: Access Keys
-##        if self.__enableAccessKeys:
-##            self.__accessKeysPressed = evt.key() == Qt.Key_Control
-        
-        self.__ctrlPressed = False
-        super(WebBrowserView, self).keyReleaseEvent(evt)
+##    def keyPressEvent(self, evt):
+##        """
+##        Protected method called by a key press.
+##        
+##        @param evt reference to the key event (QKeyEvent)
+##        """
+##        # TODO: PIM
+####        if self.__mw.personalInformationManager().viewKeyPressEvent(self, evt):
+####            return
+##        
+##        # TODO: Access Keys
+####        if self.__enableAccessKeys:
+####            self.__accessKeysPressed = (
+####                evt.modifiers() == Qt.ControlModifier and
+####                evt.key() == Qt.Key_Control)
+####            if not self.__accessKeysPressed:
+####                if self.__checkForAccessKey(evt):
+####                    self.__hideAccessKeys()
+####                    evt.accept()
+####                    return
+####                self.__hideAccessKeys()
+####            else:
+####                QTimer.singleShot(300, self.__accessKeyShortcut)
+##        
+##        self.__ctrlPressed = (evt.key() == Qt.Key_Control)
+##        super(WebBrowserView, self).keyPressEvent(evt)
+##    
+##    def keyReleaseEvent(self, evt):
+##        """
+##        Protected method called by a key release.
+##        
+##        @param evt reference to the key event (QKeyEvent)
+##        """
+##        # TODO: Access Keys
+####        if self.__enableAccessKeys:
+####            self.__accessKeysPressed = evt.key() == Qt.Key_Control
+##        
+##        self.__ctrlPressed = False
+##        super(WebBrowserView, self).keyReleaseEvent(evt)
     
     def focusOutEvent(self, evt):
         """
@@ -1409,6 +1413,73 @@
                 self.__currentZoom = int(scaleFactor * 100)
                 self.__applyZoom()
             evt.accept()
+##bool WebView::eventFilter(QObject *obj, QEvent *event)
+##{
+##    // Hack to find widget that receives input events
+##    if (obj == this && event->type() == QEvent::ChildAdded) {
+##        QWidget *child = qobject_cast<QWidget*>(static_cast<QChildEvent*>(event)->child());
+##        if (child && child->inherits("QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget")) {
+##            m_rwhvqt = child;
+##            m_rwhvqt->installEventFilter(this);
+##        }
+##    }
+##
+##    // Forward events to WebView
+##    if (obj == m_rwhvqt) {
+###define HANDLE_EVENT(f, t) \
+##        { \
+##        bool wasAccepted = event->isAccepted(); \
+##        event->setAccepted(false); \
+##        f(static_cast<t*>(event)); \
+##        bool ret = event->isAccepted(); \
+##        event->setAccepted(wasAccepted); \
+##        return ret; \
+##        }
+##
+##        switch (event->type()) {
+##        case QEvent::KeyPress:
+##            HANDLE_EVENT(_keyPressEvent, QKeyEvent);
+##
+##        case QEvent::KeyRelease:
+##            HANDLE_EVENT(_keyReleaseEvent, QKeyEvent);
+##
+##        case QEvent::MouseButtonPress:
+##            HANDLE_EVENT(_mousePressEvent, QMouseEvent);
+##
+##        case QEvent::MouseButtonRelease:
+##            HANDLE_EVENT(_mouseReleaseEvent, QMouseEvent);
+##
+##        case QEvent::MouseMove:
+##            HANDLE_EVENT(_mouseMoveEvent, QMouseEvent);
+##
+##        case QEvent::Wheel:
+##            HANDLE_EVENT(_wheelEvent, QWheelEvent);
+##
+##        default:
+##            break;
+##        }
+##
+###undef HANDLE_EVENT
+##    }
+##
+##    // Block already handled events
+##    if (obj == this) {
+##        switch (event->type()) {
+##        case QEvent::KeyPress:
+##        case QEvent::KeyRelease:
+##        case QEvent::MouseButtonPress:
+##        case QEvent::MouseButtonRelease:
+##        case QEvent::MouseMove:
+##        case QEvent::Wheel:
+##            return true;
+##
+##        default:
+##            break;
+##        }
+##    }
+##
+##    return QWebEngineView::eventFilter(obj, event);
+##}
     
     def clearHistory(self):
         """
@@ -1481,7 +1552,7 @@
             self.zoomIn()
             self.zoomOut()
         
-        # TODO: ZoomManager
+        # TODO: Zoom Manager
 ##        zoomValue = Helpviewer.HelpWindow.HelpWindow.zoomManager()\
 ##            .zoomValue(self.url())
 ##        self.setZoomValue(zoomValue)
@@ -1867,7 +1938,7 @@
     ## RSS related methods below
     ###########################################################################
     
-    # TODO: extract links from page to implement RSS stuff
+    # TODO: RSS, extract links from page to implement RSS stuff
 ##    def checkRSS(self):
 ##        """
 ##        Public method to check, if the loaded page contains feed links.
--- a/WebBrowser/WebBrowserWindow.py	Wed Feb 03 20:05:29 2016 +0100
+++ b/WebBrowser/WebBrowserWindow.py	Thu Feb 04 19:39:54 2016 +0100
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 try:
-    str = unicode
+    str = unicode           # __IGNORE_EXCEPTION__
 except NameError:
     pass
 
@@ -41,8 +41,8 @@
 from E5Gui import E5MessageBox, E5FileDialog, E5ErrorMessage
 from E5Gui.E5MainWindow import E5MainWindow
 from E5Gui.E5Application import e5App
-##from E5Gui.E5ZoomWidget import E5ZoomWidget
-##
+from E5Gui.E5ZoomWidget import E5ZoomWidget
+
 ##from E5Network.E5NetworkIcon import E5NetworkIcon
 
 import Preferences
@@ -126,14 +126,16 @@
         if self.__initShortcutsOnly:
             self.__initActions()
         else:
-            # TODO: implement this
             from .SearchWidget import SearchWidget
+            # TODO: QtHelp
 ##            from .HelpTocWidget import HelpTocWidget
 ##            from .HelpIndexWidget import HelpIndexWidget
 ##            from .HelpSearchWidget import HelpSearchWidget
-##            from .HelpBrowserWV import HelpBrowser
+            from .WebBrowserView import WebBrowserView
             from .WebBrowserTabWidget import WebBrowserTabWidget
+            # TODO: AdBlock
 ##            from .AdBlock.AdBlockIcon import AdBlockIcon
+            # TODO: VirusTotal
 ##            from .VirusTotal.VirusTotalApi import VirusTotalAPI
             
             # TODO: allow using Qt Help even if not called from eric6
@@ -159,22 +161,22 @@
 ##                self.__helpEngine = None
 ##            self.__helpInstaller = None
             
-##            self.__zoomWidget = E5ZoomWidget(
-##                UI.PixmapCache.getPixmap("zoomOut.png"),
-##                UI.PixmapCache.getPixmap("zoomIn.png"),
-##                UI.PixmapCache.getPixmap("zoomReset.png"), self)
-##            self.statusBar().addPermanentWidget(self.__zoomWidget)
-##            self.__zoomWidget.setMapping(
-##                HelpBrowser.ZoomLevels, HelpBrowser.ZoomLevelDefault)
-##            self.__zoomWidget.valueChanged.connect(self.__zoomValueChanged)
-##            
+            self.__zoomWidget = E5ZoomWidget(
+                UI.PixmapCache.getPixmap("zoomOut.png"),
+                UI.PixmapCache.getPixmap("zoomIn.png"),
+                UI.PixmapCache.getPixmap("zoomReset.png"), self)
+            self.statusBar().addPermanentWidget(self.__zoomWidget)
+            self.__zoomWidget.setMapping(
+                WebBrowserView.ZoomLevels, WebBrowserView.ZoomLevelDefault)
+            self.__zoomWidget.valueChanged.connect(self.__zoomValueChanged)
+            
             self.__tabWidget = WebBrowserTabWidget(self)
             self.__tabWidget.currentChanged[int].connect(self.__currentChanged)
             self.__tabWidget.titleChanged.connect(self.__titleChanged)
             self.__tabWidget.showMessage.connect(self.statusBar().showMessage)
             self.__tabWidget.browserClosed.connect(self.__browserClosed)
-##            self.__tabWidget.browserZoomValueChanged.connect(
-##                self.__zoomWidget.setValue)
+            self.__tabWidget.browserZoomValueChanged.connect(
+                self.__zoomWidget.setValue)
             
             self.__searchWidget = SearchWidget(self, self)
             centralWidget = QWidget()
@@ -188,7 +190,7 @@
             self.setCentralWidget(centralWidget)
             self.__searchWidget.hide()
             
-            # TODO: do these once Qt 5.6 is available
+            # TODO: QtHelp, do these once Qt 5.6 is available
 ##            if WebBrowserWindow.UseQtHelp:
 ##                # setup the TOC widget
 ##                self.__tocWindow = HelpTocWidget(self.__helpEngine, self)
@@ -265,7 +267,7 @@
             
             # setup connections
             self.__activating = False
-            # TODO: do these once Qt 5.6 is available
+            # TODO: QtHelp, do these once Qt 5.6 is available
 ##            if WebBrowserWindow.UseQtHelp:
 ##                # TOC window
 ##                self.__tocWindow.linkActivated.connect(self.__linkActivated)
@@ -301,7 +303,7 @@
             
 ##            self.flashCookieManager()
 ##            
-            # TODO: do these once Qt 5.6 is available
+            # TODO: QtHelp, do these once Qt 5.6 is available
 ##            if WebBrowserWindow.UseQtHelp:
 ##                QTimer.singleShot(0, self.__lookForNewDocumentation)
 ##                if self.__searchWord is not None:
@@ -323,6 +325,13 @@
         """
         pass
     
+    def fromEric(self):
+        """
+        Public method to check, if the web browser was called from within the
+        eric IDE.
+        """
+        return self.__fromEric
+    
 ##    def __setIconDatabasePath(self, enable=True):
 ##        """
 ##        Private method to set the favicons path.
@@ -574,7 +583,7 @@
 ##                self.__saveVisiblePageScreen)
 ##        self.__actions.append(self.saveVisiblePageScreenAct)
         
-        # TODO: re-enable when bookmarks are done
+        # TODO: Bookmarks
 ##        bookmarksManager = self.bookmarksManager()
 ##        self.importBookmarksAct = E5Action(
 ##            self.tr('Import Bookmarks'),
@@ -606,7 +615,7 @@
 ##                bookmarksManager.exportBookmarks)
 ##        self.__actions.append(self.exportBookmarksAct)
         
-        # TODO: re-enable when print stuff is done
+        # TODO: print stuff
 ##        self.printAct = E5Action(
 ##            self.tr('Print'),
 ##            UI.PixmapCache.getIcon("print.png"),
@@ -684,7 +693,7 @@
                 self.__tabWidget.closeAllBrowsers)
         self.__actions.append(self.closeAllAct)
         
-        # TODO: re-enable when Private Browsing is done
+        # TODO: Private Browsing
 ##        self.privateBrowsingAct = E5Action(
 ##            self.tr('Private Browsing'),
 ##            UI.PixmapCache.getIcon("privateBrowsing.png"),
@@ -871,7 +880,7 @@
                 self.__searchWidget.findPrevious)
         self.__actions.append(self.findPrevAct)
         
-        # TODO: re-enable when bookmarks are done
+        # TODO: Bookmarks
 ##        self.bookmarksManageAct = E5Action(
 ##            self.tr('Manage Bookmarks'),
 ##            self.tr('&Manage Bookmarks...'),
@@ -982,56 +991,57 @@
             self.aboutQtAct.triggered.connect(self.__aboutQt)
         self.__actions.append(self.aboutQtAct)
         
-        # TODO: re-enable once Zoom stuff is done
-##        self.zoomInAct = E5Action(
-##            self.tr('Zoom in'),
-##            UI.PixmapCache.getIcon("zoomIn.png"),
-##            self.tr('Zoom &in'),
-##            QKeySequence(self.tr("Ctrl++", "View|Zoom in")),
-##            QKeySequence(self.tr("Zoom In", "View|Zoom in")),
-##            self, 'webbrowser_view_zoom_in')
-##        self.zoomInAct.setStatusTip(self.tr('Zoom in on the text'))
-##        self.zoomInAct.setWhatsThis(self.tr(
-##            """<b>Zoom in</b>"""
-##            """<p>Zoom in on the text. This makes the text bigger.</p>"""
-##        ))
-##        if not self.__initShortcutsOnly:
-##            self.zoomInAct.triggered.connect(self.__zoomIn)
-##        self.__actions.append(self.zoomInAct)
-##        
-##        self.zoomOutAct = E5Action(
-##            self.tr('Zoom out'),
-##            UI.PixmapCache.getIcon("zoomOut.png"),
-##            self.tr('Zoom &out'),
-##            QKeySequence(self.tr("Ctrl+-", "View|Zoom out")),
-##            QKeySequence(self.tr("Zoom Out", "View|Zoom out")),
-##            self, 'webbrowser_view_zoom_out')
-##        self.zoomOutAct.setStatusTip(self.tr('Zoom out on the text'))
-##        self.zoomOutAct.setWhatsThis(self.tr(
-##            """<b>Zoom out</b>"""
-##            """<p>Zoom out on the text. This makes the text smaller.</p>"""
-##        ))
-##        if not self.__initShortcutsOnly:
-##            self.zoomOutAct.triggered.connect(self.__zoomOut)
-##        self.__actions.append(self.zoomOutAct)
-##        
-##        self.zoomResetAct = E5Action(
-##            self.tr('Zoom reset'),
-##            UI.PixmapCache.getIcon("zoomReset.png"),
-##            self.tr('Zoom &reset'),
-##            QKeySequence(self.tr("Ctrl+0", "View|Zoom reset")),
-##            0, self, 'webbrowser_view_zoom_reset')
-##        self.zoomResetAct.setStatusTip(self.tr(
-##            'Reset the zoom of the text'))
-##        self.zoomResetAct.setWhatsThis(self.tr(
-##            """<b>Zoom reset</b>"""
-##            """<p>Reset the zoom of the text. """
-##            """This sets the zoom factor to 100%.</p>"""
-##        ))
-##        if not self.__initShortcutsOnly:
-##            self.zoomResetAct.triggered.connect(self.__zoomReset)
-##        self.__actions.append(self.zoomResetAct)
-##        
+        self.zoomInAct = E5Action(
+            self.tr('Zoom in'),
+            UI.PixmapCache.getIcon("zoomIn.png"),
+            self.tr('Zoom &in'),
+            QKeySequence(self.tr("Ctrl++", "View|Zoom in")),
+            QKeySequence(self.tr("Zoom In", "View|Zoom in")),
+            self, 'webbrowser_view_zoom_in')
+        self.zoomInAct.setStatusTip(self.tr('Zoom in on the web page'))
+        self.zoomInAct.setWhatsThis(self.tr(
+            """<b>Zoom in</b>"""
+            """<p>Zoom in on the web page."""
+            """ This makes the web page bigger.</p>"""
+        ))
+        if not self.__initShortcutsOnly:
+            self.zoomInAct.triggered.connect(self.__zoomIn)
+        self.__actions.append(self.zoomInAct)
+        
+        self.zoomOutAct = E5Action(
+            self.tr('Zoom out'),
+            UI.PixmapCache.getIcon("zoomOut.png"),
+            self.tr('Zoom &out'),
+            QKeySequence(self.tr("Ctrl+-", "View|Zoom out")),
+            QKeySequence(self.tr("Zoom Out", "View|Zoom out")),
+            self, 'webbrowser_view_zoom_out')
+        self.zoomOutAct.setStatusTip(self.tr('Zoom out on the web page'))
+        self.zoomOutAct.setWhatsThis(self.tr(
+            """<b>Zoom out</b>"""
+            """<p>Zoom out on the web page."""
+            """ This makes the web page smaller.</p>"""
+        ))
+        if not self.__initShortcutsOnly:
+            self.zoomOutAct.triggered.connect(self.__zoomOut)
+        self.__actions.append(self.zoomOutAct)
+        
+        self.zoomResetAct = E5Action(
+            self.tr('Zoom reset'),
+            UI.PixmapCache.getIcon("zoomReset.png"),
+            self.tr('Zoom &reset'),
+            QKeySequence(self.tr("Ctrl+0", "View|Zoom reset")),
+            0, self, 'webbrowser_view_zoom_reset')
+        self.zoomResetAct.setStatusTip(self.tr(
+            'Reset the zoom of the web page'))
+        self.zoomResetAct.setWhatsThis(self.tr(
+            """<b>Zoom reset</b>"""
+            """<p>Reset the zoom of the web page. """
+            """This sets the zoom factor to 100%.</p>"""
+        ))
+        if not self.__initShortcutsOnly:
+            self.zoomResetAct.triggered.connect(self.__zoomReset)
+        self.__actions.append(self.zoomResetAct)
+        
 ##        if hasattr(QWebSettings, 'ZoomTextOnly'):
 ##            self.zoomTextOnlyAct = E5Action(
 ##                self.tr('Zoom text only'),
@@ -1139,6 +1149,7 @@
 ##                self.__showAcceptedLanguages)
 ##        self.__actions.append(self.acceptedLanguagesAct)
         
+        # TODO: Cookies
 ##        self.cookiesAct = E5Action(
 ##            self.tr('Cookies'),
 ##            UI.PixmapCache.getIcon("cookie.png"),
@@ -1154,7 +1165,7 @@
 ##                self.__showCookiesConfiguration)
 ##        self.__actions.append(self.cookiesAct)
         
-        # TODO: re-enable once Flash Cookies stuff is done
+        # TODO: Flash Cookies
 ##        self.flashCookiesAct = E5Action(
 ##            self.tr('Flash Cookies'),
 ##            UI.PixmapCache.getIcon("flashCookie.png"),
@@ -1240,7 +1251,7 @@
                 E5ErrorMessage.editMessageFilters)
         self.__actions.append(self.editMessageFilterAct)
         
-        # TODO: re-enable once feature permission stuff is done
+        # TODO: Feature Permission
 ##        self.featurePermissionAct = E5Action(
 ##            self.tr('Edit HTML5 Feature Permissions'),
 ##            UI.PixmapCache.getIcon("featurePermission.png"),
@@ -1398,7 +1409,7 @@
 ##            self.clearIconsAct.triggered.connect(self.__clearIconsDatabase)
 ##        self.__actions.append(self.clearIconsAct)
         
-        # TODO: re-enable once search engines have been done
+        # TODO: Open Search
 ##        self.searchEnginesAct = E5Action(
 ##            self.tr('Configure Search Engines'),
 ##            self.tr('Configure Search &Engines...'),
@@ -1416,6 +1427,7 @@
 ##                self.__showEnginesConfigurationDialog)
 ##        self.__actions.append(self.searchEnginesAct)
         
+        # TODO: Passwords
 ##        self.passwordsAct = E5Action(
 ##            self.tr('Manage Saved Passwords'),
 ##            UI.PixmapCache.getIcon("passwords.png"),
@@ -1432,6 +1444,7 @@
 ##            self.passwordsAct.triggered.connect(self.__showPasswordsDialog)
 ##        self.__actions.append(self.passwordsAct)
         
+        # TODO: AdBlock
 ##        self.adblockAct = E5Action(
 ##            self.tr('Ad Block'),
 ##            UI.PixmapCache.getIcon("adBlockPlus.png"),
@@ -1449,6 +1462,7 @@
 ##            self.adblockAct.triggered.connect(self.__showAdBlockDialog)
 ##        self.__actions.append(self.adblockAct)
         
+        # TODO: Click2Flash (?)
 ##        self.flashblockAct = E5Action(
 ##            self.tr('ClickToFlash'),
 ##            UI.PixmapCache.getIcon("flashBlock.png"),
@@ -1467,6 +1481,7 @@
 ##                self.__showClickToFlashDialog)
 ##        self.__actions.append(self.flashblockAct)
         
+        # TODO: Certificates
 ##        if SSL_AVAILABLE:
 ##            self.certificatesAct = E5Action(
 ##                self.tr('Manage SSL Certificates'),
@@ -1486,6 +1501,7 @@
 ##                    self.__showCertificatesDialog)
 ##            self.__actions.append(self.certificatesAct)
         
+        # TODO: Network Monitor (?)
 ##        self.toolsMonitorAct = E5Action(
 ##            self.tr('Network Monitor'),
 ##            self.tr('&Network Monitor...'),
@@ -1502,7 +1518,7 @@
 ##                self.__showNetworkMonitor)
 ##        self.__actions.append(self.toolsMonitorAct)
         
-        # TODO: re-enable once Download Manager has been done
+        # TODO: Download Manager
 ##        self.showDownloadManagerAct = E5Action(
 ##            self.tr('Downloads'),
 ##            self.tr('Downloads'),
@@ -1518,7 +1534,7 @@
 ##                self.__showDownloadsWindow)
 ##        self.__actions.append(self.showDownloadManagerAct)
         
-        # TODO: re-enable once RSS Feeds Manager has been done
+        # TODO: RSS Feeds Manager
 ##        self.feedsManagerAct = E5Action(
 ##            self.tr('RSS Feeds Dialog'),
 ##            UI.PixmapCache.getIcon("rss22.png"),
@@ -1537,6 +1553,7 @@
 ##            self.feedsManagerAct.triggered.connect(self.__showFeedsManager)
 ##        self.__actions.append(self.feedsManagerAct)
         
+        # TODO: Site Info
 ##        self.siteInfoAct = E5Action(
 ##            self.tr('Siteinfo Dialog'),
 ##            UI.PixmapCache.getIcon("helpAbout.png"),
@@ -1554,6 +1571,7 @@
 ##            self.siteInfoAct.triggered.connect(self.__showSiteinfoDialog)
 ##        self.__actions.append(self.siteInfoAct)
         
+        # TODO: User Agents
 ##        self.userAgentManagerAct = E5Action(
 ##            self.tr('Manage User Agent Settings'),
 ##            self.tr('Manage &User Agent Settings'),
@@ -1569,6 +1587,7 @@
 ##                self.__showUserAgentsDialog)
 ##        self.__actions.append(self.userAgentManagerAct)
         
+        # TODO: Synchronisation
 ##        self.synchronizationAct = E5Action(
 ##            self.tr('Synchronize data'),
 ##            UI.PixmapCache.getIcon("sync.png"),
@@ -1586,7 +1605,7 @@
 ##                self.__showSyncDialog)
 ##        self.__actions.append(self.synchronizationAct)
         
-        # TODO: re-enable once zoom stuff is done
+        # TODO: Zoom Manager
 ##        self.zoomValuesAct = E5Action(
 ##            self.tr('Manage Saved Zoom Values'),
 ##            UI.PixmapCache.getIcon("zoomReset.png"),
@@ -1677,11 +1696,12 @@
         menu.addSeparator()
         menu.addAction(self.stopAct)
         menu.addAction(self.reloadAct)
+        # TODO: QtHelp
 ##        if WebBrowserWindow.UseQtHelp:
 ##            menu.addSeparator()
 ##            menu.addAction(self.syncTocAct)
         
-        # TODO: re-enable once History stuff is done
+        # TODO: History
 ##        from .History.HistoryMenu import HistoryMenu
 ##        self.historyMenu = HistoryMenu(self, self.__tabWidget)
 ##        self.historyMenu.setTearOffEnabled(True)
@@ -1690,7 +1710,7 @@
 ##        self.historyMenu.newUrl.connect(self.openUrlNewTab)
 ##        mb.addMenu(self.historyMenu)
         
-        # TODO: re-enable once Bookmarks stuff is done
+        # TODO: Bookmarks
 ##        from .Bookmarks.BookmarksMenu import BookmarksMenuBarMenu
 ##        self.bookmarksMenu = BookmarksMenuBarMenu(self)
 ##        self.bookmarksMenu.setTearOffEnabled(True)
@@ -1889,7 +1909,7 @@
 ##        self.searchEdit.setSizePolicy(sizePolicy)
 ##        self.searchEdit.search.connect(self.__linkActivated)
 ##        self.__navigationSplitter.addWidget(self.searchEdit)
-##        gotb.addWidget(self.__navigationSplitter)
+        gotb.addWidget(self.__navigationSplitter)
         
         self.__navigationSplitter.setSizePolicy(
             QSizePolicy.Expanding, QSizePolicy.Maximum)
@@ -2373,35 +2393,35 @@
         """
         self.currentBrowser().stop()
     
-##    def __zoomValueChanged(self, value):
-##        """
-##        Private slot to handle value changes of the zoom widget.
-##        
-##        @param value zoom value (integer)
-##        """
-##        self.currentBrowser().setZoomValue(value)
-##    
-##    def __zoomIn(self):
-##        """
-##        Private slot called to handle the zoom in action.
-##        """
-##        self.currentBrowser().zoomIn()
-##        self.__zoomWidget.setValue(self.currentBrowser().zoomValue())
-##    
-##    def __zoomOut(self):
-##        """
-##        Private slot called to handle the zoom out action.
-##        """
-##        self.currentBrowser().zoomOut()
-##        self.__zoomWidget.setValue(self.currentBrowser().zoomValue())
-##    
-##    def __zoomReset(self):
-##        """
-##        Private slot called to handle the zoom reset action.
-##        """
-##        self.currentBrowser().zoomReset()
-##        self.__zoomWidget.setValue(self.currentBrowser().zoomValue())
-##    
+    def __zoomValueChanged(self, value):
+        """
+        Private slot to handle value changes of the zoom widget.
+        
+        @param value zoom value (integer)
+        """
+        self.currentBrowser().setZoomValue(value)
+    
+    def __zoomIn(self):
+        """
+        Private slot called to handle the zoom in action.
+        """
+        self.currentBrowser().zoomIn()
+        self.__zoomWidget.setValue(self.currentBrowser().zoomValue())
+    
+    def __zoomOut(self):
+        """
+        Private slot called to handle the zoom out action.
+        """
+        self.currentBrowser().zoomOut()
+        self.__zoomWidget.setValue(self.currentBrowser().zoomValue())
+    
+    def __zoomReset(self):
+        """
+        Private slot called to handle the zoom reset action.
+        """
+        self.currentBrowser().zoomReset()
+        self.__zoomWidget.setValue(self.currentBrowser().zoomValue())
+    
 ##    def __zoomTextOnly(self, textOnly):
 ##        """
 ##        Private slot called to handle the zoom text only action.
@@ -2521,9 +2541,9 @@
                 self.setForwardAvailable(cb.isForwardAvailable())
                 self.setBackwardAvailable(cb.isBackwardAvailable())
                 self.setLoadingActions(cb.isLoading())
-##                
-##                # set value of zoom widget
-##                self.__zoomWidget.setValue(cb.zoomValue())
+                
+                # set value of zoom widget
+                self.__zoomWidget.setValue(cb.zoomValue())
     
     def __showPreferences(self):
         """

eric ide

mercurial