diff --git a/source/service_menu.cpp b/source/service_menu.cpp index 21298df..7ab3f1d 100644 --- a/source/service_menu.cpp +++ b/source/service_menu.cpp @@ -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::getOptionsByGroup(SettingsG std::vector 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; } diff --git a/source/service_menu.h b/source/service_menu.h index 7c5bc82..45bfe46 100644 --- a/source/service_menu.h +++ b/source/service_menu.h @@ -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 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 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