1# -*- coding: utf-8 -*- 2 3# Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> 4# 5 6""" 7Module implementing the Time Tracker configuration page. 8""" 9 10from PyQt5.QtCore import pyqtSlot, Qt 11from PyQt5.QtWidgets import QListWidgetItem 12 13from E5Gui import E5MessageBox 14 15from Preferences.ConfigurationPages.ConfigurationPageBase import ( 16 ConfigurationPageBase 17) 18from .Ui_TranslatorPage import Ui_TranslatorPage 19 20from ..TranslatorLanguagesDb import TranslatorLanguagesDb 21from .. import TranslatorEngines 22 23 24class 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.""")) 205