Pica/DebugUtils: Factor out BreakPointObserverDock into its own file.

This commit is contained in:
Tony Wasserka 2014-12-19 19:22:44 +01:00
parent 2fb1e4c9a2
commit 3f649dc9b8
5 changed files with 68 additions and 50 deletions

View File

@ -8,6 +8,7 @@ set(SRCS
debugger/callstack.cpp debugger/callstack.cpp
debugger/disassembler.cpp debugger/disassembler.cpp
debugger/graphics.cpp debugger/graphics.cpp
debugger/graphics_breakpoint_observer.cpp
debugger/graphics_breakpoints.cpp debugger/graphics_breakpoints.cpp
debugger/graphics_cmdlists.cpp debugger/graphics_cmdlists.cpp
debugger/graphics_framebuffer.cpp debugger/graphics_framebuffer.cpp
@ -27,6 +28,7 @@ set(HEADERS
debugger/callstack.h debugger/callstack.h
debugger/disassembler.h debugger/disassembler.h
debugger/graphics.h debugger/graphics.h
debugger/graphics_breakpoint_observer.h
debugger/graphics_breakpoints.h debugger/graphics_breakpoints.h
debugger/graphics_breakpoints_p.h debugger/graphics_breakpoints_p.h
debugger/graphics_cmdlists.h debugger/graphics_cmdlists.h

View File

@ -0,0 +1,32 @@
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include <QMetaType>
#include "graphics_breakpoint_observer.h"
BreakPointObserverDock::BreakPointObserverDock(std::shared_ptr<Pica::DebugContext> debug_context,
const QString& title, QWidget* parent)
: QDockWidget(title, parent), BreakPointObserver(debug_context)
{
qRegisterMetaType<Pica::DebugContext::Event>("Pica::DebugContext::Event");
connect(this, SIGNAL(Resumed()), this, SLOT(OnResumed()));
// NOTE: This signal is emitted from a non-GUI thread, but connect() takes
// care of delaying its handling to the GUI thread.
connect(this, SIGNAL(BreakPointHit(Pica::DebugContext::Event,void*)),
this, SLOT(OnBreakPointHit(Pica::DebugContext::Event,void*)),
Qt::BlockingQueuedConnection);
}
void BreakPointObserverDock::OnPicaBreakPointHit(Pica::DebugContext::Event event, void* data)
{
emit BreakPointHit(event, data);
}
void BreakPointObserverDock::OnPicaResume()
{
emit Resumed();
}

View File

@ -0,0 +1,33 @@
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include <QDockWidget>
#include "video_core/debug_utils/debug_utils.h"
/**
* Utility class which forwards calls to OnPicaBreakPointHit and OnPicaResume to public slots.
* This is because the Pica breakpoint callbacks are called from a non-GUI thread, while
* the widget usually wants to perform reactions in the GUI thread.
*/
class BreakPointObserverDock : public QDockWidget, private Pica::DebugContext::BreakPointObserver {
Q_OBJECT
public:
BreakPointObserverDock(std::shared_ptr<Pica::DebugContext> debug_context, const QString& title,
QWidget* parent = nullptr);
void OnPicaBreakPointHit(Pica::DebugContext::Event event, void* data) override;
void OnPicaResume() override;
private slots:
virtual void OnBreakPointHit(Pica::DebugContext::Event event, void* data) = 0;
virtual void OnResumed() = 0;
signals:
void Resumed();
void BreakPointHit(Pica::DebugContext::Event event, void* data);
};

View File

@ -6,7 +6,6 @@
#include <QComboBox> #include <QComboBox>
#include <QDebug> #include <QDebug>
#include <QLabel> #include <QLabel>
#include <QMetaType>
#include <QPushButton> #include <QPushButton>
#include <QSpinBox> #include <QSpinBox>
@ -17,32 +16,6 @@
#include "util/spinbox.h" #include "util/spinbox.h"
BreakPointObserverDock::BreakPointObserverDock(std::shared_ptr<Pica::DebugContext> debug_context,
const QString& title, QWidget* parent)
: QDockWidget(title, parent), BreakPointObserver(debug_context)
{
qRegisterMetaType<Pica::DebugContext::Event>("Pica::DebugContext::Event");
connect(this, SIGNAL(Resumed()), this, SLOT(OnResumed()));
// NOTE: This signal is emitted from a non-GUI thread, but connect() takes
// care of delaying its handling to the GUI thread.
connect(this, SIGNAL(BreakPointHit(Pica::DebugContext::Event,void*)),
this, SLOT(OnBreakPointHit(Pica::DebugContext::Event,void*)),
Qt::BlockingQueuedConnection);
}
void BreakPointObserverDock::OnPicaBreakPointHit(Pica::DebugContext::Event event, void* data)
{
emit BreakPointHit(event, data);
}
void BreakPointObserverDock::OnPicaResume()
{
emit Resumed();
}
GraphicsFramebufferWidget::GraphicsFramebufferWidget(std::shared_ptr<Pica::DebugContext> debug_context, GraphicsFramebufferWidget::GraphicsFramebufferWidget(std::shared_ptr<Pica::DebugContext> debug_context,
QWidget* parent) QWidget* parent)
: BreakPointObserverDock(debug_context, tr("Pica Framebuffer"), parent), : BreakPointObserverDock(debug_context, tr("Pica Framebuffer"), parent),

View File

@ -6,7 +6,7 @@
#include <QDockWidget> #include <QDockWidget>
#include "video_core/debug_utils/debug_utils.h" #include "graphics_breakpoint_observer.h"
class QComboBox; class QComboBox;
class QLabel; class QLabel;
@ -14,28 +14,6 @@ class QSpinBox;
class CSpinBox; class CSpinBox;
// Utility class which forwards calls to OnPicaBreakPointHit and OnPicaResume to public slots.
// This is because the Pica breakpoint callbacks are called from a non-GUI thread, while
// the widget usually wants to perform reactions in the GUI thread.
class BreakPointObserverDock : public QDockWidget, Pica::DebugContext::BreakPointObserver {
Q_OBJECT
public:
BreakPointObserverDock(std::shared_ptr<Pica::DebugContext> debug_context, const QString& title,
QWidget* parent = nullptr);
void OnPicaBreakPointHit(Pica::DebugContext::Event event, void* data) override;
void OnPicaResume() override;
private slots:
virtual void OnBreakPointHit(Pica::DebugContext::Event event, void* data) = 0;
virtual void OnResumed() = 0;
signals:
void Resumed();
void BreakPointHit(Pica::DebugContext::Event event, void* data);
};
class GraphicsFramebufferWidget : public BreakPointObserverDock { class GraphicsFramebufferWidget : public BreakPointObserverDock {
Q_OBJECT Q_OBJECT