1
1
Fork 0
forked from suyu/suyu

citra-qt: Properly disable the CiTrace widget upon starting/stopping emulation.

This commit is contained in:
Tony Wasserka 2015-05-21 02:12:59 +02:00
parent 902fa4da52
commit 01a526e1c4
3 changed files with 39 additions and 2 deletions

View file

@ -8,6 +8,7 @@
#include <QComboBox> #include <QComboBox>
#include <QFileDialog> #include <QFileDialog>
#include <QLabel> #include <QLabel>
#include <QMessageBox>
#include <QPushButton> #include <QPushButton>
#include <QSpinBox> #include <QSpinBox>
@ -49,8 +50,6 @@ GraphicsTracingWidget::GraphicsTracingWidget(std::shared_ptr<Pica::DebugContext>
} }
main_widget->setLayout(main_layout); main_widget->setLayout(main_layout);
setWidget(main_widget); setWidget(main_widget);
// TODO: Make sure to have this widget disabled as soon as emulation is started!
} }
void GraphicsTracingWidget::StartRecording() { void GraphicsTracingWidget::StartRecording() {
@ -121,3 +120,33 @@ void GraphicsTracingWidget::OnBreakPointHit(Pica::DebugContext::Event event, voi
void GraphicsTracingWidget::OnResumed() { void GraphicsTracingWidget::OnResumed() {
widget()->setEnabled(false); widget()->setEnabled(false);
} }
void GraphicsTracingWidget::OnEmulationStarting(EmuThread* emu_thread) {
// Disable tracing starting/stopping until a GPU breakpoint is reached
widget()->setEnabled(false);
}
void GraphicsTracingWidget::OnEmulationStopping() {
// TODO: Is it safe to access the context here?
auto context = context_weak.lock();
if (!context)
return;
if (context->recorder) {
auto reply = QMessageBox::question(this, tr("CiTracing still active"),
tr("A CiTrace is still being recorded. Do you want to save it? If not, all recorded data will be discarded."),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if (reply == QMessageBox::Yes) {
StopRecording();
} else {
AbortRecording();
}
}
// If the widget was disabled before, enable it now to allow starting
// tracing before starting the next emulation session
widget()->setEnabled(true);
}

View file

@ -6,6 +6,8 @@
#include "graphics_breakpoint_observer.h" #include "graphics_breakpoint_observer.h"
class EmuThread;
class GraphicsTracingWidget : public BreakPointObserverDock { class GraphicsTracingWidget : public BreakPointObserverDock {
Q_OBJECT Q_OBJECT
@ -20,6 +22,9 @@ private slots:
void OnBreakPointHit(Pica::DebugContext::Event event, void* data) override; void OnBreakPointHit(Pica::DebugContext::Event event, void* data) override;
void OnResumed() override; void OnResumed() override;
void OnEmulationStarting(EmuThread* emu_thread);
void OnEmulationStopping();
signals: signals:
void SetStartTracingButtonEnabled(bool enable); void SetStartTracingButtonEnabled(bool enable);
void SetStopTracingButtonEnabled(bool enable); void SetStopTracingButtonEnabled(bool enable);

View file

@ -154,6 +154,9 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping()));
connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*)));
connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping()));
connect(this, SIGNAL(EmulationStarting(EmuThread*)), graphicsTracingWidget, SLOT(OnEmulationStarting(EmuThread*)));
connect(this, SIGNAL(EmulationStopping()), graphicsTracingWidget, SLOT(OnEmulationStopping()));
// Setup hotkeys // Setup hotkeys
RegisterHotkey("Main Window", "Load File", QKeySequence::Open); RegisterHotkey("Main Window", "Load File", QKeySequence::Open);