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

branch
eric7
changeset 9209
b99e7fd55fd3
parent 9148
b31f0d894b55
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Time Tracker configuration page.
8 """
9
10 from PyQt6.QtCore import pyqtSlot, Qt
11 from PyQt6.QtWidgets import QListWidgetItem
12
13 from EricWidgets import EricMessageBox
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 @type TranslatorPlugin
34 """
35 super().__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 or free API key.</a></p>"""
45 ).format(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.ItemDataRole.UserRole, languageCode)
76 if languageCode in enabledLanguages or not enabledLanguages:
77 itm.setCheckState(Qt.CheckState.Checked)
78 else:
79 itm.setCheckState(Qt.CheckState.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 self.msSubscriptionRegionEdit.setText(
100 self.__plugin.getPreferences("MsTranslatorRegion"))
101 # MyMemory settings
102 self.mymemoryKeyEdit.setText(
103 self.__plugin.getPreferences("MyMemoryKey"))
104 self.mymemoryEmailEdit.setText(
105 self.__plugin.getPreferences("MyMemoryEmail"))
106 # Yandex settings
107 self.yandexKeyEdit.setText(
108 self.__plugin.getPreferences("YandexKey"))
109
110 def save(self):
111 """
112 Public slot to save the translators configuration.
113 """
114 enabledLanguages = [
115 itm.data(Qt.ItemDataRole.UserRole)
116 for itm in self.__checkedLanguageItems()
117 ]
118 self.__plugin.setPreferences(
119 "EnabledLanguages", enabledLanguages)
120
121 # DeepL settings
122 self.__plugin.setPreferences(
123 "DeeplKey", self.deeplKeyEdit.text())
124 # Google settings
125 self.__plugin.setPreferences(
126 "GoogleEnableDictionary", self.dictionaryCheckBox.isChecked())
127 self.__plugin.setPreferences(
128 "GoogleV2Key", self.googlev2KeyEdit.text())
129 # IBM Watson settings
130 self.__plugin.setPreferences(
131 "IbmUrl", self.ibmUrlEdit.text())
132 self.__plugin.setPreferences(
133 "IbmKey", self.ibmKeyEdit.text())
134 # Microsoft settings
135 self.__plugin.setPreferences(
136 "MsTranslatorKey", self.msSubscriptionKeyEdit.text())
137 self.__plugin.setPreferences(
138 "MsTranslatorRegion", self.msSubscriptionRegionEdit.text())
139 # MyMemory settings
140 self.__plugin.setPreferences(
141 "MyMemoryKey", self.mymemoryKeyEdit.text())
142 # Yandex settings
143 self.__plugin.setPreferences(
144 "YandexKey", self.yandexKeyEdit.text())
145
146 def __checkedLanguageItems(self):
147 """
148 Private method to get a list of checked language items.
149
150 @return list of checked language items
151 @rtype list of QListWidgetItem
152 """
153 items = []
154 for index in range(self.languagesList.count()):
155 itm = self.languagesList.item(index)
156 if itm.checkState() == Qt.CheckState.Checked:
157 items.append(itm)
158
159 return items
160
161 @pyqtSlot()
162 def on_setButton_clicked(self):
163 """
164 Private slot to set or unset all items.
165 """
166 self.__enableLanguageWarning = False
167
168 unset = len(self.__checkedLanguageItems()) > 0
169 for index in range(self.languagesList.count()):
170 itm = self.languagesList.item(index)
171 if unset:
172 itm.setCheckState(Qt.CheckState.Unchecked)
173 else:
174 itm.setCheckState(Qt.CheckState.Checked)
175
176 self.__enableLanguageWarning = True
177
178 @pyqtSlot()
179 def on_defaultButton_clicked(self):
180 """
181 Private slot to set the default languages.
182 """
183 self.__enableLanguageWarning = False
184
185 defaults = self.__plugin.getPreferencesDefault("EnabledLanguages")
186 for index in range(self.languagesList.count()):
187 itm = self.languagesList.item(index)
188 if itm.data(Qt.ItemDataRole.UserRole) in defaults:
189 itm.setCheckState(Qt.CheckState.Checked)
190 else:
191 itm.setCheckState(Qt.CheckState.Unchecked)
192
193 self.__enableLanguageWarning = True
194
195 @pyqtSlot(QListWidgetItem)
196 def on_languagesList_itemChanged(self, item):
197 """
198 Private slot to handle the selection of an item.
199
200 @param item reference to the changed item
201 @type QListWidgetItem
202 """
203 if (
204 self.__enableLanguageWarning and
205 len(self.__checkedLanguageItems()) < 2
206 ):
207 EricMessageBox.warning(
208 self,
209 self.tr("Enabled Languages"),
210 self.tr("""At least two languages should be selected to"""
211 """ work correctly."""))

eric ide

mercurial