2020-12-05 13:08:24 +01:00
|
|
|
#include "call_stack_list.h"
|
2020-03-31 02:46:37 +02:00
|
|
|
|
|
|
|
|
constexpr auto qstr = QString::fromStdString;
|
|
|
|
|
|
|
|
|
|
call_stack_list::call_stack_list(QWidget* parent) : QListWidget(parent)
|
|
|
|
|
{
|
|
|
|
|
setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
|
|
|
setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
|
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
|
|
|
|
|
|
|
|
|
// connects
|
|
|
|
|
connect(this, &QListWidget::itemDoubleClicked, this, &call_stack_list::OnCallStackListDoubleClicked);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void call_stack_list::UpdateCPUData(std::weak_ptr<cpu_thread> cpu, std::shared_ptr<CPUDisAsm> disasm)
|
|
|
|
|
{
|
|
|
|
|
this->cpu = cpu;
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-03 06:56:55 +02:00
|
|
|
void call_stack_list::HandleUpdate(std::vector<std::pair<u32, u32>> call_stack)
|
2020-03-31 02:46:37 +02:00
|
|
|
{
|
|
|
|
|
clear();
|
|
|
|
|
|
2020-07-03 06:56:55 +02:00
|
|
|
for (const auto& addr : call_stack)
|
2020-03-31 02:46:37 +02:00
|
|
|
{
|
2020-11-07 20:05:44 +01:00
|
|
|
const QString call_stack_item_text = qstr(fmt::format("0x%08llx (sp=0x%08llx)", addr.first, addr.second));
|
2020-03-31 02:46:37 +02:00
|
|
|
QListWidgetItem* callStackItem = new QListWidgetItem(call_stack_item_text);
|
2020-07-03 06:56:55 +02:00
|
|
|
callStackItem->setData(Qt::UserRole, { addr.first });
|
2020-03-31 02:46:37 +02:00
|
|
|
addItem(callStackItem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void call_stack_list::OnCallStackListDoubleClicked()
|
|
|
|
|
{
|
|
|
|
|
const u32 address = currentItem()->data(Qt::UserRole).value<u32>();
|
|
|
|
|
Q_EMIT RequestShowAddress(address);
|
|
|
|
|
}
|