Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py

changeset 6018
1c858879d3d0
child 6048
82ad8ec9548c
equal deleted inserted replaced
6017:dab01678626d 6018:1c858879d3d0
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."""))

eric ide

mercurial