WebBrowser/SiteInfo/SiteInfoWidget.py

changeset 6695
0a51887c13cd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/SiteInfo/SiteInfoWidget.py	Sun Feb 03 16:10:39 2019 +0100
@@ -0,0 +1,188 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a widget to show some site information.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, Qt, QPoint
+from PyQt5.QtWidgets import QMenu, QGridLayout, QHBoxLayout, QLabel, QFrame, \
+    QSizePolicy, QPushButton, QSpacerItem
+
+import UI.PixmapCache
+
+from WebBrowser.WebBrowserWindow import WebBrowserWindow
+
+
+class SiteInfoWidget(QMenu):
+    """
+    Class implementing a widget to show SSL certificate infos.
+    """
+    def __init__(self, browser, parent=None):
+        """
+        Constructor
+        
+        @param browser reference to the browser view
+        @type WebBrowserView
+        @param parent reference to the parent object
+        @type QWidget
+        """
+        super(SiteInfoWidget, self).__init__(parent)
+        
+        self.__browser = browser
+        url = browser.url()
+        
+        self.setMinimumWidth(400)
+        
+        layout = QGridLayout(self)
+        rows = 0
+        
+        titleLabel = QLabel(self)
+        titleLabel.setText(self.tr("<b>Site {0}</b>").format(url.host()))
+        layout.addWidget(titleLabel, rows, 0, 1, -1, Qt.AlignCenter)
+        rows += 1
+        
+        line = QFrame(self)
+        line.setLineWidth(1)
+        line.setFrameStyle(QFrame.HLine | QFrame.Sunken)
+        layout.addWidget(line, rows, 0, 1, -1)
+        rows += 1
+        
+        secureIcon = QLabel()
+        layout.addWidget(secureIcon, rows, 0, Qt.AlignCenter)
+        secureLabel = QLabel()
+        secureLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+        layout.addWidget(secureLabel, rows, 1)
+        if url.scheme() in ["https"]:
+            secureLabel.setText(
+                self.tr("Your connection to this site is <b>secure</b>."))
+            secureIcon.setPixmap(
+                UI.PixmapCache.getPixmap("securityHigh.png"))
+        else:
+            secureLabel.setText(
+                self.tr("Your connection to this site is <b>not secure</b>."))
+            secureIcon.setPixmap(
+                UI.PixmapCache.getPixmap("securityLow.png"))
+        rows += 1
+        
+        visits = WebBrowserWindow.historyManager().siteVisitsCount(
+            url.scheme(), url.host())
+        historyIcon = QLabel()
+        layout.addWidget(historyIcon, rows, 0, Qt.AlignCenter)
+        historyLabel = QLabel()
+        historyLabel.setSizePolicy(QSizePolicy.Expanding,
+                                   QSizePolicy.Preferred)
+        layout.addWidget(historyLabel, rows, 1)
+        if visits > 3:
+            historyLabel.setText(
+                self.tr("This is your <b>{0}.</b> visit of this site.")
+                .format(visits))
+            historyIcon.setPixmap(
+                UI.PixmapCache.getPixmap("flagGreen.png"))
+        elif visits == 0:
+            historyLabel.setText(
+                self.tr("You have <b>never</b> visited this site before.")
+                .format(visits))
+            historyIcon.setPixmap(
+                UI.PixmapCache.getPixmap("flagBlack.png"))
+        else:
+            historyIcon.setPixmap(
+                UI.PixmapCache.getPixmap("flagYellow.png"))
+            if visits == 1:
+                visitStr = self.tr("first")
+            elif visits == 2:
+                visitStr = self.tr("second")
+            else:
+                visitStr = self.tr("third")
+            historyLabel.setText(
+                self.tr("This is your <b>{0}</b> visit of this site.")
+                .format(visitStr))
+        rows += 1
+        
+        line = QFrame(self)
+        line.setLineWidth(1)
+        line.setFrameStyle(QFrame.HLine | QFrame.Sunken)
+        layout.addWidget(line, rows, 0, 1, -1)
+        rows += 1
+        
+        page = self.__browser.page()
+        scheme = page.registerProtocolHandlerRequestScheme()
+        registeredUrl = WebBrowserWindow.protocolHandlerManager()\
+            .protocolHandler(scheme)
+        if bool(scheme) and \
+           registeredUrl != page.registerProtocolHandlerRequestUrl():
+            horizontalLayout = QHBoxLayout()
+            protocolHandlerLabel = QLabel(
+                self.tr("Register as <b>{0}</b> links handler.")
+                .format(scheme), self)
+            protocolHandlerLabel.setSizePolicy(QSizePolicy.Expanding,
+                                               QSizePolicy.Preferred)
+            
+            horizontalLayout.addWidget(protocolHandlerLabel)
+            protocolHandlerButton = QPushButton(self.tr("Register"), self)
+            horizontalLayout.addWidget(protocolHandlerButton)
+            protocolHandlerButton.clicked.connect(
+                self.__registerProtocolHandler)
+            layout.addLayout(horizontalLayout, rows, 0, 1, -1)
+            rows += 1
+            
+            protocolHandlerLine = QFrame(self)
+            protocolHandlerLine.setLineWidth(1)
+            protocolHandlerLine.setFrameStyle(QFrame.HLine | QFrame.Sunken)
+            layout.addWidget(protocolHandlerLine, rows, 0, 1, -1)
+            rows += 1
+        
+        horizontalLayout = QHBoxLayout()
+        spacerItem = QSpacerItem(
+            40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+        horizontalLayout.addItem(spacerItem)
+        moreButton = QPushButton(self.tr("More..."), self)
+        horizontalLayout.addWidget(moreButton)
+        moreButton.clicked.connect(self.__showSiteInfo)
+        layout.addLayout(horizontalLayout, rows, 0, 1, -1)
+    
+    def showAt(self, pos):
+        """
+        Public method to show the widget.
+        
+        @param pos position to show at
+        @type QPoint
+        """
+        self.adjustSize()
+        xpos = pos.x() - self.width() // 2
+        if xpos < 0:
+            xpos = 10
+        p = QPoint(xpos, pos.y() + 10)
+        self.move(p)
+        self.show()
+    
+    def accept(self):
+        """
+        Public method to accept the widget.
+        """
+        self.close()
+    
+    @pyqtSlot()
+    def __showSiteInfo(self):
+        """
+        Private slot to show the site info dialog.
+        """
+        from .SiteInfoDialog import SiteInfoDialog
+        siteinfoDialog = SiteInfoDialog(
+            self.__browser, self.__browser.mainWindow())
+        siteinfoDialog.show()
+    
+    @pyqtSlot()
+    def __registerProtocolHandler(self):
+        """
+        Private slot to register a protocol handler.
+        """
+        self.close()
+        page = self.__browser.page()
+        WebBrowserWindow.protocolHandlerManager().addProtocolHandler(
+            page.registerProtocolHandlerRequestScheme(),
+            page.registerProtocolHandlerRequestUrl())

eric ide

mercurial