ServiceMenu: afegida opció per a canviar el idioma
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user