From 9e9a922498507e25e02f8dc5c48b4785595b20ec Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Mon, 10 Nov 2014 12:40:00 +0100 Subject: [PATCH] Language selector + focus fix in GreetingPage. --- src/modules/greeting/GreetingPage.cpp | 72 +++++++++++++++++++++++++++ src/modules/greeting/GreetingPage.h | 8 +++ 2 files changed, 80 insertions(+) diff --git a/src/modules/greeting/GreetingPage.cpp b/src/modules/greeting/GreetingPage.cpp index 2f2214923..42a920b56 100644 --- a/src/modules/greeting/GreetingPage.cpp +++ b/src/modules/greeting/GreetingPage.cpp @@ -18,8 +18,16 @@ #include "GreetingPage.h" +#include "CalamaresVersion.h" +#include "utils/Logger.h" +#include "utils/CalamaresUtils.h" +#include "ViewManager.h" + +#include #include +#include #include +#include #include "Branding.h" @@ -30,6 +38,45 @@ GreetingPage::GreetingPage( QWidget* parent ) QBoxLayout *mainLayout = new QHBoxLayout; setLayout( mainLayout ); + QString defaultLocale = QLocale::system().name(); + + m_languageWidget = new QListWidget( this ); + mainLayout->addWidget( m_languageWidget ); + { + foreach ( const QString& locale, QString( CALAMARES_TRANSLATION_LANGUAGES ).split( ';') ) + { + QLocale thisLocale = QLocale( locale ); + QString lang = QLocale::languageToString( thisLocale.language() ); + if ( QLocale::countriesForLanguage( thisLocale.language() ).count() > 2 ) + lang.append( QString( " (%1)" ) + .arg( QLocale::countryToString( thisLocale.country() ) ) ); + + m_languageWidget->addItem( lang ); + m_languageWidget->item( m_languageWidget->count() - 1 ) + ->setData( Qt::UserRole, thisLocale ); + if ( thisLocale.language() == QLocale( defaultLocale ).language() && + thisLocale.country() == QLocale( defaultLocale ).country() ) + m_languageWidget->setCurrentRow( m_languageWidget->count() - 1 ); + } + m_languageWidget->sortItems(); + + connect( m_languageWidget, &QListWidget::currentItemChanged, + this, [ & ]( QListWidgetItem *current, QListWidgetItem *previous ) + { + QLocale selectedLocale = current->data( Qt::UserRole ).toLocale(); + cDebug() << "Selected locale" << selectedLocale.name(); + + QLocale::setDefault( selectedLocale ); + CalamaresUtils::installTranslator( selectedLocale.name(), qApp ); + } ); + + connect( m_languageWidget, &QListWidget::itemActivated, + this, [] + { + Calamares::ViewManager::instance()->next(); + } ); + } + QLabel* text = new QLabel( tr( "

Welcome to the %1 installer.


" "This program will ask you some questions and " "set up %2 on your computer." ) @@ -45,3 +92,28 @@ GreetingPage::GreetingPage( QWidget* parent ) mainLayout->addWidget( text ); mainLayout->addStretch(); } + + +void +GreetingPage::changeEvent( QEvent* e ) +{ + QWidget::changeEvent( e ); + switch ( e->type() ) + { + case QEvent::LanguageChange: + //TODO: retranslate all widgets + break; + + default: + break; + } +} + + +void +GreetingPage::focusInEvent( QFocusEvent* e ) +{ + if ( m_languageWidget ) + m_languageWidget->setFocus(); + e->accept(); +} diff --git a/src/modules/greeting/GreetingPage.h b/src/modules/greeting/GreetingPage.h index 01b75f88f..b23bd271a 100644 --- a/src/modules/greeting/GreetingPage.h +++ b/src/modules/greeting/GreetingPage.h @@ -21,12 +21,20 @@ #include +class QListWidget; + class GreetingPage : public QWidget { Q_OBJECT public: explicit GreetingPage( QWidget* parent = nullptr ); +protected: + void changeEvent( QEvent* e ) override; + void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus + +private: + QListWidget* m_languageWidget; }; #endif // GREETINGPAGE_H