src/eric7/WebBrowser/UrlBar/UrlBar.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
--- a/src/eric7/WebBrowser/UrlBar/UrlBar.py	Wed Jul 13 11:16:20 2022 +0200
+++ b/src/eric7/WebBrowser/UrlBar/UrlBar.py	Wed Jul 13 14:55:47 2022 +0200
@@ -11,10 +11,11 @@
 from PyQt6.QtGui import QColor, QPalette, QIcon
 from PyQt6.QtWidgets import QDialog, QApplication, QLineEdit
 from PyQt6.QtWebEngineCore import QWebEnginePage
+
 try:
-    from PyQt6.QtNetwork import QSslCertificate     # __IGNORE_EXCEPTION__
+    from PyQt6.QtNetwork import QSslCertificate  # __IGNORE_EXCEPTION__
 except ImportError:
-    QSslCertificate = None      # __IGNORE_WARNING__
+    QSslCertificate = None  # __IGNORE_WARNING__
 
 from EricWidgets.EricLineEdit import EricClearableLineEdit, EricLineEditSide
 
@@ -34,10 +35,11 @@
     """
     Class implementing a line edit for entering URLs.
     """
+
     def __init__(self, mainWindow, parent=None):
         """
         Constructor
-        
+
         @param mainWindow reference to the main window
         @type WebBrowserWindow
         @param parent reference to the parent widget
@@ -46,97 +48,93 @@
         super().__init__(parent)
         self.setPlaceholderText(self.tr("Enter the URL here."))
         self.setWhatsThis(self.tr("Enter the URL here."))
-        
+
         self.__mw = mainWindow
         self.__browser = None
         self.__privateMode = WebBrowserWindow.isPrivate()
-        
+
         self.__bmActiveIcon = UI.PixmapCache.getIcon("bookmark16")
         self.__bmInactiveIcon = QIcon(
-            self.__bmActiveIcon.pixmap(16, 16, QIcon.Mode.Disabled))
-        
+            self.__bmActiveIcon.pixmap(16, 16, QIcon.Mode.Disabled)
+        )
+
         self.__safeBrowsingLabel = SafeBrowsingLabel(self)
         self.addWidget(self.__safeBrowsingLabel, EricLineEditSide.LEFT)
         self.__safeBrowsingLabel.setVisible(False)
-        
+
         self.__favicon = FavIconLabel(self)
         self.addWidget(self.__favicon, EricLineEditSide.LEFT)
-        
+
         self.__sslLabel = SslLabel(self)
         self.addWidget(self.__sslLabel, EricLineEditSide.LEFT)
         self.__sslLabel.setVisible(False)
-        
+
         self.__rssAction = self.addAction(
-            UI.PixmapCache.getIcon("rss16"),
-            QLineEdit.ActionPosition.TrailingPosition)
+            UI.PixmapCache.getIcon("rss16"), QLineEdit.ActionPosition.TrailingPosition
+        )
         self.__rssAction.setVisible(False)
-        
+
         self.__bookmarkAction = self.addAction(
-            self.__bmInactiveIcon,
-            QLineEdit.ActionPosition.TrailingPosition)
+            self.__bmInactiveIcon, QLineEdit.ActionPosition.TrailingPosition
+        )
         self.__bookmarkAction.setVisible(False)
-        
+
         self.__safeBrowsingLabel.clicked.connect(self.__showThreatInfo)
         self.__bookmarkAction.triggered.connect(self.__showBookmarkInfo)
         self.__rssAction.triggered.connect(self.__rssTriggered)
-        
-        self.__mw.bookmarksManager().entryChanged.connect(
-            self.__bookmarkChanged)
-        self.__mw.bookmarksManager().entryAdded.connect(
-            self.__bookmarkChanged)
-        self.__mw.bookmarksManager().entryRemoved.connect(
-            self.__bookmarkChanged)
-        self.__mw.speedDial().pagesChanged.connect(
-            self.__bookmarkChanged)
-    
+
+        self.__mw.bookmarksManager().entryChanged.connect(self.__bookmarkChanged)
+        self.__mw.bookmarksManager().entryAdded.connect(self.__bookmarkChanged)
+        self.__mw.bookmarksManager().entryRemoved.connect(self.__bookmarkChanged)
+        self.__mw.speedDial().pagesChanged.connect(self.__bookmarkChanged)
+
     def setBrowser(self, browser):
         """
         Public method to set the browser connection.
