|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2009 - 2019 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the Help web browser configuration page. |
|
8 """ |
|
9 |
|
10 from __future__ import unicode_literals |
|
11 |
|
12 from PyQt5.QtCore import pyqtSlot, QLocale |
|
13 from PyQt5.QtNetwork import QNetworkRequest |
|
14 from PyQt5.QtWebKit import QWebSettings |
|
15 |
|
16 from .ConfigurationPageBase import ConfigurationPageBase |
|
17 from .Ui_HelpWebBrowserPage import Ui_HelpWebBrowserPage |
|
18 |
|
19 import Preferences |
|
20 import UI.PixmapCache |
|
21 |
|
22 |
|
23 class HelpWebBrowserPage(ConfigurationPageBase, Ui_HelpWebBrowserPage): |
|
24 """ |
|
25 Class implementing the Help 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(HelpWebBrowserPage, self).__init__() |
|
35 self.setupUi(self) |
|
36 self.setObjectName("HelpWebBrowserPage") |
|
37 |
|
38 self.__configDlg = configDialog |
|
39 mw = configDialog.parent().parent() |
|
40 if hasattr(mw, "helpWindow") and mw.helpWindow is not None: |
|
41 self.__helpWindow = mw.helpWindow |
|
42 elif hasattr(mw, "currentBrowser"): |
|
43 self.__helpWindow = mw |
|
44 else: |
|
45 self.__helpWindow = None |
|
46 self.setCurrentPageButton.setEnabled(self.__helpWindow is not None) |
|
47 |
|
48 defaultSchemes = ["file://", "http://", "https://"] |
|
49 self.defaultSchemeCombo.addItems(defaultSchemes) |
|
50 |
|
51 self.clickToFlashCheckBox.setIcon( |
|
52 UI.PixmapCache.getIcon("flashBlock.png")) |
|
53 |
|
54 # set initial values |
|
55 self.singleHelpWindowCheckBox.setChecked( |
|
56 Preferences.getHelp("SingleHelpWindow")) |
|
57 self.saveGeometryCheckBox.setChecked( |
|
58 Preferences.getHelp("SaveGeometry")) |
|
59 self.webSuggestionsCheckBox.setChecked( |
|
60 Preferences.getHelp("WebSearchSuggestions")) |
|
61 self.showTabPreviews.setChecked( |
|
62 Preferences.getHelp("ShowPreview")) |
|
63 self.accessKeysCheckBox.setChecked( |
|
64 Preferences.getHelp("AccessKeysEnabled")) |
|
65 |
|
66 self.javaCheckBox.setChecked( |
|
67 Preferences.getHelp("JavaEnabled")) |
|
68 self.javaScriptGroup.setChecked( |
|
69 Preferences.getHelp("JavaScriptEnabled")) |
|
70 self.jsOpenWindowsCheckBox.setChecked( |
|
71 Preferences.getHelp("JavaScriptCanOpenWindows")) |
|
72 self.jsCloseWindowsCheckBox.setChecked( |
|
73 Preferences.getHelp("JavaScriptCanCloseWindows")) |
|
74 self.jsClipboardCheckBox.setChecked( |
|
75 Preferences.getHelp("JavaScriptCanAccessClipboard")) |
|
76 self.pluginsGroup.setChecked( |
|
77 Preferences.getHelp("PluginsEnabled")) |
|
78 self.clickToFlashCheckBox.setChecked( |
|
79 Preferences.getHelp("ClickToFlashEnabled")) |
|
80 self.doNotTrackCheckBox.setChecked( |
|
81 Preferences.getHelp("DoNotTrack")) |
|
82 self.sendRefererCheckBox.setChecked( |
|
83 Preferences.getHelp("SendReferer")) |
|
84 |
|
85 self.diskCacheCheckBox.setChecked( |
|
86 Preferences.getHelp("DiskCacheEnabled")) |
|
87 self.cacheSizeSpinBox.setValue( |
|
88 Preferences.getHelp("DiskCacheSize")) |
|
89 cachePolicy = Preferences.getHelp("CachePolicy") |
|
90 if cachePolicy == QNetworkRequest.PreferNetwork: |
|
91 self.cacheKeepButton.setChecked(True) |
|
92 elif cachePolicy == QNetworkRequest.PreferCache: |
|
93 self.cachePreferButton.setChecked(True) |
|
94 elif cachePolicy == QNetworkRequest.AlwaysCache: |
|
95 self.cacheOfflineButton.setChecked(True) |
|
96 |
|
97 self.printBackgroundsCheckBox.setChecked( |
|
98 Preferences.getHelp("PrintBackgrounds")) |
|
99 |
|
100 self.startupCombo.setCurrentIndex( |
|
101 Preferences.getHelp("StartupBehavior")) |
|
102 self.homePageEdit.setText( |
|
103 Preferences.getHelp("HomePage")) |
|
104 |
|
105 self.defaultSchemeCombo.setCurrentIndex( |
|
106 self.defaultSchemeCombo.findText( |
|
107 Preferences.getHelp("DefaultScheme"))) |
|
108 |
|
109 historyLimit = Preferences.getHelp("HistoryLimit") |
|
110 idx = 0 |
|
111 if historyLimit == 1: |
|
112 idx = 0 |
|
113 elif historyLimit == 7: |
|
114 idx = 1 |
|
115 elif historyLimit == 14: |
|
116 idx = 2 |
|
117 elif historyLimit == 30: |
|
118 idx = 3 |
|
119 elif historyLimit == 365: |
|
120 idx = 4 |
|
121 elif historyLimit == -1: |
|
122 idx = 5 |
|
123 elif historyLimit == -2: |
|
124 idx = 6 |
|
125 else: |
|
126 idx = 5 |
|
127 self.expireHistory.setCurrentIndex(idx) |
|
128 |
|
129 for language in range(2, QLocale.LastLanguage + 1): |
|
130 countries = [l.country() for l in QLocale.matchingLocales( |
|
131 language, QLocale.AnyScript, QLocale.AnyCountry)] |
|
132 if len(countries) > 0: |
|
133 self.languageCombo.addItem( |
|
134 QLocale.languageToString(language), language) |
|
135 self.languageCombo.model().sort(0) |
|
136 self.languageCombo.insertSeparator(0) |
|
137 self.languageCombo.insertItem(0, QLocale.languageToString(0), 0) |
|
138 index = self.languageCombo.findData( |
|
139 Preferences.getHelp("SearchLanguage")) |
|
140 if index > -1: |
|
141 self.languageCombo.setCurrentIndex(index) |
|
142 |
|
143 if hasattr(QWebSettings, "SpatialNavigationEnabled"): |
|
144 self.spatialCheckBox.setChecked( |
|
145 Preferences.getHelp("SpatialNavigationEnabled")) |
|
146 else: |
|
147 self.spatialCheckBox.setEnabled(False) |
|
148 if hasattr(QWebSettings, "LinksIncludedInFocusChain"): |
|
149 self.linksInFocusChainCheckBox.setChecked( |
|
150 Preferences.getHelp("LinksIncludedInFocusChain")) |
|
151 else: |
|
152 self.linksInFocusChainCheckBox.setEnabled(False) |
|
153 if hasattr(QWebSettings, "XSSAuditingEnabled"): |
|
154 self.xssAuditingCheckBox.setChecked( |
|
155 Preferences.getHelp("XSSAuditingEnabled")) |
|
156 else: |
|
157 self.xssAuditingCheckBox.setEnabled(False) |
|
158 if hasattr(QWebSettings, "SiteSpecificQuirksEnabled"): |
|
159 self.quirksCheckBox.setChecked( |
|
160 Preferences.getHelp("SiteSpecificQuirksEnabled")) |
|
161 else: |
|
162 self.quirksCheckBox.setEnabled(False) |
|
163 |
|
164 def save(self): |
|
165 """ |
|
166 Public slot to save the Help Viewers configuration. |
|
167 """ |
|
168 Preferences.setHelp( |
|
169 "SingleHelpWindow", |
|
170 self.singleHelpWindowCheckBox.isChecked()) |
|
171 Preferences.setHelp( |
|
172 "SaveGeometry", |
|
173 self.saveGeometryCheckBox.isChecked()) |
|
174 Preferences.setHelp( |
|
175 "WebSearchSuggestions", |
|
176 self.webSuggestionsCheckBox.isChecked()) |
|
177 Preferences.setHelp( |
|
178 "ShowPreview", |
|
179 self.showTabPreviews.isChecked()) |
|
180 Preferences.setHelp( |
|
181 "AccessKeysEnabled", |
|
182 self.accessKeysCheckBox.isChecked()) |
|
183 |
|
184 Preferences.setHelp( |
|
185 "JavaEnabled", |
|
186 self.javaCheckBox.isChecked()) |
|
187 Preferences.setHelp( |
|
188 "JavaScriptEnabled", |
|
189 self.javaScriptGroup.isChecked()) |
|
190 Preferences.setHelp( |
|
191 "JavaScriptCanOpenWindows", |
|
192 self.jsOpenWindowsCheckBox.isChecked()) |
|
193 Preferences.setHelp( |
|
194 "JavaScriptCanCloseWindows", |
|
195 self.jsCloseWindowsCheckBox.isChecked()) |
|
196 Preferences.setHelp( |
|
197 "JavaScriptCanAccessClipboard", |
|
198 self.jsClipboardCheckBox.isChecked()) |
|
199 Preferences.setHelp( |
|
200 "PluginsEnabled", |
|
201 self.pluginsGroup.isChecked()) |
|
202 Preferences.setHelp( |
|
203 "ClickToFlashEnabled", |
|
204 self.clickToFlashCheckBox.isChecked()) |
|
205 Preferences.setHelp( |
|
206 "DoNotTrack", |
|
207 self.doNotTrackCheckBox.isChecked()) |
|
208 Preferences.setHelp( |
|
209 "SendReferer", |
|
210 self.sendRefererCheckBox.isChecked()) |
|
211 |
|
212 Preferences.setHelp( |
|
213 "DiskCacheEnabled", |
|
214 self.diskCacheCheckBox.isChecked()) |
|
215 Preferences.setHelp( |
|
216 "DiskCacheSize", |
|
217 self.cacheSizeSpinBox.value()) |
|
218 if self.cacheKeepButton.isChecked(): |
|
219 Preferences.setHelp( |
|
220 "CachePolicy", |
|
221 QNetworkRequest.PreferNetwork) |
|
222 elif self.cachePreferButton.isChecked(): |
|
223 Preferences.setHelp( |
|
224 "CachePolicy", |
|
225 QNetworkRequest.PreferCache) |
|
226 elif self.cacheOfflineButton.isChecked(): |
|
227 Preferences.setHelp( |
|
228 "CachePolicy", |
|
229 QNetworkRequest.AlwaysCache) |
|
230 |
|
231 Preferences.setHelp( |
|
232 "PrintBackgrounds", |
|
233 self.printBackgroundsCheckBox.isChecked()) |
|
234 |
|
235 Preferences.setHelp( |
|
236 "StartupBehavior", |
|
237 self.startupCombo.currentIndex()) |
|
238 Preferences.setHelp( |
|
239 "HomePage", |
|
240 self.homePageEdit.text()) |
|
241 |
|
242 Preferences.setHelp( |
|
243 "DefaultScheme", |
|
244 self.defaultSchemeCombo.currentText()) |
|
245 |
|
246 idx = self.expireHistory.currentIndex() |
|
247 if idx == 0: |
|
248 historyLimit = 1 |
|
249 elif idx == 1: |
|
250 historyLimit = 7 |
|
251 elif idx == 2: |
|
252 historyLimit = 14 |
|
253 elif idx == 3: |
|
254 historyLimit = 30 |
|
255 elif idx == 4: |
|
256 historyLimit = 365 |
|
257 elif idx == 5: |
|
258 historyLimit = -1 |
|
259 elif idx == 6: |
|
260 historyLimit = -2 |
|
261 Preferences.setHelp("HistoryLimit", historyLimit) |
|
262 |
|
263 languageIndex = self.languageCombo.currentIndex() |
|
264 if languageIndex > -1: |
|
265 language = self.languageCombo.itemData(languageIndex) |
|
266 else: |
|
267 # fall back to system default |
|
268 language = QLocale.system().language() |
|
269 Preferences.setHelp("SearchLanguage", language) |
|
270 |
|
271 if hasattr(QWebSettings, "SpatialNavigationEnabled"): |
|
272 Preferences.setHelp( |
|
273 "SpatialNavigationEnabled", |
|
274 self.spatialCheckBox.isChecked()) |
|
275 if hasattr(QWebSettings, "LinksIncludedInFocusChain"): |
|
276 Preferences.setHelp( |
|
277 "LinksIncludedInFocusChain", |
|
278 self.linksInFocusChainCheckBox.isChecked()) |
|
279 if hasattr(QWebSettings, "XSSAuditingEnabled"): |
|
280 Preferences.setHelp( |
|
281 "XSSAuditingEnabled", |
|
282 self.xssAuditingCheckBox.isChecked()) |
|
283 if hasattr(QWebSettings, "SiteSpecificQuirksEnabled"): |
|
284 Preferences.setHelp( |
|
285 "SiteSpecificQuirksEnabled", |
|
286 self.quirksCheckBox.isChecked()) |
|
287 |
|
288 @pyqtSlot() |
|
289 def on_setCurrentPageButton_clicked(self): |
|
290 """ |
|
291 Private slot to set the current page as the home page. |
|
292 """ |
|
293 url = self.__helpWindow.currentBrowser().url() |
|
294 self.homePageEdit.setText(bytes(url.toEncoded()).decode()) |
|
295 |
|
296 @pyqtSlot() |
|
297 def on_defaultHomeButton_clicked(self): |
|
298 """ |
|
299 Private slot to set the default home page. |
|
300 """ |
|
301 self.homePageEdit.setText(Preferences.Prefs.helpDefaults["HomePage"]) |
|
302 |
|
303 @pyqtSlot(int) |
|
304 def on_startupCombo_currentIndexChanged(self, index): |
|
305 """ |
|
306 Private slot to enable elements depending on the selected startup |
|
307 entry. |
|
308 |
|
309 @param index index of the selected entry (integer) |
|
310 """ |
|
311 enable = index == 0 |
|
312 self.homePageLabel.setEnabled(enable) |
|
313 self.homePageEdit.setEnabled(enable) |
|
314 self.defaultHomeButton.setEnabled(enable) |
|
315 self.setCurrentPageButton.setEnabled(enable) |
|
316 |
|
317 @pyqtSlot() |
|
318 def on_refererWhitelistButton_clicked(self): |
|
319 """ |
|
320 Private slot to edit the referer whitelist. |
|
321 """ |
|
322 from Helpviewer.Network.SendRefererWhitelistDialog import \ |
|
323 SendRefererWhitelistDialog |
|
324 SendRefererWhitelistDialog(self).exec_() |
|
325 |
|
326 @pyqtSlot() |
|
327 def on_noCacheHostsButton_clicked(self): |
|
328 """ |
|
329 Private slot to edit the list of hosts exempted from caching. |
|
330 """ |
|
331 from Helpviewer.Network.NoCacheHostsDialog import \ |
|
332 NoCacheHostsDialog |
|
333 NoCacheHostsDialog(self).exec_() |
|
334 |
|
335 |
|
336 def create(dlg): |
|
337 """ |
|
338 Module function to create the configuration page. |
|
339 |
|
340 @param dlg reference to the configuration dialog |
|
341 @return reference to the instantiated page (ConfigurationPageBase) |
|
342 """ |
|
343 page = HelpWebBrowserPage(dlg) |
|
344 return page |