ServiceMenu: es poden mostrar o ocultar les opcions

This commit is contained in:
2025-06-14 19:58:29 +02:00
parent 8ce5da623b
commit dc9a675667
2 changed files with 22 additions and 17 deletions

View File

@@ -67,16 +67,15 @@ void ServiceMenu::render()
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), title_color_.r, title_color_.g, title_color_.b, 255);
SDL_RenderRect(Screen::get()->getRenderer(), &rect_);
// Si está animando el resize, no pintar el contenido
// if (resizing_) return;
// TITULO
y += title_padding_;
title_text_->writeDX(TEXT_COLOR | TEXT_CENTER, param.game.game_area.center_x, y, title_, -4, title_color_);
if (Options::pending_changes.has_pending_changes)
element_text_->writeDX(TEXT_COLOR | TEXT_CENTER, param.game.game_area.center_x, y + 25, Lang::getText("[SERVICE_MENU] NEED_RESTART_MESSAGE"), -2, title_color_);
// LINEA
y = rect_.y + upper_height_;
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), Options::pending_changes.has_pending_changes ? 0 : title_color_.r, title_color_.g, title_color_.b, 255);
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), title_color_.r, title_color_.g, title_color_.b, 255);
SDL_RenderLine(Screen::get()->getRenderer(), rect_.x + OPTIONS_HORIZONTAL_PADDING_, y, rect_.x + rect_.w - OPTIONS_HORIZONTAL_PADDING_, y);
// OPCIONES
@@ -396,8 +395,7 @@ void ServiceMenu::initializeOptions()
// System
options_.emplace_back(Lang::getText("[SERVICE_MENU] RESET"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE);
options_.emplace_back(Lang::getText("[SERVICE_MENU] QUIT"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE);
if (Options::settings.shutdown_enabled)
options_.emplace_back(Lang::getText("[SERVICE_MENU] SHUTDOWN"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE);
options_.emplace_back(Lang::getText("[SERVICE_MENU] SHUTDOWN"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE, !Options::settings.shutdown_enabled);
// Menu principal
options_.emplace_back(Lang::getText("[SERVICE_MENU] VIDEO"), SettingsGroup::MAIN, OptionBehavior::SELECT, SettingsGroup::VIDEO);
@@ -416,7 +414,7 @@ ServiceMenu::OptionPairs ServiceMenu::getOptionPairs(ServiceMenu::SettingsGroup
for (const auto &option : options_)
{
if (option.group == group)
if (option.group == group && !option.hidden)
{
option_pairs.emplace_back(option.caption, option.getValueAsString());
}
@@ -431,7 +429,7 @@ std::vector<ServiceMenu::OptionEntry *> ServiceMenu::getOptionsByGroup(SettingsG
std::vector<OptionEntry *> filtered_options;
for (auto &option : options_)
{
if (option.group == group)
if (option.group == group && !option.hidden)
{
filtered_options.push_back(&option);
}
@@ -451,7 +449,13 @@ void ServiceMenu::applySettings(ServiceMenu::SettingsGroup group)
Audio::get()->applySettings();
break;
case SettingsGroup::SETTINGS:
{
auto option = getOptionEntryByCaption(Lang::getText("[SERVICE_MENU] SHUTDOWN"));
if (option != nullptr) {
option->hidden = !Options::settings.shutdown_enabled;
}
break;
}
default:
break;
}

View File

@@ -93,6 +93,7 @@ private:
OptionBehavior behavior; // Cómo se interactúa con la opción
void *linked_variable; // Puntero a la variable que controla la opción
ValueType type; // Tipo de la variable
bool hidden = false; // Indica si la opción está oculta en el menú
int min_value; // Valor mínimo (solo aplicable si type == INT)
int max_value; // Valor máximo (solo aplicable si type == INT)
@@ -103,23 +104,23 @@ private:
SettingsGroup target_group; // Grupo al que hace referencia la opción si es de tipo FOLDER
// Constructor para opciones de tipo BOOL, NONE, FOLDER
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, ValueType t)
: caption(cap), group(grp), behavior(beh), linked_variable(var), type(t),
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, ValueType t, bool hid = false)
: caption(cap), group(grp), behavior(beh), linked_variable(var), type(t), hidden(hid),
min_value(0), max_value(0), step_value(0), list_index(0), target_group(SettingsGroup::SYSTEM) {}
// Constructor para opciones de tipo INT
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, ValueType t, int min, int max, int step)
: caption(cap), group(grp), behavior(beh), linked_variable(var), type(t),
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, ValueType t, int min, int max, int step, bool hid = false)
: caption(cap), group(grp), behavior(beh), linked_variable(var), type(t), hidden(hid),
min_value(min), max_value(max), step_value(step), list_index(0), target_group(SettingsGroup::SYSTEM) {}
// Constructor para opciones de tipo LIST
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, std::vector<std::string> values)
: caption(cap), group(grp), behavior(beh), linked_variable(var), type(ValueType::LIST),
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, std::vector<std::string> values, bool hid = false)
: caption(cap), group(grp), behavior(beh), linked_variable(var), type(ValueType::LIST), hidden(hid),
min_value(0), max_value(0), step_value(0), value_list(values), list_index(0), target_group(SettingsGroup::SYSTEM) {}
// Constructor para opciones de tipo FOLDER
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, SettingsGroup tgtGrp)
: caption(cap), group(grp), behavior(beh), linked_variable(nullptr), type(ValueType::FOLDER),
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, SettingsGroup tgtGrp, bool hid = false)
: caption(cap), group(grp), behavior(beh), linked_variable(nullptr), type(ValueType::FOLDER), hidden(hid),
min_value(0), max_value(0), step_value(0), list_index(0), target_group(tgtGrp) {}
// Método para modificar el valor de la opción
@@ -191,7 +192,7 @@ private:
SettingsGroup previous_settings_group_; // Grupo de opciones anterior
Aspect aspect_ = Aspect::ASPECT1; // Estilo visual del menú
std::string title_; // Titulo a mostrar en el menu
size_t main_menu_selected_ = 0; // Recuerda la selección del menú principal
size_t main_menu_selected_ = 0; // Recuerda la selección del menú principal
// --- Variables de aspecto ---
Color bg_color_ = SERV_MENU_BG_COLOR; // Color de fondo