-        
+
         @param browser reference to the browser widget
         @type WebBrowserView
         """
         self.__browser = browser
         self.__favicon.setBrowser(browser)
-        
+
         self.__browser.urlChanged.connect(self.__browserUrlChanged)
         self.__browser.loadProgress.connect(self.__loadProgress)
         self.__browser.loadFinished.connect(self.__loadFinished)
         self.__browser.loadStarted.connect(self.__loadStarted)
-        
-        self.__browser.safeBrowsingBad.connect(
-            self.__safeBrowsingLabel.setThreatInfo)
-        
+
+        self.__browser.safeBrowsingBad.connect(self.__safeBrowsingLabel.setThreatInfo)
+
         self.__sslLabel.clicked.connect(self.__browser.page().showSslInfo)
         self.__browser.page().sslConfigurationChanged.connect(
-            self.__sslConfigurationChanged)
-    
+            self.__sslConfigurationChanged
+        )
+
     def browser(self):
         """
         Public method to get the associated browser.
-       
+
         @return reference to the associated browser
         @rtype WebBrowserView
         """
         return self.__browser
-    
+
     @pyqtSlot(QUrl)
     def __browserUrlChanged(self, url):
         """
         Private slot to handle a URL change of the associated browser.
-        
+
         @param url new URL of the browser
         @type QUrl
         """
         strUrl = url.toString()
-        if strUrl in ["eric:speeddial", "eric:home",
-                      "about:blank", "about:config"]:
+        if strUrl in ["eric:speeddial", "eric:home", "about:blank", "about:config"]:
             strUrl = ""
-        
+
         if self.text() != strUrl:
             self.setText(strUrl)
         self.setCursorPosition(0)
-    
+
     @pyqtSlot()
     def __checkBookmark(self):
         """
@@ -147,14 +145,16 @@
             self.__bookmarkAction.setIcon(self.__bmActiveIcon)
             bookmarks = manager.bookmarksForUrl(self.__browser.url())
             from WebBrowser.Bookmarks.BookmarkNode import BookmarkNode
+
             for bookmark in bookmarks:
-                manager.setTimestamp(bookmark, BookmarkNode.TsVisited,
-                                     QDateTime.currentDateTime())
+                manager.setTimestamp(
+                    bookmark, BookmarkNode.TsVisited, QDateTime.currentDateTime()
+                )
         elif self.__mw.speedDial().pageForUrl(self.__browser.url()).url != "":
             self.__bookmarkAction.setIcon(self.__bmActiveIcon)
         else:
             self.__bookmarkAction.setIcon(self.__bmInactiveIcon)
-    
+
     @pyqtSlot()
     def __loadStarted(self):
         """
@@ -163,57 +163,52 @@
         self.__bookmarkAction.setVisible(False)
         self.__rssAction.setVisible(False)
         self.__sslLabel.setVisible(False)
-    
+
     @pyqtSlot(int)
     def __loadProgress(self, progress):
         """
         Private slot to track the load progress.
-        
+
         @param progress load progress in percent
         @type int
         """
         foregroundColor = QApplication.palette().color(QPalette.ColorRole.Text)
-        
+
         backgroundColor = (
             Preferences.getWebBrowser("PrivateModeUrlColor")
-            if self.__privateMode else
-            QApplication.palette().color(QPalette.ColorRole.Base)
+            if self.__privateMode
+            else QApplication.palette().color(QPalette.ColorRole.Base)
         )
-        
+
         if not self.__browser.getSafeBrowsingStatus():
             # malicious web site
-            backgroundColor = Preferences.getWebBrowser(
-                "MaliciousUrlColor")
+            backgroundColor = Preferences.getWebBrowser("MaliciousUrlColor")
         elif self.__browser.url().scheme() == "https":
             if WebBrowserWindow.networkManager().isInsecureHost(
                 self.__browser.url().host()
             ):
-                backgroundColor = Preferences.getWebBrowser(
-                    "InsecureUrlColor")
+                backgroundColor = Preferences.getWebBrowser("InsecureUrlColor")
             else:
-                backgroundColor = Preferences.getWebBrowser(
-                    "SecureUrlColor")
-        
+                backgroundColor = Preferences.getWebBrowser("SecureUrlColor")
+
         if progress in (0, 100):
             styleSheet = (
                 f"color: {foregroundColor.name()}; "
                 f"background-color: {backgroundColor.name()};"
             )
         else:
-            highlight = QApplication.palette().color(
-                QPalette.ColorRole.Highlight)
+            highlight = QApplication.palette().color(QPalette.ColorRole.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:
+            if abs(loadingColor.lightness() - backgroundColor.lightness()) < 20:
                 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)
-            
+
             styleSheet = (
                 f"color: {foregroundColor.name()}; "
                 f"background-color: qlineargradient("
@@ -223,15 +218,15 @@
                 f"stop: {progress / 100.0 + 0.001} {backgroundColor.name()}, "
                 f"stop: 1 {backgroundColor.name()});"
             )
-        
+
         self.setStyleSheet(styleSheet)
         self.repaint()
-    
+
     @pyqtSlot(bool)
     def __loadFinished(self, ok):
         """
         Private slot to set some data after the page was loaded.
