feat: add a separate setting for selecting 'text language' when ALL_LANGS is set (#6960)
This commit is contained in:
@@ -115,8 +115,9 @@ ui(new Ui::GeneralSetup)
|
||||
ui->voiceLang_CB->hide();
|
||||
}
|
||||
else {
|
||||
populateVoiceLangCB();
|
||||
populateVoiceLangCB(ui->voiceLang_CB, generalSettings.ttsLanguage);
|
||||
}
|
||||
populateTextLangCB(ui->textLang_CB, generalSettings.uiLanguage, Boards::getCapability(board, Board::HasColorLcd));
|
||||
|
||||
if (!firmware->getCapability(MavlinkTelemetry)) {
|
||||
ui->mavbaud_CB->hide();
|
||||
@@ -124,7 +125,6 @@ ui(new Ui::GeneralSetup)
|
||||
}
|
||||
else {
|
||||
ui->mavbaud_CB->setCurrentIndex(generalSettings.mavbaud);
|
||||
// TODO why ??? populateVoiceLangCB(ui->voiceLang_CB, generalSettings.ttsLanguage);
|
||||
}
|
||||
|
||||
if (!firmware->getCapability(HasSoundMixer)) {
|
||||
@@ -396,38 +396,130 @@ void GeneralSetupPanel::on_timezoneLE_textEdited(const QString &text)
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralSetupPanel::populateVoiceLangCB()
|
||||
// Copied from tts.h
|
||||
enum RadioLanguage {
|
||||
LANG_CN,
|
||||
LANG_CZ,
|
||||
LANG_DA,
|
||||
LANG_DE,
|
||||
LANG_EN,
|
||||
LANG_ES,
|
||||
LANG_FI,
|
||||
LANG_FR,
|
||||
LANG_HE,
|
||||
LANG_HU,
|
||||
LANG_IT,
|
||||
LANG_JP,
|
||||
LANG_KO,
|
||||
LANG_NL,
|
||||
LANG_PL,
|
||||
LANG_PT,
|
||||
LANG_RU,
|
||||
LANG_SE,
|
||||
LANG_SK,
|
||||
LANG_TW,
|
||||
LANG_UA,
|
||||
LANG_COUNT
|
||||
};
|
||||
|
||||
// Order must match RadioLanguage
|
||||
// Note: these align with the radio NOT computer locales - TODO harmonise with ISO and one list!!!
|
||||
static const char* langStrings[][2] = {
|
||||
{ "Chinese", "cn" },
|
||||
{ "Czech", "cz" },
|
||||
{ "Danish", "da" },
|
||||
{ "German", "de" },
|
||||
{ "English", "en" },
|
||||
{ "Spanish", "es" },
|
||||
{ "Finnish", "fi" },
|
||||
{ "French", "fr" },
|
||||
{ "Hebrew", "he" },
|
||||
{ "Hungarian", "hu" },
|
||||
{ "Italian", "it" },
|
||||
{ "Japanese", "jp" },
|
||||
{ "Korean", "ko" },
|
||||
{ "Dutch", "nl" },
|
||||
{ "Polish", "pl" },
|
||||
{ "Portuguese", "pt" },
|
||||
{ "Russian", "ru" },
|
||||
{ "Swedish", "se" },
|
||||
{ "Slovak", "sk" },
|
||||
{ "Taiwanese", "tw" },
|
||||
{ "Ukrainian", "ua" },
|
||||
};
|
||||
|
||||
void GeneralSetupPanel::populateVoiceLangCB(QComboBox* b, const char* currLang)
|
||||
{
|
||||
QComboBox * b = ui->voiceLang_CB;
|
||||
// Note: these align with the radio NOT computer locales - TODO harmonise with ISO and one list!!!
|
||||
static QString strings[][2] = {
|
||||
{ tr("Chinese"), "cn" },
|
||||
{ tr("Czech"), "cz" },
|
||||
{ tr("Danish"), "da" },
|
||||
{ tr("Dutch"), "nl" },
|
||||
{ tr("English"), "en" },
|
||||
{ tr("Finnish"), "fi" },
|
||||
{ tr("French"), "fr" },
|
||||
{ tr("German"), "de" },
|
||||
{ tr("Hebrew"), "he" },
|
||||
{ tr("Hungarian"), "hu" },
|
||||
{ tr("Italian"), "it" },
|
||||
{ tr("Japanese"), "jp" },
|
||||
{ tr("Korean"), "ko" },
|
||||
{ tr("Polish"), "pl" },
|
||||
{ tr("Portuguese"), "pt" },
|
||||
{ tr("Russian"), "ru" },
|
||||
{ tr("Slovak"), "sk" },
|
||||
{ tr("Spanish"), "es" },
|
||||
{ tr("Swedish"), "se" },
|
||||
{ tr("Taiwanese"), "tw" },
|
||||
{ tr("Ukrainian"), "ua" },
|
||||
{ NULL, NULL }};
|
||||
b->clear();
|
||||
for (int i = 0; i < LANG_COUNT; i++) {
|
||||
b->addItem(tr(langStrings[i][0]), langStrings[i][1]);
|
||||
if (strncmp(currLang, langStrings[i][1], 2) == 0) {
|
||||
b->setCurrentIndex(b->count() - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralSetupPanel::populateTextLangCB(QComboBox* b, const char* currLang, bool isColor)
|
||||
{
|
||||
// Available text languages
|
||||
// B&W
|
||||
static RadioLanguage bwLangs[] = {
|
||||
// LANG_CN, // no fonts
|
||||
LANG_CZ,
|
||||
LANG_DA,
|
||||
LANG_DE,
|
||||
LANG_EN,
|
||||
LANG_ES,
|
||||
LANG_FI,
|
||||
LANG_FR,
|
||||
// LANG_HE, // no fonts
|
||||
// LANG_HU, // no translation file
|
||||
LANG_IT,
|
||||
// LANG_JP, // no fonts
|
||||
// LANG_KO, // no fonts
|
||||
LANG_NL,
|
||||
LANG_PL,
|
||||
LANG_PT,
|
||||
LANG_RU,
|
||||
LANG_SE,
|
||||
// LANG_SK, // no translation file
|
||||
// LANG_TW, // no fonts
|
||||
LANG_UA,
|
||||
LANG_COUNT
|
||||
};
|
||||
// Color
|
||||
static RadioLanguage colorLangs[] = {
|
||||
LANG_CN,
|
||||
LANG_CZ,
|
||||
LANG_DA,
|
||||
LANG_DE,
|
||||
LANG_EN,
|
||||
LANG_ES,
|
||||
LANG_FI,
|
||||
LANG_FR,
|
||||
LANG_HE,
|
||||
// LANG_HU, // no translation file
|
||||
LANG_IT,
|
||||
LANG_JP,
|
||||
LANG_KO,
|
||||
LANG_NL,
|
||||
LANG_PL,
|
||||
LANG_PT,
|
||||
LANG_RU,
|
||||
LANG_SE,
|
||||
// LANG_SK, // no translation file
|
||||
LANG_TW,
|
||||
LANG_UA,
|
||||
LANG_COUNT
|
||||
};
|
||||
|
||||
RadioLanguage* langs = isColor ? colorLangs : bwLangs;
|
||||
|
||||
b->clear();
|
||||
for (int i = 0; !strings[i][0].isNull(); i++) {
|
||||
b->addItem(strings[i][0],strings[i][1]);
|
||||
if (generalSettings.ttsLanguage == strings[i][1]) {
|
||||
for (int i = 0; langs[i] < LANG_COUNT; i++) {
|
||||
int n = langs[i];
|
||||
b->addItem(tr(langStrings[n][0]),langStrings[n][1]);
|
||||
if (strncmp(currLang, langStrings[n][1], 2) == 0) {
|
||||
b->setCurrentIndex(b->count() - 1);
|
||||
}
|
||||
}
|
||||
@@ -485,6 +577,18 @@ void GeneralSetupPanel::on_voiceLang_CB_currentIndexChanged(int index)
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralSetupPanel::on_textLang_CB_currentIndexChanged(int index)
|
||||
{
|
||||
if (!lock) {
|
||||
QString code = ui->textLang_CB->itemData(index).toString();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
generalSettings.uiLanguage[i] = code.at(i).toLatin1();
|
||||
}
|
||||
generalSettings.uiLanguage[2] = '\0';
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralSetupPanel::updateVarioPitchRange()
|
||||
{
|
||||
ui->varioPMax_SB->setMaximum(700 + (generalSettings.varioPitch * 10) + 1000 + 800);
|
||||
|
||||
Reference in New Issue
Block a user