eric7/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
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."""))

eric ide

mercurial