Helpviewer/FeaturePermissionBar.py

Wed, 05 Aug 2015 19:45:33 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 05 Aug 2015 19:45:33 +0200
changeset 4353
cff7e27fb7b8
parent 4332
64034d85c709
permissions
-rw-r--r--

Added the E5AnimatedWidget class and changed FeaturePermissionBar to use it.

# -*- 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 pyqtSignal
from PyQt5.QtWidgets import QLabel, QHBoxLayout, QPushButton
from PyQt5.QtWebKitWidgets import QWebFrame, QWebPage

from E5Gui.E5AnimatedWidget import E5AnimatedWidget

import UI.PixmapCache


class FeaturePermissionBar(E5AnimatedWidget):
    """
    Class implementing the feature permission bar widget.
    """
    featurePermissionProvided = pyqtSignal(QWebFrame, QWebPage.Feature,
                                           QWebPage.PermissionPolicy)
    
    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.__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.__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.resize(view.width(), self.height())
        self.startAnimation()
    
    def __permissionDenied(self):
        """
        Private slot handling the user pressing the deny button.
        """
        self.featurePermissionProvided.emit(self.__frame, self.__feature,
                                            QWebPage.PermissionDeniedByUser)
        self.hide()
    
    def __permissionGranted(self):
        """
        Private slot handling the user pressing the allow button.
        """
        self.featurePermissionProvided.emit(self.__frame, self.__feature,
                                            QWebPage.PermissionGrantedByUser)
        self.hide()
    
    def __permissionUnknown(self):
        """
        Private slot handling the user closing the dialog without.
        """
        self.featurePermissionProvided.emit(self.__frame, self.__feature,
                                            QWebPage.PermissionUnknown)
        self.hide()

eric ide

mercurial