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 {
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;
}
}

@ -19,6 +19,7 @@
#ifndef CALAMARESUTILS_RETRANSLATOR_H
#define CALAMARESUTILS_RETRANSLATOR_H
#include <QList>
#include <QObject>
#include <functional>
@ -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

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

Loading…
Cancel
Save