Refactor submenu creation logic

This commit is contained in:
jpirnay
2026-04-24 12:44:08 +02:00
parent 7533ed1a9c
commit 0c080f5600
8 changed files with 102 additions and 30 deletions
+21
View File
@@ -4,6 +4,7 @@
#include "MappedInputManager.h"
#include "components/UITheme.h"
#include "settings/SettingsSubmenuActivity.h"
void MenuListActivity::initMenuList() {
const int count = static_cast<int>(menuItems.size());
@@ -16,6 +17,10 @@ void MenuListActivity::initMenuList() {
void MenuListActivity::onEnter() {
Activity::onEnter();
if (!submenusPrepared) {
prepareSubmenus();
submenusPrepared = true;
}
initMenuList();
requestUpdate();
}
@@ -37,6 +42,10 @@ void MenuListActivity::toggleCurrentItem() {
if (item.isSeparator) return;
if (item.type == SettingType::ACTION) {
if (item.action == SettingAction::Submenu) {
openSubmenu(item);
return;
}
onActionSelected(selectedIndex);
return;
}
@@ -55,6 +64,18 @@ void MenuListActivity::drawMenuList(const Rect& rect) {
[this](int index) { return getItemValueString(index); }, true);
}
void MenuListActivity::prepareSubmenus() { SettingInfo::prepareSubmenus(menuItems, submenuData); }
void MenuListActivity::openSubmenu(const SettingInfo& submenuEntry) {
auto it = std::find_if(submenuData.begin(), submenuData.end(),
[&submenuEntry](const SettingInfo::SubmenuData& d) { return d.id == submenuEntry.nameId; });
if (it == submenuData.end()) return;
startActivityForResult(
std::make_unique<SettingsSubmenuActivity>(renderer, mappedInput, submenuEntry.nameId, it->items),
[this](const ActivityResult&) { requestUpdate(); });
}
void MenuListActivity::loop() {
if (mappedInput.wasPressed(MappedInputManager::Button::Back)) {
onBackPressed();