rpcsx/rpcs3/rpcs3qt/call_stack_list.cpp

51 lines
1.3 KiB
C++
Raw Normal View History

2020-12-05 13:08:24 +01:00
#include "call_stack_list.h"
2020-03-31 02:46:37 +02:00
#include "Utilities/StrFmt.h"
#include <QKeyEvent>
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);
// Hide until used in order to allow as much space for registers panel as possible
hide();
2020-03-31 02:46:37 +02:00
}
void call_stack_list::keyPressEvent(QKeyEvent* event)
{
QListWidget::keyPressEvent(event);
event->ignore(); // Propagate the event to debugger_frame
}
2021-04-07 23:05:18 +02:00
void call_stack_list::HandleUpdate(const std::vector<std::pair<u32, u32>>& call_stack)
2020-03-31 02:46:37 +02:00
{
clear();
for (const auto& addr : call_stack)
2020-03-31 02:46:37 +02:00
{
2021-03-23 20:39:39 +01:00
const QString text = qstr(fmt::format("0x%08llx (sp=0x%08llx)", addr.first, addr.second));
QListWidgetItem* call_stack_item = new QListWidgetItem(text);
call_stack_item->setData(Qt::UserRole, { addr.first });
addItem(call_stack_item);
2020-03-31 02:46:37 +02:00
}
setVisible(!call_stack.empty());
2020-03-31 02:46:37 +02:00
}
void call_stack_list::OnCallStackListDoubleClicked()
{
if (QListWidgetItem* call_stack_item = currentItem())
{
const u32 address = call_stack_item->data(Qt::UserRole).value<u32>();
Q_EMIT RequestShowAddress(address);
}
2020-03-31 02:46:37 +02:00
}