comparison main/PreferencesDialog.cpp @ 658:86d1f640ae1e

Add choice of interface language to the prefs dialog (in case user is unhappy with system locale)
author Chris Cannam
date Tue, 26 Nov 2013 10:35:55 +0000
parents e5e6625deb85
children 9d6eadfd390e
comparison
equal deleted inserted replaced
657:1938702bb3bf 658:86d1f640ae1e
140 QSettings settings; 140 QSettings settings;
141 settings.beginGroup("Preferences"); 141 settings.beginGroup("Preferences");
142 QString targetName = settings.value("audio-target", "").toString(); 142 QString targetName = settings.value("audio-target", "").toString();
143 settings.endGroup(); 143 settings.endGroup();
144 144
145 for (int i = 0; i < devices.size(); ++i) { 145 for (int i = 0; i < (int)devices.size(); ++i) {
146 audioDevice->addItem(AudioTargetFactory::getInstance() 146 audioDevice->addItem(AudioTargetFactory::getInstance()
147 ->getCallbackTargetDescription(devices[i])); 147 ->getCallbackTargetDescription(devices[i]));
148 if (targetName == devices[i]) audioDevice->setCurrentIndex(i); 148 if (targetName == devices[i]) audioDevice->setCurrentIndex(i);
149 } 149 }
150 150
203 203
204 connect(bgMode, SIGNAL(currentIndexChanged(int)), 204 connect(bgMode, SIGNAL(currentIndexChanged(int)),
205 this, SLOT(backgroundModeChanged(int))); 205 this, SLOT(backgroundModeChanged(int)));
206 #endif 206 #endif
207 207
208 settings.beginGroup("Preferences");
209 QString userLocale = settings.value("locale", "").toString();
210 m_currentLocale = userLocale;
211 settings.endGroup();
212
213 QComboBox *locale = new QComboBox;
214 QStringList localeFiles = QDir(":i18n").entryList(QStringList() << "*.qm");
215 locale->addItem(tr("Follow system locale"));
216 m_locales.push_back("");
217 if (userLocale == "") {
218 locale->setCurrentIndex(0);
219 }
220 foreach (QString f, localeFiles) {
221 QString f0 = f;
222 f.replace("sonic-visualiser_", "").replace(".qm", "");
223 if (f == f0) { // our expectations about filename format were not met
224 std::cerr << "INFO: Unexpected filename " << f << " in i18n resource directory" << std::endl;
225 } else {
226 m_locales.push_back(f);
227 QString displayText;
228 // Add new translations here
229 if (f == "ru") displayText = tr("Russian");
230 else if (f == "en_GB") displayText = tr("British English");
231 else if (f == "en_US") displayText = tr("American English");
232 else if (f == "cs_CZ") displayText = tr("Czech");
233 else displayText = f;
234 locale->addItem(QString("%1 [%2]").arg(displayText).arg(f));
235 if (userLocale == f) {
236 locale->setCurrentIndex(locale->count() - 1);
237 }
238 }
239 }
240 connect(locale, SIGNAL(currentIndexChanged(int)),
241 this, SLOT(localeChanged(int)));
242
208 QSpinBox *fontSize = new QSpinBox; 243 QSpinBox *fontSize = new QSpinBox;
209 int fs = prefs->getPropertyRangeAndValue("View Font Size", &min, &max, 244 int fs = prefs->getPropertyRangeAndValue("View Font Size", &min, &max,
210 &deflt); 245 &deflt);
211 m_viewFontSize = fs; 246 m_viewFontSize = fs;
212 fontSize->setMinimum(min); 247 fontSize->setMinimum(min);
237 QGridLayout *subgrid = new QGridLayout; 272 QGridLayout *subgrid = new QGridLayout;
238 frame->setLayout(subgrid); 273 frame->setLayout(subgrid);
239 274
240 int row = 0; 275 int row = 0;
241 276
277 subgrid->addWidget(new QLabel(tr("%1:").arg(tr("User interface language"))),
278 row, 0);
279 subgrid->addWidget(locale, row++, 1, 1, 1);
280
242 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel 281 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
243 ("Temporary Directory Root"))), 282 ("Temporary Directory Root"))),
244 row, 0); 283 row, 0);
245 subgrid->addWidget(m_tempDirRootEdit, row, 1, 1, 1); 284 subgrid->addWidget(m_tempDirRootEdit, row, 1, 1, 1);
246 subgrid->addWidget(tempDirButton, row, 2, 1, 1); 285 subgrid->addWidget(tempDirButton, row, 2, 1, 1);
479 void 518 void
480 PreferencesDialog::defaultTemplateChanged(int i) 519 PreferencesDialog::defaultTemplateChanged(int i)
481 { 520 {
482 m_currentTemplate = m_templates[i]; 521 m_currentTemplate = m_templates[i];
483 m_applyButton->setEnabled(true); 522 m_applyButton->setEnabled(true);
523 }
524
525 void
526 PreferencesDialog::localeChanged(int i)
527 {
528 m_currentLocale = m_locales[i];
529 m_applyButton->setEnabled(true);
530 m_changesOnRestart = true;
484 } 531 }
485 532
486 void 533 void
487 PreferencesDialog::tempDirRootChanged(QString r) 534 PreferencesDialog::tempDirRootChanged(QString r)
488 { 535 {
562 609
563 settings.beginGroup("MainWindow"); 610 settings.beginGroup("MainWindow");
564 settings.setValue("sessiontemplate", m_currentTemplate); 611 settings.setValue("sessiontemplate", m_currentTemplate);
565 settings.endGroup(); 612 settings.endGroup();
566 613
614 settings.beginGroup("Preferences");
615 settings.setValue("locale", m_currentLocale);
616 settings.endGroup();
617
567 m_applyButton->setEnabled(false); 618 m_applyButton->setEnabled(false);
568 619
569 if (m_changesOnRestart) { 620 if (m_changesOnRestart) {
570 QMessageBox::information(this, tr("Preferences"), 621 QMessageBox::information(this, tr("Preferences"),
571 tr("<b>Restart required</b><p>One or more of the application preferences you have changed may not take full effect until Sonic Visualiser is restarted.</p><p>Please exit and restart the application now if you want these changes to take effect immediately.</p>")); 622 tr("<b>Restart required</b><p>One or more of the application preferences you have changed may not take full effect until Sonic Visualiser is restarted.</p><p>Please exit and restart the application now if you want these changes to take effect immediately.</p>"));