mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-25 15:19:42 -06:00
Merge pull request #12645 from mitaclaw/ppc-symbols-signal
DolphinQt: A Ubiquitous Signal For When Symbols Change
This commit is contained in:
@ -42,6 +42,7 @@
|
||||
#include "Core/System.h"
|
||||
#include "DolphinQt/Debugger/BranchWatchTableModel.h"
|
||||
#include "DolphinQt/Debugger/CodeWidget.h"
|
||||
#include "DolphinQt/Host.h"
|
||||
#include "DolphinQt/QtUtils/DolphinFileDialog.h"
|
||||
#include "DolphinQt/QtUtils/ModalMessageBox.h"
|
||||
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
|
||||
@ -219,6 +220,8 @@ BranchWatchDialog::BranchWatchDialog(Core::System& system, Core::BranchWatch& br
|
||||
m_table_model->setFont(ui_settings.GetDebugFont());
|
||||
connect(&ui_settings, &Settings::DebugFontChanged, m_table_model,
|
||||
&BranchWatchTableModel::setFont);
|
||||
connect(Host::GetInstance(), &Host::PPCSymbolsChanged, m_table_model,
|
||||
&BranchWatchTableModel::UpdateSymbols);
|
||||
|
||||
auto* const table_view = new QTableView;
|
||||
table_view->setModel(m_table_proxy);
|
||||
@ -938,11 +941,6 @@ void BranchWatchDialog::Update()
|
||||
m_table_model->UpdateHits();
|
||||
}
|
||||
|
||||
void BranchWatchDialog::UpdateSymbols()
|
||||
{
|
||||
m_table_model->UpdateSymbols();
|
||||
}
|
||||
|
||||
void BranchWatchDialog::UpdateStatus()
|
||||
{
|
||||
switch (m_branch_watch.GetRecordingPhase())
|
||||
|
@ -92,8 +92,6 @@ private:
|
||||
public:
|
||||
// TODO: Step doesn't cause EmulationStateChanged to be emitted, so it has to call this manually.
|
||||
void Update();
|
||||
// TODO: There seems to be a lack of a ubiquitous signal for when symbols change.
|
||||
void UpdateSymbols();
|
||||
|
||||
private:
|
||||
void UpdateStatus();
|
||||
|
@ -183,6 +183,8 @@ CodeViewWidget::CodeViewWidget()
|
||||
m_address = m_system.GetPPCState().pc;
|
||||
Update();
|
||||
});
|
||||
connect(Host::GetInstance(), &Host::PPCSymbolsChanged, this,
|
||||
qOverload<>(&CodeViewWidget::Update));
|
||||
|
||||
connect(&Settings::Instance(), &Settings::ThemeChanged, this,
|
||||
qOverload<>(&CodeViewWidget::Update));
|
||||
@ -884,8 +886,7 @@ void CodeViewWidget::OnAddFunction()
|
||||
Core::CPUThreadGuard guard(m_system);
|
||||
|
||||
m_ppc_symbol_db.AddFunction(guard, addr);
|
||||
emit SymbolsChanged();
|
||||
Update(&guard);
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void CodeViewWidget::OnInsertBLR()
|
||||
@ -934,8 +935,7 @@ void CodeViewWidget::OnRenameSymbol()
|
||||
if (good && !name.isEmpty())
|
||||
{
|
||||
symbol->Rename(name.toStdString());
|
||||
emit SymbolsChanged();
|
||||
Update();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@ -973,8 +973,7 @@ void CodeViewWidget::OnSetSymbolSize()
|
||||
Core::CPUThreadGuard guard(m_system);
|
||||
|
||||
PPCAnalyst::ReanalyzeFunction(guard, symbol->address, *symbol, size);
|
||||
emit SymbolsChanged();
|
||||
Update(&guard);
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void CodeViewWidget::OnSetSymbolEndAddress()
|
||||
@ -1001,8 +1000,7 @@ void CodeViewWidget::OnSetSymbolEndAddress()
|
||||
Core::CPUThreadGuard guard(m_system);
|
||||
|
||||
PPCAnalyst::ReanalyzeFunction(guard, symbol->address, *symbol, address - symbol->address);
|
||||
emit SymbolsChanged();
|
||||
Update(&guard);
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void CodeViewWidget::OnReplaceInstruction()
|
||||
|
@ -57,7 +57,6 @@ public:
|
||||
signals:
|
||||
void RequestPPCComparison(u32 addr);
|
||||
void ShowMemory(u32 address);
|
||||
void SymbolsChanged();
|
||||
void BreakpointsChanged();
|
||||
void UpdateCodeWidget();
|
||||
|
||||
|
@ -65,8 +65,6 @@ CodeWidget::CodeWidget(QWidget* parent)
|
||||
Update();
|
||||
});
|
||||
|
||||
connect(Host::GetInstance(), &Host::NotifyMapLoaded, this, &CodeWidget::UpdateSymbols);
|
||||
|
||||
connect(&Settings::Instance(), &Settings::DebugModeToggled, this,
|
||||
[this](bool enabled) { setHidden(!enabled || !Settings::Instance().IsCodeVisible()); });
|
||||
|
||||
@ -191,15 +189,7 @@ void CodeWidget::ConnectWidgets()
|
||||
connect(m_function_callers_list, &QListWidget::itemPressed, this,
|
||||
&CodeWidget::OnSelectFunctionCallers);
|
||||
|
||||
connect(m_code_view, &CodeViewWidget::SymbolsChanged, this, [this]() {
|
||||
UpdateCallstack();
|
||||
UpdateSymbols();
|
||||
if (const Common::Symbol* symbol = m_ppc_symbol_db.GetSymbolFromAddr(m_code_view->GetAddress()))
|
||||
{
|
||||
UpdateFunctionCalls(symbol);
|
||||
UpdateFunctionCallers(symbol);
|
||||
}
|
||||
});
|
||||
connect(Host::GetInstance(), &Host::PPCSymbolsChanged, this, &CodeWidget::OnPPCSymbolsChanged);
|
||||
connect(m_code_view, &CodeViewWidget::BreakpointsChanged, this,
|
||||
[this] { emit BreakpointsChanged(); });
|
||||
connect(m_code_view, &CodeViewWidget::UpdateCodeWidget, this, &CodeWidget::Update);
|
||||
@ -221,6 +211,17 @@ void CodeWidget::OnBranchWatchDialog()
|
||||
m_branch_watch_dialog->activateWindow();
|
||||
}
|
||||
|
||||
void CodeWidget::OnPPCSymbolsChanged()
|
||||
{
|
||||
UpdateSymbols();
|
||||
UpdateCallstack();
|
||||
if (const Common::Symbol* symbol = m_ppc_symbol_db.GetSymbolFromAddr(m_code_view->GetAddress()))
|
||||
{
|
||||
UpdateFunctionCalls(symbol);
|
||||
UpdateFunctionCallers(symbol);
|
||||
}
|
||||
}
|
||||
|
||||
void CodeWidget::OnSearchAddress()
|
||||
{
|
||||
bool good = true;
|
||||
@ -389,11 +390,6 @@ void CodeWidget::UpdateSymbols()
|
||||
}
|
||||
|
||||
m_symbols_list->sortItems();
|
||||
|
||||
// TODO: There seems to be a lack of a ubiquitous signal for when symbols change.
|
||||
// This is the best location to catch the signals from MenuBar and CodeViewWidget.
|
||||
if (m_branch_watch_dialog != nullptr)
|
||||
m_branch_watch_dialog->UpdateSymbols();
|
||||
}
|
||||
|
||||
void CodeWidget::UpdateFunctionCalls(const Common::Symbol* symbol)
|
||||
|
@ -61,6 +61,7 @@ private:
|
||||
void UpdateFunctionCalls(const Common::Symbol* symbol);
|
||||
void UpdateFunctionCallers(const Common::Symbol* symbol);
|
||||
|
||||
void OnPPCSymbolsChanged();
|
||||
void OnSearchAddress();
|
||||
void OnSearchSymbols();
|
||||
void OnSelectSymbol();
|
||||
|
@ -238,14 +238,9 @@ void Host_UpdateDisasmDialog()
|
||||
QueueOnObject(QApplication::instance(), [] { emit Host::GetInstance()->UpdateDisasmDialog(); });
|
||||
}
|
||||
|
||||
void Host::RequestNotifyMapLoaded()
|
||||
void Host_PPCSymbolsChanged()
|
||||
{
|
||||
QueueOnObject(QApplication::instance(), [this] { emit NotifyMapLoaded(); });
|
||||
}
|
||||
|
||||
void Host_NotifyMapLoaded()
|
||||
{
|
||||
Host::GetInstance()->RequestNotifyMapLoaded();
|
||||
QueueOnObject(QApplication::instance(), [] { emit Host::GetInstance()->PPCSymbolsChanged(); });
|
||||
}
|
||||
|
||||
// We ignore these, and their purpose should be questioned individually.
|
||||
|
@ -32,14 +32,13 @@ public:
|
||||
void SetRenderFullFocus(bool focus);
|
||||
void SetRenderFullscreen(bool fullscreen);
|
||||
void ResizeSurface(int new_width, int new_height);
|
||||
void RequestNotifyMapLoaded();
|
||||
|
||||
signals:
|
||||
void RequestTitle(const QString& title);
|
||||
void RequestStop();
|
||||
void RequestRenderSize(int w, int h);
|
||||
void UpdateDisasmDialog();
|
||||
void NotifyMapLoaded();
|
||||
void PPCSymbolsChanged();
|
||||
|
||||
private:
|
||||
Host();
|
||||
|
@ -591,12 +591,6 @@ void MainWindow::ConnectMenuBar()
|
||||
connect(m_game_list, &GameList::SelectionChanged, m_menu_bar, &MenuBar::SelectionChanged);
|
||||
connect(this, &MainWindow::ReadOnlyModeChanged, m_menu_bar, &MenuBar::ReadOnlyModeChanged);
|
||||
connect(this, &MainWindow::RecordingStatusChanged, m_menu_bar, &MenuBar::RecordingStatusChanged);
|
||||
|
||||
// Symbols
|
||||
connect(m_menu_bar, &MenuBar::NotifySymbolsUpdated, [this] {
|
||||
m_code_widget->UpdateSymbols();
|
||||
m_code_widget->Update();
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::ConnectHotkeys()
|
||||
|
@ -1262,7 +1262,7 @@ void MenuBar::ClearSymbols()
|
||||
return;
|
||||
|
||||
Core::System::GetInstance().GetPPCSymbolDB().Clear();
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::GenerateSymbolsFromAddress()
|
||||
@ -1275,7 +1275,7 @@ void MenuBar::GenerateSymbolsFromAddress()
|
||||
|
||||
PPCAnalyst::FindFunctions(guard, Memory::MEM1_BASE_ADDR,
|
||||
Memory::MEM1_BASE_ADDR + memory.GetRamSizeReal(), &ppc_symbol_db);
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::GenerateSymbolsFromSignatureDB()
|
||||
@ -1304,7 +1304,7 @@ void MenuBar::GenerateSymbolsFromSignatureDB()
|
||||
tr("'%1' not found, no symbol names generated").arg(QString::fromStdString(TOTALDB)));
|
||||
}
|
||||
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::GenerateSymbolsFromRSO()
|
||||
@ -1334,7 +1334,7 @@ void MenuBar::GenerateSymbolsFromRSO()
|
||||
if (rso_chain.Load(guard, static_cast<u32>(address)))
|
||||
{
|
||||
rso_chain.Apply(guard, &system.GetPPCSymbolDB());
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1391,7 +1391,7 @@ void MenuBar::GenerateSymbolsFromRSOAuto()
|
||||
if (rso_chain.Load(guard, address))
|
||||
{
|
||||
rso_chain.Apply(guard, &system.GetPPCSymbolDB());
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1541,7 +1541,7 @@ void MenuBar::LoadSymbolMap()
|
||||
}
|
||||
|
||||
HLE::PatchFunctions(system);
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::SaveSymbolMap()
|
||||
@ -1566,7 +1566,7 @@ void MenuBar::LoadOtherSymbolMap()
|
||||
|
||||
auto& system = Core::System::GetInstance();
|
||||
HLE::PatchFunctions(system);
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::LoadBadSymbolMap()
|
||||
@ -1583,7 +1583,7 @@ void MenuBar::LoadBadSymbolMap()
|
||||
|
||||
auto& system = Core::System::GetInstance();
|
||||
HLE::PatchFunctions(system);
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::SaveSymbolMapAs()
|
||||
@ -1708,7 +1708,7 @@ void MenuBar::ApplySignatureFile()
|
||||
db.Apply(Core::CPUThreadGuard{system}, &system.GetPPCSymbolDB());
|
||||
db.List();
|
||||
HLE::PatchFunctions(system);
|
||||
emit NotifySymbolsUpdated();
|
||||
emit Host::GetInstance()->PPCSymbolsChanged();
|
||||
}
|
||||
|
||||
void MenuBar::CombineSignatureFiles()
|
||||
|
@ -125,9 +125,6 @@ signals:
|
||||
void RecordingStatusChanged(bool recording);
|
||||
void ReadOnlyModeChanged(bool read_only);
|
||||
|
||||
// Synbols
|
||||
void NotifySymbolsUpdated();
|
||||
|
||||
private:
|
||||
void OnEmulationStateChanged(Core::State state);
|
||||
|
||||
|
Reference in New Issue
Block a user