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