Merge pull request #13691 from TryTwo/PR_Notes

Debugger Add note-type symbols .
This commit is contained in:
JMC47
2025-06-22 01:05:42 -04:00
committed by GitHub
12 changed files with 519 additions and 65 deletions

View File

@ -16,7 +16,9 @@
#include <QPushButton>
#include <QSplitter>
#include <QStyleHints>
#include <QTabWidget>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>
#include "Common/Event.h"
@ -119,7 +121,7 @@ void CodeWidget::CreateWidgets()
m_box_splitter = new QSplitter(Qt::Vertical);
m_box_splitter->setStyleSheet(BOX_SPLITTER_STYLESHEET);
auto add_search_line_edit = [this](const QString& name, QListWidget* list_widget) {
auto add_search_line_edit = [this](const QString& name, QWidget* list_widget) {
auto* widget = new QWidget;
auto* line_layout = new QGridLayout;
auto* label = new QLabel(name);
@ -138,8 +140,12 @@ void CodeWidget::CreateWidgets()
m_search_callstack = add_search_line_edit(tr("Callstack"), m_callstack_list);
// Symbols
auto* symbols_tab = new QTabWidget;
m_symbols_list = new QListWidget;
m_search_symbols = add_search_line_edit(tr("Symbols"), m_symbols_list);
m_note_list = new QListWidget;
symbols_tab->addTab(m_symbols_list, tr("Symbols"));
symbols_tab->addTab(m_note_list, tr("Notes"));
m_search_symbols = add_search_line_edit(tr("Symbols"), symbols_tab);
// Function calls
m_function_calls_list = new QListWidget;
@ -197,7 +203,7 @@ void CodeWidget::ConnectWidgets()
connect(m_search_callstack, &QLineEdit::textChanged, this, &CodeWidget::UpdateCallstack);
connect(m_branch_watch, &QPushButton::clicked, this, &CodeWidget::OnBranchWatchDialog);
connect(m_note_list, &QListWidget::itemPressed, this, &CodeWidget::OnSelectNote);
connect(m_symbols_list, &QListWidget::itemPressed, this, &CodeWidget::OnSelectSymbol);
connect(m_callstack_list, &QListWidget::itemPressed, this, &CodeWidget::OnSelectCallstack);
connect(m_function_calls_list, &QListWidget::itemPressed, this,
@ -234,6 +240,7 @@ void CodeWidget::OnSetCodeAddress(u32 address)
void CodeWidget::OnPPCSymbolsChanged()
{
UpdateSymbols();
UpdateNotes();
UpdateCallstack();
if (const Common::Symbol* symbol = m_ppc_symbol_db.GetSymbolFromAddr(m_code_view->GetAddress()))
{
@ -277,6 +284,7 @@ void CodeWidget::OnSearchSymbols()
{
m_symbol_filter = m_search_symbols->text();
UpdateSymbols();
UpdateNotes();
}
void CodeWidget::OnSelectSymbol()
@ -296,6 +304,17 @@ void CodeWidget::OnSelectSymbol()
m_code_view->setFocus();
}
void CodeWidget::OnSelectNote()
{
const auto items = m_note_list->selectedItems();
if (items.isEmpty())
return;
const u32 address = items[0]->data(Qt::UserRole).toUInt();
m_code_view->SetAddress(address, CodeViewWidget::SetAddressUpdate::WithUpdate);
}
void CodeWidget::OnSelectCallstack()
{
const auto items = m_callstack_list->selectedItems();
@ -424,6 +443,30 @@ void CodeWidget::UpdateSymbols()
m_symbols_list->sortItems();
}
void CodeWidget::UpdateNotes()
{
const QString selection = m_note_list->selectedItems().isEmpty() ?
QStringLiteral("") :
m_note_list->selectedItems()[0]->text();
m_note_list->clear();
for (const auto& note : m_ppc_symbol_db.Notes())
{
const QString name = QString::fromStdString(note.second.name);
auto* item = new QListWidgetItem(name);
if (name == selection)
item->setSelected(true);
item->setData(Qt::UserRole, note.second.address);
if (name.toUpper().indexOf(m_symbol_filter.toUpper()) != -1)
m_note_list->addItem(item);
}
m_note_list->sortItems();
}
void CodeWidget::UpdateFunctionCalls(const Common::Symbol* symbol)
{
m_function_calls_list->clear();