From c790aa9cbff96aa736984fafb211c3a695e7c385 Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Sun, 23 Aug 2015 21:10:14 +0200
Subject: [PATCH] Dynamic change of language ( #139 )

---
 src/cutecoin/gui/certification.py    |  1 -
 src/cutecoin/gui/community_tab.py    | 12 +++++++++++-
 src/cutecoin/gui/currency_tab.py     | 14 +++++++++++++-
 src/cutecoin/gui/homescreen.py       | 13 +++++++++++++
 src/cutecoin/gui/informations_tab.py | 13 ++++++++++++-
 src/cutecoin/gui/mainwindow.py       | 13 ++++++++++++-
 src/cutecoin/gui/network_tab.py      | 13 +++++++++++--
 src/cutecoin/gui/password_asker.py   | 11 +++++++++++
 src/cutecoin/gui/preferences.py      |  2 ++
 src/cutecoin/gui/transactions_tab.py | 13 ++++++++++++-
 src/cutecoin/gui/wallets_tab.py      | 13 ++++++++++++-
 src/cutecoin/gui/wot_tab.py          | 13 ++++++++++++-
 12 files changed, 121 insertions(+), 10 deletions(-)

diff --git a/src/cutecoin/gui/certification.py b/src/cutecoin/gui/certification.py
index 4ebd81fd..c76f1468 100644
--- a/src/cutecoin/gui/certification.py
+++ b/src/cutecoin/gui/certification.py
@@ -12,7 +12,6 @@ import asyncio
 
 
 class CertificationDialog(QDialog, Ui_CertificationDialog):
-
     """
     classdocs
     """
diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py
index e9e3653f..6d733008 100644
--- a/src/cutecoin/gui/community_tab.py
+++ b/src/cutecoin/gui/community_tab.py
@@ -5,7 +5,7 @@ Created on 2 févr. 2014
 """
 
 import logging
-from PyQt5.QtCore import Qt, pyqtSlot
+from PyQt5.QtCore import Qt, pyqtSlot, QEvent
 from PyQt5.QtGui import QIcon, QCursor
 from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QMenu, QDialog, \
                             QAbstractItemView
@@ -284,3 +284,13 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget):
         self.table_identities.model().sourceModel().refresh_identities(identities)
         self.table_identities.resizeColumnsToContents()
 
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+        return super(CommunityTabWidget, self).changeEvent(event)
+
diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py
index 4767d36d..c3f40928 100644
--- a/src/cutecoin/gui/currency_tab.py
+++ b/src/cutecoin/gui/currency_tab.py
@@ -7,7 +7,7 @@ Created on 2 févr. 2014
 import time
 import logging
 from PyQt5.QtWidgets import QWidget, QMessageBox
-from PyQt5.QtCore import QModelIndex, pyqtSlot, QDateTime, QLocale
+from PyQt5.QtCore import QModelIndex, pyqtSlot, QDateTime, QLocale, QEvent
 from PyQt5.QtGui import QIcon
 from ..gen_resources.currency_tab_uic import Ui_CurrencyTabWidget
 
@@ -202,3 +202,15 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
 
         if self.tab_informations:
             self.tab_informations.refresh()
+
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh_status()
+        return super(CurrencyTabWidget, self).changeEvent(event)
+
diff --git a/src/cutecoin/gui/homescreen.py b/src/cutecoin/gui/homescreen.py
index 15ffa516..535bb298 100644
--- a/src/cutecoin/gui/homescreen.py
+++ b/src/cutecoin/gui/homescreen.py
@@ -5,6 +5,7 @@ Created on 31 janv. 2015
 """
 
 from PyQt5.QtWidgets import QWidget
+from PyQt5.QtCore import QEvent
 from ..gen_resources.homescreen_uic import Ui_HomeScreenWidget
 from ..__init__ import __version__
 from . import toast
@@ -43,3 +44,15 @@ class HomeScreenWidget(QWidget, Ui_HomeScreenWidget):
                        version_info=version_info,
                        version_url=version_url))
 
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh_text()
+        return super(HomeScreenWidget, self).changeEvent(event)
+
+
diff --git a/src/cutecoin/gui/informations_tab.py b/src/cutecoin/gui/informations_tab.py
index 5d494e1a..5625282c 100644
--- a/src/cutecoin/gui/informations_tab.py
+++ b/src/cutecoin/gui/informations_tab.py
@@ -6,7 +6,7 @@ Created on 31 janv. 2015
 
 import logging
 import math
