src/eric7/WebBrowser/WebBrowserLanguagesDialog.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
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.
68 data = self.languagesList.currentIndex().data() 72 data = self.languagesList.currentIndex().data()
69 self.__model.removeRow(currentRow) 73 self.__model.removeRow(currentRow)
70 self.__model.insertRow(currentRow - 1) 74 self.__model.insertRow(currentRow - 1)
71 self.__model.setData(self.__model.index(currentRow - 1), data) 75 self.__model.setData(self.__model.index(currentRow - 1), data)
72 self.languagesList.setCurrentIndex(self.__model.index(currentRow - 1)) 76 self.languagesList.setCurrentIndex(self.__model.index(currentRow - 1))
73 77
74 @pyqtSlot() 78 @pyqtSlot()
75 def on_downButton_clicked(self): 79 def on_downButton_clicked(self):
76 """ 80 """
77 Private slot to move a language down. 81 Private slot to move a language down.
78 """ 82 """
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

eric ide

mercurial