10 from PyQt6.QtCore import pyqtSlot, Qt |
10 from PyQt6.QtCore import pyqtSlot, Qt |
11 from PyQt6.QtWidgets import QListWidgetItem |
11 from PyQt6.QtWidgets import QListWidgetItem |
12 |
12 |
13 from EricWidgets import EricMessageBox |
13 from EricWidgets import EricMessageBox |
14 |
14 |
15 from Preferences.ConfigurationPages.ConfigurationPageBase import ( |
15 from Preferences.ConfigurationPages.ConfigurationPageBase import ConfigurationPageBase |
16 ConfigurationPageBase |
|
17 ) |
|
18 from .Ui_TranslatorPage import Ui_TranslatorPage |
16 from .Ui_TranslatorPage import Ui_TranslatorPage |
19 |
17 |
20 from ..TranslatorLanguagesDb import TranslatorLanguagesDb |
18 from ..TranslatorLanguagesDb import TranslatorLanguagesDb |
21 from .. import TranslatorEngines |
19 from .. import TranslatorEngines |
22 |
20 |
23 |
21 |
24 class TranslatorPage(ConfigurationPageBase, Ui_TranslatorPage): |
22 class TranslatorPage(ConfigurationPageBase, Ui_TranslatorPage): |
25 """ |
23 """ |
26 Class implementing the Time Tracker configuration page. |
24 Class implementing the Time Tracker configuration page. |
27 """ |
25 """ |
|
26 |
28 def __init__(self, plugin): |
27 def __init__(self, plugin): |
29 """ |
28 """ |
30 Constructor |
29 Constructor |
31 |
30 |
32 @param plugin reference to the plugin object |
31 @param plugin reference to the plugin object |
33 @type TranslatorPlugin |
32 @type TranslatorPlugin |
34 """ |
33 """ |
35 super().__init__() |
34 super().__init__() |
36 self.setupUi(self) |
35 self.setupUi(self) |
37 self.setObjectName("TranslatorPage") |
36 self.setObjectName("TranslatorPage") |
38 |
37 |
39 self.__plugin = plugin |
38 self.__plugin = plugin |
40 self.__enableLanguageWarning = True |
39 self.__enableLanguageWarning = True |
41 |
40 |
42 self.deeplLabel.setText(self.tr( |
41 self.deeplLabel.setText( |
43 """<p>A key is <b>required</b> to use this service.""" |
42 self.tr( |
44 """ <a href="{0}">Get a commercial or free API key.</a></p>""" |
43 """<p>A key is <b>required</b> to use this service.""" |
45 ).format(TranslatorEngines.getKeyUrl("deepl"))) |
44 """ <a href="{0}">Get a commercial or free API key.</a></p>""" |
46 self.googlev2Label.setText(self.tr( |
45 ).format(TranslatorEngines.getKeyUrl("deepl")) |
47 """<p>A key is <b>required</b> to use this service.""" |
46 ) |
48 """ <a href="{0}">Get a commercial API key.</a></p>""").format( |
47 self.googlev2Label.setText( |
49 TranslatorEngines.getKeyUrl("googlev2"))) |
48 self.tr( |
50 self.ibmLabel.setText(self.tr( |
49 """<p>A key is <b>required</b> to use this service.""" |
51 """<p>A key is <b>required</b> to use this service.""" |
50 """ <a href="{0}">Get a commercial API key.</a></p>""" |
52 """ <a href="{0}">Register with IBM Cloud.</a></p>""").format( |
51 ).format(TranslatorEngines.getKeyUrl("googlev2")) |
53 TranslatorEngines.getKeyUrl("ibm_watson"))) |
52 ) |
54 self.msLabel.setText(self.tr( |
53 self.ibmLabel.setText( |
55 """<p>A registration of the text translation service is""" |
54 self.tr( |
56 """ <b>required</b>. <a href="{0}">Register with Microsoft""" |
55 """<p>A key is <b>required</b> to use this service.""" |
57 """ Azure.</a></p>""").format( |
56 """ <a href="{0}">Register with IBM Cloud.</a></p>""" |
58 TranslatorEngines.getKeyUrl("microsoft"))) |
57 ).format(TranslatorEngines.getKeyUrl("ibm_watson")) |
59 self.mymemoryLabel.setText(self.tr( |
58 ) |
60 """<p>A key is <b>optional</b> to use this service.""" |
59 self.msLabel.setText( |
61 """ <a href="{0}">Get a free API key.</a></p>""").format( |
60 self.tr( |
62 TranslatorEngines.getKeyUrl("mymemory"))) |
61 """<p>A registration of the text translation service is""" |
63 self.yandexLabel.setText(self.tr( |
62 """ <b>required</b>. <a href="{0}">Register with Microsoft""" |
64 """<p>A key is <b>required</b> to use this service.""" |
63 """ Azure.</a></p>""" |
65 """ <a href="{0}">Get a free API key.</a></p>""").format( |
64 ).format(TranslatorEngines.getKeyUrl("microsoft")) |
66 TranslatorEngines.getKeyUrl("yandex"))) |
65 ) |
67 |
66 self.mymemoryLabel.setText( |
|
67 self.tr( |
|
68 """<p>A key is <b>optional</b> to use this service.""" |
|
69 """ <a href="{0}">Get a free API key.</a></p>""" |
|
70 ).format(TranslatorEngines.getKeyUrl("mymemory")) |
|
71 ) |
|
72 self.yandexLabel.setText( |
|
73 self.tr( |
|
74 """<p>A key is <b>required</b> to use this service.""" |
|
75 """ <a href="{0}">Get a free API key.</a></p>""" |
|
76 ).format(TranslatorEngines.getKeyUrl("yandex")) |
|
77 ) |
|
78 |
68 # set initial values |
79 # set initial values |
69 enabledLanguages = self.__plugin.getPreferences("EnabledLanguages") |
80 enabledLanguages = self.__plugin.getPreferences("EnabledLanguages") |
70 languages = TranslatorLanguagesDb() |
81 languages = TranslatorLanguagesDb() |
71 for languageCode in languages.getAllLanguages(): |
82 for languageCode in languages.getAllLanguages(): |
72 itm = QListWidgetItem() |
83 itm = QListWidgetItem() |
77 itm.setCheckState(Qt.CheckState.Checked) |
88 itm.setCheckState(Qt.CheckState.Checked) |
78 else: |
89 else: |
79 itm.setCheckState(Qt.CheckState.Unchecked) |
90 itm.setCheckState(Qt.CheckState.Unchecked) |
80 self.languagesList.addItem(itm) |
91 self.languagesList.addItem(itm) |
81 self.languagesList.sortItems() |
92 self.languagesList.sortItems() |
82 |
93 |
83 # DeepL settings |
94 # DeepL settings |
84 self.deeplKeyEdit.setText( |
95 self.deeplKeyEdit.setText(self.__plugin.getPreferences("DeeplKey")) |
85 self.__plugin.getPreferences("DeeplKey")) |
|
86 # Google settings |
96 # Google settings |
87 self.dictionaryCheckBox.setChecked( |
97 self.dictionaryCheckBox.setChecked( |
88 self.__plugin.getPreferences("GoogleEnableDictionary")) |
98 self.__plugin.getPreferences("GoogleEnableDictionary") |
89 self.googlev2KeyEdit.setText( |
99 ) |
90 self.__plugin.getPreferences("GoogleV2Key")) |
100 self.googlev2KeyEdit.setText(self.__plugin.getPreferences("GoogleV2Key")) |
91 # IBM Watson settings |
101 # IBM Watson settings |
92 self.ibmUrlEdit.setText( |
102 self.ibmUrlEdit.setText(self.__plugin.getPreferences("IbmUrl")) |
93 self.__plugin.getPreferences("IbmUrl")) |
103 self.ibmKeyEdit.setText(self.__plugin.getPreferences("IbmKey")) |
94 self.ibmKeyEdit.setText( |
|
95 self.__plugin.getPreferences("IbmKey")) |
|
96 # Microsoft settings |
104 # Microsoft settings |
97 self.msSubscriptionKeyEdit.setText( |
105 self.msSubscriptionKeyEdit.setText( |
98 self.__plugin.getPreferences("MsTranslatorKey")) |
106 self.__plugin.getPreferences("MsTranslatorKey") |
|
107 ) |
99 self.msSubscriptionRegionEdit.setText( |
108 self.msSubscriptionRegionEdit.setText( |
100 self.__plugin.getPreferences("MsTranslatorRegion")) |
109 self.__plugin.getPreferences("MsTranslatorRegion") |
|
110 ) |
101 # MyMemory settings |
111 # MyMemory settings |
102 self.mymemoryKeyEdit.setText( |
112 self.mymemoryKeyEdit.setText(self.__plugin.getPreferences("MyMemoryKey")) |
103 self.__plugin.getPreferences("MyMemoryKey")) |
113 self.mymemoryEmailEdit.setText(self.__plugin.getPreferences("MyMemoryEmail")) |
104 self.mymemoryEmailEdit.setText( |
|
105 self.__plugin.getPreferences("MyMemoryEmail")) |
|
106 # Yandex settings |
114 # Yandex settings |
107 self.yandexKeyEdit.setText( |
115 self.yandexKeyEdit.setText(self.__plugin.getPreferences("YandexKey")) |
108 self.__plugin.getPreferences("YandexKey")) |
116 |
109 |
|
110 def save(self): |
117 def save(self): |
111 """ |
118 """ |
112 Public slot to save the translators configuration. |
119 Public slot to save the translators configuration. |
113 """ |
120 """ |
114 enabledLanguages = [ |
121 enabledLanguages = [ |
115 itm.data(Qt.ItemDataRole.UserRole) |
122 itm.data(Qt.ItemDataRole.UserRole) for itm in self.__checkedLanguageItems() |
116 for itm in self.__checkedLanguageItems() |
|
117 ] |
123 ] |
118 self.__plugin.setPreferences( |
124 self.__plugin.setPreferences("EnabledLanguages", enabledLanguages) |
119 "EnabledLanguages", enabledLanguages) |
125 |
120 |
|
121 # DeepL settings |
126 # DeepL settings |
122 self.__plugin.setPreferences( |
127 self.__plugin.setPreferences("DeeplKey", self.deeplKeyEdit.text()) |
123 "DeeplKey", self.deeplKeyEdit.text()) |
|
124 # Google settings |
128 # Google settings |
125 self.__plugin.setPreferences( |
129 self.__plugin.setPreferences( |
126 "GoogleEnableDictionary", self.dictionaryCheckBox.isChecked()) |
130 "GoogleEnableDictionary", self.dictionaryCheckBox.isChecked() |
127 self.__plugin.setPreferences( |
131 ) |
128 "GoogleV2Key", self.googlev2KeyEdit.text()) |
132 self.__plugin.setPreferences("GoogleV2Key", self.googlev2KeyEdit.text()) |
129 # IBM Watson settings |
133 # IBM Watson settings |
130 self.__plugin.setPreferences( |
134 self.__plugin.setPreferences("IbmUrl", self.ibmUrlEdit.text()) |
131 "IbmUrl", self.ibmUrlEdit.text()) |
135 self.__plugin.setPreferences("IbmKey", self.ibmKeyEdit.text()) |
132 self.__plugin.setPreferences( |
|
133 "IbmKey", self.ibmKeyEdit.text()) |
|
134 # Microsoft settings |
136 # Microsoft settings |
135 self.__plugin.setPreferences( |
137 self.__plugin.setPreferences( |
136 "MsTranslatorKey", self.msSubscriptionKeyEdit.text()) |
138 "MsTranslatorKey", self.msSubscriptionKeyEdit.text() |
|
139 ) |
137 self.__plugin.setPreferences( |
140 self.__plugin.setPreferences( |
138 "MsTranslatorRegion", self.msSubscriptionRegionEdit.text()) |
141 "MsTranslatorRegion", self.msSubscriptionRegionEdit.text() |
|
142 ) |
139 # MyMemory settings |
143 # MyMemory settings |
140 self.__plugin.setPreferences( |
144 self.__plugin.setPreferences("MyMemoryKey", self.mymemoryKeyEdit.text()) |
141 "MyMemoryKey", self.mymemoryKeyEdit.text()) |
|
142 # Yandex settings |
145 # Yandex settings |
143 self.__plugin.setPreferences( |
146 self.__plugin.setPreferences("YandexKey", self.yandexKeyEdit.text()) |
144 "YandexKey", self.yandexKeyEdit.text()) |
147 |
145 |
|
146 def __checkedLanguageItems(self): |
148 def __checkedLanguageItems(self): |
147 """ |
149 """ |
148 Private method to get a list of checked language items. |
150 Private method to get a list of checked language items. |
149 |
151 |
150 @return list of checked language items |
152 @return list of checked language items |
151 @rtype list of QListWidgetItem |
153 @rtype list of QListWidgetItem |
152 """ |
154 """ |
153 items = [] |
155 items = [] |
154 for index in range(self.languagesList.count()): |
156 for index in range(self.languagesList.count()): |
155 itm = self.languagesList.item(index) |
157 itm = self.languagesList.item(index) |
156 if itm.checkState() == Qt.CheckState.Checked: |
158 if itm.checkState() == Qt.CheckState.Checked: |
157 items.append(itm) |
159 items.append(itm) |
158 |
160 |
159 return items |
161 return items |
160 |
162 |
161 @pyqtSlot() |
163 @pyqtSlot() |
162 def on_setButton_clicked(self): |
164 def on_setButton_clicked(self): |
163 """ |
165 """ |
164 Private slot to set or unset all items. |
166 Private slot to set or unset all items. |
165 """ |
167 """ |
166 self.__enableLanguageWarning = False |
168 self.__enableLanguageWarning = False |
167 |
169 |
168 unset = len(self.__checkedLanguageItems()) > 0 |
170 unset = len(self.__checkedLanguageItems()) > 0 |
169 for index in range(self.languagesList.count()): |
171 for index in range(self.languagesList.count()): |
170 itm = self.languagesList.item(index) |
172 itm = self.languagesList.item(index) |
171 if unset: |
173 if unset: |
172 itm.setCheckState(Qt.CheckState.Unchecked) |
174 itm.setCheckState(Qt.CheckState.Unchecked) |
173 else: |
175 else: |
174 itm.setCheckState(Qt.CheckState.Checked) |
176 itm.setCheckState(Qt.CheckState.Checked) |
175 |
177 |
176 self.__enableLanguageWarning = True |
178 self.__enableLanguageWarning = True |
177 |
179 |
178 @pyqtSlot() |
180 @pyqtSlot() |
179 def on_defaultButton_clicked(self): |
181 def on_defaultButton_clicked(self): |
180 """ |
182 """ |
181 Private slot to set the default languages. |
183 Private slot to set the default languages. |
182 """ |
184 """ |
183 self.__enableLanguageWarning = False |
185 self.__enableLanguageWarning = False |
184 |
186 |
185 defaults = self.__plugin.getPreferencesDefault("EnabledLanguages") |
187 defaults = self.__plugin.getPreferencesDefault("EnabledLanguages") |
186 for index in range(self.languagesList.count()): |
188 for index in range(self.languagesList.count()): |
187 itm = self.languagesList.item(index) |
189 itm = self.languagesList.item(index) |
188 if itm.data(Qt.ItemDataRole.UserRole) in defaults: |
190 if itm.data(Qt.ItemDataRole.UserRole) in defaults: |
189 itm.setCheckState(Qt.CheckState.Checked) |
191 itm.setCheckState(Qt.CheckState.Checked) |
190 else: |
192 else: |
191 itm.setCheckState(Qt.CheckState.Unchecked) |
193 itm.setCheckState(Qt.CheckState.Unchecked) |
192 |
194 |
193 self.__enableLanguageWarning = True |
195 self.__enableLanguageWarning = True |
194 |
196 |
195 @pyqtSlot(QListWidgetItem) |
197 @pyqtSlot(QListWidgetItem) |
196 def on_languagesList_itemChanged(self, item): |
198 def on_languagesList_itemChanged(self, item): |
197 """ |
199 """ |
198 Private slot to handle the selection of an item. |
200 Private slot to handle the selection of an item. |
199 |
201 |
200 @param item reference to the changed item |
202 @param item reference to the changed item |
201 @type QListWidgetItem |
203 @type QListWidgetItem |
202 """ |
204 """ |
203 if ( |
205 if self.__enableLanguageWarning and len(self.__checkedLanguageItems()) < 2: |
204 self.__enableLanguageWarning and |
|
205 len(self.__checkedLanguageItems()) < 2 |
|
206 ): |
|
207 EricMessageBox.warning( |
206 EricMessageBox.warning( |
208 self, |
207 self, |
209 self.tr("Enabled Languages"), |
208 self.tr("Enabled Languages"), |
210 self.tr("""At least two languages should be selected to""" |
209 self.tr( |
211 """ work correctly.""")) |
210 """At least two languages should be selected to""" |
|
211 """ work correctly.""" |
|
212 ), |
|
213 ) |