|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the Web Browser Spell Checking configuration page. |
|
8 """ |
|
9 |
|
10 from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication, QDir, QLibraryInfo, \ |
|
11 QLocale |
|
12 from PyQt5.QtWidgets import QListWidgetItem |
|
13 |
|
14 from .ConfigurationPageBase import ConfigurationPageBase |
|
15 from .Ui_WebBrowserSpellCheckingPage import Ui_WebBrowserSpellCheckingPage |
|
16 |
|
17 import Preferences |
|
18 import Globals |
|
19 |
|
20 |
|
21 class WebBrowserSpellCheckingPage(ConfigurationPageBase, |
|
22 Ui_WebBrowserSpellCheckingPage): |
|
23 """ |
|
24 Class implementing the Web Browser Spell Checking page. |
|
25 """ |
|
26 def __init__(self): |
|
27 """ |
|
28 Constructor |
|
29 """ |
|
30 super(WebBrowserSpellCheckingPage, self).__init__() |
|
31 self.setupUi(self) |
|
32 self.setObjectName("WebBrowserSpellCheckingPage") |
|
33 |
|
34 # set initial values |
|
35 self.spellCheckEnabledCheckBox.setChecked( |
|
36 Preferences.getWebBrowser("SpellCheckEnabled")) |
|
37 self.on_spellCheckEnabledCheckBox_clicked() |
|
38 |
|
39 if Globals.isMacPlatform(): |
|
40 dictionaryDirectories = { |
|
41 QDir.cleanPath( |
|
42 QCoreApplication.applicationDirPath() + |
|
43 "/../Contents/Resources/qtwebengine_dictionaries"), |
|
44 QDir.cleanPath( |
|
45 QCoreApplication.applicationDirPath() + |
|
46 "/../Contents/Frameworks/QtWebEngineCore.framework" |
|
47 "/Resources/qtwebengine_dictionaries"), |
|
48 } |
|
49 else: |
|
50 dictionaryDirectories = { |
|
51 QDir.cleanPath( |
|
52 QCoreApplication.applicationDirPath() + |
|
53 "/qtwebengine_dictionaries"), |
|
54 QDir.cleanPath( |
|
55 QLibraryInfo.location(QLibraryInfo.DataPath) + |
|
56 "/qtwebengine_dictionaries"), |
|
57 } |
|
58 self.spellCheckDictionaryDirectoriesEdit.setPlainText( |
|
59 "\n".join(dictionaryDirectories)) |
|
60 |
|
61 for path in dictionaryDirectories: |
|
62 directory = QDir(path) |
|
63 fileNames = directory.entryList(["*.bdic"]) |
|
64 for fileName in fileNames: |
|
65 lang = fileName[:-5] |
|
66 langStr = self.__createLanguageString(lang) |
|
67 if self.spellCheckLanguagesList.findItems(langStr, |
|
68 Qt.MatchExactly): |
|
69 continue |
|
70 |
|
71 itm = QListWidgetItem(langStr, self.spellCheckLanguagesList) |
|
72 itm.setData(Qt.UserRole, lang) |
|
73 itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable) |
|
74 itm.setCheckState(Qt.Unchecked) |
|
75 self.spellCheckLanguagesList.sortItems(Qt.AscendingOrder) |
|
76 |
|
77 spellCheckLanguages = Preferences.getWebBrowser("SpellCheckLanguages") |
|
78 topIndex = 0 |
|
79 for lang in spellCheckLanguages: |
|
80 items = self.spellCheckLanguagesList.findItems( |
|
81 self.__createLanguageString(lang), Qt.MatchExactly) |
|
82 if items: |
|
83 itm = items[0] |
|
84 self.spellCheckLanguagesList.takeItem( |
|
85 self.spellCheckLanguagesList.row(itm)) |
|
86 self.spellCheckLanguagesList.insertItem(topIndex, itm) |
|
87 itm.setCheckState(Qt.Checked) |
|
88 topIndex += 1 |
|
89 |
|
90 if self.spellCheckLanguagesList.count(): |
|
91 self.noLanguagesLabel.hide() |
|
92 else: |
|
93 self.spellCheckLanguagesList.hide() |
|
94 |
|
95 def save(self): |
|
96 """ |
|
97 Public slot to save the Help Viewers configuration. |
|
98 """ |
|
99 languages = [] |
|
100 for row in range(self.spellCheckLanguagesList.count()): |
|
101 itm = self.spellCheckLanguagesList.item(row) |
|
102 if itm.checkState() == Qt.Checked: |
|
103 languages.append(itm.data(Qt.UserRole)) |
|
104 |
|
105 Preferences.setWebBrowser( |
|
106 "SpellCheckEnabled", |
|
107 self.spellCheckEnabledCheckBox.isChecked()) |
|
108 Preferences.setWebBrowser( |
|
109 "SpellCheckLanguages", |
|
110 languages) |
|
111 |
|
112 @pyqtSlot() |
|
113 def on_spellCheckEnabledCheckBox_clicked(self): |
|
114 """ |
|
115 Private slot handling a change of the spell checking enabled state. |
|
116 |
|
117 @param checked state of the check box |
|
118 @type bool |
|
119 """ |
|
120 enable = self.spellCheckEnabledCheckBox.isChecked() |
|
121 self.noLanguagesLabel.setEnabled(enable) |
|
122 self.spellCheckLanguagesList.setEnabled(enable) |
|
123 |
|
124 def __createLanguageString(self, language): |
|
125 """ |
|
126 Private method to create a language string given a language identifier. |
|
127 |
|
128 @param language language identifier |
|
129 @type str |
|
130 @return language string |
|
131 @rtype str |
|
132 """ |
|
133 loc = QLocale(language) |
|
134 |
|
135 if loc.language() == QLocale.C: |
|
136 return language |
|
137 |
|
138 country = QLocale.countryToString(loc.country()) |
|
139 lang = QLocale.languageToString(loc.language()) |
|
140 languageString = "{0}/{1} [{2}]".format(lang, country, language) |
|
141 return languageString |
|
142 |
|
143 |
|
144 def create(dlg): |
|
145 """ |
|
146 Module function to create the configuration page. |
|
147 |
|
148 @param dlg reference to the configuration dialog |
|
149 @type Configuration |
|
150 @return reference to the instantiated page |
|
151 @rtype ConfigurationPageBase |
|
152 """ |
|
153 page = WebBrowserSpellCheckingPage() |
|
154 return page |