forked from suyu/suyu
citra-qt: Properly disable the CiTrace widget upon starting/stopping emulation.
This commit is contained in:
parent
902fa4da52
commit
01a526e1c4
3 changed files with 39 additions and 2 deletions
|
@ -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);
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue