From e5c3888be2659a5daf2515887a9fafef9e62b7b1 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 11 Nov 2014 15:12:17 +0100 Subject: [PATCH] Allow multiple CALAMARES_RETRANSLATE blocks in the same widget. --- src/libcalamares/utils/Retranslator.cpp | 29 ++++++++++++++++++++----- src/libcalamares/utils/Retranslator.h | 15 ++++++++----- src/modules/locale/LocalePage.cpp | 2 +- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index 3b26d3db6..9f56dcb3c 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -24,13 +24,29 @@ namespace CalamaresUtils { -Retranslator::Retranslator( QObject* parent, - std::function< void ( void ) > retranslateFunc ) - : QObject( parent ) - , m_retranslateFunc( retranslateFunc ) +void +Retranslator::attachRetranslator( QObject* parent, + std::function< void ( void ) > retranslateFunc ) { - m_retranslateFunc(); + Retranslator* r = nullptr; + foreach ( QObject* child, parent->children() ) + { + r = qobject_cast< Retranslator* >( child ); + if ( r ) + break; + } + if ( !r ) + r = new Retranslator( parent ); + + r->m_retranslateFuncList.append( retranslateFunc ); + retranslateFunc(); +} + + +Retranslator::Retranslator( QObject* parent ) + : QObject( parent ) +{ parent->installEventFilter( this ); } @@ -42,7 +58,8 @@ Retranslator::eventFilter( QObject* obj, QEvent* e ) { if ( e->type() == QEvent::LanguageChange ) { - m_retranslateFunc(); + foreach ( std::function< void() > func, m_retranslateFuncList ) + func(); return true; } } diff --git a/src/libcalamares/utils/Retranslator.h b/src/libcalamares/utils/Retranslator.h index 9a745224f..e841e67c5 100644 --- a/src/libcalamares/utils/Retranslator.h +++ b/src/libcalamares/utils/Retranslator.h @@ -19,6 +19,7 @@ #ifndef CALAMARESUTILS_RETRANSLATOR_H #define CALAMARESUTILS_RETRANSLATOR_H +#include #include #include @@ -32,20 +33,24 @@ class Retranslator : public QObject { Q_OBJECT public: - explicit Retranslator( QObject* parent, - std::function< void( void ) > retranslateFunc ); + static void attachRetranslator( QObject* parent, + std::function< void( void ) > retranslateFunc ); + + void addRetranslateFunc( std::function< void( void ) > retranslateFunc ); protected: bool eventFilter( QObject* obj, QEvent* e ) override; private: - std::function< void( void ) > m_retranslateFunc; + explicit Retranslator( QObject* parent ); + + QList< std::function< void( void ) > > m_retranslateFuncList; }; } // namespace CalamaresUtils -#define RETRANSLATE(a) \ - new CalamaresUtils::Retranslator( this, [this] { a } ); +#define CALAMARES_RETRANSLATE(a) \ + CalamaresUtils::Retranslator::attachRetranslator( this, [this] { a } ); #endif // CALAMARESUTILS_RETRANSLATOR_H diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp index ee2dbc3ac..0650eb22f 100644 --- a/src/modules/locale/LocalePage.cpp +++ b/src/modules/locale/LocalePage.cpp @@ -121,7 +121,7 @@ LocalePage::LocalePage( QWidget* parent ) m_blockTzWidgetSet = false; }); - RETRANSLATE( + CALAMARES_RETRANSLATE( m_cityLabel->setText( tr( "Region:" ) ); m_timezoneLabel->setText( tr( "Zone:" ) ); )