-from PyQt5.QtCore import QLocale, QDateTime
+from PyQt5.QtCore import QLocale, QDateTime, QEvent
 from PyQt5.QtWidgets import QWidget
 from ..gen_resources.informations_tab_uic import Ui_InformationsTabWidget
 
@@ -218,3 +218,14 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget):
                 self.tr('Maximum distance between each WoT member and a newcomer'),
             )
         )
+
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh()
+        return super(InformationsTabWidget, self).changeEvent(event)
diff --git a/src/cutecoin/gui/mainwindow.py b/src/cutecoin/gui/mainwindow.py
index a893c9db..aef391f5 100644
--- a/src/cutecoin/gui/mainwindow.py
+++ b/src/cutecoin/gui/mainwindow.py
@@ -8,7 +8,7 @@ from ..gen_resources.about_uic import Ui_AboutPopup
 
 from PyQt5.QtWidgets import QMainWindow, QAction, QFileDialog, QProgressBar, \
     QMessageBox, QLabel, QComboBox, QDialog, QApplication
-from PyQt5.QtCore import QSignalMapper, QObject, QLocale, \
+from PyQt5.QtCore import QSignalMapper, QObject, QLocale, QEvent, \
     pyqtSlot, pyqtSignal, QDate, QDateTime, QTimer, QUrl, Qt, QCoreApplication
 from PyQt5.QtGui import QIcon, QDesktopServices
 
@@ -351,3 +351,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
         self.app.stop()
         super().closeEvent(event)
 
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh()
+        return super(MainWindow, self).changeEvent(event)
+
diff --git a/src/cutecoin/gui/network_tab.py b/src/cutecoin/gui/network_tab.py
index 73349efb..efdd7624 100644
--- a/src/cutecoin/gui/network_tab.py
+++ b/src/cutecoin/gui/network_tab.py
@@ -9,7 +9,7 @@ import asyncio
 
 from PyQt5.QtGui import QCursor, QDesktopServices
 from PyQt5.QtWidgets import QWidget, QMenu, QAction
-from PyQt5.QtCore import Qt, QModelIndex, pyqtSlot, QUrl
+from PyQt5.QtCore import Qt, QModelIndex, pyqtSlot, QUrl, QEvent
 from ..models.network import NetworkTableModel, NetworkFilterProxyModel
 from ..core.net.api import bma as qtbma
 from ..gen_resources.network_tab_uic import Ui_NetworkTabWidget
@@ -98,4 +98,13 @@ class NetworkTabWidget(QWidget, Ui_NetworkTabWidget):
     def manual_nodes_refresh(self):
         self.community.network.refresh_once()
 
-
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh_nodes()
+        return super(NetworkTabWidget, self).changeEvent(event)
diff --git a/src/cutecoin/gui/password_asker.py b/src/cutecoin/gui/password_asker.py
index dcb65ddd..30815fe8 100644
--- a/src/cutecoin/gui/password_asker.py
+++ b/src/cutecoin/gui/password_asker.py
@@ -7,6 +7,7 @@ Created on 24 dec. 2014
 import logging
 import re
 
+from PyQt5.QtCore import QEvent
 from PyQt5.QtWidgets import QDialog, QMessageBox
 
 from ..gen_resources.password_asker_uic import Ui_PasswordAskerDialog
@@ -67,6 +68,16 @@ class PasswordAskerDialog(QDialog, Ui_PasswordAskerDialog):
         self.password = ""
         super().reject()
 
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+        return super(PasswordAskerDialog, self).changeEvent(event)
+
 
 def detect_non_printable(data):
     control_chars = ''.join(map(chr, list(range(0, 32)) + list(range(127, 160))))
