eric6/Helpviewer/UrlBar/UrlBar.py

changeset 7220
5cf645f6daab
parent 7218
eaf2cf171f3a
parent 7211
1c97f3142fa8
child 7221
0485ccdf7877
diff -r eaf2cf171f3a -r 5cf645f6daab eric6/Helpviewer/UrlBar/UrlBar.py
--- a/eric6/Helpviewer/UrlBar/UrlBar.py	Sat Sep 07 14:45:27 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,461 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the URL bar widget.
-"""
-
-from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
-
-from PyQt5.QtCore import pyqtSlot, Qt, QPointF, QUrl, QDateTime
-from PyQt5.QtGui import QColor, QPalette, QLinearGradient, QIcon
-from PyQt5.QtWidgets import QDialog, QApplication
-try:
-    from PyQt5.QtNetwork import QSslCertificate     # __IGNORE_EXCEPTION__
-except ImportError:
-    QSslCertificate = None      # __IGNORE_WARNING__
-from PyQt5.QtWebKit import QWebSettings
-from PyQt5.QtWebKitWidgets import QWebPage
-
-from E5Gui.E5LineEdit import E5LineEdit
-from E5Gui.E5LineEditButton import E5LineEditButton
-
-import Helpviewer.HelpWindow
-
-from .FavIconLabel import FavIconLabel
-from .SslLabel import SslLabel
-
-import UI.PixmapCache
-import Preferences
-import Utilities
-from Globals import qVersionTuple
-
-
-class UrlBar(E5LineEdit):
-    """
-    Class implementing a line edit for entering URLs.
-    """
-    def __init__(self, mainWindow, parent=None):
-        """
-        Constructor
-        
-        @param mainWindow reference to the main window (HelpWindow)
-        @param parent reference to the parent widget (HelpBrowser)
-        """
-        E5LineEdit.__init__(self, parent)
-        self.setInactiveText(self.tr("Enter the URL here."))
-        self.setWhatsThis(self.tr("Enter the URL here."))
-        
-        self.__mw = mainWindow
-        self.__browser = None
-        self.__privateMode = QWebSettings.globalSettings().testAttribute(
-            QWebSettings.PrivateBrowsingEnabled)
-        
-        self.__bmActiveIcon = UI.PixmapCache.getIcon("bookmark16.png")
-        self.__bmInactiveIcon = QIcon(
-            self.__bmActiveIcon.pixmap(16, 16, QIcon.Disabled))
-        
-        self.__favicon = FavIconLabel(self)
-        self.addWidget(self.__favicon, E5LineEdit.LeftSide)
-        
-        self.__sslLabel = SslLabel(self)
-        self.addWidget(self.__sslLabel, E5LineEdit.LeftSide)
-        self.__sslLabel.setVisible(False)
-        
-        self.__privacyButton = E5LineEditButton(self)
-        self.__privacyButton.setIcon(
-            UI.PixmapCache.getIcon("privateBrowsing.png"))
-        self.addWidget(self.__privacyButton, E5LineEdit.RightSide)
-        self.__privacyButton.setVisible(self.__privateMode)
-        
-        self.__rssButton = E5LineEditButton(self)
-        self.__rssButton.setIcon(UI.PixmapCache.getIcon("rss16.png"))
-        self.addWidget(self.__rssButton, E5LineEdit.RightSide)
-        self.__rssButton.setVisible(False)
-        
-        self.__bookmarkButton = E5LineEditButton(self)
-        self.addWidget(self.__bookmarkButton, E5LineEdit.RightSide)
-        self.__bookmarkButton.setVisible(False)
-        
-        self.__clearButton = E5LineEditButton(self)
-        self.__clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png"))
-        self.addWidget(self.__clearButton, E5LineEdit.RightSide)
-        self.__clearButton.setVisible(False)
-        
-        self.__bookmarkButton.clicked.connect(self.__showBookmarkInfo)
-        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)
-        
-        Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
-            .entryChanged.connect(self.__bookmarkChanged)
-        Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
-            .entryAdded.connect(self.__bookmarkChanged)
-        Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
-            .entryRemoved.connect(self.__bookmarkChanged)
-        Helpviewer.HelpWindow.HelpWindow.speedDial().pagesChanged.connect(
-            self.__bookmarkChanged)
-    
-    def setBrowser(self, browser):
-        """
-        Public method to set the browser connection.
-        
-        @param browser reference to the browser widegt (HelpBrowser)
-        """
-        self.__browser = browser
-        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)
-        
-        self.__sslLabel.clicked.connect(self.__browser.page().showSslInfo)
-    
-    def browser(self):
-        """
-        Public method to get the associated browser.
-       
-        @return reference to the associated browser (HelpBrowser)
-        """
-        return self.__browser
-    
-    def __browserUrlChanged(self, url):
-        """
-        Private slot to handle a URL change of the associated browser.
-        
-        @param url new URL of the browser (QUrl)
-        """
-        strUrl = url.toString()
-        if strUrl in ["eric:speeddial", "eric:home", "about:blank"]:
-            strUrl = ""
-        
-        if self.text() != strUrl:
-            self.setText(strUrl)
-        self.setCursorPosition(0)
-    
-    def __loadStarted(self):
-        """
-        Private slot to perform actions before the page is loaded.
-        """
-        self.__sslLabel.setVisible(False)
-        self.__bookmarkButton.setVisible(False)
-    
-    def __checkBookmark(self):
-        """
-        Private slot to check the current URL for the bookmarked state.
-        """
-        manager = Helpviewer.HelpWindow.HelpWindow.bookmarksManager()
-        if manager.bookmarkForUrl(self.__browser.url()) is not None:
-            self.__bookmarkButton.setIcon(self.__bmActiveIcon)
-            bookmarks = manager.bookmarksForUrl(self.__browser.url())
-            from Helpviewer.Bookmarks.BookmarkNode import BookmarkNode
-            for bookmark in bookmarks:
-                manager.setTimestamp(bookmark, BookmarkNode.TsVisited,
-                                     QDateTime.currentDateTime())
-        elif Helpviewer.HelpWindow.HelpWindow.speedDial()\
-                .pageForUrl(self.__browser.url()).url != "":
-            self.__bookmarkButton.setIcon(self.__bmActiveIcon)
-        else:
-            self.__bookmarkButton.setIcon(self.__bmInactiveIcon)
-    
-    def __loadFinished(self, ok):
-        """
-        Private slot to set some data after the page was loaded.
-        
-        @param ok flag indicating a successful load (boolean)
-        """
-        try:
-            if self.__browser.url().scheme() in ["eric", "about"]:
-                self.__bookmarkButton.setVisible(False)
-            else:
-                self.__checkBookmark()
-                self.__bookmarkButton.setVisible(True)
-            
-            if ok:
-                self.__rssButton.setVisible(self.__browser.checkRSS())
-            
-            if ok and \
-               self.__browser.url().scheme() == "https" and \
-               QSslCertificate is not None:
-                sslInfo = self.__browser.page().getSslCertificate()
-                if sslInfo is not None:
-                    if qVersionTuple() >= (5, 0, 0):
-                        org = Utilities.decodeString(", ".join(
-                            sslInfo.subjectInfo(QSslCertificate.Organization)))
-                    else:
-                        org = Utilities.decodeString(
-                            sslInfo.subjectInfo(QSslCertificate.Organization))
-                    if org == "":
-                        if qVersionTuple() >= (5, 0, 0):
-                            cn = Utilities.decodeString(", ".join(
-                                sslInfo.subjectInfo(
-                                    QSslCertificate.CommonName)))
-                        else:
-                            cn = Utilities.decodeString(
-                                sslInfo.subjectInfo(
-                                    QSslCertificate.CommonName))
-                        if cn != "":
-                            org = cn.split(".", 1)[1]
-                        if org == "":
-                            org = self.tr("Unknown")
-                    self.__sslLabel.setText(" {0} ".format(org))
-                    self.__sslLabel.setVisible(True)
-                    if qVersionTuple() >= (5, 0, 0):
-                        valid = not sslInfo.isBlacklisted()
-                    else:
-                        valid = sslInfo.isValid()
-                    if valid:
-                        config = self.__browser.page().getSslConfiguration()
-                        if config is None or config.sessionCipher().isNull():
-                            valid = False
-                    self.__sslLabel.setValidity(valid)
-                    return
-            
-            self.__sslLabel.setVisible(False)
-        except RuntimeError:
-            pass
-    
-    def setPrivateMode(self, on):
-        """
-        Public method to set the private mode.
-        
-        @param on flag indicating the privacy state (boolean)
-        """
-        self.__privateMode = on
-        self.__privacyButton.setVisible(on)
-    
-    def __privacyClicked(self):
-        """
-        Private slot to handle the click of the private mode button.
-        """
-        self.__mw.setPrivateMode(False)
-    
-    def __textChanged(self, txt):
-        """
-        Private slot to handle changes of the text.
-        
-        @param txt current text (string)
-        """
-        self.__clearButton.setVisible(txt != "")
-    
-    def preferencesChanged(self):
-        """
-        Public slot to handle a change of preferences.
-        """
-        self.update()
-    
-    def __showBookmarkInfo(self):
-        """
-        Private slot to show a dialog with some bookmark info.
-        """
-        from .BookmarkActionSelectionDialog import \
-            BookmarkActionSelectionDialog
-        url = self.__browser.url()
-        dlg = BookmarkActionSelectionDialog(url)
-        if dlg.exec_() == QDialog.Accepted:
-            action = dlg.getAction()
-            if action == BookmarkActionSelectionDialog.AddBookmark:
-                self.__browser.addBookmark()
-            elif action == BookmarkActionSelectionDialog.EditBookmark:
-                bookmark = Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
-                    .bookmarkForUrl(url)
-                from .BookmarkInfoDialog import BookmarkInfoDialog
-                dlg = BookmarkInfoDialog(bookmark, self.__browser)
-                dlg.exec_()
-            elif action == BookmarkActionSelectionDialog.AddSpeeddial:
-                Helpviewer.HelpWindow.HelpWindow.speedDial().addPage(
-                    url, self.__browser.title())
-            elif action == BookmarkActionSelectionDialog.RemoveSpeeddial:
-                Helpviewer.HelpWindow.HelpWindow.speedDial().removePage(url)
-    
-    @pyqtSlot()
-    def __bookmarkChanged(self):
-        """
-        Private slot to handle bookmark or speed dial changes.
-        """
-        self.__checkBookmark()
-    
-    def paintEvent(self, evt):
-        """
-        Protected method handling a paint event.
-        
-        @param evt reference to the paint event (QPaintEvent)
-        """
-        if self.__privateMode:
-            backgroundColor = QColor(220, 220, 220)     # light gray
-            foregroundColor = Qt.black
-        else:
-            backgroundColor = QApplication.palette().color(QPalette.Base)
-            foregroundColor = QApplication.palette().color(QPalette.Text)
-        
-        if self.__browser is not None:
-            p = self.palette()
-            progress = self.__browser.progress()
-            if progress == 0 or progress == 100:
-                if self.__browser.url().scheme() == "https":
-                    if QSslCertificate is not None:
-                        if self.__browser.page().hasValidSslInfo():
-                            backgroundColor = Preferences.getHelp(
-                                "SaveUrlColor")
-                    else:
-                        backgroundColor = Preferences.getHelp("SaveUrlColor")
-                p.setBrush(QPalette.Base, backgroundColor)
-                p.setBrush(QPalette.Text, foregroundColor)
-            else:
-                if self.__browser.url().scheme() == "https":
-                    if QSslCertificate is not None:
-                        if self.__browser.page().hasValidSslInfo():
-                            backgroundColor = Preferences.getHelp(
-                                "SaveUrlColor")
-                    else:
-                        backgroundColor = Preferences.getHelp("SaveUrlColor")
-                highlight = QApplication.palette().color(QPalette.Highlight)
-                r = (highlight.red() + 2 * backgroundColor.red()) // 3
-                g = (highlight.green() + 2 * backgroundColor.green()) // 3
-                b = (highlight.blue() + 2 * backgroundColor.blue()) // 3
-                
-                loadingColor = QColor(r, g, b)
-                if abs(loadingColor.lightness() -
-                        backgroundColor.lightness()) < 20:
-                    # special handling for special color schemes (e.g Gaia)
-                    r = (2 * highlight.red() + backgroundColor.red()) // 3
-                    g = (2 * highlight.green() + backgroundColor.green()) // 3
-                    b = (2 * highlight.blue() + backgroundColor.blue()) // 3
-                    loadingColor = QColor(r, g, b)
-                
-                gradient = QLinearGradient(
-                    QPointF(0, 0), QPointF(self.width(), 0))
-                gradient.setColorAt(0, loadingColor)
-                gradient.setColorAt(progress / 100.0 - 0.000001, loadingColor)
-                gradient.setColorAt(progress / 100.0, backgroundColor)
-                p.setBrush(QPalette.Base, gradient)
-            
-            self.setPalette(p)
-        
-        E5LineEdit.paintEvent(self, evt)
-    
-    def focusOutEvent(self, evt):
-        """
-        Protected method to handle focus out event.
-        
-        @param evt reference to the focus event (QFocusEvent)
-        """
-        if self.text() == "" and self.__browser is not None:
-            self.__browserUrlChanged(self.__browser.url())
-        E5LineEdit.focusOutEvent(self, evt)
-    
-    def mousePressEvent(self, evt):
-        """
-        Protected method called by a mouse press event.
-        
-        @param evt reference to the mouse event (QMouseEvent)
-        """
-        if evt.button() == Qt.XButton1:
-            self.__mw.currentBrowser().pageAction(QWebPage.Back).trigger()
-        elif evt.button() == Qt.XButton2:
-            self.__mw.currentBrowser().pageAction(QWebPage.Forward).trigger()
-        else:
-            super(UrlBar, self).mousePressEvent(evt)
-    
-    def mouseDoubleClickEvent(self, evt):
-        """
-        Protected method to handle mouse double click events.
-        
-        @param evt reference to the mouse event (QMouseEvent)
-        """
-        if evt.button() == Qt.LeftButton:
-            self.selectAll()
-        else:
-            E5LineEdit.mouseDoubleClickEvent(self, evt)
-    
-    def keyPressEvent(self, evt):
-        """
-        Protected method to handle key presses.
-        
-        @param evt reference to the key press event (QKeyEvent)
-        """
-        if evt.key() == Qt.Key_Escape:
-            if self.__browser is not None:
-                self.setText(
-                    str(self.__browser.url().toEncoded(), encoding="utf-8"))
-                self.selectAll()
-            completer = self.completer()
-            if completer:
-                completer.popup().hide()
-            return
-        
-        currentText = self.text().strip()
-        if evt.key() in [Qt.Key_Enter, Qt.Key_Return] and \
-           not currentText.lower().startswith("http://"):
-            append = ""
-            if evt.modifiers() == Qt.KeyboardModifiers(Qt.ControlModifier):
-                append = ".com"
-            elif evt.modifiers() == Qt.KeyboardModifiers(
-                    Qt.ControlModifier | Qt.ShiftModifier):
-                append = ".org"
-            elif evt.modifiers() == Qt.KeyboardModifiers(Qt.ShiftModifier):
-                append = ".net"
-            
-            if append != "":
-                url = QUrl("http://www." + currentText)
-                host = url.host()
-                if not host.lower().endswith(append):
-                    host += append
-                    url.setHost(host)
-                    self.setText(url.toString())
-        
-        E5LineEdit.keyPressEvent(self, evt)
-    
-    def dragEnterEvent(self, evt):
-        """
-        Protected method to handle drag enter events.
-        
-        @param evt reference to the drag enter event (QDragEnterEvent)
-        """
-        mimeData = evt.mimeData()
-        if mimeData.hasUrls() or mimeData.hasText():
-            evt.acceptProposedAction()
-        
-        E5LineEdit.dragEnterEvent(self, evt)
-    
-    def dropEvent(self, evt):
-        """
-        Protected method to handle drop events.
-        
-        @param evt reference to the drop event (QDropEvent)
-        """
-        mimeData = evt.mimeData()
-        
-        url = QUrl()
-        if mimeData.hasUrls():
-            url = mimeData.urls()[0]
-        elif mimeData.hasText():
-            url = QUrl.fromEncoded(mimeData.text().encode("utf-8"),
-                                   QUrl.TolerantMode)
-        
-        if url.isEmpty() or not url.isValid():
-            E5LineEdit.dropEvent(self, evt)
-            return
-        
-        self.setText(str(url.toEncoded(), encoding="utf-8"))
-        self.selectAll()
-        
-        evt.acceptProposedAction()
-    
-    def __rssClicked(self):
-        """
-        Private slot to handle clicking the RSS icon.
-        """
-        from Helpviewer.Feeds.FeedsDialog import FeedsDialog
-        feeds = self.__browser.getRSS()
-        dlg = FeedsDialog(feeds, self.__browser)
-        dlg.exec_()

eric ide

mercurial