Helpviewer/FeaturePermissions/FeaturePermissionBar.py

changeset 4355
40ec6bef4c22
child 4356
975993ebd7fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Helpviewer/FeaturePermissions/FeaturePermissionBar.py	Thu Aug 06 19:01:39 2015 +0200
@@ -0,0 +1,142 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2015 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the feature permission bar widget.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtWidgets import QLabel, QHBoxLayout, QPushButton, QCheckBox
+from PyQt5.QtWebKitWidgets import QWebPage
+
+from E5Gui.E5AnimatedWidget import E5AnimatedWidget
+
+import Helpviewer
+
+import UI.PixmapCache
+
+
+class FeaturePermissionBar(E5AnimatedWidget):
+    """
+    Class implementing the feature permission bar widget.
+    """
+    DefaultHeight = 30
+    
+    def __init__(self, view, frame, feature):
+        """
+        Constructor
+        
+        @param view reference to the web view
+        @type QWebView
+        @param frame frame sending the request
+        @type QWebFrame
+        @param feature requested feature
+        @type QWebPage.Feature
+        """
+        super(FeaturePermissionBar, self).__init__(parent=view)
+        
+        self.__messageLabel = QLabel(self)
+        
+        self.__frame = frame
+        self.__feature = feature
+        self.__view = view
+        
+        self.__permissionFeatureTexts = {
+            QWebPage.Notifications:
+                self.tr("{0} wants to use desktop notifications."),
+            QWebPage.Geolocation:
+                self.tr("{0} wants to use your position.")
+        }
+        
+        self.setAutoFillBackground(True)
+        self.__layout = QHBoxLayout()
+        self.setLayout(self.__layout)
+        self.__layout.setContentsMargins(self.DefaultHeight, 0, 0, 0)
+        self.__layout.addWidget(self.__messageLabel)
+        self.__layout.addStretch()
+        self.__rememberCheckBox = QCheckBox(self.tr("Remember"), self)
+        self.__layout.addWidget(self.__rememberCheckBox)
+        self.__allowButton = QPushButton(self.tr("Allow"), self)
+        self.__denyButton = QPushButton(self.tr("Deny"), self)
+        self.__discardButton = QPushButton(UI.PixmapCache.getIcon("close.png"),
+                                           "", self)
+        self.__allowButton.clicked.connect(self.__permissionGranted)
+        self.__denyButton.clicked.connect(self.__permissionDenied)
+        self.__discardButton.clicked.connect(self.__permissionUnknown)
+        self.__layout.addWidget(self.__allowButton)
+        self.__layout.addWidget(self.__denyButton)
+        self.__layout.addWidget(self.__discardButton)
+        
+        try:
+            self.__messageLabel.setText(
+                self.__permissionFeatureTexts[self.__feature].format(
+                    self.__frame.securityOrigin().host()))
+        except KeyError:
+            self.__messageLabel.setText(
+                self.tr("{0} wants to use an unknown feature.").format(
+                    self.__frame.securityOrigin().host()))
+        
+        self.__view.page().loadStarted.connect(self.hide)
+        
+        self.resize(view.width(), self.height())
+        self.startAnimation()
+    
+    @pyqtSlot()
+    def hide(self):
+        """
+        Public slot to hide the animated widget.
+        """
+        self.__view.page().loadStarted.disconnect(self.hide)
+        super(FeaturePermissionBar, self).hide()
+    
+    def __permissionDenied(self):
+        """
+        Private slot handling the user pressing the deny button.
+        """
+        if self.__frame is None or self.__frame.page() is None:
+            return
+        
+        page = self.__frame.page()
+        page.setFeaturePermission(self.__frame, self.__feature,
+                                  QWebPage.PermissionDeniedByUser)
+        
+        if self.__rememberCheckBox.isChecked():
+            Helpviewer.HelpWindow.HelpWindow.featurePermissionManager()\
+                .rememberFeaturePermission(page.url().host(), self.__feature,
+                                           QWebPage.PermissionDeniedByUser)
+        
+        self.hide()
+    
+    def __permissionGranted(self):
+        """
+        Private slot handling the user pressing the allow button.
+        """
+        if self.__frame is None or self.__frame.page() is None:
+            return
+        
+        page = self.__frame.page()
+        page.setFeaturePermission(self.__frame, self.__feature,
+                                  QWebPage.PermissionGrantedByUser)
+        
+        if self.__rememberCheckBox.isChecked():
+            Helpviewer.HelpWindow.HelpWindow.featurePermissionManager()\
+                .rememberFeaturePermission(page.url().host(), self.__feature,
+                                           QWebPage.PermissionGrantedByUser)
+        
+        self.hide()
+    
+    def __permissionUnknown(self):
+        """
+        Private slot handling the user closing the dialog without.
+        """
+        if self.__frame is None or self.__frame.page() is None:
+            return
+        
+        page = self.__frame.page()
+        page.setFeaturePermission(self.__frame, self.__feature,
+                                  QWebPage.PermissionUnknown)
+        self.hide()

eric ide

mercurial