17 |
17 |
18 class WebBrowserLanguagesDialog(QDialog, Ui_WebBrowserLanguagesDialog): |
18 class WebBrowserLanguagesDialog(QDialog, Ui_WebBrowserLanguagesDialog): |
19 """ |
19 """ |
20 Class implementing a dialog to configure the preferred languages. |
20 Class implementing a dialog to configure the preferred languages. |
21 """ |
21 """ |
|
22 |
22 def __init__(self, parent=None): |
23 def __init__(self, parent=None): |
23 """ |
24 """ |
24 Constructor |
25 Constructor |
25 |
26 |
26 @param parent reference to the parent widget (QWidget) |
27 @param parent reference to the parent widget (QWidget) |
27 """ |
28 """ |
28 super().__init__(parent) |
29 super().__init__(parent) |
29 self.setupUi(self) |
30 self.setupUi(self) |
30 |
31 |
31 self.__model = QStringListModel() |
32 self.__model = QStringListModel() |
32 self.languagesList.setModel(self.__model) |
33 self.languagesList.setModel(self.__model) |
33 self.languagesList.selectionModel().currentChanged.connect( |
34 self.languagesList.selectionModel().currentChanged.connect( |
34 self.__currentChanged) |
35 self.__currentChanged |
35 |
36 ) |
36 languages = Preferences.toList(Preferences.getSettings().value( |
37 |
37 "WebBrowser/AcceptLanguages", self.defaultAcceptLanguages())) |
38 languages = Preferences.toList( |
|
39 Preferences.getSettings().value( |
|
40 "WebBrowser/AcceptLanguages", self.defaultAcceptLanguages() |
|
41 ) |
|
42 ) |
38 self.__model.setStringList(languages) |
43 self.__model.setStringList(languages) |
39 |
44 |
40 allLanguages = [] |
45 allLanguages = [] |
41 for language in QLocale.Language: |
46 for language in QLocale.Language: |
42 if language == QLocale.Language.C: |
47 if language == QLocale.Language.C: |
43 continue |
48 continue |
44 allLanguages += self.expand(language) |
49 allLanguages += self.expand(language) |
45 self.__allLanguagesModel = QStringListModel() |
50 self.__allLanguagesModel = QStringListModel() |
46 self.__allLanguagesModel.setStringList(allLanguages) |
51 self.__allLanguagesModel.setStringList(allLanguages) |
47 self.addCombo.setModel(self.__allLanguagesModel) |
52 self.addCombo.setModel(self.__allLanguagesModel) |
48 |
53 |
49 def __currentChanged(self, current, previous): |
54 def __currentChanged(self, current, previous): |
50 """ |
55 """ |
51 Private slot to handle a change of the current selection. |
56 Private slot to handle a change of the current selection. |
52 |
57 |
53 @param current index of the currently selected item (QModelIndex) |
58 @param current index of the currently selected item (QModelIndex) |
54 @param previous index of the previously selected item (QModelIndex) |
59 @param previous index of the previously selected item (QModelIndex) |
55 """ |
60 """ |
56 self.removeButton.setEnabled(current.isValid()) |
61 self.removeButton.setEnabled(current.isValid()) |
57 row = current.row() |
62 row = current.row() |
58 self.upButton.setEnabled(row > 0) |
63 self.upButton.setEnabled(row > 0) |
59 self.downButton.setEnabled( |
64 self.downButton.setEnabled(row != -1 and row < self.__model.rowCount() - 1) |
60 row != -1 and row < self.__model.rowCount() - 1) |
|
61 |
65 |
62 @pyqtSlot() |
66 @pyqtSlot() |
63 def on_upButton_clicked(self): |
67 def on_upButton_clicked(self): |
64 """ |
68 """ |
65 Private slot to move a language up. |
69 Private slot to move a language up. |
80 data = self.languagesList.currentIndex().data() |
84 data = self.languagesList.currentIndex().data() |
81 self.__model.removeRow(currentRow) |
85 self.__model.removeRow(currentRow) |
82 self.__model.insertRow(currentRow + 1) |
86 self.__model.insertRow(currentRow + 1) |
83 self.__model.setData(self.__model.index(currentRow + 1), data) |
87 self.__model.setData(self.__model.index(currentRow + 1), data) |
84 self.languagesList.setCurrentIndex(self.__model.index(currentRow + 1)) |
88 self.languagesList.setCurrentIndex(self.__model.index(currentRow + 1)) |
85 |
89 |
86 @pyqtSlot() |
90 @pyqtSlot() |
87 def on_removeButton_clicked(self): |
91 def on_removeButton_clicked(self): |
88 """ |
92 """ |
89 Private slot to remove a language from the list of acceptable |
93 Private slot to remove a language from the list of acceptable |
90 languages. |
94 languages. |
91 """ |
95 """ |
92 currentRow = self.languagesList.currentIndex().row() |
96 currentRow = self.languagesList.currentIndex().row() |
93 self.__model.removeRow(currentRow) |
97 self.__model.removeRow(currentRow) |
94 |
98 |
95 @pyqtSlot() |
99 @pyqtSlot() |
96 def on_addButton_clicked(self): |
100 def on_addButton_clicked(self): |
97 """ |
101 """ |
98 Private slot to add a language to the list of acceptable languages. |
102 Private slot to add a language to the list of acceptable languages. |
99 """ |
103 """ |
100 language = self.addCombo.currentText() |
104 language = self.addCombo.currentText() |
101 if language in self.__model.stringList(): |
105 if language in self.__model.stringList(): |
102 return |
106 return |
103 |
107 |
104 self.__model.insertRow(self.__model.rowCount()) |
108 self.__model.insertRow(self.__model.rowCount()) |
105 self.__model.setData(self.__model.index(self.__model.rowCount() - 1), |
109 self.__model.setData(self.__model.index(self.__model.rowCount() - 1), language) |
106 language) |
|
107 self.languagesList.setCurrentIndex( |
110 self.languagesList.setCurrentIndex( |
108 self.__model.index(self.__model.rowCount() - 1)) |
111 self.__model.index(self.__model.rowCount() - 1) |
109 |
112 ) |
|
113 |
110 def accept(self): |
114 def accept(self): |
111 """ |
115 """ |
112 Public method to accept the data entered. |
116 Public method to accept the data entered. |
113 """ |
117 """ |
114 result = self.__model.stringList() |
118 result = self.__model.stringList() |
115 if result == self.defaultAcceptLanguages(): |
119 if result == self.defaultAcceptLanguages(): |
116 Preferences.getSettings().remove("WebBrowser/AcceptLanguages") |
120 Preferences.getSettings().remove("WebBrowser/AcceptLanguages") |
117 else: |
121 else: |
118 Preferences.getSettings().setValue( |
122 Preferences.getSettings().setValue("WebBrowser/AcceptLanguages", result) |
119 "WebBrowser/AcceptLanguages", result) |
|
120 super().accept() |
123 super().accept() |
121 |
124 |
122 @classmethod |
125 @classmethod |
123 def httpString(cls, languages): |
126 def httpString(cls, languages): |
124 """ |
127 """ |
125 Class method to convert a list of acceptable languages into a |
128 Class method to convert a list of acceptable languages into a |
126 byte array. |
129 byte array. |
127 |
130 |
128 The byte array can be sent along with the Accept-Language http header |
131 The byte array can be sent along with the Accept-Language http header |
129 (see RFC 2616). |
132 (see RFC 2616). |
130 |
133 |
131 @param languages list of acceptable languages (list of strings) |
134 @param languages list of acceptable languages (list of strings) |
132 @return converted list (QByteArray) |
135 @return converted list (QByteArray) |
133 """ |
136 """ |
134 processed = [] |
137 processed = [] |
135 qvalue = 1.0 |
138 qvalue = 1.0 |
136 for language in languages: |
139 for language in languages: |
137 leftBracket = language.find('[') |
140 leftBracket = language.find("[") |
138 rightBracket = language.find(']') |
141 rightBracket = language.find("]") |
139 tag = language[leftBracket + 1:rightBracket] |
142 tag = language[leftBracket + 1 : rightBracket] |
140 if not processed: |
143 if not processed: |
141 processed.append(tag) |
144 processed.append(tag) |
142 else: |
145 else: |
143 processed.append("{0};q={1:.1f}".format(tag, qvalue)) |
146 processed.append("{0};q={1:.1f}".format(tag, qvalue)) |
144 if qvalue > 0.1: |
147 if qvalue > 0.1: |
145 qvalue -= 0.1 |
148 qvalue -= 0.1 |
146 |
149 |
147 return ", ".join(processed) |
150 return ", ".join(processed) |
148 |
151 |
149 @classmethod |
152 @classmethod |
150 def defaultAcceptLanguages(cls): |
153 def defaultAcceptLanguages(cls): |
151 """ |
154 """ |
152 Class method to get the list of default accept languages. |
155 Class method to get the list of default accept languages. |
153 |
156 |
154 @return list of acceptable languages (list of strings) |
157 @return list of acceptable languages (list of strings) |
155 """ |
158 """ |
156 language = QLocale.system().name() |
159 language = QLocale.system().name() |
157 if not language: |
160 if not language: |
158 return [] |
161 return [] |
159 else: |
162 else: |
160 return cls.expand(QLocale(language).language()) |
163 return cls.expand(QLocale(language).language()) |
161 |
164 |
162 @classmethod |
165 @classmethod |
163 def expand(cls, language): |
166 def expand(cls, language): |
164 """ |
167 """ |
165 Class method to expand a language enum to a readable languages |
168 Class method to expand a language enum to a readable languages |
166 list. |
169 list. |
167 |
170 |
168 @param language language number (QLocale.Language) |
171 @param language language number (QLocale.Language) |
169 @return list of expanded language names (list of strings) |
172 @return list of expanded language names (list of strings) |
170 """ |
173 """ |
171 allLanguages = [] |
174 allLanguages = [] |
172 countries = [loc.country() for loc in QLocale.matchingLocales( |
175 countries = [ |
173 language, QLocale.Script.AnyScript, QLocale.Country.AnyCountry)] |
176 loc.country() |
174 languageString = ( |
177 for loc in QLocale.matchingLocales( |
175 "{0} [{1}]" |
178 language, QLocale.Script.AnyScript, QLocale.Country.AnyCountry |
176 ).format( |
179 ) |
177 QLocale.languageToString(language), |
180 ] |
178 QLocale(language).name().split('_')[0] |
181 languageString = ("{0} [{1}]").format( |
|
182 QLocale.languageToString(language), QLocale(language).name().split("_")[0] |
179 ) |
183 ) |
180 allLanguages.append(languageString) |
184 allLanguages.append(languageString) |
181 for country in countries: |
185 for country in countries: |
182 languageString = ( |
186 languageString = ("{0}/{1} [{2}]").format( |
183 "{0}/{1} [{2}]" |
|
184 ).format( |
|
185 QLocale.languageToString(language), |
187 QLocale.languageToString(language), |
186 QLocale.countryToString(country), |
188 QLocale.countryToString(country), |
187 '-'.join(QLocale(language, country).name().split('_')).lower() |
189 "-".join(QLocale(language, country).name().split("_")).lower(), |
188 ) |
190 ) |
189 if languageString not in allLanguages: |
191 if languageString not in allLanguages: |
190 allLanguages.append(languageString) |
192 allLanguages.append(languageString) |
191 |
193 |
192 return allLanguages |
194 return allLanguages |