Refactor submenu creation logic
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user