aboutsummaryrefslogtreecommitdiff
path: root/src/dialogs/settingsdialog.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2021-03-17 11:54:43 +0100
committerFelix (xq) Queißner <git@mq32.de>2021-05-08 10:44:03 +0200
commit10684b6d82f1843eff3921da40802d335fb3cf5c (patch)
treea80d403f0668686de90c2cd48786e7b5e5fc2128 /src/dialogs/settingsdialog.cpp
parenta2f36ec4d14ddf1bcee98e52a0f3a924804d06fb (diff)
downloadkristall-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.cpp44
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));
+}