Add RetroAchievements development menu

When the menu exists, it replaces the Achievements action in the Tools menu.
This commit is contained in:
LillyJadeKatrin
2024-07-19 23:07:41 -04:00
parent 36c7e7f3c7
commit 9caa02493d
4 changed files with 89 additions and 2 deletions

View File

@ -64,6 +64,7 @@
#include "DolphinQt/QtUtils/DolphinFileDialog.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/QtUtils/ParallelProgressDialog.h"
#include "DolphinQt/QtUtils/QueueOnObject.h"
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
#include "DolphinQt/Settings.h"
#include "DolphinQt/Updater.h"
@ -71,6 +72,10 @@
#include "UICommon/AutoUpdate.h"
#include "UICommon/GameFile.h"
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
#include <rcheevos/include/rc_client_raintegration.h>
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
QPointer<MenuBar> MenuBar::s_menu_bar;
QString MenuBar::GetSignatureSelector() const
@ -284,8 +289,14 @@ void MenuBar::AddToolsMenu()
tools_menu->addSeparator();
#ifdef USE_RETRO_ACHIEVEMENTS
tools_menu->addAction(tr("Achievements"), this, [this] { emit ShowAchievementsWindow(); });
m_achievements_action =
tools_menu->addAction(tr("Achievements"), this, [this] { emit ShowAchievementsWindow(); });
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
m_achievements_dev_menu = tools_menu->addMenu(tr("RetroAchievements Development"));
AchievementManager::GetInstance().SetDevMenuUpdateCallback(
[this]() { QueueOnObject(this, [this] { this->UpdateAchievementDevelopmentMenu(); }); });
m_achievements_dev_menu->menuAction()->setVisible(false);
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
tools_menu->addSeparator();
#endif // USE_RETRO_ACHIEVEMENTS
@ -1123,6 +1134,38 @@ void MenuBar::UpdateToolsMenu(const Core::State state)
}
}
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
void MenuBar::UpdateAchievementDevelopmentMenu()
{
auto* dev_menu = AchievementManager::GetInstance().GetDevelopmentMenu();
if (dev_menu)
{
m_achievements_dev_menu->menuAction()->setVisible(true);
m_achievements_dev_menu->clear();
for (u32 i = 0; i < dev_menu->num_items; i++)
{
const auto& menu_item = dev_menu->items[i];
if (menu_item.label == nullptr)
{
m_achievements_dev_menu->addSeparator();
continue;
}
auto* ra_dev_menu_item = m_achievements_dev_menu->addAction(
QString::fromStdString(menu_item.label), this,
[menu_item]() { AchievementManager::GetInstance().ActivateDevMenuItem(menu_item.id); });
ra_dev_menu_item->setEnabled(menu_item.enabled);
// Recommended hardcode by RAIntegration.dll developer Jamiras
ra_dev_menu_item->setCheckable(i < 2);
ra_dev_menu_item->setChecked(menu_item.checked);
}
}
else
{
m_achievements_dev_menu->menuAction()->setVisible(false);
}
}
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
void MenuBar::InstallWAD()
{
QString wad_file = DolphinFileDialog::getOpenFileName(this, tr("Select Title to Install to NAND"),