eric6/Helpviewer/FeaturePermissions/FeaturePermissionBar.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2015 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the feature permission bar widget.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import pyqtSlot
13 from PyQt5.QtWidgets import QLabel, QHBoxLayout, QPushButton
14 from PyQt5.QtWebKitWidgets import QWebPage
15
16 from E5Gui.E5AnimatedWidget import E5AnimatedWidget
17
18 import Helpviewer
19
20 import UI.PixmapCache
21
22
23 class FeaturePermissionBar(E5AnimatedWidget):
24 """
25 Class implementing the feature permission bar widget.
26 """
27 DefaultHeight = 30
28
29 def __init__(self, view, frame, feature):
30 """
31 Constructor
32
33 @param view reference to the web view
34 @type QWebView
35 @param frame frame sending the request
36 @type QWebFrame
37 @param feature requested feature
38 @type QWebPage.Feature
39 """
40 super(FeaturePermissionBar, self).__init__(parent=view)
41
42 self.__frame = frame
43 self.__feature = feature
44 self.__view = view
45
46 self.__permissionFeatureTexts = {
47 QWebPage.Notifications:
48 self.tr("{0} wants to use desktop notifications."),
49 QWebPage.Geolocation:
50 self.tr("{0} wants to use your position.")
51 }
52 self.__permissionFeatureIconNames = {
53 QWebPage.Notifications: "notification.png",
54 QWebPage.Geolocation: "geolocation.png",
55 }
56
57 self.setAutoFillBackground(True)
58 self.__layout = QHBoxLayout()
59 self.setLayout(self.__layout)
60 self.__layout.setContentsMargins(9, 0, 0, 0)
61 self.__iconLabel = QLabel(self)
62 self.__layout.addWidget(self.__iconLabel)
63 self.__messageLabel = QLabel(self)
64 self.__layout.addWidget(self.__messageLabel)
65 self.__layout.addStretch()
66 self.__rememberButton = QPushButton(self.tr("Remember"), self)
67 self.__rememberButton.setCheckable(True)
68 self.__allowButton = QPushButton(self.tr("Allow"), self)
69 self.__denyButton = QPushButton(self.tr("Deny"), self)
70 self.__discardButton = QPushButton(UI.PixmapCache.getIcon("close.png"),
71 "", self)
72 self.__allowButton.clicked.connect(self.__permissionGranted)
73 self.__denyButton.clicked.connect(self.__permissionDenied)
74 self.__discardButton.clicked.connect(self.__permissionUnknown)
75 self.__layout.addWidget(self.__rememberButton)
76 self.__layout.addWidget(self.__allowButton)
77 self.__layout.addWidget(self.__denyButton)
78 self.__layout.addWidget(self.__discardButton)
79
80 try:
81 self.__iconLabel.setPixmap(UI.PixmapCache.getPixmap(
82 self.__permissionFeatureIconNames[self.__feature]))
83 except KeyError:
84 pass
85
86 try:
87 self.__messageLabel.setText(
88 self.__permissionFeatureTexts[self.__feature].format(
89 self.__frame.securityOrigin().host()))
90 except KeyError:
91 self.__messageLabel.setText(
92 self.tr("{0} wants to use an unknown feature.").format(
93 self.__frame.securityOrigin().host()))
94
95 self.__view.page().loadStarted.connect(self.hide)
96
97 self.resize(view.width(), self.height())
98 self.startAnimation()
99
100 @pyqtSlot()
101 def hide(self):
102 """
103 Public slot to hide the animated widget.
104 """
105 self.__view.page().loadStarted.disconnect(self.hide)
106 super(FeaturePermissionBar, self).hide()
107
108 def __permissionDenied(self):
109 """
110 Private slot handling the user pressing the deny button.
111 """
112 if self.__frame is None or self.__frame.page() is None:
113 return
114
115 page = self.__frame.page()
116 page.setFeaturePermission(self.__frame, self.__feature,
117 QWebPage.PermissionDeniedByUser)
118
119 if self.__rememberButton.isChecked():
120 Helpviewer.HelpWindow.HelpWindow.featurePermissionManager()\
121 .rememberFeaturePermission(page.url().host(), self.__feature,
122 QWebPage.PermissionDeniedByUser)
123
124 self.hide()
125
126 def __permissionGranted(self):
127 """
128 Private slot handling the user pressing the allow button.
129 """
130 if self.__frame is None or self.__frame.page() is None:
131 return
132
133 page = self.__frame.page()
134 page.setFeaturePermission(self.__frame, self.__feature,
135 QWebPage.PermissionGrantedByUser)
136
137 if self.__rememberButton.isChecked():
138 Helpviewer.HelpWindow.HelpWindow.featurePermissionManager()\
139 .rememberFeaturePermission(page.url().host(), self.__feature,
140 QWebPage.PermissionGrantedByUser)
141
142 self.hide()
143
144 def __permissionUnknown(self):
145 """
146 Private slot handling the user closing the dialog without.
147 """
148 if self.__frame is None or self.__frame.page() is None:
149 return
150
151 page = self.__frame.page()
152 page.setFeaturePermission(self.__frame, self.__feature,
153 QWebPage.PermissionUnknown)
154 self.hide()

eric ide

mercurial