diff main/PreferencesDialog.cpp @ 677:bfd68cc71a25 imaf_enc

Merge from default branch, fix build
author Chris Cannam
date Thu, 05 Dec 2013 10:57:51 +0000
parents ba338234c001 17fe7e0c23a1
children 5e6e1e074080
line wrap: on
line diff
--- a/main/PreferencesDialog.cpp	Thu Dec 05 10:11:17 2013 +0000
+++ b/main/PreferencesDialog.cpp	Thu Dec 05 10:57:51 2013 +0000
@@ -142,7 +142,7 @@
     QString targetName = settings.value("audio-target", "").toString();
     settings.endGroup();
 
-    for (int i = 0; i < devices.size(); ++i) {
+    for (int i = 0; i < (int)devices.size(); ++i) {
         audioDevice->addItem(AudioTargetFactory::getInstance()
                              ->getCallbackTargetDescription(devices[i]));
         if (targetName == devices[i]) audioDevice->setCurrentIndex(i);
@@ -191,7 +191,7 @@
     connect(showSplash, SIGNAL(stateChanged(int)),
             this, SLOT(showSplashChanged(int)));
 
-#ifndef Q_WS_MAC
+#ifndef Q_OS_MAC
     QComboBox *bgMode = new QComboBox;
     int bg = prefs->getPropertyRangeAndValue("Background Mode", &min, &max,
                                              &deflt);
@@ -205,6 +205,41 @@
             this, SLOT(backgroundModeChanged(int)));
 #endif
 
+    settings.beginGroup("Preferences");
+    QString userLocale = settings.value("locale", "").toString();
+    m_currentLocale = userLocale;
+    settings.endGroup();
+
+    QComboBox *locale = new QComboBox;
+    QStringList localeFiles = QDir(":i18n").entryList(QStringList() << "*.qm");
+    locale->addItem(tr("Follow system locale"));
+    m_locales.push_back("");
+    if (userLocale == "") {
+        locale->setCurrentIndex(0);
+    }
+    foreach (QString f, localeFiles) {
+        QString f0 = f;
+        f.replace("sonic-visualiser_", "").replace(".qm", "");
+        if (f == f0) { // our expectations about filename format were not met
+            cerr << "INFO: Unexpected filename " << f << " in i18n resource directory" << endl;
+        } else {
+            m_locales.push_back(f);
+            QString displayText;
+            // Add new translations here
+            if (f == "ru") displayText = tr("Russian");
+            else if (f == "en_GB") displayText = tr("British English");
+            else if (f == "en_US") displayText = tr("American English");
+            else if (f == "cs_CZ") displayText = tr("Czech");
+            else displayText = f;
+            locale->addItem(QString("%1 [%2]").arg(displayText).arg(f));
+            if (userLocale == f) {
+                locale->setCurrentIndex(locale->count() - 1);
+            }
+        }
+    }
+    connect(locale, SIGNAL(currentIndexChanged(int)),
+            this, SLOT(localeChanged(int)));
+
     QSpinBox *fontSize = new QSpinBox;
     int fs = prefs->getPropertyRangeAndValue("View Font Size", &min, &max,
                                              &deflt);
@@ -239,6 +274,10 @@
 
     int row = 0;
 
+    subgrid->addWidget(new QLabel(tr("%1:").arg(tr("User interface language"))),
+                       row, 0);
+    subgrid->addWidget(locale, row++, 1, 1, 1);
+
     subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
                                                 ("Temporary Directory Root"))),
                        row, 0);
@@ -276,7 +315,7 @@
                        row, 0);
     subgrid->addWidget(propertyLayout, row++, 1, 1, 2);
 
-#ifndef Q_WS_MAC
+#ifndef Q_OS_MAC
     subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
                                                 ("Background Mode"))),
                        row, 0);
@@ -484,6 +523,14 @@
 }
 
 void
+PreferencesDialog::localeChanged(int i)
+{
+    m_currentLocale = m_locales[i];
+    m_applyButton->setEnabled(true);
+    m_changesOnRestart = true;
+}
+
+void
 PreferencesDialog::tempDirRootChanged(QString r)
 {
     m_tempDirRoot = r;
@@ -564,6 +611,10 @@
     settings.setValue("sessiontemplate", m_currentTemplate);
     settings.endGroup();
 
+    settings.beginGroup("Preferences");
+    settings.setValue("locale", m_currentLocale);
+    settings.endGroup();
+
     m_applyButton->setEnabled(false);
 
     if (m_changesOnRestart) {