ServiceMenu: es poden mostrar o ocultar les opcions
This commit is contained in:
@@ -67,16 +67,15 @@ void ServiceMenu::render()
|
|||||||
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 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_RenderRect(Screen::get()->getRenderer(), &rect_);
|
SDL_RenderRect(Screen::get()->getRenderer(), &rect_);
|
||||||
|
|
||||||
// Si está animando el resize, no pintar el contenido
|
|
||||||
// if (resizing_) return;
|
|
||||||
|
|
||||||
// TITULO
|
// TITULO
|
||||||
y += title_padding_;
|
y += title_padding_;
|
||||||
title_text_->writeDX(TEXT_COLOR | TEXT_CENTER, param.game.game_area.center_x, y, title_, -4, title_color_);
|
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
|
// LINEA
|
||||||
y = rect_.y + upper_height_;
|
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);
|
SDL_RenderLine(Screen::get()->getRenderer(), rect_.x + OPTIONS_HORIZONTAL_PADDING_, y, rect_.x + rect_.w - OPTIONS_HORIZONTAL_PADDING_, y);
|
||||||
|
|
||||||
// OPCIONES
|
// OPCIONES
|
||||||
@@ -396,8 +395,7 @@ void ServiceMenu::initializeOptions()
|
|||||||
// System
|
// System
|
||||||
options_.emplace_back(Lang::getText("[SERVICE_MENU] RESET"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE);
|
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);
|
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::settings.shutdown_enabled);
|
||||||
options_.emplace_back(Lang::getText("[SERVICE_MENU] SHUTDOWN"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE);
|
|
||||||
|
|
||||||
// Menu principal
|
// Menu principal
|
||||||
options_.emplace_back(Lang::getText("[SERVICE_MENU] VIDEO"), SettingsGroup::MAIN, OptionBehavior::SELECT, SettingsGroup::VIDEO);
|
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_)
|
for (const auto &option : options_)
|
||||||
{
|
{
|
||||||
if (option.group == group)
|
if (option.group == group && !option.hidden)
|
||||||
{
|
{
|
||||||
option_pairs.emplace_back(option.caption, option.getValueAsString());
|
option_pairs.emplace_back(option.caption, option.getValueAsString());
|
||||||
}
|
}
|
||||||
@@ -431,7 +429,7 @@ std::vector<ServiceMenu::OptionEntry *> ServiceMenu::getOptionsByGroup(SettingsG
|
|||||||
std::vector<OptionEntry *> filtered_options;
|
std::vector<OptionEntry *> filtered_options;
|
||||||
for (auto &option : options_)
|
for (auto &option : options_)
|
||||||
{
|
{
|
||||||
if (option.group == group)
|
if (option.group == group && !option.hidden)
|
||||||
{
|
{
|
||||||
filtered_options.push_back(&option);
|
filtered_options.push_back(&option);
|
||||||
}
|
}
|
||||||
@@ -451,7 +449,13 @@ void ServiceMenu::applySettings(ServiceMenu::SettingsGroup group)
|
|||||||
Audio::get()->applySettings();
|
Audio::get()->applySettings();
|
||||||
break;
|
break;
|
||||||
case SettingsGroup::SETTINGS:
|
case SettingsGroup::SETTINGS:
|
||||||
|
{
|
||||||
|
auto option = getOptionEntryByCaption(Lang::getText("[SERVICE_MENU] SHUTDOWN"));
|
||||||
|
if (option != nullptr) {
|
||||||
|
option->hidden = !Options::settings.shutdown_enabled;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ private:
|
|||||||
OptionBehavior behavior; // Cómo se interactúa con la opción
|
OptionBehavior behavior; // Cómo se interactúa con la opción
|
||||||
void *linked_variable; // Puntero a la variable que controla la opción
|
void *linked_variable; // Puntero a la variable que controla la opción
|
||||||
ValueType type; // Tipo de la variable
|
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 min_value; // Valor mínimo (solo aplicable si type == INT)
|
||||||
int max_value; // Valor máximo (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
|
SettingsGroup target_group; // Grupo al que hace referencia la opción si es de tipo FOLDER
|
||||||
|
|
||||||
// Constructor para opciones de tipo BOOL, NONE, FOLDER
|
// Constructor para opciones de tipo BOOL, NONE, FOLDER
|
||||||
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, ValueType 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),
|
: 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) {}
|
min_value(0), max_value(0), step_value(0), list_index(0), target_group(SettingsGroup::SYSTEM) {}
|
||||||
|
|
||||||
// Constructor para opciones de tipo INT
|
// Constructor para opciones de tipo INT
|
||||||
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, ValueType t, int min, int max, int step)
|
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),
|
: 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) {}
|
min_value(min), max_value(max), step_value(step), list_index(0), target_group(SettingsGroup::SYSTEM) {}
|
||||||
|
|
||||||
// Constructor para opciones de tipo LIST
|
// Constructor para opciones de tipo LIST
|
||||||
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, void *var, std::vector<std::string> values)
|
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),
|
: 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) {}
|
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
|
// Constructor para opciones de tipo FOLDER
|
||||||
OptionEntry(std::string cap, SettingsGroup grp, OptionBehavior beh, SettingsGroup tgtGrp)
|
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),
|
: 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) {}
|
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
|
// Método para modificar el valor de la opción
|
||||||
@@ -191,7 +192,7 @@ private:
|
|||||||
SettingsGroup previous_settings_group_; // Grupo de opciones anterior
|
SettingsGroup previous_settings_group_; // Grupo de opciones anterior
|
||||||
Aspect aspect_ = Aspect::ASPECT1; // Estilo visual del menú
|
Aspect aspect_ = Aspect::ASPECT1; // Estilo visual del menú
|
||||||
std::string title_; // Titulo a mostrar en el menu
|
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 ---
|
// --- Variables de aspecto ---
|
||||||
Color bg_color_ = SERV_MENU_BG_COLOR; // Color de fondo
|
Color bg_color_ = SERV_MENU_BG_COLOR; // Color de fondo
|
||||||
|
|||||||
Reference in New Issue
Block a user