Mon, 30 Aug 2021 20:02:39 +0200
Next batch of changes for QtWebEngine as of Qt 6.2.0.
6695 | 1 | # -*- coding: utf-8 -*- |
2 | ||
7923
91e843545d9a
Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7781
diff
changeset
|
3 | # Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
6695 | 4 | # |
5 | ||
6 | """ | |
7 | Module implementing a widget to show some site information. | |
8 | """ | |
9 | ||
8318
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
10 | from PyQt6.QtCore import pyqtSlot, Qt, QPoint |
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
11 | from PyQt6.QtWidgets import ( |
7269
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
12 | QMenu, QGridLayout, QHBoxLayout, QLabel, QFrame, QSizePolicy, QPushButton, |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
13 | QSpacerItem |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
14 | ) |
6695 | 15 | |
16 | import UI.PixmapCache | |
17 | ||
18 | from WebBrowser.WebBrowserWindow import WebBrowserWindow | |
19 | ||
20 | ||
8556
766e1566cb74
Next batch of changes for QtWebEngine as of Qt 6.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
21 | # FIXME: don't use QMenu |
6695 | 22 | class SiteInfoWidget(QMenu): |
23 | """ | |
8556
766e1566cb74
Next batch of changes for QtWebEngine as of Qt 6.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
24 | Class implementing a widget to show site related infos. |
6695 | 25 | """ |
26 | def __init__(self, browser, parent=None): | |
27 | """ | |
28 | Constructor | |
29 | ||
30 | @param browser reference to the browser view | |
31 | @type WebBrowserView | |
32 | @param parent reference to the parent object | |
33 | @type QWidget | |
34 | """ | |
8218
7c09585bd960
Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8143
diff
changeset
|
35 | super().__init__(parent) |
6695 | 36 | |
37 | self.__browser = browser | |
38 | url = browser.url() | |
39 | ||
40 | self.setMinimumWidth(400) | |
41 | ||
42 | layout = QGridLayout(self) | |
43 | rows = 0 | |
44 | ||
45 | titleLabel = QLabel(self) | |
46 | titleLabel.setText(self.tr("<b>Site {0}</b>").format(url.host())) | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
47 | layout.addWidget(titleLabel, rows, 0, 1, -1, |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
48 | Qt.AlignmentFlag.AlignCenter) |
6695 | 49 | rows += 1 |
50 | ||
51 | line = QFrame(self) | |
52 | line.setLineWidth(1) | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
53 | line.setFrameStyle(QFrame.Shape.HLine | QFrame.Shadow.Sunken) |
6695 | 54 | layout.addWidget(line, rows, 0, 1, -1) |
55 | rows += 1 | |
56 | ||
57 | secureIcon = QLabel() | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
58 | layout.addWidget(secureIcon, rows, 0, Qt.AlignmentFlag.AlignCenter) |
6695 | 59 | secureLabel = QLabel() |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
60 | secureLabel.setSizePolicy(QSizePolicy.Policy.Expanding, |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
61 | QSizePolicy.Policy.Preferred) |
6695 | 62 | layout.addWidget(secureLabel, rows, 1) |
63 | if url.scheme() in ["https"]: | |
7565
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
64 | if WebBrowserWindow.networkManager().isInsecureHost(url.host()): |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
65 | secureLabel.setText( |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
66 | self.tr("Your connection to this site " |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
67 | "<b>may not be secure</b>.")) |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
68 | secureIcon.setPixmap( |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
69 | UI.PixmapCache.getPixmap("securityMedium")) |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
70 | else: |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
71 | secureLabel.setText( |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
72 | self.tr("Your connection to this site is <b>secure</b>.")) |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
73 | secureIcon.setPixmap( |
928373562e36
Implemented a preliminary fix for issue 328 showing the user an indication, if he made an exception for a certificate issue of a host.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7533
diff
changeset
|
74 | UI.PixmapCache.getPixmap("securityHigh")) |
6695 | 75 | else: |
76 | secureLabel.setText( | |
77 | self.tr("Your connection to this site is <b>not secure</b>.")) | |
78 | secureIcon.setPixmap( | |
7533
88261c96484b
Removed the '.png' extension from all call to get an icon or a pixmap from the PixmapCache because this is not needed anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
79 | UI.PixmapCache.getPixmap("securityLow")) |
6695 | 80 | rows += 1 |
81 | ||
82 | visits = WebBrowserWindow.historyManager().siteVisitsCount( | |
83 | url.scheme(), url.host()) | |
84 | historyIcon = QLabel() | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
85 | layout.addWidget(historyIcon, rows, 0, Qt.AlignmentFlag.AlignCenter) |
6695 | 86 | historyLabel = QLabel() |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
87 | historyLabel.setSizePolicy(QSizePolicy.Policy.Expanding, |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
88 | QSizePolicy.Policy.Preferred) |
6695 | 89 | layout.addWidget(historyLabel, rows, 1) |
90 | if visits > 3: | |
91 | historyLabel.setText( | |
92 | self.tr("This is your <b>{0}.</b> visit of this site.") | |
93 | .format(visits)) | |
94 | historyIcon.setPixmap( | |
7533
88261c96484b
Removed the '.png' extension from all call to get an icon or a pixmap from the PixmapCache because this is not needed anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
95 | UI.PixmapCache.getPixmap("flagGreen")) |
6695 | 96 | elif visits == 0: |
97 | historyLabel.setText( | |
98 | self.tr("You have <b>never</b> visited this site before.") | |
99 | .format(visits)) | |
100 | historyIcon.setPixmap( | |
7533
88261c96484b
Removed the '.png' extension from all call to get an icon or a pixmap from the PixmapCache because this is not needed anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
101 | UI.PixmapCache.getPixmap("flagBlack")) |
6695 | 102 | else: |
103 | historyIcon.setPixmap( | |
7533
88261c96484b
Removed the '.png' extension from all call to get an icon or a pixmap from the PixmapCache because this is not needed anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
104 | UI.PixmapCache.getPixmap("flagYellow")) |
6695 | 105 | if visits == 1: |
106 | visitStr = self.tr("first") | |
107 | elif visits == 2: | |
108 | visitStr = self.tr("second") | |
109 | else: | |
110 | visitStr = self.tr("third") | |
111 | historyLabel.setText( | |
112 | self.tr("This is your <b>{0}</b> visit of this site.") | |
113 | .format(visitStr)) | |
114 | rows += 1 | |
115 | ||
116 | line = QFrame(self) | |
117 | line.setLineWidth(1) | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
118 | line.setFrameStyle(QFrame.Shape.HLine | QFrame.Shadow.Sunken) |
6695 | 119 | layout.addWidget(line, rows, 0, 1, -1) |
120 | rows += 1 | |
121 | ||
122 | page = self.__browser.page() | |
123 | scheme = page.registerProtocolHandlerRequestScheme() | |
7269
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
124 | registeredUrl = ( |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
125 | WebBrowserWindow.protocolHandlerManager().protocolHandler(scheme) |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
126 | ) |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
127 | if ( |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
128 | bool(scheme) and |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
129 | registeredUrl != page.registerProtocolHandlerRequestUrl() |
0c63ea7f94bd
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
130 | ): |
6695 | 131 | horizontalLayout = QHBoxLayout() |
132 | protocolHandlerLabel = QLabel( | |
133 | self.tr("Register as <b>{0}</b> links handler.") | |
134 | .format(scheme), self) | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
135 | protocolHandlerLabel.setSizePolicy(QSizePolicy.Policy.Expanding, |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
136 | QSizePolicy.Policy.Preferred) |
6695 | 137 | |
138 | horizontalLayout.addWidget(protocolHandlerLabel) | |
139 | protocolHandlerButton = QPushButton(self.tr("Register"), self) | |
140 | horizontalLayout.addWidget(protocolHandlerButton) | |
141 | protocolHandlerButton.clicked.connect( | |
142 | self.__registerProtocolHandler) | |
143 | layout.addLayout(horizontalLayout, rows, 0, 1, -1) | |
144 | rows += 1 | |
145 | ||
146 | protocolHandlerLine = QFrame(self) | |
147 | protocolHandlerLine.setLineWidth(1) | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
148 | protocolHandlerLine.setFrameStyle( |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
149 | QFrame.Shape.HLine | QFrame.Shadow.Sunken) |
6695 | 150 | layout.addWidget(protocolHandlerLine, rows, 0, 1, -1) |
151 | rows += 1 | |
152 | ||
153 | horizontalLayout = QHBoxLayout() | |
154 | spacerItem = QSpacerItem( | |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
155 | 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) |
6695 | 156 | horizontalLayout.addItem(spacerItem) |
157 | moreButton = QPushButton(self.tr("More..."), self) | |
158 | horizontalLayout.addWidget(moreButton) | |
159 | moreButton.clicked.connect(self.__showSiteInfo) | |
160 | layout.addLayout(horizontalLayout, rows, 0, 1, -1) | |
8561
641304b46f08
Next batch of changes for QtWebEngine as of Qt 6.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8556
diff
changeset
|
161 | |
641304b46f08
Next batch of changes for QtWebEngine as of Qt 6.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8556
diff
changeset
|
162 | # TODO: check, if this changes anything |
641304b46f08
Next batch of changes for QtWebEngine as of Qt 6.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8556
diff
changeset
|
163 | layout.activate() |
6695 | 164 | |
165 | def showAt(self, pos): | |
166 | """ | |
167 | Public method to show the widget. | |
168 | ||
169 | @param pos position to show at | |
170 | @type QPoint | |
171 | """ | |
172 | self.adjustSize() | |
173 | xpos = pos.x() - self.width() // 2 | |
174 | if xpos < 0: | |
175 | xpos = 10 | |
176 | p = QPoint(xpos, pos.y() + 10) | |
177 | self.move(p) | |
178 | self.show() | |
179 | ||
180 | def accept(self): | |
181 | """ | |
182 | Public method to accept the widget. | |
183 | """ | |
184 | self.close() | |
185 | ||
186 | @pyqtSlot() | |
187 | def __showSiteInfo(self): | |
188 | """ | |
189 | Private slot to show the site info dialog. | |
190 | """ | |
191 | from .SiteInfoDialog import SiteInfoDialog | |
192 | siteinfoDialog = SiteInfoDialog( | |
193 | self.__browser, self.__browser.mainWindow()) | |
194 | siteinfoDialog.show() | |
195 | ||
196 | @pyqtSlot() | |
197 | def __registerProtocolHandler(self): | |
198 | """ | |
199 | Private slot to register a protocol handler. | |
200 | """ | |
201 | self.close() | |
202 | page = self.__browser.page() | |
203 | WebBrowserWindow.protocolHandlerManager().addProtocolHandler( | |
204 | page.registerProtocolHandlerRequestScheme(), | |
205 | page.registerProtocolHandlerRequestUrl()) |