eric6/Preferences/ConfigurationPages/WebBrowserPage.py

changeset 6942
2602857055c5
parent 6657
c6a93bbd66a5
child 6987
3371a03ed0a7
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Web Browser configuration page.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import pyqtSlot, QLocale
13
14 from .ConfigurationPageBase import ConfigurationPageBase
15 from .Ui_WebBrowserPage import Ui_WebBrowserPage
16
17 from Globals import qVersionTuple
18
19 import UI.PixmapCache
20 import Preferences
21
22
23 class WebBrowserPage(ConfigurationPageBase, Ui_WebBrowserPage):
24 """
25 Class implementing the Web Browser configuration page.
26 """
27 def __init__(self, configDialog):
28 """
29 Constructor
30
31 @param configDialog reference to the configuration dialog
32 (ConfigurationDialog)
33 """
34 super(WebBrowserPage, self).__init__()
35 self.setupUi(self)
36 self.setObjectName("WebBrowserPage")
37
38 self.__configDlg = configDialog
39 mw = configDialog.parent().parent()
40 if hasattr(mw, "helpWindow") and mw.helpWindow is not None:
41 # IDE
42 self.__browserWindow = mw.helpWindow
43 elif hasattr(mw, "currentBrowser"):
44 # Web Browser
45 self.__browserWindow = mw
46 else:
47 self.__browserWindow = None
48 self.setCurrentPageButton.setEnabled(self.__browserWindow is not None)
49 self.imageSearchGroup.setEnabled(self.__browserWindow is not None)
50
51 defaultSchemes = ["file://", "http://", "https://"]
52 self.defaultSchemeCombo.addItems(defaultSchemes)
53
54 # set initial values
55 self.singleHelpWindowCheckBox.setChecked(
56 Preferences.getWebBrowser("SingleWebBrowserWindow"))
57 self.saveGeometryCheckBox.setChecked(
58 Preferences.getWebBrowser("SaveGeometry"))
59 self.webSuggestionsCheckBox.setChecked(
60 Preferences.getWebBrowser("WebSearchSuggestions"))
61 self.showTabPreviews.setChecked(
62 Preferences.getWebBrowser("ShowPreview"))
63 self.errorPageCheckBox.setChecked(
64 Preferences.getWebBrowser("ErrorPageEnabled"))
65 self.scrollingCheckBox.setChecked(
66 Preferences.getWebBrowser("ScrollAnimatorEnabled"))
67 self.fullscreenCheckBox.setChecked(
68 Preferences.getWebBrowser("FullScreenSupportEnabled"))
69 try:
70 # Qt 5.7+
71 self.screenCaptureCheckBox.setChecked(
72 Preferences.getWebBrowser("ScreenCaptureEnabled"))
73 self.webGLCheckBox.setChecked(
74 Preferences.getWebBrowser("WebGLEnabled"))
75 except KeyError:
76 self.screenCaptureCheckBox.setEnabled(False)
77 self.webGLCheckBox.setEnabled(False)
78 try:
79 # Qt 5.11
80 self.autoplayMediaCheckBox.setChecked(
81 Preferences.getWebBrowser("PlaybackRequiresUserGesture"))
82 self.webRtcPublicOnlyCheckBox.setChecked(
83 Preferences.getWebBrowser("WebRTCPublicInterfacesOnly"))
84 except KeyError:
85 self.autoplayMediaCheckBox.setEnabled(False)
86 self.webRtcPublicOnlyCheckBox.setEnabled(False)
87 try:
88 # Qt 5.12
89 self.dnsPrefetchCheckBox.setChecked(
90 Preferences.getWebBrowser("DnsPrefetchEnabled"))
91 except KeyError:
92 self.dnsPrefetchCheckBox.setEnabled(False)
93
94 self.javaScriptGroup.setChecked(
95 Preferences.getWebBrowser("JavaScriptEnabled"))
96 self.jsOpenWindowsCheckBox.setChecked(
97 Preferences.getWebBrowser("JavaScriptCanOpenWindows"))
98 try:
99 # Qt 5.10
100 self.jsActivateWindowsCheckBox.setChecked(
101 Preferences.getWebBrowser(
102 "AllowWindowActivationFromJavaScript"))
103 except KeyError:
104 self.jsActivateWindowsCheckBox.setEnabled(False)
105 self.jsClipboardCheckBox.setChecked(
106 Preferences.getWebBrowser("JavaScriptCanAccessClipboard"))
107 try:
108 # Qt 5.11
109 self.jsPasteCheckBox.setChecked(
110 Preferences.getWebBrowser("JavaScriptCanPaste"))
111 except KeyError:
112 self.jsPasteCheckBox.setEnabled(False)
113 self.pluginsCheckBox.setChecked(
114 Preferences.getWebBrowser("PluginsEnabled"))
115 self.doNotTrackCheckBox.setChecked(
116 Preferences.getWebBrowser("DoNotTrack"))
117 self.refererSendComboBox.setCurrentIndex(
118 Preferences.getWebBrowser("RefererSendReferer"))
119 self.refererDefaultPolicyCcomboBox.setCurrentIndex(
120 Preferences.getWebBrowser("RefererDefaultPolicy"))
121 self.refererTrimmingPolicyComboBox.setCurrentIndex(
122 Preferences.getWebBrowser("RefererTrimmingPolicy"))
123
124 self.diskCacheCheckBox.setChecked(
125 Preferences.getWebBrowser("DiskCacheEnabled"))
126 self.cacheSizeSpinBox.setValue(
127 Preferences.getWebBrowser("DiskCacheSize"))
128
129 self.startupCombo.setCurrentIndex(
130 Preferences.getWebBrowser("StartupBehavior"))
131 self.newTabCombo.setCurrentIndex(
132 Preferences.getWebBrowser("NewTabBehavior"))
133 self.homePageEdit.setText(
134 Preferences.getWebBrowser("HomePage"))
135 self.loadTabOnActivationCheckBox.setChecked(
136 Preferences.getWebBrowser("LoadTabOnActivation"))
137
138 self.saveSessionCheckBox.setChecked(
139 Preferences.getWebBrowser("SessionAutoSave"))
140 self.sessionTimerSpinBox.setValue(
141 Preferences.getWebBrowser("SessionAutoSaveInterval"))
142
143 self.defaultSchemeCombo.setCurrentIndex(
144 self.defaultSchemeCombo.findText(
145 Preferences.getWebBrowser("DefaultScheme")))
146
147 historyLimit = Preferences.getWebBrowser("HistoryLimit")
148 idx = 0
149 if historyLimit == 1:
150 idx = 0
151 elif historyLimit == 7:
152 idx = 1
153 elif historyLimit == 14:
154 idx = 2
155 elif historyLimit == 30:
156 idx = 3
157 elif historyLimit == 365:
158 idx = 4
159 elif historyLimit == -1:
160 idx = 5
161 elif historyLimit == -2:
162 idx = 6
163 else:
164 idx = 5
165 self.expireHistory.setCurrentIndex(idx)
166
167 for language in range(2, QLocale.LastLanguage + 1):
168 countries = [l.country() for l in QLocale.matchingLocales(
169 language, QLocale.AnyScript, QLocale.AnyCountry)]
170 if len(countries) > 0:
171 self.languageCombo.addItem(
172 QLocale.languageToString(language), language)
173 self.languageCombo.model().sort(0)
174 self.languageCombo.insertSeparator(0)
175 self.languageCombo.insertItem(0, QLocale.languageToString(0), 0)
176 index = self.languageCombo.findData(
177 Preferences.getWebBrowser("SearchLanguage"))
178 if index > -1:
179 self.languageCombo.setCurrentIndex(index)
180
181 if self.__browserWindow:
182 for engineName in self.__browserWindow.imageSearchEngine()\
183 .searchEngineNames():
184 self.imageSearchComboBox.addItem(
185 UI.PixmapCache.getIcon(
186 "{0}.png".format(engineName.lower())),
187 engineName)
188 index = self.imageSearchComboBox.findText(
189 Preferences.getWebBrowser("ImageSearchEngine"))
190 if index > -1:
191 self.imageSearchComboBox.setCurrentIndex(index)
192
193 self.spatialCheckBox.setChecked(
194 Preferences.getWebBrowser("SpatialNavigationEnabled"))
195 self.linksInFocusChainCheckBox.setChecked(
196 Preferences.getWebBrowser("LinksIncludedInFocusChain"))
197 try:
198 # Qt 5.8
199 self.focusOnNavigationCheckBox.setChecked(
200 Preferences.getWebBrowser("FocusOnNavigationEnabled"))
201 except KeyError:
202 self.focusOnNavigationCheckBox.setEnabled(False)
203
204 self.xssAuditingCheckBox.setChecked(
205 Preferences.getWebBrowser("XSSAuditingEnabled"))
206 try:
207 # Qt 5.8
208 self.insecureContentsCheckBox.setChecked(
209 Preferences.getWebBrowser("AllowRunningInsecureContent"))
210 except KeyError:
211 self.insecureContentsCheckBox.setEnabled(False)
212 try:
213 # Qt 5.9
214 self.insecureGeolocationCheckBox.setChecked(
215 Preferences.getWebBrowser("AllowGeolocationOnInsecureOrigins"))
216 except KeyError:
217 self.insecureGeolocationCheckBox.setEnabled(False)
218
219 try:
220 # Qt 5.8
221 self.printBackgroundCheckBox.setChecked(
222 Preferences.getWebBrowser("PrintElementBackgrounds"))
223 except KeyError:
224 self.printBackgroundCheckBox.setEnabled(False)
225
226 self.autoScrollGroupBox.setChecked(
227 Preferences.getWebBrowser("AutoScrollEnabled"))
228 self.autoScrollDividerSpinBox.setValue(
229 Preferences.getWebBrowser("AutoScrollDivider"))
230
231 if qVersionTuple() < (5, 11, 0):
232 self.webInspectorGroup.setChecked(
233 Preferences.getWebBrowser("WebInspectorEnabled"))
234 self.webInspectorPortSpinBox.setValue(
235 Preferences.getWebBrowser("WebInspectorPort"))
236 else:
237 self.webInspectorGroup.setEnabled(False)
238
239 if qVersionTuple() >= (5, 11, 0):
240 self.protocolHandlerComboBox.setCurrentIndex(
241 Preferences.getWebBrowser("AcceptProtocolHandlerRequest"))
242 self.requestQuotaComboBox.setCurrentIndex(
243 Preferences.getWebBrowser("AcceptQuotaRequest"))
244 else:
245 self.protocolHandlerComboBox.setEnabled(False)
246 self.requestQuotaComboBox.setEnabled(False)
247
248 def save(self):
249 """
250 Public slot to save the Help Viewers configuration.
251 """
252 Preferences.setWebBrowser(
253 "SingleWebBrowserWindow",
254 self.singleHelpWindowCheckBox.isChecked())
255 Preferences.setWebBrowser(
256 "SaveGeometry",
257 self.saveGeometryCheckBox.isChecked())
258 Preferences.setWebBrowser(
259 "WebSearchSuggestions",
260 self.webSuggestionsCheckBox.isChecked())
261 Preferences.setWebBrowser(
262 "ShowPreview",
263 self.showTabPreviews.isChecked())
264 Preferences.setWebBrowser(
265 "ErrorPageEnabled",
266 self.errorPageCheckBox.isChecked())
267 Preferences.setWebBrowser(
268 "ScrollAnimatorEnabled",
269 self.scrollingCheckBox.isChecked())
270 Preferences.setWebBrowser(
271 "FullScreenSupportEnabled",
272 self.fullscreenCheckBox.isChecked())
273
274 if self.screenCaptureCheckBox.isEnabled():
275 Preferences.setWebBrowser(
276 "ScreenCaptureEnabled",
277 self.screenCaptureCheckBox.isChecked())
278 Preferences.setWebBrowser(
279 "WebGLEnabled",
280 self.webGLCheckBox.isChecked())
281
282 if self.autoplayMediaCheckBox.isEnabled():
283 Preferences.setWebBrowser(
284 "PlaybackRequiresUserGesture",
285 self.autoplayMediaCheckBox.isChecked())
286 Preferences.setWebBrowser(
287 "WebRTCPublicInterfacesOnly",
288 self.webRtcPublicOnlyCheckBox.isChecked())
289
290 if self.dnsPrefetchCheckBox.isEnabled():
291 Preferences.setWebBrowser(
292 "DnsPrefetchEnabled",
293 self.dnsPrefetchCheckBox.isChecked())
294
295 Preferences.setWebBrowser(
296 "JavaScriptEnabled",
297 self.javaScriptGroup.isChecked())
298 Preferences.setWebBrowser(
299 "JavaScriptCanOpenWindows",
300 self.jsOpenWindowsCheckBox.isChecked())
301 if self.jsActivateWindowsCheckBox.isEnabled():
302 Preferences.setWebBrowser(
303 "AllowWindowActivationFromJavaScript",
304 self.jsActivateWindowsCheckBox.isChecked())
305 Preferences.setWebBrowser(
306 "JavaScriptCanAccessClipboard",
307 self.jsClipboardCheckBox.isChecked())
308 if self.jsPasteCheckBox.isEnabled():
309 Preferences.setWebBrowser(
310 "JavaScriptCanPaste",
311 self.jsPasteCheckBox.isChecked())
312 Preferences.setWebBrowser(
313 "PluginsEnabled",
314 self.pluginsCheckBox.isChecked())
315 Preferences.setWebBrowser(
316 "DoNotTrack",
317 self.doNotTrackCheckBox.isChecked())
318 Preferences.setWebBrowser(
319 "RefererSendReferer",
320 self.refererSendComboBox.currentIndex())
321 Preferences.setWebBrowser(
322 "RefererDefaultPolicy",
323 self.refererDefaultPolicyCcomboBox.currentIndex())
324 Preferences.setWebBrowser(
325 "RefererTrimmingPolicy",
326 self.refererTrimmingPolicyComboBox.currentIndex())
327
328 Preferences.setWebBrowser(
329 "DiskCacheEnabled",
330 self.diskCacheCheckBox.isChecked())
331 Preferences.setWebBrowser(
332 "DiskCacheSize",
333 self.cacheSizeSpinBox.value())
334
335 Preferences.setWebBrowser(
336 "StartupBehavior",
337 self.startupCombo.currentIndex())
338 Preferences.setWebBrowser(
339 "NewTabBehavior",
340 self.newTabCombo.currentIndex())
341 Preferences.setWebBrowser(
342 "HomePage",
343 self.homePageEdit.text())
344 Preferences.setWebBrowser(
345 "LoadTabOnActivation",
346 self.loadTabOnActivationCheckBox.isChecked())
347
348 Preferences.setWebBrowser(
349 "SessionAutoSave",
350 self.saveSessionCheckBox.isChecked())
351 Preferences.setWebBrowser(
352 "SessionAutoSaveInterval",
353 self.sessionTimerSpinBox.value())
354
355 Preferences.setWebBrowser(
356 "DefaultScheme",
357 self.defaultSchemeCombo.currentText())
358
359 idx = self.expireHistory.currentIndex()
360 if idx == 0:
361 historyLimit = 1
362 elif idx == 1:
363 historyLimit = 7
364 elif idx == 2:
365 historyLimit = 14
366 elif idx == 3:
367 historyLimit = 30
368 elif idx == 4:
369 historyLimit = 365
370 elif idx == 5:
371 historyLimit = -1
372 elif idx == 6:
373 historyLimit = -2
374 Preferences.setWebBrowser("HistoryLimit", historyLimit)
375
376 languageIndex = self.languageCombo.currentIndex()
377 if languageIndex > -1:
378 language = self.languageCombo.itemData(languageIndex)
379 else:
380 # fall back to system default
381 language = QLocale.system().language()
382 Preferences.setWebBrowser("SearchLanguage", language)
383
384 Preferences.setWebBrowser(
385 "ImageSearchEngine",
386 self.imageSearchComboBox.currentText())
387
388 Preferences.setWebBrowser(
389 "SpatialNavigationEnabled",
390 self.spatialCheckBox.isChecked())
391 Preferences.setWebBrowser(
392 "LinksIncludedInFocusChain",
393 self.linksInFocusChainCheckBox.isChecked())
394 if self.focusOnNavigationCheckBox.isEnabled():
395 Preferences.setWebBrowser(
396 "FocusOnNavigationEnabled",
397 self.focusOnNavigationCheckBox.isChecked())
398
399 Preferences.setWebBrowser(
400 "XSSAuditingEnabled",
401 self.xssAuditingCheckBox.isChecked())
402 if self.insecureContentsCheckBox.isEnabled():
403 Preferences.setWebBrowser(
404 "AllowRunningInsecureContent",
405 self.insecureContentsCheckBox.isChecked())
406 if self.insecureGeolocationCheckBox.isEnabled():
407 Preferences.setWebBrowser(
408 "AllowGeolocationOnInsecureOrigins",
409 self.insecureGeolocationCheckBox.isChecked())
410
411 if self.printBackgroundCheckBox.isEnabled():
412 Preferences.setWebBrowser(
413 "PrintElementBackgrounds",
414 self.printBackgroundCheckBox.isChecked())
415
416 Preferences.setWebBrowser(
417 "AutoScrollEnabled",
418 self.autoScrollGroupBox.isChecked())
419 Preferences.setWebBrowser(
420 "AutoScrollDivider",
421 self.autoScrollDividerSpinBox.value())
422
423 if qVersionTuple() < (5, 11, 0):
424 Preferences.setWebBrowser(
425 "WebInspectorEnabled",
426 self.webInspectorGroup.isChecked())
427 Preferences.setWebBrowser(
428 "WebInspectorPort",
429 self.webInspectorPortSpinBox.value())
430
431 if self.protocolHandlerComboBox.isEnabled():
432 Preferences.setWebBrowser(
433 "AcceptProtocolHandlerRequest",
434 self.protocolHandlerComboBox.currentIndex())
435 Preferences.setWebBrowser(
436 "AcceptQuotaRequest",
437 self.requestQuotaComboBox.currentIndex())
438
439 @pyqtSlot()
440 def on_setCurrentPageButton_clicked(self):
441 """
442 Private slot to set the current page as the home page.
443 """
444 url = self.__browserWindow.currentBrowser().url()
445 self.homePageEdit.setText(bytes(url.toEncoded()).decode())
446
447 @pyqtSlot()
448 def on_defaultHomeButton_clicked(self):
449 """
450 Private slot to set the default home page.
451 """
452 self.homePageEdit.setText(Preferences.Prefs.helpDefaults["HomePage"])
453
454 @pyqtSlot(int)
455 def on_startupCombo_currentIndexChanged(self, index):
456 """
457 Private slot to enable elements depending on the selected startup
458 entry.
459
460 @param index index of the selected entry (integer)
461 """
462 # set state of the home page related items
463 enable = index == 1
464 self.homePageLabel.setEnabled(enable)
465 self.homePageEdit.setEnabled(enable)
466 self.defaultHomeButton.setEnabled(enable)
467 self.setCurrentPageButton.setEnabled(enable)
468
469 # set state of the session related items
470 self.loadTabOnActivationCheckBox.setEnabled(
471 index in [3, 4])
472
473 @pyqtSlot()
474 def on_refererWhitelistButton_clicked(self):
475 """
476 Private slot to edit the referer whitelist.
477 """
478 from WebBrowser.Network.SendRefererWhitelistDialog import \
479 SendRefererWhitelistDialog
480 SendRefererWhitelistDialog(self).exec_()
481
482
483 def create(dlg):
484 """
485 Module function to create the configuration page.
486
487 @param dlg reference to the configuration dialog
488 @return reference to the instantiated page (ConfigurationPageBase)
489 """
490 page = WebBrowserPage(dlg)
491 return page

eric ide

mercurial