mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 06:21:26 +12:00
rsx_debugger: use PerformJump on doubleclick instead of the mouse scroll
This commit is contained in:
parent
b9318f73e6
commit
c42b25f10e
2 changed files with 34 additions and 32 deletions
|
@ -120,7 +120,7 @@ rsx_debugger::rsx_debugger(std::shared_ptr<gui_settings> gui_settings, QWidget*
|
||||||
m_list_settings = l_addRSXTab(m_list_settings, tr("Settings"), 2);
|
m_list_settings = l_addRSXTab(m_list_settings, tr("Settings"), 2);
|
||||||
|
|
||||||
//Tabs: List Columns
|
//Tabs: List Columns
|
||||||
m_list_commands->installEventFilter(this);
|
m_list_commands->viewport()->installEventFilter(this);
|
||||||
m_list_commands->setHorizontalHeaderLabels(QStringList() << tr("Column") << tr("Value") << tr("Command") << tr("Count"));
|
m_list_commands->setHorizontalHeaderLabels(QStringList() << tr("Column") << tr("Value") << tr("Command") << tr("Count"));
|
||||||
m_list_commands->setColumnWidth(0, 70);
|
m_list_commands->setColumnWidth(0, 70);
|
||||||
m_list_commands->setColumnWidth(1, 70);
|
m_list_commands->setColumnWidth(1, 70);
|
||||||
|
@ -296,10 +296,15 @@ void rsx_debugger::keyPressEvent(QKeyEvent* event)
|
||||||
|
|
||||||
bool rsx_debugger::eventFilter(QObject* object, QEvent* event)
|
bool rsx_debugger::eventFilter(QObject* object, QEvent* event)
|
||||||
{
|
{
|
||||||
if (object == m_list_commands)
|
if (object == m_list_commands->viewport())
|
||||||
{
|
{
|
||||||
switch (event->type())
|
switch (event->type())
|
||||||
{
|
{
|
||||||
|
case QEvent::MouseButtonDblClick:
|
||||||
|
{
|
||||||
|
PerformJump(m_list_commands->item(m_list_commands->currentRow(), 0)->data(Qt::UserRole).toUInt());
|
||||||
|
break;
|
||||||
|
}
|
||||||
case QEvent::Resize:
|
case QEvent::Resize:
|
||||||
{
|
{
|
||||||
gui::utils::update_table_item_count(m_list_commands);
|
gui::utils::update_table_item_count(m_list_commands);
|
||||||
|
@ -313,35 +318,7 @@ bool rsx_debugger::eventFilter(QObject* object, QEvent* event)
|
||||||
int steps = numSteps.y();
|
int steps = numSteps.y();
|
||||||
int item_count = m_list_commands->rowCount();
|
int item_count = m_list_commands->rowCount();
|
||||||
int step_size = wheelEvent->modifiers() & Qt::ControlModifier ? item_count : 1;
|
int step_size = wheelEvent->modifiers() & Qt::ControlModifier ? item_count : 1;
|
||||||
|
m_addr -= step_size * 4 * steps;
|
||||||
if (vm::check_addr(m_addr, 4))
|
|
||||||
{
|
|
||||||
for (int i = 0; i < step_size; ++i)
|
|
||||||
{
|
|
||||||
u32 offset;
|
|
||||||
if (vm::check_addr(m_addr, 4))
|
|
||||||
{
|
|
||||||
u32 cmd = vm::read32(m_addr);
|
|
||||||
u32 count = ((cmd & RSX_METHOD_OLD_JUMP_CMD_MASK) == RSX_METHOD_OLD_JUMP_CMD)
|
|
||||||
|| ((cmd & RSX_METHOD_NEW_JUMP_CMD_MASK) == RSX_METHOD_NEW_JUMP_CMD)
|
|
||||||
|| ((cmd & RSX_METHOD_CALL_CMD_MASK) == RSX_METHOD_CALL_CMD)
|
|
||||||
|| cmd == RSX_METHOD_RETURN_CMD ? 0 : (cmd >> 18) & 0x7ff;
|
|
||||||
|
|
||||||
offset = 1 + count;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
offset = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_addr -= 4 * offset * steps;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_addr -= step_size * 4 * steps;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateInformation();
|
UpdateInformation();
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -647,7 +624,9 @@ void rsx_debugger::GetMemory()
|
||||||
// Write information
|
// Write information
|
||||||
for(u32 i=0, addr = m_addr; i < item_count; i++, addr += 4)
|
for(u32 i=0, addr = m_addr; i < item_count; i++, addr += 4)
|
||||||
{
|
{
|
||||||
m_list_commands->setItem(i, 0, new QTableWidgetItem(qstr(fmt::format("%08x", addr))));
|
QTableWidgetItem* address_item = new QTableWidgetItem(qstr(fmt::format("%08x", addr)));
|
||||||
|
address_item->setData(Qt::UserRole, addr);
|
||||||
|
m_list_commands->setItem(i, 0, address_item);
|
||||||
|
|
||||||
if (vm::check_addr(addr))
|
if (vm::check_addr(addr))
|
||||||
{
|
{
|
||||||
|
@ -1183,3 +1162,23 @@ void rsx_debugger::SetPC(const uint pc)
|
||||||
{
|
{
|
||||||
m_addr = pc;
|
m_addr = pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rsx_debugger::PerformJump(u32 address)
|
||||||
|
{
|
||||||
|
if (!vm::check_addr(address, 4))
|
||||||
|
return;
|
||||||
|
|
||||||
|
u32 cmd = vm::read32(address);
|
||||||
|
u32 count = ((cmd & RSX_METHOD_OLD_JUMP_CMD_MASK) == RSX_METHOD_OLD_JUMP_CMD)
|
||||||
|
|| ((cmd & RSX_METHOD_NEW_JUMP_CMD_MASK) == RSX_METHOD_NEW_JUMP_CMD)
|
||||||
|
|| ((cmd & RSX_METHOD_CALL_CMD_MASK) == RSX_METHOD_CALL_CMD)
|
||||||
|
|| cmd == RSX_METHOD_RETURN_CMD ? 0 : (cmd >> 18) & 0x7ff;
|
||||||
|
|
||||||
|
if (count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_addr = address + count;
|
||||||
|
UpdateInformation();
|
||||||
|
|
||||||
|
m_list_commands->setCurrentCell(0, 0); // needs to be changed when m_addr doesn't get set to row 0 anymore
|
||||||
|
}
|
||||||
|
|
|
@ -105,4 +105,7 @@ protected:
|
||||||
virtual void closeEvent(QCloseEvent* event) override;
|
virtual void closeEvent(QCloseEvent* event) override;
|
||||||
virtual void keyPressEvent(QKeyEvent* event) override;
|
virtual void keyPressEvent(QKeyEvent* event) override;
|
||||||
virtual bool eventFilter(QObject* object, QEvent* event) override;
|
virtual bool eventFilter(QObject* object, QEvent* event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void PerformJump(u32 address);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue