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"), |