From 762c1a9ff5406afc4c6b1a3eb74dae2dc2fb0daf Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 16 Apr 2015 18:35:09 -0400 Subject: Qt: Move EmuThread ownership from render window to main window. --- src/citra_qt/debugger/disassembler.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/citra_qt/debugger/disassembler.cpp') diff --git a/src/citra_qt/debugger/disassembler.cpp b/src/citra_qt/debugger/disassembler.cpp index f620687ae..b58edafe7 100644 --- a/src/citra_qt/debugger/disassembler.cpp +++ b/src/citra_qt/debugger/disassembler.cpp @@ -4,6 +4,7 @@ #include "disassembler.h" +#include "../main.h" #include "../bootmanager.h" #include "../hotkeys.h" @@ -158,8 +159,9 @@ void DisassemblerModel::SetNextInstruction(unsigned int address) { emit dataChanged(prev_index, prev_index); } -DisassemblerWidget::DisassemblerWidget(QWidget* parent, EmuThread& emu_thread) : QDockWidget(parent), base_addr(0), emu_thread(emu_thread) -{ +DisassemblerWidget::DisassemblerWidget(QWidget* parent, GMainWindow& main_window) : + QDockWidget(parent), main_window(main_window), base_addr(0) { + disasm_ui.setupUi(this); model = new DisassemblerModel(this); @@ -199,7 +201,7 @@ void DisassemblerWidget::Init() void DisassemblerWidget::OnContinue() { - emu_thread.SetCpuRunning(true); + main_window.GetEmuThread()->SetCpuRunning(true); } void DisassemblerWidget::OnStep() @@ -209,13 +211,13 @@ void DisassemblerWidget::OnStep() void DisassemblerWidget::OnStepInto() { - emu_thread.SetCpuRunning(false); - emu_thread.ExecStep(); + main_window.GetEmuThread()->SetCpuRunning(false); + main_window.GetEmuThread()->ExecStep(); } void DisassemblerWidget::OnPause() { - emu_thread.SetCpuRunning(false); + main_window.GetEmuThread()->SetCpuRunning(false); // TODO: By now, the CPU might not have actually stopped... if (Core::g_app_core) { @@ -225,7 +227,7 @@ void DisassemblerWidget::OnPause() void DisassemblerWidget::OnToggleStartStop() { - emu_thread.SetCpuRunning(!emu_thread.IsCpuRunning()); + main_window.GetEmuThread()->SetCpuRunning(!main_window.GetEmuThread()->IsCpuRunning()); } void DisassemblerWidget::OnDebugModeEntered() @@ -233,7 +235,7 @@ void DisassemblerWidget::OnDebugModeEntered() ARMword next_instr = Core::g_app_core->GetPC(); if (model->GetBreakPoints().IsAddressBreakPoint(next_instr)) - emu_thread.SetCpuRunning(false); + main_window.GetEmuThread()->SetCpuRunning(false); model->SetNextInstruction(next_instr); -- cgit v1.2.3 From e4ea133717a5292339c134160da984ba186d3de8 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 28 Apr 2015 19:03:01 -0400 Subject: Qt: Restructured to remove unnecessary shutdown event and various cleanups. --- src/citra_qt/debugger/disassembler.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/citra_qt/debugger/disassembler.cpp') diff --git a/src/citra_qt/debugger/disassembler.cpp b/src/citra_qt/debugger/disassembler.cpp index b58edafe7..f9423e1d6 100644 --- a/src/citra_qt/debugger/disassembler.cpp +++ b/src/citra_qt/debugger/disassembler.cpp @@ -201,7 +201,7 @@ void DisassemblerWidget::Init() void DisassemblerWidget::OnContinue() { - main_window.GetEmuThread()->SetCpuRunning(true); + main_window.GetEmuThread()->SetRunning(true); } void DisassemblerWidget::OnStep() @@ -211,13 +211,13 @@ void DisassemblerWidget::OnStep() void DisassemblerWidget::OnStepInto() { - main_window.GetEmuThread()->SetCpuRunning(false); + main_window.GetEmuThread()->SetRunning(false); main_window.GetEmuThread()->ExecStep(); } void DisassemblerWidget::OnPause() { - main_window.GetEmuThread()->SetCpuRunning(false); + main_window.GetEmuThread()->SetRunning(false); // TODO: By now, the CPU might not have actually stopped... if (Core::g_app_core) { @@ -227,7 +227,7 @@ void DisassemblerWidget::OnPause() void DisassemblerWidget::OnToggleStartStop() { - main_window.GetEmuThread()->SetCpuRunning(!main_window.GetEmuThread()->IsCpuRunning()); + main_window.GetEmuThread()->SetRunning(!main_window.GetEmuThread()->IsRunning()); } void DisassemblerWidget::OnDebugModeEntered() @@ -235,7 +235,7 @@ void DisassemblerWidget::OnDebugModeEntered() ARMword next_instr = Core::g_app_core->GetPC(); if (model->GetBreakPoints().IsAddressBreakPoint(next_instr)) - main_window.GetEmuThread()->SetCpuRunning(false); + main_window.GetEmuThread()->SetRunning(false); model->SetNextInstruction(next_instr); -- cgit v1.2.3 From 43cf42490730d8a1b980aa1fe9ebbbe1249232ef Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 29 Apr 2015 00:01:41 -0400 Subject: Qt: Use signals for emu_thread start/stop and fix disasm widget. --- src/citra_qt/debugger/disassembler.cpp | 81 ++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 38 deletions(-) (limited to 'src/citra_qt/debugger/disassembler.cpp') diff --git a/src/citra_qt/debugger/disassembler.cpp b/src/citra_qt/debugger/disassembler.cpp index f9423e1d6..6400bb856 100644 --- a/src/citra_qt/debugger/disassembler.cpp +++ b/src/citra_qt/debugger/disassembler.cpp @@ -4,7 +4,6 @@ #include "disassembler.h" -#include "../main.h" #include "../bootmanager.h" #include "../hotkeys.h" @@ -19,8 +18,8 @@ #include "core/arm/disassembler/arm_disasm.h" -DisassemblerModel::DisassemblerModel(QObject* parent) : QAbstractListModel(parent), base_address(0), code_size(0), program_counter(0), selection(QModelIndex()) { - +DisassemblerModel::DisassemblerModel(QObject* parent) : + QAbstractListModel(parent), base_address(0), code_size(0), program_counter(0), selection(QModelIndex()) { } int DisassemblerModel::columnCount(const QModelIndex& parent) const { @@ -159,35 +158,28 @@ void DisassemblerModel::SetNextInstruction(unsigned int address) { emit dataChanged(prev_index, prev_index); } -DisassemblerWidget::DisassemblerWidget(QWidget* parent, GMainWindow& main_window) : - QDockWidget(parent), main_window(main_window), base_addr(0) { +DisassemblerWidget::DisassemblerWidget(QWidget* parent, EmuThread* emu_thread) : + QDockWidget(parent), emu_thread(emu_thread), base_addr(0) { disasm_ui.setupUi(this); - model = new DisassemblerModel(this); - disasm_ui.treeView->setModel(model); - RegisterHotkey("Disassembler", "Start/Stop", QKeySequence(Qt::Key_F5), Qt::ApplicationShortcut); RegisterHotkey("Disassembler", "Step", QKeySequence(Qt::Key_F10), Qt::ApplicationShortcut); RegisterHotkey("Disassembler", "Step into", QKeySequence(Qt::Key_F11), Qt::ApplicationShortcut); RegisterHotkey("Disassembler", "Set Breakpoint", QKeySequence(Qt::Key_F9), Qt::ApplicationShortcut); - connect(disasm_ui.button_breakpoint, SIGNAL(clicked()), model, SLOT(OnSetOrUnsetBreakpoint())); connect(disasm_ui.button_step, SIGNAL(clicked()), this, SLOT(OnStep())); connect(disasm_ui.button_pause, SIGNAL(clicked()), this, SLOT(OnPause())); connect(disasm_ui.button_continue, SIGNAL(clicked()), this, SLOT(OnContinue())); - connect(disasm_ui.treeView->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), - model, SLOT(OnSelectionChanged(const QModelIndex&))); - connect(GetHotkey("Disassembler", "Start/Stop", this), SIGNAL(activated()), this, SLOT(OnToggleStartStop())); connect(GetHotkey("Disassembler", "Step", this), SIGNAL(activated()), this, SLOT(OnStep())); connect(GetHotkey("Disassembler", "Step into", this), SIGNAL(activated()), this, SLOT(OnStepInto())); - connect(GetHotkey("Disassembler", "Set Breakpoint", this), SIGNAL(activated()), model, SLOT(OnSetOrUnsetBreakpoint())); + + setEnabled(false); } -void DisassemblerWidget::Init() -{ +void DisassemblerWidget::Init() { model->ParseFromAddress(Core::g_app_core->GetPC()); disasm_ui.treeView->resizeColumnToContents(0); @@ -199,25 +191,21 @@ void DisassemblerWidget::Init() disasm_ui.treeView->selectionModel()->setCurrentIndex(model_index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); } -void DisassemblerWidget::OnContinue() -{ - main_window.GetEmuThread()->SetRunning(true); +void DisassemblerWidget::OnContinue() { + emu_thread->SetRunning(true); } -void DisassemblerWidget::OnStep() -{ +void DisassemblerWidget::OnStep() { OnStepInto(); // change later } -void DisassemblerWidget::OnStepInto() -{ - main_window.GetEmuThread()->SetRunning(false); - main_window.GetEmuThread()->ExecStep(); +void DisassemblerWidget::OnStepInto() { + emu_thread->SetRunning(false); + emu_thread->ExecStep(); } -void DisassemblerWidget::OnPause() -{ - main_window.GetEmuThread()->SetRunning(false); +void DisassemblerWidget::OnPause() { + emu_thread->SetRunning(false); // TODO: By now, the CPU might not have actually stopped... if (Core::g_app_core) { @@ -225,17 +213,15 @@ void DisassemblerWidget::OnPause() } } -void DisassemblerWidget::OnToggleStartStop() -{ - main_window.GetEmuThread()->SetRunning(!main_window.GetEmuThread()->IsRunning()); +void DisassemblerWidget::OnToggleStartStop() { + emu_thread->SetRunning(!emu_thread->IsRunning()); } -void DisassemblerWidget::OnDebugModeEntered() -{ +void DisassemblerWidget::OnDebugModeEntered() { ARMword next_instr = Core::g_app_core->GetPC(); if (model->GetBreakPoints().IsAddressBreakPoint(next_instr)) - main_window.GetEmuThread()->SetRunning(false); + emu_thread->SetRunning(false); model->SetNextInstruction(next_instr); @@ -244,16 +230,35 @@ void DisassemblerWidget::OnDebugModeEntered() disasm_ui.treeView->selectionModel()->setCurrentIndex(model_index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); } -void DisassemblerWidget::OnDebugModeLeft() -{ - +void DisassemblerWidget::OnDebugModeLeft() { } -int DisassemblerWidget::SelectedRow() -{ +int DisassemblerWidget::SelectedRow() { QModelIndex index = disasm_ui.treeView->selectionModel()->currentIndex(); if (!index.isValid()) return -1; return disasm_ui.treeView->selectionModel()->currentIndex().row(); } + +void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) { + this->emu_thread = emu_thread; + + model = new DisassemblerModel(this); + disasm_ui.treeView->setModel(model); + + connect(disasm_ui.treeView->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), + model, SLOT(OnSelectionChanged(const QModelIndex&))); + connect(disasm_ui.button_breakpoint, SIGNAL(clicked()), model, SLOT(OnSetOrUnsetBreakpoint())); + connect(GetHotkey("Disassembler", "Set Breakpoint", this), SIGNAL(activated()), model, SLOT(OnSetOrUnsetBreakpoint())); + + Init(); + setEnabled(true); +} + +void DisassemblerWidget::OnEmulationStopped() { + disasm_ui.treeView->setModel(nullptr); + delete model; + emu_thread = nullptr; + setEnabled(false); +} -- cgit v1.2.3 From bc41de2131728192e3fd4c8c83e8b2d6e5ba4530 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 30 Apr 2015 19:46:50 -0400 Subject: Qt: Fixed a bug in shutdown procedure, various cleanups. --- src/citra_qt/debugger/disassembler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/citra_qt/debugger/disassembler.cpp') diff --git a/src/citra_qt/debugger/disassembler.cpp b/src/citra_qt/debugger/disassembler.cpp index 6400bb856..08c6b49bd 100644 --- a/src/citra_qt/debugger/disassembler.cpp +++ b/src/citra_qt/debugger/disassembler.cpp @@ -241,7 +241,7 @@ int DisassemblerWidget::SelectedRow() { return disasm_ui.treeView->selectionModel()->currentIndex().row(); } -void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) { +void DisassemblerWidget::OnEmulationStarting(EmuThread* emu_thread) { this->emu_thread = emu_thread; model = new DisassemblerModel(this); @@ -256,7 +256,7 @@ void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) { setEnabled(true); } -void DisassemblerWidget::OnEmulationStopped() { +void DisassemblerWidget::OnEmulationStopping() { disasm_ui.treeView->setModel(nullptr); delete model; emu_thread = nullptr; -- cgit v1.2.3