Qt/Debugger: Add Ctrl+F (find thread), Ctrl+C (copy)

This commit is contained in:
Eladash 2023-05-28 10:57:15 +03:00 committed by Megamouse
parent 4aee1b378a
commit 5a365506f7
2 changed files with 60 additions and 11 deletions

View file

@ -101,6 +101,7 @@ debugger_frame::debugger_frame(std::shared_ptr<gui_settings> gui_settings, QWidg
m_choice_units->completer()->setCompletionMode(QCompleter::PopupCompletion); m_choice_units->completer()->setCompletionMode(QCompleter::PopupCompletion);
m_choice_units->completer()->setMaxVisibleItems(30); m_choice_units->completer()->setMaxVisibleItems(30);
m_choice_units->completer()->setFilterMode(Qt::MatchContains); m_choice_units->completer()->setFilterMode(Qt::MatchContains);
m_choice_units->installEventFilter(this);
m_go_to_addr = new QPushButton(tr("Go To Address"), this); m_go_to_addr = new QPushButton(tr("Go To Address"), this);
m_go_to_pc = new QPushButton(tr("Go To PC"), this); m_go_to_pc = new QPushButton(tr("Go To PC"), this);
@ -211,7 +212,19 @@ bool debugger_frame::eventFilter(QObject* object, QEvent* event)
if (object == m_debugger_list && event->type() == QEvent::KeyPress) if (object == m_debugger_list && event->type() == QEvent::KeyPress)
{ {
keyPressEvent(static_cast<QKeyEvent*>(event)); keyPressEvent(static_cast<QKeyEvent*>(event));
event->accept(); // Restore accepted state
return false;
} }
if (object == m_choice_units && event->type() == QEvent::FocusOut)
{
if (int index = m_choice_units->currentIndex(); index >= 0)
{
// Restore item text automatically on focus-out after search
m_choice_units->setCurrentText(m_choice_units->itemText(index));
}
}
return false; return false;
} }
@ -263,13 +276,14 @@ void debugger_frame::open_breakpoints_settings()
hbox_layout->addWidget(button_ok); hbox_layout->addWidget(button_ok);
dlg->setLayout(hbox_layout); dlg->setLayout(hbox_layout);
dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->exec(); dlg->open();
} }
void debugger_frame::keyPressEvent(QKeyEvent* event) void debugger_frame::keyPressEvent(QKeyEvent* event)
{ {
if (!isActiveWindow()) if (!isActiveWindow())
{ {
event->ignore();
return; return;
} }
@ -282,6 +296,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
{ {
event->ignore();
return; return;
} }
@ -292,6 +307,8 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
QLabel* l = new QLabel(tr( QLabel* l = new QLabel(tr(
"Keys Ctrl+G: Go to typed address." "Keys Ctrl+G: Go to typed address."
"\nKeys Ctrl+B: Open breakpoints settings." "\nKeys Ctrl+B: Open breakpoints settings."
"\nKeys Ctrl+C: Copy instruction contents."
"\nKeys Ctrl+F: Find thread."
"\nKeys Alt+S: Capture SPU images of selected SPU or generalized form when used from PPU." "\nKeys Alt+S: Capture SPU images of selected SPU or generalized form when used from PPU."
"\nKeys Alt+R: Load last saved SPU state capture." "\nKeys Alt+R: Load last saved SPU state capture."
"\nKey D: SPU MFC commands logger, MFC debug setting must be enabled." "\nKey D: SPU MFC commands logger, MFC debug setting must be enabled."
@ -318,7 +335,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
dlg->setLayout(layout); dlg->setLayout(layout);
dlg->setFixedSize(dlg->sizeHint()); dlg->setFixedSize(dlg->sizeHint());
dlg->move(QCursor::pos()); dlg->move(QCursor::pos());
dlg->exec(); dlg->open();
return; return;
} }
default: break; default: break;
@ -333,6 +350,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
{ {
event->ignore();
break; break;
} }
@ -348,12 +366,19 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
return; return;
} }
case Qt::Key_F:
{
m_choice_units->clearEditText();
m_choice_units->setFocus();
return;
}
default: break; default: break;
} }
} }
if (!cpu) if (!cpu)
{ {
event->ignore();
return; return;
} }
@ -367,6 +392,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
{ {
event->ignore();
return; return;
} }
@ -393,7 +419,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
{ {
return; break;
} }
auto get_max_allowed = [&](QString title, QString description, u32 limit) -> u32 auto get_max_allowed = [&](QString title, QString description, u32 limit) -> u32
@ -552,7 +578,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
{ {
return; break;
} }
if (cpu->id_type() == 1 || cpu->id_type() == 2) if (cpu->id_type() == 1 || cpu->id_type() == 2)
@ -564,15 +590,20 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
m_inst_editor->show(); m_inst_editor->show();
} }
} }
return; return;
} }
case Qt::Key_F: case Qt::Key_F:
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
return; {
break;
}
if (cpu->id_type() != 2) if (cpu->id_type() != 2)
return; {
break;
}
static_cast<spu_thread*>(cpu)->debugger_float_mode ^= 1; // Switch mode static_cast<spu_thread*>(cpu)->debugger_float_mode ^= 1; // Switch mode
return; return;
@ -580,7 +611,9 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
case Qt::Key_R: case Qt::Key_R:
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
return; {
break;
}
if (cpu->id_type() == 1 || cpu->id_type() == 2) if (cpu->id_type() == 1 || cpu->id_type() == 2)
{ {
@ -597,12 +630,15 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
m_reg_editor->show(); m_reg_editor->show();
} }
} }
return; return;
} }
case Qt::Key_S: case Qt::Key_S:
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
return; {
break;
}
if (modifiers & Qt::AltModifier) if (modifiers & Qt::AltModifier)
{ {
@ -624,8 +660,10 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
} }
static_cast<spu_thread*>(cpu)->capture_state(); static_cast<spu_thread*>(cpu)->capture_state();
return;
} }
return;
break;
} }
case Qt::Key_N: case Qt::Key_N:
{ {
@ -663,7 +701,9 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
case Qt::Key_M: case Qt::Key_M:
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
return; {
break;
}
if (m_disasm && cpu->id_type() == 2) if (m_disasm && cpu->id_type() == 2)
{ {
@ -688,6 +728,8 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
default: break; default: break;
} }
} }
event->ignore();
} }
cpu_thread* debugger_frame::get_cpu() cpu_thread* debugger_frame::get_cpu()

View file

@ -269,11 +269,13 @@ void debugger_list::keyPressEvent(QKeyEvent* event)
{ {
if (!isActiveWindow()) if (!isActiveWindow())
{ {
QListWidget::keyPressEvent(event);
return; return;
} }
if (event->modifiers()) if (event->modifiers())
{ {
QListWidget::keyPressEvent(event);
return; return;
} }
@ -287,17 +289,22 @@ void debugger_list::keyPressEvent(QKeyEvent* event)
{ {
if (event->isAutoRepeat()) if (event->isAutoRepeat())
{ {
QListWidget::keyPressEvent(event);
return; return;
} }
if (m_cpu && m_cpu->id_type() == 0x55) if (m_cpu && m_cpu->id_type() == 0x55)
{ {
create_rsx_command_detail(m_showing_selected_instruction ? m_selected_instruction : m_pc); create_rsx_command_detail(m_showing_selected_instruction ? m_selected_instruction : m_pc);
return; return;
} }
return;
break;
} }
default: break; default: break;
} }
QListWidget::keyPressEvent(event);
} }