Allow multiple CALAMARES_RETRANSLATE blocks in the same widget.
This commit is contained in:
parent
945b59748a
commit
e5c3888be2
@ -24,13 +24,29 @@
|
|||||||
namespace CalamaresUtils {
|
namespace CalamaresUtils {
|
||||||
|
|
||||||
|
|
||||||
Retranslator::Retranslator( QObject* parent,
|
void
|
||||||
|
Retranslator::attachRetranslator( QObject* parent,
|
||||||
std::function< void ( void ) > retranslateFunc )
|
std::function< void ( void ) > retranslateFunc )
|
||||||
: QObject( parent )
|
|
||||||
, 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…
Reference in New Issue
Block a user