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