diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2021-03-17 11:54:43 +0100 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2021-05-08 10:44:03 +0200 |
| commit | 10684b6d82f1843eff3921da40802d335fb3cf5c (patch) | |
| tree | a80d403f0668686de90c2cd48786e7b5e5fc2128 /src/dialogs/settingsdialog.cpp | |
| parent | a2f36ec4d14ddf1bcee98e52a0f3a924804d06fb (diff) | |
| download | kristall-10684b6d82f1843eff3921da40802d335fb3cf5c.tar.gz | |
Further improves localization (#191). Allows switching and setting the chosen localization properly.
Diffstat (limited to 'src/dialogs/settingsdialog.cpp')
| -rw-r--r-- | src/dialogs/settingsdialog.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index c97d74c..19b0fd9 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -21,6 +21,12 @@ SettingsDialog::SettingsDialog(QWidget *parent) : { ui->setupUi(this); + connect( // connect with "this" as context, so the connection will die when the window is destroyed + kristall::globals().localization.get(), &Localization::translationChanged, + this, [this]() { this->ui->retranslateUi(this); }, + Qt::DirectConnection + ); + static_assert(DocumentStyle::Fixed == 0); static_assert(DocumentStyle::AutoDarkTheme == 1); static_assert(DocumentStyle::AutoLightTheme == 2); @@ -103,6 +109,11 @@ SettingsDialog::SettingsDialog(QWidget *parent) : this->ui->style_scroll_layout->minimumSize().width() + this->ui->style_scroll_area->verticalScrollBar()->sizeHint().width()); }); + + this->ui->selected_language->clear(); + this->ui->selected_language->addItem(QIcon(), tr("System language"), QString("")); + this->ui->selected_language->addItem(QIcon(":/icons/languages/en.svg"), QLocale("en").nativeLanguageName(), QString("en")); + this->ui->selected_language->addItem(QIcon(":/icons/languages/ru.svg"), QLocale("ru").nativeLanguageName(), QString("ru")); } SettingsDialog::~SettingsDialog() @@ -387,6 +398,32 @@ void SettingsDialog::setOptions(const GenericSettings &options) } } +std::optional<QLocale> SettingsDialog::locale() const +{ + QString locale_str = this->ui->selected_language->currentData().toString(); + if(locale_str.isEmpty()) + return std::nullopt; + else + return QLocale(locale_str); +} + +void SettingsDialog::setLocale(std::optional<QLocale> locale) +{ + if(locale == std::nullopt) + { + this->ui->selected_language->setCurrentIndex(0); + } + else + { + switch(locale->language()) + { + default: this->ui->selected_language->setCurrentIndex(0); break; + case QLocale::English: this->ui->selected_language->setCurrentIndex(1); break; + case QLocale::Russian: this->ui->selected_language->setCurrentIndex(2); break; + } + } +} + GenericSettings SettingsDialog::options() const { return this->current_options; @@ -988,3 +1025,10 @@ void SettingsDialog::on_session_restore_behaviour_currentIndexChanged(int index) { this->current_options.session_restore_behaviour = GenericSettings::SessionRestoreBehaviour(this->ui->session_restore_behaviour->itemData(index).toInt()); } + +void SettingsDialog::on_selected_language_currentIndexChanged(int index) +{ + auto const language_id = this->ui->selected_language->itemData(index, Qt::UserRole).toString(); + + kristall::globals().localization->translate(QLocale(language_id)); +} |
