|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2014 - 2017 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.googlev2Label.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("googlev2"))) |
|
46 self.msLabel.setText(self.tr( |
|
47 """<p>A registration of the text translation service is""" |
|
48 """ <b>required</b>. <a href="{0}">Register with Microsoft""" |
|
49 """ Azure.</a></p>""").format( |
|
50 TranslatorEngines.getKeyUrl("microsoft"))) |
|
51 self.mymemoryLabel.setText(self.tr( |
|
52 """<p>A key is <b>optional</b> to use this service.""" |
|
53 """ <a href="{0}">Get a free API key.</a></p>""").format( |
|
54 TranslatorEngines.getKeyUrl("mymemory"))) |
|
55 self.yandexLabel.setText(self.tr( |
|
56 """<p>A key is <b>required</b> to use this service.""" |
|
57 """ <a href="{0}">Get a free API key.</a></p>""").format( |
|
58 TranslatorEngines.getKeyUrl("yandex"))) |
|
59 |
|
60 # set initial values |
|
61 enabledLanguages = self.__plugin.getPreferences("EnabledLanguages") |
|
62 languages = TranslatorLanguagesDb() |
|
63 for languageCode in languages.getAllLanguages(): |
|
64 itm = QListWidgetItem() |
|
65 itm.setText(languages.getLanguage(languageCode)) |
|
66 itm.setIcon(languages.getLanguageIcon(languageCode)) |
|
67 itm.setData(Qt.UserRole, languageCode) |
|
68 if languageCode in enabledLanguages or not enabledLanguages: |
|
69 itm.setCheckState(Qt.Checked) |
|
70 else: |
|
71 itm.setCheckState(Qt.Unchecked) |
|
72 self.languagesList.addItem(itm) |
|
73 self.languagesList.sortItems() |
|
74 |
|
75 # Google settings |
|
76 self.dictionaryCheckBox.setChecked( |
|
77 self.__plugin.getPreferences("GoogleEnableDictionary")) |
|
78 self.googlev2KeyEdit.setText( |
|
79 self.__plugin.getPreferences("GoogleV2Key")) |
|
80 # Microsoft settings |
|
81 self.msSubscriptionKeyEdit.setText( |
|
82 self.__plugin.getPreferences("MsTranslatorKey")) |
|
83 # MyMemory settings |
|
84 self.mymemoryKeyEdit.setText( |
|
85 self.__plugin.getPreferences("MyMemoryKey")) |
|
86 self.mymemoryEmailEdit.setText( |
|
87 self.__plugin.getPreferences("MyMemoryEmail")) |
|
88 # Yandex settings |
|
89 self.yandexKeyEdit.setText( |
|
90 self.__plugin.getPreferences("YandexKey")) |
|
91 |
|
92 def save(self): |
|
93 """ |
|
94 Public slot to save the Pyramid configuration. |
|
95 """ |
|
96 enabledLanguages = [ |
|
97 itm.data(Qt.UserRole) |
|
98 for itm in self.__checkedLanguageItems() |
|
99 ] |
|
100 self.__plugin.setPreferences( |
|
101 "EnabledLanguages", enabledLanguages) |
|
102 |
|
103 # Google settings |
|
104 self.__plugin.setPreferences( |
|
105 "GoogleEnableDictionary", self.dictionaryCheckBox.isChecked()) |
|
106 self.__plugin.setPreferences( |
|
107 "GoogleV2Key", self.googlev2KeyEdit.text()) |
|
108 # Microsoft settings |
|
109 self.__plugin.setPreferences( |
|
110 "MsTranslatorKey", self.msSubscriptionKeyEdit.text()) |
|
111 # MyMemory settings |
|
112 self.__plugin.setPreferences( |
|
113 "MyMemoryKey", self.mymemoryKeyEdit.text()) |
|
114 # Yandex settings |
|
115 self.__plugin.setPreferences( |
|
116 "YandexKey", self.yandexKeyEdit.text()) |
|
117 |
|
118 def __checkedLanguageItems(self): |
|
119 """ |
|
120 Private method to get a list of checked language items. |
|
121 |
|
122 @return list of checked language items (list of QListWidgetItem) |
|
123 """ |
|
124 items = [] |
|
125 for index in range(self.languagesList.count()): |
|
126 itm = self.languagesList.item(index) |
|
127 if itm.checkState() == Qt.Checked: |
|
128 items.append(itm) |
|
129 |
|
130 return items |
|
131 |
|
132 @pyqtSlot() |
|
133 def on_setButton_clicked(self): |
|
134 """ |
|
135 Private slot to set or unset all items. |
|
136 """ |
|
137 self.__enableLanguageWarning = False |
|
138 |
|
139 unset = len(self.__checkedLanguageItems()) > 0 |
|
140 for index in range(self.languagesList.count()): |
|
141 itm = self.languagesList.item(index) |
|
142 if unset: |
|
143 itm.setCheckState(Qt.Unchecked) |
|
144 else: |
|
145 itm.setCheckState(Qt.Checked) |
|
146 |
|
147 self.__enableLanguageWarning = True |
|
148 |
|
149 @pyqtSlot() |
|
150 def on_defaultButton_clicked(self): |
|
151 """ |
|
152 Private slot to set the default languages. |
|
153 """ |
|
154 self.__enableLanguageWarning = False |
|
155 |
|
156 defaults = self.__plugin.getPreferencesDefault("EnabledLanguages") |
|
157 for index in range(self.languagesList.count()): |
|
158 itm = self.languagesList.item(index) |
|
159 if itm.data(Qt.UserRole) in defaults: |
|
160 itm.setCheckState(Qt.Checked) |
|
161 else: |
|
162 itm.setCheckState(Qt.Unchecked) |
|
163 |
|
164 self.__enableLanguageWarning = True |
|
165 |
|
166 @pyqtSlot(QListWidgetItem) |
|
167 def on_languagesList_itemChanged(self, item): |
|
168 """ |
|
169 Private slot to handle the selection of an item. |
|
170 |
|
171 @param item reference to the changed item (QListWidgetItem) |
|
172 """ |
|
173 if self.__enableLanguageWarning and \ |
|
174 len(self.__checkedLanguageItems()) < 2: |
|
175 E5MessageBox.warning( |
|
176 self, |
|
177 self.tr("Enabled Languages"), |
|
178 self.tr("""At least two languages should be selected to""" |
|
179 """ work correctly.""")) |