Skip to content

Commit

Permalink
Added callback for refreshing menu
Browse files Browse the repository at this point in the history
Menu now appropriately reflects logged in status.
  • Loading branch information
LillyJadeKatrin committed Jan 31, 2024
1 parent 3effcc9 commit 0f854a4
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 24 deletions.
9 changes: 8 additions & 1 deletion Source/Core/Core/RADevToolManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,12 @@ void RADevToolManager::ActivateMenuItem(int item)
RA_InvokeDialog(item);
}

void RADevToolManager::SetRefreshMenuCallback(std::function<void(void*)> callback, void* callback_object)
{
m_rebuild_callback = std::move(callback);
m_rebuild_callback_object = std::move(callback_object);
}

int RADevToolManager::RACallbackIsActive()
{
return m_game_id;
Expand All @@ -268,7 +274,8 @@ void RADevToolManager::RACallbackCausePause()

void RADevToolManager::RACallbackRebuildMenu()
{
// unused
if (m_rebuild_callback_object)
m_rebuild_callback(m_rebuild_callback_object);
}

void RADevToolManager::RACallbackEstimateTitle(char* buf)
Expand Down
5 changes: 5 additions & 0 deletions Source/Core/Core/RADevToolManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class RADevToolManager
void RAIDoFrame();
std::vector<std::tuple<int, std::string, bool>> GetMenuItems();
void ActivateMenuItem(int item);
void SetRefreshMenuCallback(std::function<void(void*)> callback, void* callback_object);

private:
RADevToolManager() = default;
Expand All @@ -58,4 +59,8 @@ class RADevToolManager

std::vector<u8> m_cloned_memory;
std::set<u32> m_modified_addresses;

std::function<void(void*)> m_rebuild_callback;
void* m_rebuild_callback_object;

}; // class RADevToolManager
59 changes: 36 additions & 23 deletions Source/Core/DolphinQt/MenuBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,34 @@ void MenuBar::OnDebugModeToggled(bool enabled)
}
}

void MenuBar::RefreshRAMenu()
{
if (!m_ra_dev_ipl)
return;
m_ra_dev_ipl->clear();
const auto items = RADevToolManager::GetInstance()->GetMenuItems();
for (const auto& [id, title, checked] : items)
{
if (id == 0)
{
m_ra_dev_ipl->addSeparator();
continue;
}

QAction* raAction = m_ra_dev_ipl->addAction(QString::fromUtf8(title));
if (checked)
{
raAction->setCheckable(true);
raAction->setChecked(checked);
}

connect(raAction, &QAction::triggered, this,
[this, id = id]() { emit ActivateRAMenuItem(id); });
}
}

void (*RefreshRAMenuLambda)(void*) = [](void* menu_bar) { return static_cast<MenuBar*>(menu_bar)->RefreshRAMenu(); };

void MenuBar::AddFileMenu()
{
QMenu* file_menu = addMenu(tr("&File"));
Expand Down Expand Up @@ -255,29 +283,6 @@ void MenuBar::AddToolsMenu()
}
#endif // USE_RETRO_ACHIEVEMENTS

QMenu* ra_dev_ipl = tools_menu->addMenu(tr("Achievement Development"));
const auto items = RADevToolManager::GetInstance()->GetMenuItems();
for (const auto& [id, title, checked] : items)
{
if (id == 0)
{
ra_dev_ipl->addSeparator();
continue;
}

QAction* raAction = ra_dev_ipl->addAction(QString::fromUtf8(title));
if (checked)
{
raAction->setCheckable(true);
raAction->setChecked(checked);
}

connect(raAction, &QAction::triggered, this,
[this, id = id]() { emit ActivateRAMenuItem(id); });
}

tools_menu->addSeparator();

QMenu* gc_ipl = tools_menu->addMenu(tr("Load GameCube Main Menu"));

m_ntscj_ipl = gc_ipl->addAction(tr("NTSC-J"), this,
Expand Down Expand Up @@ -342,6 +347,12 @@ void MenuBar::AddToolsMenu()
m_wii_remotes[4] =
menu->addAction(tr("Connect Balance Board"), this, [this] { emit ConnectWiiRemote(4); });
m_wii_remotes[4]->setCheckable(true);

tools_menu->addSeparator();

m_ra_dev_ipl = tools_menu->addMenu(tr("Achievement Development"));
RADevToolManager::GetInstance()->SetRefreshMenuCallback(RefreshRAMenuLambda, this);
RefreshRAMenu();
}

void MenuBar::AddEmulationMenu()
Expand Down Expand Up @@ -1094,6 +1105,8 @@ void MenuBar::UpdateToolsMenu(bool emulation_started)
if (enable_wiimotes)
wii_remote->setChecked(bt->AccessWiimoteByIndex(i)->IsConnected());
}

RefreshRAMenu();
}

void MenuBar::InstallWAD()
Expand Down
3 changes: 3 additions & 0 deletions Source/Core/DolphinQt/MenuBar.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class MenuBar final : public QMenuBar

void InstallUpdateManually();

void RefreshRAMenu();

signals:
// File
void Open();
Expand Down Expand Up @@ -216,6 +218,7 @@ class MenuBar final : public QMenuBar
std::array<QAction*, 5> m_wii_remotes;
QAction* m_import_wii_save;
QAction* m_export_wii_saves;
QMenu* m_ra_dev_ipl;

// Emulation
QAction* m_play_action;
Expand Down

0 comments on commit 0f854a4

Please sign in to comment.