Allow multiple CALAMARES_RETRANSLATE blocks in the same widget.

main
Teo Mrnjavac 10 years ago
parent 945b59748a
commit e5c3888be2

@ -24,13 +24,29 @@
namespace CalamaresUtils { namespace CalamaresUtils {
Retranslator::Retranslator( QObject* parent, void
std::function< void ( void ) > retranslateFunc ) Retranslator::attachRetranslator( QObject* parent,
: QObject( parent ) std::function< void ( void ) > retranslateFunc )
, m_retranslateFunc( 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 ); parent->installEventFilter( this );
} }
@ -42,7 +58,8 @@ Retranslator::eventFilter( QObject* obj, QEvent* e )
{ {
if ( e->type() == QEvent::LanguageChange ) if ( e->type() == QEvent::LanguageChange )
{ {
m_retranslateFunc(); foreach ( std::function< void() > func, m_retranslateFuncList )
func();
return true; return true;
} }
} }

@ -19,6 +19,7 @@
#ifndef CALAMARESUTILS_RETRANSLATOR_H #ifndef CALAMARESUTILS_RETRANSLATOR_H
#define CALAMARESUTILS_RETRANSLATOR_H #define CALAMARESUTILS_RETRANSLATOR_H
#include <QList>
#include <QObject> #include <QObject>
#include <functional> #include <functional>
@ -32,20 +33,24 @@ class Retranslator : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit Retranslator( QObject* parent, static void attachRetranslator( QObject* parent,
std::function< void( void ) > retranslateFunc ); std::function< void( void ) > retranslateFunc );
void addRetranslateFunc( std::function< void( void ) > retranslateFunc );
protected: protected:
bool eventFilter( QObject* obj, QEvent* e ) override; bool eventFilter( QObject* obj, QEvent* e ) override;
private: private:
std::function< void( void ) > m_retranslateFunc; explicit Retranslator( QObject* parent );
QList< std::function< void( void ) > > m_retranslateFuncList;
}; };
} // namespace CalamaresUtils } // namespace CalamaresUtils
#define RETRANSLATE(a) \ #define CALAMARES_RETRANSLATE(a) \
new CalamaresUtils::Retranslator( this, [this] { a } ); CalamaresUtils::Retranslator::attachRetranslator( this, [this] { a } );
#endif // CALAMARESUTILS_RETRANSLATOR_H #endif // CALAMARESUTILS_RETRANSLATOR_H

@ -121,7 +121,7 @@ LocalePage::LocalePage( QWidget* parent )
m_blockTzWidgetSet = false; m_blockTzWidgetSet = false;
}); });
RETRANSLATE( CALAMARES_RETRANSLATE(
m_cityLabel->setText( tr( "Region:" ) ); m_cityLabel->setText( tr( "Region:" ) );
m_timezoneLabel->setText( tr( "Zone:" ) ); m_timezoneLabel->setText( tr( "Zone:" ) );
) )

Loading…
Cancel
Save