Qt: Group cheats together in categories in menu

This commit is contained in:
Connor McLaughlin 2021-05-29 20:51:26 +10:00
parent 37e565698f
commit 1b0b88f60b

View file

@ -1111,27 +1111,48 @@ void QtHostInterface::populateCheatsMenu(QMenu* menu)
const bool has_cheat_list = System::HasCheatList(); const bool has_cheat_list = System::HasCheatList();
QMenu* enabled_menu = menu->addMenu(tr("&Enabled Cheats")); QMenu* enabled_menu = menu->addMenu(tr("&Enabled Cheats"));
enabled_menu->setEnabled(has_cheat_list); enabled_menu->setEnabled(false);
QMenu* apply_menu = menu->addMenu(tr("&Apply Cheats")); QMenu* apply_menu = menu->addMenu(tr("&Apply Cheats"));
apply_menu->setEnabled(has_cheat_list); apply_menu->setEnabled(false);
if (has_cheat_list) if (has_cheat_list)
{ {
CheatList* cl = System::GetCheatList(); CheatList* cl = System::GetCheatList();
for (u32 i = 0; i < cl->GetCodeCount(); i++) for (const std::string& group : cl->GetCodeGroups())
{ {
CheatCode& cc = cl->GetCode(i); QMenu* enabled_submenu = nullptr;
QString desc(QString::fromStdString(cc.description)); QMenu* apply_submenu = nullptr;
if (cc.IsManuallyActivated())
for (u32 i = 0; i < cl->GetCodeCount(); i++)
{ {
QAction* action = apply_menu->addAction(desc); CheatCode& cc = cl->GetCode(i);
connect(action, &QAction::triggered, [this, i]() { applyCheat(i); }); if (cc.group != group)
} continue;
else
{ QString desc(QString::fromStdString(cc.description));
QAction* action = enabled_menu->addAction(desc); if (cc.IsManuallyActivated())
action->setCheckable(true); {
action->setChecked(cc.enabled); if (!apply_submenu)
connect(action, &QAction::toggled, [this, i](bool enabled) { setCheatEnabled(i, enabled); }); {
apply_menu->setEnabled(true);
apply_submenu = apply_menu->addMenu(QString::fromStdString(group));
}
QAction* action = apply_submenu->addAction(desc);
connect(action, &QAction::triggered, [this, i]() { applyCheat(i); });
}
else
{
if (!enabled_submenu)
{
enabled_menu->setEnabled(true);
enabled_submenu = enabled_menu->addMenu(QString::fromStdString(group));
}
QAction* action = enabled_submenu->addAction(desc);
action->setCheckable(true);
action->setChecked(cc.enabled);
connect(action, &QAction::toggled, [this, i](bool enabled) { setCheatEnabled(i, enabled); });
}
} }
} }
} }