diff src/qt/optionsdialog.cpp @ 2426:58abdd7d008b draft

Make it possible to set user interface language from options dialog
author Wladimir J. van der Laan <laanwj@gmail.com>
date Tue, 08 May 2012 23:03:41 +0200 (2012-05-08)
parents aa46239b5b09
children 43146c90b993
line wrap: on
line diff
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -19,6 +19,8 @@
 #include <QDoubleValidator>
 #include <QRegExpValidator>
 #include <QDialogButtonBox>
+#include <QDir>
+#include <QMessageBox>
 
 class OptionsPage: public QWidget
 {
@@ -66,8 +68,12 @@
 
     virtual void setMapper(MonitoredDataMapper *mapper);
 private:
+    QValueComboBox *lang;
     QValueComboBox *unit;
     QCheckBox *display_addresses;
+    bool restart_warning_displayed;
+private slots:
+    void showRestartWarning();
 };
 
 class NetworkOptionsPage: public OptionsPage
@@ -230,12 +236,33 @@
 
 /* Display options */
 DisplayOptionsPage::DisplayOptionsPage(QWidget *parent):
-        OptionsPage(parent)
+    OptionsPage(parent), restart_warning_displayed(false)
 {
     setWindowTitle(tr("Display"));
 
     QVBoxLayout *layout = new QVBoxLayout();
 
+    QHBoxLayout *lang_hbox = new QHBoxLayout();
+    lang_hbox->addSpacing(18);
+    QLabel *lang_label = new QLabel(tr("User Interface &Language: "));
+    lang_hbox->addWidget(lang_label);
+    lang = new QValueComboBox(this);
+    // Make list of languages
+    QDir translations(":translations");
+    lang->addItem("(default)", QVariant(""));
+    foreach(const QString &langStr, translations.entryList())
+    {
+        lang->addItem(langStr, QVariant(langStr));
+    }
+
+    lang->setToolTip(tr("The user interface language can be set here. This setting will only take effect after restarting Bitcoin."));
+    connect(lang, SIGNAL(activated(int)), this, SLOT(showRestartWarning()));
+
+    lang_label->setBuddy(lang);
+    lang_hbox->addWidget(lang);
+
+    layout->addLayout(lang_hbox);
+
     QHBoxLayout *unit_hbox = new QHBoxLayout();
     unit_hbox->addSpacing(18);
     QLabel *unit_label = new QLabel(tr("&Unit to show amounts in: "));
@@ -259,10 +286,20 @@
 
 void DisplayOptionsPage::setMapper(MonitoredDataMapper *mapper)
 {
+    mapper->addMapping(lang, OptionsModel::Language);
     mapper->addMapping(unit, OptionsModel::DisplayUnit);
     mapper->addMapping(display_addresses, OptionsModel::DisplayAddresses);
 }
 
+void DisplayOptionsPage::showRestartWarning()
+{
+    if(!restart_warning_displayed)
+    {
+        QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting Bitcoin."), QMessageBox::Ok);
+        restart_warning_displayed = true;
+    }
+}
+
 /* Window options */
 WindowOptionsPage::WindowOptionsPage(QWidget *parent):
         OptionsPage(parent)