feat: add a separate setting for selecting 'text language' when ALL_LANGS is set (#6960)
This commit is contained in:
@@ -99,7 +99,10 @@ enum {
|
||||
CASE_GPS(ITEM_RADIO_SETUP_ADJUST_RTC)
|
||||
CASE_GPS(ITEM_RADIO_SETUP_GPSFORMAT)
|
||||
CASE_PXX1(ITEM_RADIO_SETUP_COUNTRYCODE)
|
||||
ITEM_RADIO_SETUP_LANGUAGE,
|
||||
ITEM_RADIO_SETUP_VOICE_LANGUAGE,
|
||||
#if defined(ALL_LANGS)
|
||||
ITEM_RADIO_SETUP_TEXT_LANGUAGE,
|
||||
#endif
|
||||
ITEM_RADIO_SETUP_IMPERIAL,
|
||||
ITEM_RADIO_SETUP_PPM,
|
||||
IF_FAI_CHOICE(ITEM_RADIO_SETUP_FAI)
|
||||
@@ -238,6 +241,9 @@ void menuRadioSetup(event_t event)
|
||||
CASE_GPS(0)
|
||||
CASE_PXX1(0)
|
||||
0, 0, 0,
|
||||
#if defined(ALL_LANGS)
|
||||
0, // text language
|
||||
#endif
|
||||
IF_FAI_CHOICE(0)
|
||||
0,
|
||||
0, // USB mode
|
||||
@@ -708,7 +714,7 @@ void menuRadioSetup(event_t event)
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_RADIO_SETUP_LANGUAGE:
|
||||
case ITEM_RADIO_SETUP_VOICE_LANGUAGE:
|
||||
lcdDrawTextAlignedLeft(y, STR_VOICE_LANGUAGE);
|
||||
#if !defined(ALL_LANGS)
|
||||
lcdDrawText(LCD_W-2, y, currentLanguagePack->name, attr|RIGHT);
|
||||
@@ -720,15 +726,27 @@ void menuRadioSetup(event_t event)
|
||||
if (checkIncDec_Ret) {
|
||||
currentLanguagePack = languagePacks[currentLanguagePackIdx];
|
||||
strncpy(g_eeGeneral.ttsLanguage, currentLanguagePack->id, 2);
|
||||
#if defined(ALL_LANGS)
|
||||
currentLangStrings = langStrings[currentLanguagePackIdx];
|
||||
extern void setLanguageFont(int n);
|
||||
setLanguageFont(currentLanguagePackIdx);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(ALL_LANGS)
|
||||
case ITEM_RADIO_SETUP_TEXT_LANGUAGE:
|
||||
lcdDrawTextAlignedLeft(y, STR_TEXT_LANGUAGE);
|
||||
lcdDrawText(LCD_W-2, y, languagePacks[getLanguageId(g_eeGeneral.uiLanguage)]->name(), attr|RIGHT);
|
||||
if (attr) {
|
||||
int textLangId = checkIncDec(event, getLanguageId(g_eeGeneral.uiLanguage), 0, DIM(languagePacks)-2, EE_GENERAL, isTextLangAvail);
|
||||
if (checkIncDec_Ret) {
|
||||
currentLanguagePack = languagePacks[currentLanguagePackIdx];
|
||||
strncpy(g_eeGeneral.uiLanguage, languagePacks[textLangId]->id, 2);
|
||||
currentLangStrings = langStrings[textLangId];
|
||||
extern void setLanguageFont(int n);
|
||||
setLanguageFont(textLangId);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_RADIO_SETUP_IMPERIAL:
|
||||
g_eeGeneral.imperial = editChoice(LCD_W-2, y, STR_UNITS_SYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr|RIGHT, event);
|
||||
break;
|
||||
|
||||
@@ -98,7 +98,10 @@ enum MenuRadioSetupItems {
|
||||
CASE_GPS(ITEM_RADIO_SETUP_ADJUST_RTC)
|
||||
CASE_GPS(ITEM_RADIO_SETUP_GPSFORMAT)
|
||||
CASE_PXX1(ITEM_RADIO_SETUP_COUNTRYCODE)
|
||||
ITEM_RADIO_SETUP_LANGUAGE,
|
||||
ITEM_RADIO_SETUP_VOICE_LANGUAGE,
|
||||
#if defined(ALL_LANGS)
|
||||
ITEM_RADIO_SETUP_TEXT_LANGUAGE,
|
||||
#endif
|
||||
ITEM_RADIO_SETUP_IMPERIAL,
|
||||
ITEM_RADIO_SETUP_PPM,
|
||||
IF_FAI_CHOICE(ITEM_RADIO_SETUP_FAI)
|
||||
@@ -238,6 +241,9 @@ void menuRadioSetup(event_t event)
|
||||
CASE_GPS(0)
|
||||
CASE_PXX1(0) // country code
|
||||
0, // voice language
|
||||
#if defined(ALL_LANGS)
|
||||
0, // text language
|
||||
#endif
|
||||
0, // imperial
|
||||
0, // PPM unit
|
||||
IF_FAI_CHOICE(0)
|
||||
@@ -679,7 +685,7 @@ void menuRadioSetup(event_t event)
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_RADIO_SETUP_LANGUAGE:
|
||||
case ITEM_RADIO_SETUP_VOICE_LANGUAGE:
|
||||
lcdDrawTextAlignedLeft(y, STR_VOICE_LANGUAGE);
|
||||
#if !defined(ALL_LANGS)
|
||||
lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, currentLanguagePack->name, attr);
|
||||
@@ -691,15 +697,27 @@ void menuRadioSetup(event_t event)
|
||||
if (checkIncDec_Ret) {
|
||||
currentLanguagePack = languagePacks[currentLanguagePackIdx];
|
||||
strncpy(g_eeGeneral.ttsLanguage, currentLanguagePack->id, 2);
|
||||
#if defined(ALL_LANGS)
|
||||
currentLangStrings = langStrings[currentLanguagePackIdx];
|
||||
extern void setLanguageFont(int n);
|
||||
setLanguageFont(currentLanguagePackIdx);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(ALL_LANGS)
|
||||
case ITEM_RADIO_SETUP_TEXT_LANGUAGE:
|
||||
lcdDrawTextAlignedLeft(y, STR_TEXT_LANGUAGE);
|
||||
lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, languagePacks[getLanguageId(g_eeGeneral.uiLanguage)]->name(), attr);
|
||||
if (attr) {
|
||||
int textLangId = checkIncDec(event, getLanguageId(g_eeGeneral.uiLanguage), 0, DIM(languagePacks)-2, EE_GENERAL, isTextLangAvail);
|
||||
if (checkIncDec_Ret) {
|
||||
currentLanguagePack = languagePacks[currentLanguagePackIdx];
|
||||
strncpy(g_eeGeneral.uiLanguage, languagePacks[textLangId]->id, 2);
|
||||
currentLangStrings = langStrings[textLangId];
|
||||
extern void setLanguageFont(int n);
|
||||
setLanguageFont(textLangId);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_RADIO_SETUP_IMPERIAL:
|
||||
g_eeGeneral.imperial = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_UNITS_SYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr, event);
|
||||
break;
|
||||
|
||||
@@ -852,19 +852,6 @@ static SetupLineDef setupLines[] = {
|
||||
currentLanguagePack = languagePacks[currentLanguagePackIdx];
|
||||
strncpy(g_eeGeneral.ttsLanguage, currentLanguagePack->id, 2);
|
||||
SET_DIRTY();
|
||||
#if defined(ALL_LANGS)
|
||||
currentLangStrings = langStrings[currentLanguagePackIdx];
|
||||
extern void setLanguageFont(int idx);
|
||||
setLanguageFont(currentLanguagePackIdx);
|
||||
PageGroup* pg = (PageGroup*)Layer::getPageGroup();
|
||||
coord_t y = pg->getScrollY();
|
||||
pg->onCancel();
|
||||
QuickMenu::openPage(QM_RADIO_SETUP);
|
||||
pg = (PageGroup*)Layer::getPageGroup();
|
||||
pg->setScrollY(y);
|
||||
// Force QM rebuild for language change
|
||||
QuickMenu::shutdownQuickMenu();
|
||||
#endif
|
||||
});
|
||||
#if !defined(ALL_LANGS)
|
||||
choice->setTextHandler(
|
||||
@@ -884,6 +871,44 @@ static SetupLineDef setupLines[] = {
|
||||
#endif
|
||||
}
|
||||
},
|
||||
#if defined(ALL_LANGS)
|
||||
{
|
||||
// UI language
|
||||
STR_DEF(STR_TEXT_LANGUAGE),
|
||||
[](Window* parent, coord_t x, coord_t y) {
|
||||
auto choice =
|
||||
new Choice(parent, {x, y, 0, 0}, 0, DIM(languagePacks) - 2,
|
||||
GET_VALUE(getLanguageId(g_eeGeneral.uiLanguage)),
|
||||
[](uint8_t newValue) {
|
||||
strncpy(g_eeGeneral.uiLanguage, languagePacks[newValue]->id, 2);
|
||||
currentLangStrings = langStrings[newValue];
|
||||
extern void setLanguageFont(int idx);
|
||||
setLanguageFont(newValue);
|
||||
PageGroup* pg = (PageGroup*)Layer::getPageGroup();
|
||||
coord_t y = pg->getScrollY();
|
||||
pg->onCancel();
|
||||
QuickMenu::openPage(QM_RADIO_SETUP);
|
||||
pg = (PageGroup*)Layer::getPageGroup();
|
||||
pg->setScrollY(y);
|
||||
// Force QM rebuild for language change
|
||||
QuickMenu::shutdownQuickMenu();
|
||||
SET_DIRTY();
|
||||
});
|
||||
choice->setAvailableHandler([=](int n) { return isTextLangAvail(n); });
|
||||
choice->setTextHandler(
|
||||
[](uint8_t value) {
|
||||
// TODO: language name should always be in the language of the name, not
|
||||
// the current UI language. Needs translation characters to be
|
||||
// always available for all language names in the base font.
|
||||
// temp solution - prepend language id to name.
|
||||
std::string s(languagePacks[value]->id);
|
||||
s += " - ";
|
||||
s += languagePacks[value]->name();
|
||||
return s;
|
||||
});
|
||||
}
|
||||
},
|
||||
#endif
|
||||
{
|
||||
// Imperial units
|
||||
STR_DEF(STR_UNITS_SYSTEM),
|
||||
|
||||
Reference in New Issue
Block a user