-        
+
         @param ok flag indicating a successful load
         @type bool
         """
@@ -240,29 +235,27 @@
         else:
             self.__checkBookmark()
             self.__bookmarkAction.setVisible(True)
-        
+
         self.__browserUrlChanged(self.__browser.url())
-        self.__safeBrowsingLabel.setVisible(
-            not self.__browser.getSafeBrowsingStatus())
-        
+        self.__safeBrowsingLabel.setVisible(not self.__browser.getSafeBrowsingStatus())
+
         if ok:
             QTimer.singleShot(0, self.__setRssButton)
-    
+
     @pyqtSlot()
     def preferencesChanged(self):
         """
         Public slot to handle a change of preferences.
         """
         self.update()
-    
+
     @pyqtSlot()
     def __showBookmarkInfo(self):
         """
         Private slot to show a dialog with some bookmark info.
         """
-        from .BookmarkActionSelectionDialog import (
-            BookmarkActionSelectionDialog
-        )
+        from .BookmarkActionSelectionDialog import BookmarkActionSelectionDialog
+
         url = self.__browser.url()
         dlg = BookmarkActionSelectionDialog(url)
         if dlg.exec() == QDialog.DialogCode.Accepted:
@@ -270,56 +263,54 @@
             if action == BookmarkActionSelectionDialog.AddBookmark:
                 self.__browser.addBookmark()
             elif action == BookmarkActionSelectionDialog.EditBookmark:
-                bookmark = (
-                    self.__mw.bookmarksManager().bookmarkForUrl(url)
-                )
+                bookmark = self.__mw.bookmarksManager().bookmarkForUrl(url)
                 from .BookmarkInfoDialog import BookmarkInfoDialog
+
                 dlg = BookmarkInfoDialog(bookmark, self.__browser)
                 dlg.exec()
             elif action == BookmarkActionSelectionDialog.AddSpeeddial:
-                self.__mw.speedDial().addPage(
-                    url, self.__browser.title())
+                self.__mw.speedDial().addPage(url, self.__browser.title())
             elif action == BookmarkActionSelectionDialog.RemoveSpeeddial:
                 self.__mw.speedDial().removePage(url)
-    
+
     @pyqtSlot()
     def __bookmarkChanged(self):
         """
         Private slot to handle bookmark or speed dial changes.
         """
         self.__checkBookmark()
-    
+
     def focusOutEvent(self, evt):
         """
         Protected method to handle focus out event.
-        
+
         @param evt reference to the focus event
         @type QFocusEvent
         """
         if self.text() == "" and self.__browser is not None:
             self.__browserUrlChanged(self.__browser.url())
         super().focusOutEvent(evt)
-    
+
     def mousePressEvent(self, evt):
         """
         Protected method called by a mouse press event.
-        
+
         @param evt reference to the mouse event
         @type QMouseEvent
         """
         if evt.button() == Qt.MouseButton.XButton1:
-            self.__mw.currentBrowser().triggerPageAction(
-                QWebEnginePage.WebAction.Back)
+            self.__mw.currentBrowser().triggerPageAction(QWebEnginePage.WebAction.Back)
         elif evt.button() == Qt.MouseButton.XButton2:
             self.__mw.currentBrowser().triggerPageAction(
-                QWebEnginePage.WebAction.Forward)
+                QWebEnginePage.WebAction.Forward
+            )
         else:
             super().mousePressEvent(evt)
-    
+
     def mouseDoubleClickEvent(self, evt):
         """
         Protected method to handle mouse double click events.
-        
+
         @param evt reference to the mouse event
         @type QMouseEvent
         """
@@ -327,42 +318,38 @@
             self.selectAll()
         else:
             super().mouseDoubleClickEvent(evt)
-    
+
     def keyPressEvent(self, evt):
         """
         Protected method to handle key presses.
