Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py

changeset 6018
1c858879d3d0
child 6048
82ad8ec9548c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py	Sun Dec 10 16:23:29 2017 +0100
@@ -0,0 +1,179 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Time Tracker configuration page.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, Qt
+from PyQt5.QtWidgets import QListWidgetItem
+
+from E5Gui import E5MessageBox
+
+from Preferences.ConfigurationPages.ConfigurationPageBase import \
+    ConfigurationPageBase
+from .Ui_TranslatorPage import Ui_TranslatorPage
+
+from ..TranslatorLanguagesDb import TranslatorLanguagesDb
+from .. import TranslatorEngines
+
+
+class TranslatorPage(ConfigurationPageBase, Ui_TranslatorPage):
+    """
+    Class implementing the Time Tracker configuration page.
+    """
+    def __init__(self, plugin):
+        """
+        Constructor
+        
+        @param plugin reference to the plugin object
+        """
+        super(TranslatorPage, self).__init__()
+        self.setupUi(self)
+        self.setObjectName("TranslatorPage")
+        
+        self.__plugin = plugin
+        self.__enableLanguageWarning = True
+        
+        self.googlev2Label.setText(self.tr(
+            """<p>A key is <b>required</b> to use this service."""
+            """ <a href="{0}">Get a commercial API key.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("googlev2")))
+        self.msLabel.setText(self.tr(
+            """<p>A registration of the text translation service is"""
+            """ <b>required</b>. <a href="{0}">Register with Microsoft"""
+            """ Azure.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("microsoft")))
+        self.mymemoryLabel.setText(self.tr(
+            """<p>A key is <b>optional</b> to use this service."""
+            """ <a href="{0}">Get a free API key.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("mymemory")))
+        self.yandexLabel.setText(self.tr(
+            """<p>A key is <b>required</b> to use this service."""
+            """ <a href="{0}">Get a free API key.</a></p>""").format(
+                TranslatorEngines.getKeyUrl("yandex")))
+        
+        # set initial values
+        enabledLanguages = self.__plugin.getPreferences("EnabledLanguages")
+        languages = TranslatorLanguagesDb()
+        for languageCode in languages.getAllLanguages():
+            itm = QListWidgetItem()
+            itm.setText(languages.getLanguage(languageCode))
+            itm.setIcon(languages.getLanguageIcon(languageCode))
+            itm.setData(Qt.UserRole, languageCode)
+            if languageCode in enabledLanguages or not enabledLanguages:
+                itm.setCheckState(Qt.Checked)
+            else:
+                itm.setCheckState(Qt.Unchecked)
+            self.languagesList.addItem(itm)
+        self.languagesList.sortItems()
+        
+        # Google settings
+        self.dictionaryCheckBox.setChecked(
+            self.__plugin.getPreferences("GoogleEnableDictionary"))
+        self.googlev2KeyEdit.setText(
+            self.__plugin.getPreferences("GoogleV2Key"))
+        # Microsoft settings
+        self.msSubscriptionKeyEdit.setText(
+            self.__plugin.getPreferences("MsTranslatorKey"))
+        # MyMemory settings
+        self.mymemoryKeyEdit.setText(
+            self.__plugin.getPreferences("MyMemoryKey"))
+        self.mymemoryEmailEdit.setText(
+            self.__plugin.getPreferences("MyMemoryEmail"))
+        # Yandex settings
+        self.yandexKeyEdit.setText(
+            self.__plugin.getPreferences("YandexKey"))
+    
+    def save(self):
+        """
+        Public slot to save the Pyramid configuration.
+        """
+        enabledLanguages = [
+            itm.data(Qt.UserRole)
+            for itm in self.__checkedLanguageItems()
+        ]
+        self.__plugin.setPreferences(
+            "EnabledLanguages", enabledLanguages)
+        
+        # Google settings
+        self.__plugin.setPreferences(
+            "GoogleEnableDictionary", self.dictionaryCheckBox.isChecked())
+        self.__plugin.setPreferences(
+            "GoogleV2Key", self.googlev2KeyEdit.text())
+        # Microsoft settings
+        self.__plugin.setPreferences(
+            "MsTranslatorKey", self.msSubscriptionKeyEdit.text())
+        # MyMemory settings
+        self.__plugin.setPreferences(
+            "MyMemoryKey", self.mymemoryKeyEdit.text())
+        # Yandex settings
+        self.__plugin.setPreferences(
+            "YandexKey", self.yandexKeyEdit.text())
+    
+    def __checkedLanguageItems(self):
+        """
+        Private method to get a list of checked language items.
+        
+        @return list of checked language items (list of QListWidgetItem)
+        """
+        items = []
+        for index in range(self.languagesList.count()):
+            itm = self.languagesList.item(index)
+            if itm.checkState() == Qt.Checked:
+                items.append(itm)
+        
+        return items
+    
+    @pyqtSlot()
+    def on_setButton_clicked(self):
+        """
+        Private slot to set or unset all items.
+        """
+        self.__enableLanguageWarning = False
+        
+        unset = len(self.__checkedLanguageItems()) > 0
+        for index in range(self.languagesList.count()):
+            itm = self.languagesList.item(index)
+            if unset:
+                itm.setCheckState(Qt.Unchecked)
+            else:
+                itm.setCheckState(Qt.Checked)
+        
+        self.__enableLanguageWarning = True
+    
+    @pyqtSlot()
+    def on_defaultButton_clicked(self):
+        """
+        Private slot to set the default languages.
+        """
+        self.__enableLanguageWarning = False
+        
+        defaults = self.__plugin.getPreferencesDefault("EnabledLanguages")
+        for index in range(self.languagesList.count()):
+            itm = self.languagesList.item(index)
+            if itm.data(Qt.UserRole) in defaults:
+                itm.setCheckState(Qt.Checked)
+            else:
+                itm.setCheckState(Qt.Unchecked)
+        
+        self.__enableLanguageWarning = True
+    
+    @pyqtSlot(QListWidgetItem)
+    def on_languagesList_itemChanged(self, item):
+        """
+        Private slot to handle the selection of an item.
+        
+        @param item reference to the changed item (QListWidgetItem)
+        """
+        if self.__enableLanguageWarning and \
+                len(self.__checkedLanguageItems()) < 2:
+            E5MessageBox.warning(
+                self,
+                self.tr("Enabled Languages"),
+                self.tr("""At least two languages should be selected to"""
+                        """ work correctly."""))

eric ide

mercurial