Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py

changeset 6412
d71b094845e7
parent 6411
7fd9b7ecbcfe
child 6419
5d47e741245a
--- 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(

eric ide

mercurial