diff -r 7fd9b7ecbcfe -r d71b094845e7 Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py --- a/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py Sat Jul 07 14:38:13 2018 +0200 +++ b/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py Sun Jul 08 13:05:23 2018 +0200 @@ -74,18 +74,11 @@ self.pronounceTransButton.setEnabled(False) selectedEngine = self.__plugin.getPreferences("SelectedEngine") - origLanguage = self.__plugin.getPreferences("OriginalLanguage") - transLanguage = self.__plugin.getPreferences("TranslationLanguage") self.__updateEngines() engineIndex = self.engineComboBox.findData(selectedEngine) self.engineComboBox.setCurrentIndex(engineIndex) self.__engineComboBoxCurrentIndexChanged(engineIndex) - # this calls self.__updateLanguages() implicitly - self.origLanguageComboBox.setCurrentIndex( - self.origLanguageComboBox.findData(origLanguage)) - self.transLanguageComboBox.setCurrentIndex( - self.transLanguageComboBox.findData(transLanguage)) self.engineComboBox.currentIndexChanged.connect( self.__engineComboBoxCurrentIndexChanged) @@ -101,8 +94,6 @@ # 1. save current selections origLanguage = self.origLanguageComboBox.itemData( self.origLanguageComboBox.currentIndex()) - transLanguage = self.transLanguageComboBox.itemData( - self.transLanguageComboBox.currentIndex()) # 2. reload the original language combo box self.origLanguageComboBox.blockSignals(True) @@ -119,32 +110,6 @@ origIndex = 0 self.origLanguageComboBox.blockSignals(False) self.origLanguageComboBox.setCurrentIndex(origIndex) - - # 3. reload the target language combo box, if the target is not - # dependent upon the source language - supportedTargetCodes = \ - self.__translationEngine.supportedTargetLanguages( - self.origLanguageComboBox.itemData( - self.origLanguageComboBox.currentIndex() - ) - ) - if supportedTargetCodes is None: - # supported target codes are independent - self.transLanguageComboBox.clear() - for code in enabledCodes: - if code in supportedCodes: - language = self.__languages.getLanguage(code) - if language: - icon = self.__languages.getLanguageIcon(code) - self.transLanguageComboBox.addItem(icon, language, - code) - self.transLanguageComboBox.model().sort(0) - index = self.transLanguageComboBox.findData(transLanguage) - if index == -1: - index = 0 - self.transLanguageComboBox.setCurrentIndex(index) - else: - self.on_origLanguageComboBox_currentIndexChanged(origIndex) def __updateEngines(self): """ @@ -311,25 +276,53 @@ self.__plugin.setPreferences( "TranslationLanguage", self.transLanguageComboBox.itemData(index)) - @pyqtSlot(int) - def __engineComboBoxCurrentIndexChanged(self, index): + @pyqtSlot() + def __availableTranslationsLoaded(self): + """ + Private slot to handle the availability of translations. """ - Private slot to handle the selection of a translation service. + origLanguage = self.__plugin.getPreferences("OriginalLanguage") + transLanguage = self.__plugin.getPreferences("TranslationLanguage") + + self.__updateLanguages() - @param index current index (integer) + self.origLanguageComboBox.setCurrentIndex( + self.origLanguageComboBox.findData(origLanguage)) + self.transLanguageComboBox.setCurrentIndex( + self.transLanguageComboBox.findData(transLanguage)) + + def __ensureTranslationEngineReady(self): """ - engineName = self.engineComboBox.itemData(index) - if self.__translationEngine and \ + Private slot to ensure, that the currently selected translation engine + is ready. + """ + engineName = self.engineComboBox.itemData( + self.engineComboBox.currentIndex()) + if self.__translationEngine is not None and \ self.__translationEngine.engineName() != engineName: + self.__translationEngine.availableTranslationsLoaded.disconnect( + self.__availableTranslationsLoaded) self.__translationEngine.deleteLater() self.__translationEngine = None if self.__translationEngine is None: self.__translationEngine = TranslatorEngines.getTranslationEngine( engineName, self.__plugin, self) + if self.__translationEngine is not None: + self.__translationEngine.availableTranslationsLoaded.connect( + self.__availableTranslationsLoaded) + + @pyqtSlot(int) + def __engineComboBoxCurrentIndexChanged(self, index): + """ + Private slot to handle the selection of a translation service. + + @param index current index + @type int + """ + self.__ensureTranslationEngineReady() self.__updatePronounceButtons() - self.__updateLanguages() self.__plugin.setPreferences( "SelectedEngine", self.engineComboBox.itemData(index)) @@ -377,16 +370,7 @@ from .TranslatorRequest import TranslatorRequest self.__translatorRequest = TranslatorRequest(self) - engineName = self.engineComboBox.itemData( - self.engineComboBox.currentIndex()) - if self.__translationEngine and \ - self.__translationEngine.engineName() != engineName: - self.__translationEngine.deleteLater() - self.__translationEngine = None - - if self.__translationEngine is None: - self.__translationEngine = TranslatorEngines.getTranslationEngine( - engineName, self.__plugin, self) + self.__ensureTranslationEngineReady() result, ok = self.__translationEngine.getTranslation( self.__translatorRequest, text, originalLanguage, @@ -416,16 +400,7 @@ if self.__mediaPlayer.state() == QMediaPlayer.PlayingState: return - engineName = self.engineComboBox.itemData( - self.engineComboBox.currentIndex()) - if self.__translationEngine and \ - self.__translationEngine.engineName() != engineName: - self.__translationEngine.deleteLater() - self.__translationEngine = None - - if self.__translationEngine is None: - self.__translationEngine = TranslatorEngines.getTranslationEngine( - engineName, self.__plugin, self) + self.__ensureTranslationEngineReady() if not self.__translationEngine.hasTTS(): E5MessageBox.critical(