ServiceMenu: afegida opció per a canviar el idioma

This commit is contained in:
2025-06-12 13:50:05 +02:00
parent e6f4e27fbd
commit f9b576ea25
14 changed files with 307 additions and 109 deletions

View File

@@ -38,7 +38,9 @@ void ServiceMenu::toggle()
{
enabled_ = !enabled_;
if (!enabled_)
{
reset();
}
}
// Dibuja el menú de servicio en pantalla
@@ -135,14 +137,8 @@ void ServiceMenu::setAnchors()
// Establce la posición donde empezar a escribir las opciones del menu
void ServiceMenu::setOptionsPosition()
{
/*
const size_t MAX_ENTRIES = findLargestGroupSize();
const size_t CURRENT_ENTRIES = display_options_.size();
const size_t ADDED_SPACE = ((MAX_ENTRIES - CURRENT_ENTRIES) * (options_height_ + options_padding_)) / 2;
options_y_ = rect_.y + upper_height_ + lower_padding_ + ADDED_SPACE;
*/
resize();
options_y_ = rect_.y + upper_height_ + lower_padding_;
resize();
options_y_ = rect_.y + upper_height_ + lower_padding_;
}
// Cambia el tamaño de la ventana de menu
@@ -222,11 +218,13 @@ void ServiceMenu::setSelectorDown()
void ServiceMenu::adjustOption(bool adjust_up)
{
if (display_options_.empty() || selected_ >= display_options_.size())
return;
if (display_options_.at(selected_).behavior == OptionBehavior::ADJUST)
{
display_options_.at(selected_).adjustValue(adjust_up);
return;
}
if (display_options_.at(selected_)->behavior == OptionBehavior::ADJUST)
{
display_options_.at(selected_)->adjustValue(adjust_up);
option_pairs_ = getOptionPairs(current_settings_group_);
applySettings(current_settings_group_);
playMenuSound();
@@ -237,13 +235,15 @@ void ServiceMenu::adjustOption(bool adjust_up)
void ServiceMenu::selectOption()
{
if (display_options_.empty() || selected_ >= display_options_.size())
{
return;
}
// Carpeta
if (display_options_.at(selected_).type == ValueType::FOLDER)
if (display_options_.at(selected_)->type == ValueType::FOLDER)
{
previous_settings_group_ = current_settings_group_;
current_settings_group_ = display_options_.at(selected_).target_group;
current_settings_group_ = display_options_.at(selected_)->target_group;
updateMenu(current_settings_group_);
selected_ = 0;
setOptionsPosition();
@@ -252,21 +252,21 @@ void ServiceMenu::selectOption()
}
// Opción
if (display_options_.at(selected_).behavior == OptionBehavior::SELECT)
if (display_options_.at(selected_)->behavior == OptionBehavior::SELECT)
{
if (display_options_.at(selected_).caption == lang::getText("[SERVICE_MENU] RESET"))
if (display_options_.at(selected_)->caption == lang::getText("[SERVICE_MENU] RESET"))
{
section::name = section::Name::INIT;
section::name = section::Name::RESET;
toggle();
return;
}
else if (display_options_.at(selected_).caption == lang::getText("[SERVICE_MENU] QUIT"))
else if (display_options_.at(selected_)->caption == lang::getText("[SERVICE_MENU] QUIT"))
{
section::name = section::Name::QUIT;
section::options = section::Options::QUIT_WITH_KEYBOARD;
return;
}
else if (display_options_.at(selected_).caption == lang::getText("[SERVICE_MENU] SHUTDOWN"))
else if (display_options_.at(selected_)->caption == lang::getText("[SERVICE_MENU] SHUTDOWN"))
{
section::name = section::Name::QUIT;
section::options = section::Options::QUIT_WITH_CONTROLLER;
@@ -314,6 +314,15 @@ void ServiceMenu::initializeOptions()
// Game
options_.emplace_back(lang::getText("[SERVICE_MENU] AUTOFIRE"), SettingsGroup::GAME, OptionBehavior::ADJUST, &options.game.autofire, ValueType::BOOL);
options_.emplace_back(
lang::getText("[SERVICE_MENU] LANGUAGE"),
SettingsGroup::GAME,
OptionBehavior::ADJUST,
&options.pending_changes.new_language,
std::vector<std::string>{
lang::getText("[SERVICE_MENU] LANG ES"),
lang::getText("[SERVICE_MENU] LANG BA"),
lang::getText("[SERVICE_MENU] LANG EN")});
// System
options_.emplace_back(lang::getText("[SERVICE_MENU] RESET"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE);
@@ -330,33 +339,31 @@ void ServiceMenu::initializeOptions()
// Devuelve las opciones del grupo como pares (nombre, valor)
ServiceMenu::OptionPairs ServiceMenu::getOptionPairs(ServiceMenu::SettingsGroup group) const
{
OptionPairs optionPairs;
OptionPairs option_pairs;
for (const auto &option : options_)
{
if (option.group == group)
{
optionPairs.emplace_back(option.caption, option.getValueAsString());
option_pairs.emplace_back(option.caption, option.getValueAsString());
}
}
return optionPairs;
return option_pairs;
}
// Devuelve las opciones del grupo como un vector de OptionEntry
std::vector<ServiceMenu::OptionEntry> ServiceMenu::getOptionsByGroup(SettingsGroup group) const
std::vector<ServiceMenu::OptionEntry *> ServiceMenu::getOptionsByGroup(SettingsGroup group)
{
std::vector<OptionEntry> filteredOptions;
for (const auto &option : options_)
std::vector<OptionEntry *> filtered_options;
for (auto &option : options_)
{
if (option.group == group)
{
filteredOptions.push_back(option);
filtered_options.push_back(&option);
}
}
return filteredOptions;
return filtered_options;
}
// Aplica la configuración correspondiente al grupo seleccionado
@@ -367,11 +374,11 @@ void ServiceMenu::applySettings(ServiceMenu::SettingsGroup group)
case SettingsGroup::VIDEO:
Screen::get()->applySettings();
break;
case SettingsGroup::AUDIO:
Audio::get()->applySettings();
break;
case SettingsGroup::GAME:
break;
default:
break;
}
@@ -380,6 +387,7 @@ void ServiceMenu::applySettings(ServiceMenu::SettingsGroup group)
// Actualiza las opciones mostradas según el grupo seleccionado
void ServiceMenu::updateMenu(SettingsGroup group)
{
AdjustListValues();
option_pairs_ = getOptionPairs(group);
display_options_ = getOptionsByGroup(group);
}
@@ -423,8 +431,34 @@ ServiceMenu::GroupAlignment ServiceMenu::getGroupAlignment(SettingsGroup group)
case SettingsGroup::AUDIO:
case SettingsGroup::GAME:
return GroupAlignment::LEFT;
default:
return GroupAlignment::CENTERED;
}
}
// Devuelve un puntero a OptionEntry a partir del caption, o nullptr si no se encuentra
ServiceMenu::OptionEntry *ServiceMenu::getOptionEntryByCaption(const std::string &caption)
{
for (auto &option : options_)
{
if (option.caption == caption)
{
return &option;
}
}
return nullptr;
}
// Ajusta los valores de las opciones tipo lista
void ServiceMenu::AdjustListValues()
{
// Idioma
auto option = getOptionEntryByCaption(lang::getText("[SERVICE_MENU] LANGUAGE"));
for (size_t i = 0; i < option->value_list.size(); ++i)
{
if (lang::getCodeFromName(option->value_list[i]) == options.game.language)
{
option->list_index = i;
}
}
}