Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py

changeset 6412
d71b094845e7
parent 6411
7fd9b7ecbcfe
child 6419
5d47e741245a
equal deleted inserted replaced
6411:7fd9b7ecbcfe 6412:d71b094845e7
72 self.clearButton.setEnabled(False) 72 self.clearButton.setEnabled(False)
73 self.pronounceOrigButton.setEnabled(False) 73 self.pronounceOrigButton.setEnabled(False)
74 self.pronounceTransButton.setEnabled(False) 74 self.pronounceTransButton.setEnabled(False)
75 75
76 selectedEngine = self.__plugin.getPreferences("SelectedEngine") 76 selectedEngine = self.__plugin.getPreferences("SelectedEngine")
77 origLanguage = self.__plugin.getPreferences("OriginalLanguage")
78 transLanguage = self.__plugin.getPreferences("TranslationLanguage")
79 77
80 self.__updateEngines() 78 self.__updateEngines()
81 engineIndex = self.engineComboBox.findData(selectedEngine) 79 engineIndex = self.engineComboBox.findData(selectedEngine)
82 self.engineComboBox.setCurrentIndex(engineIndex) 80 self.engineComboBox.setCurrentIndex(engineIndex)
83 self.__engineComboBoxCurrentIndexChanged(engineIndex) 81 self.__engineComboBoxCurrentIndexChanged(engineIndex)
84 # this calls self.__updateLanguages() implicitly
85 self.origLanguageComboBox.setCurrentIndex(
86 self.origLanguageComboBox.findData(origLanguage))
87 self.transLanguageComboBox.setCurrentIndex(
88 self.transLanguageComboBox.findData(transLanguage))
89 82
90 self.engineComboBox.currentIndexChanged.connect( 83 self.engineComboBox.currentIndexChanged.connect(
91 self.__engineComboBoxCurrentIndexChanged) 84 self.__engineComboBoxCurrentIndexChanged)
92 self.__plugin.updateLanguages.connect(self.__updateLanguages) 85 self.__plugin.updateLanguages.connect(self.__updateLanguages)
93 86
99 enabledCodes = self.__plugin.getPreferences("EnabledLanguages") 92 enabledCodes = self.__plugin.getPreferences("EnabledLanguages")
100 93
101 # 1. save current selections 94 # 1. save current selections
102 origLanguage = self.origLanguageComboBox.itemData( 95 origLanguage = self.origLanguageComboBox.itemData(
103 self.origLanguageComboBox.currentIndex()) 96 self.origLanguageComboBox.currentIndex())
104 transLanguage = self.transLanguageComboBox.itemData(
105 self.transLanguageComboBox.currentIndex())
106 97
107 # 2. reload the original language combo box 98 # 2. reload the original language combo box
108 self.origLanguageComboBox.blockSignals(True) 99 self.origLanguageComboBox.blockSignals(True)
109 self.origLanguageComboBox.clear() 100 self.origLanguageComboBox.clear()
110 for code in enabledCodes: 101 for code in enabledCodes:
117 origIndex = self.origLanguageComboBox.findData(origLanguage) 108 origIndex = self.origLanguageComboBox.findData(origLanguage)
118 if origIndex == -1: 109 if origIndex == -1:
119 origIndex = 0 110 origIndex = 0
120 self.origLanguageComboBox.blockSignals(False) 111 self.origLanguageComboBox.blockSignals(False)
121 self.origLanguageComboBox.setCurrentIndex(origIndex) 112 self.origLanguageComboBox.setCurrentIndex(origIndex)
122
123 # 3. reload the target language combo box, if the target is not
124 # dependent upon the source language
125 supportedTargetCodes = \
126 self.__translationEngine.supportedTargetLanguages(
127 self.origLanguageComboBox.itemData(
128 self.origLanguageComboBox.currentIndex()
129 )
130 )
131 if supportedTargetCodes is None:
132 # supported target codes are independent
133 self.transLanguageComboBox.clear()
134 for code in enabledCodes:
135 if code in supportedCodes:
136 language = self.__languages.getLanguage(code)
137 if language:
138 icon = self.__languages.getLanguageIcon(code)
139 self.transLanguageComboBox.addItem(icon, language,
140 code)
141 self.transLanguageComboBox.model().sort(0)
142 index = self.transLanguageComboBox.findData(transLanguage)
143 if index == -1:
144 index = 0
145 self.transLanguageComboBox.setCurrentIndex(index)
146 else:
147 self.on_origLanguageComboBox_currentIndexChanged(origIndex)
148 113
149 def __updateEngines(self): 114 def __updateEngines(self):
150 """ 115 """
151 Private slot to update the engines combo box. 116 Private slot to update the engines combo box.
152 """ 117 """
309 @param index current index (integer) 274 @param index current index (integer)
310 """ 275 """
311 self.__plugin.setPreferences( 276 self.__plugin.setPreferences(
312 "TranslationLanguage", self.transLanguageComboBox.itemData(index)) 277 "TranslationLanguage", self.transLanguageComboBox.itemData(index))
313 278
314 @pyqtSlot(int) 279 @pyqtSlot()
315 def __engineComboBoxCurrentIndexChanged(self, index): 280 def __availableTranslationsLoaded(self):
316 """ 281 """
317 Private slot to handle the selection of a translation service. 282 Private slot to handle the availability of translations.
318 283 """
319 @param index current index (integer) 284 origLanguage = self.__plugin.getPreferences("OriginalLanguage")
320 """ 285 transLanguage = self.__plugin.getPreferences("TranslationLanguage")
321 engineName = self.engineComboBox.itemData(index) 286
322 if self.__translationEngine and \ 287 self.__updateLanguages()
288
289 self.origLanguageComboBox.setCurrentIndex(
290 self.origLanguageComboBox.findData(origLanguage))
291 self.transLanguageComboBox.setCurrentIndex(
292 self.transLanguageComboBox.findData(transLanguage))
293
294 def __ensureTranslationEngineReady(self):
295 """
296 Private slot to ensure, that the currently selected translation engine
297 is ready.
298 """
299 engineName = self.engineComboBox.itemData(
300 self.engineComboBox.currentIndex())
301 if self.__translationEngine is not None and \
323 self.__translationEngine.engineName() != engineName: 302 self.__translationEngine.engineName() != engineName:
303 self.__translationEngine.availableTranslationsLoaded.disconnect(
304 self.__availableTranslationsLoaded)
324 self.__translationEngine.deleteLater() 305 self.__translationEngine.deleteLater()
325 self.__translationEngine = None 306 self.__translationEngine = None
326 307
327 if self.__translationEngine is None: 308 if self.__translationEngine is None:
328 self.__translationEngine = TranslatorEngines.getTranslationEngine( 309 self.__translationEngine = TranslatorEngines.getTranslationEngine(
329 engineName, self.__plugin, self) 310 engineName, self.__plugin, self)
311 if self.__translationEngine is not None:
312 self.__translationEngine.availableTranslationsLoaded.connect(
313 self.__availableTranslationsLoaded)
314
315 @pyqtSlot(int)
316 def __engineComboBoxCurrentIndexChanged(self, index):
317 """
318 Private slot to handle the selection of a translation service.
319
320 @param index current index
321 @type int
322 """
323 self.__ensureTranslationEngineReady()
330 324
331 self.__updatePronounceButtons() 325 self.__updatePronounceButtons()
332 self.__updateLanguages()
333 326
334 self.__plugin.setPreferences( 327 self.__plugin.setPreferences(
335 "SelectedEngine", self.engineComboBox.itemData(index)) 328 "SelectedEngine", self.engineComboBox.itemData(index))
336 329
337 def __updatePronounceButtons(self): 330 def __updatePronounceButtons(self):
375 """ 368 """
376 if self.__translatorRequest is None: 369 if self.__translatorRequest is None:
377 from .TranslatorRequest import TranslatorRequest 370 from .TranslatorRequest import TranslatorRequest
378 self.__translatorRequest = TranslatorRequest(self) 371 self.__translatorRequest = TranslatorRequest(self)
379 372
380 engineName = self.engineComboBox.itemData( 373 self.__ensureTranslationEngineReady()
381 self.engineComboBox.currentIndex())
382 if self.__translationEngine and \
383 self.__translationEngine.engineName() != engineName:
384 self.__translationEngine.deleteLater()
385 self.__translationEngine = None
386
387 if self.__translationEngine is None:
388 self.__translationEngine = TranslatorEngines.getTranslationEngine(
389 engineName, self.__plugin, self)
390 374
391 result, ok = self.__translationEngine.getTranslation( 375 result, ok = self.__translationEngine.getTranslation(
392 self.__translatorRequest, text, originalLanguage, 376 self.__translatorRequest, text, originalLanguage,
393 translationLanguage) 377 translationLanguage)
394 378
414 self.__mediaPlayerStateChanged) 398 self.__mediaPlayerStateChanged)
415 399
416 if self.__mediaPlayer.state() == QMediaPlayer.PlayingState: 400 if self.__mediaPlayer.state() == QMediaPlayer.PlayingState:
417 return 401 return
418 402
419 engineName = self.engineComboBox.itemData( 403 self.__ensureTranslationEngineReady()
420 self.engineComboBox.currentIndex())
421 if self.__translationEngine and \
422 self.__translationEngine.engineName() != engineName:
423 self.__translationEngine.deleteLater()
424 self.__translationEngine = None
425
426 if self.__translationEngine is None:
427 self.__translationEngine = TranslatorEngines.getTranslationEngine(
428 engineName, self.__plugin, self)
429 404
430 if not self.__translationEngine.hasTTS(): 405 if not self.__translationEngine.hasTTS():
431 E5MessageBox.critical( 406 E5MessageBox.critical(
432 self, 407 self,
433 self.tr("Translation Error"), 408 self.tr("Translation Error"),

eric ide

mercurial