-        
+
         @param evt reference to the key press event
         @type QKeyEvent
         """
         if evt.key() == Qt.Key.Key_Escape:
             if self.__browser is not None:
-                self.setText(
-                    str(self.__browser.url().toEncoded(), encoding="utf-8"))
+                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.Key_Enter, Qt.Key.Key_Return] and
-            not currentText.lower().startswith(("http://", "https://"))
-        ):
+        if evt.key() in [
+            Qt.Key.Key_Enter,
+            Qt.Key.Key_Return,
+        ] and not currentText.lower().startswith(("http://", "https://")):
             append = ""
             if evt.modifiers() == Qt.KeyboardModifier.ControlModifier:
                 append = ".com"
-            elif (
-                evt.modifiers() == (
-                    Qt.KeyboardModifier.ControlModifier |
-                    Qt.KeyboardModifier.ShiftModifier
-                )
+            elif evt.modifiers() == (
+                Qt.KeyboardModifier.ControlModifier | Qt.KeyboardModifier.ShiftModifier
             ):
                 append = ".org"
             elif evt.modifiers() == Qt.KeyboardModifier.ShiftModifier:
                 append = ".net"
-            
+
             if append != "":
                 url = QUrl("http://www." + currentText)
                 host = url.host()
@@ -370,80 +357,83 @@
                     host += append
                     url.setHost(host)
                     self.setText(url.toString())
-        
+
         super().keyPressEvent(evt)
-    
+
     def dragEnterEvent(self, evt):
         """
         Protected method to handle drag enter events.
-        
+
         @param evt reference to the drag enter event
         @type QDragEnterEvent
         """
         mimeData = evt.mimeData()
         if mimeData.hasUrls() or mimeData.hasText():
             evt.acceptProposedAction()
-        
+
         super().dragEnterEvent(evt)
-    
+
     def dropEvent(self, evt):
         """
         Protected method to handle drop events.
-        
+
         @param evt reference to the drop event
         @type 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.ParsingMode.TolerantMode)
-        
+            url = QUrl.fromEncoded(
+                mimeData.text().encode("utf-8"), QUrl.ParsingMode.TolerantMode
+            )
+
         if url.isEmpty() or not url.isValid():
             super().dropEvent(evt)
             return
-        
+
         self.setText(str(url.toEncoded(), encoding="utf-8"))
         self.selectAll()
-        
+
         evt.acceptProposedAction()
-    
+
     @pyqtSlot()
     def __setRssButton(self):
         """
         Private slot to show the RSS button.
         """
         self.__rssAction.setVisible(self.__browser.checkRSS())
-    
+
     @pyqtSlot()
     def __rssTriggered(self):
         """
         Private slot to handle clicking the RSS icon.
         """
         from WebBrowser.Feeds.FeedsDialog import FeedsDialog
+
         feeds = self.__browser.getRSS()
         dlg = FeedsDialog(feeds, self.__browser)
         dlg.exec()
-    
+
     @pyqtSlot(QPoint)
     def __showThreatInfo(self, pos):
         """
         Private slot to show the threat info widget.
-        
+
         @param pos position to show the info at
         @type QPoint
         """
         threatInfo = self.__safeBrowsingLabel.getThreatInfo()
         if threatInfo:
             from WebBrowser.SafeBrowsing.SafeBrowsingInfoWidget import (
-                SafeBrowsingInfoWidget
+                SafeBrowsingInfoWidget,
             )
+
             widget = SafeBrowsingInfoWidget(threatInfo, self.__browser)
             widget.showAt(pos)
-    
+
     @pyqtSlot()
     def __sslConfigurationChanged(self):
         """
@@ -454,13 +444,21 @@
         if sslConfiguration is not None and QSslCertificate is not None:
             sslCertificate = self.__browser.page().getSslCertificate()
             if sslCertificate is not None:
-                org = Utilities.decodeString(", ".join(
-                    sslCertificate.subjectInfo(
-                        QSslCertificate.SubjectInfo.Organization)))
+                org = Utilities.decodeString(
+                    ", ".join(
+                        sslCertificate.subjectInfo(
+                            QSslCertificate.SubjectInfo.Organization
+                        )
+                    )
+                )
                 if org == "":
-                    cn = Utilities.decodeString(", ".join(
-                        sslCertificate.subjectInfo(
-                            QSslCertificate.SubjectInfo.CommonName)))
+                    cn = Utilities.decodeString(
+                        ", ".join(
+                            sslCertificate.subjectInfo(
+                                QSslCertificate.SubjectInfo.CommonName
+                            )
+                        )
+                    )
                     if cn != "":
                         org = cn.split(".", 1)[1]
                     if org == "":

eric ide

mercurial