diff --git a/src/cutecoin/gui/preferences.py b/src/cutecoin/gui/preferences.py
index 0372232d..919d50de 100644
--- a/src/cutecoin/gui/preferences.py
+++ b/src/cutecoin/gui/preferences.py
@@ -78,6 +78,8 @@ class PreferencesDialog(QDialog, Ui_PreferencesDialog):
                 'proxy_port': self.spinbox_proxy_port.value(),
                 'international_system_of_units': self.checkbox_international_system.isChecked()}
         self.app.save_preferences(pref)
+      # change UI translation
+        self.app.switch_language()
         toast.display(self.tr("Preferences"),
                       self.tr("A restart is needed to apply your new preferences."))
         super().accept()
diff --git a/src/cutecoin/gui/transactions_tab.py b/src/cutecoin/gui/transactions_tab.py
index 2758daa9..50eaa7de 100644
--- a/src/cutecoin/gui/transactions_tab.py
+++ b/src/cutecoin/gui/transactions_tab.py
@@ -1,6 +1,6 @@
 from PyQt5.QtWidgets import QWidget, QAbstractItemView, QHeaderView, QDialog, \
     QMenu, QAction, QApplication, QMessageBox
-from PyQt5.QtCore import Qt, QDateTime, QTime, QModelIndex, QLocale, QCoreApplication, pyqtSlot
+from PyQt5.QtCore import Qt, QDateTime, QTime, QModelIndex, QCoreApplication, pyqtSlot, QEvent
 from PyQt5.QtGui import QCursor
 from ..gen_resources.transactions_tab_uic import Ui_transactionsTabWidget
 from ..models.txhistory import HistoryTableModel, TxFilterProxyModel
@@ -237,3 +237,14 @@ QMessageBox.Ok | QMessageBox.Cancel)
             self.table_history.model().set_period(ts_from, ts_to)
 
             self.refresh_balance()
+
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh()
+        return super(TransactionsTabWidget, self).changeEvent(event)
diff --git a/src/cutecoin/gui/wallets_tab.py b/src/cutecoin/gui/wallets_tab.py
index 32e601f3..245cab78 100644
--- a/src/cutecoin/gui/wallets_tab.py
+++ b/src/cutecoin/gui/wallets_tab.py
@@ -7,7 +7,7 @@ import asyncio
 import logging
 
 from PyQt5.QtWidgets import QWidget, QMenu, QAction, QApplication, QDialog, QMessageBox
-from PyQt5.QtCore import QDateTime, QModelIndex, Qt, QLocale
+from PyQt5.QtCore import QDateTime, QModelIndex, Qt, QLocale, QEvent
 from PyQt5.QtGui import QCursor
 
 from ..core.registry import Identity
@@ -340,3 +340,14 @@ Revoking your UID can only success if it is not already validated by the network
             self.button_membership.hide()
             self.button_leaving.hide()
             self.button_publish_uid.show()
+
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh()
+        return super(WalletsTabWidget, self).changeEvent(event)
diff --git a/src/cutecoin/gui/wot_tab.py b/src/cutecoin/gui/wot_tab.py
index ec8d5754..c7e8572e 100644
--- a/src/cutecoin/gui/wot_tab.py
+++ b/src/cutecoin/gui/wot_tab.py
@@ -3,7 +3,7 @@
 import logging
 from cutecoin.core.graph import Graph
 from PyQt5.QtWidgets import QWidget, QComboBox, QLineEdit
-from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtCore import pyqtSlot, QEvent
 from cutecoin.core.net.api import bma
 from cutecoin.core.registry import BlockchainState
 from ..gen_resources.wot_tab_uic import Ui_WotTabWidget
@@ -218,3 +218,14 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
             logging.debug('community.get_block request error : ' + str(e))
             return False
         return block.mediantime
+
+    def changeEvent(self, event):
+        """
+        Intercepte LanguageChange event to translate UI
+        :param QEvent QEvent: Event
+        :return:
+        """
+        if event.type() == QEvent.LanguageChange:
+            self.retranslateUi(self)
+            self.refresh()
+        return super(WotTabWidget, self).changeEvent(event)
-- 
GitLab