Qt: Initial CPU debugger widget implementation

Co-Authored-By: liuk707 <62625900+liuk7071@users.noreply.github.com>
This commit is contained in:
wheremyfoodat 2025-07-07 02:11:57 +03:00
parent 8e20bd6220
commit 9dc52577ea
8 changed files with 311 additions and 6 deletions

View file

@ -0,0 +1,38 @@
#pragma once
#include <QListWidget>
#include <QPlainTextEdit>
#include <QScrollBar>
#include <QWidget>
#include "emulator.hpp"
#include "panda_qt/disabled_widget_overlay.hpp"
class CPUDebugger : public QWidget {
Q_OBJECT
Emulator* emu;
QListWidget* disasmListWidget;
QScrollBar* verticalScrollBar;
QPlainTextEdit* registerTextEdit;
DisabledWidgetOverlay* disabledOverlay;
bool enabled = false;
public:
CPUDebugger(Emulator* emulator, QWidget* parent = nullptr);
void enable();
void disable();
private:
// Update the state of the disassembler. Qt events should always call update, not updateDisasm/updateRegister
// As update properly handles thread safety
void update();
void updateDisasm();
void updateRegisters();
bool eventFilter(QObject* obj, QEvent* event) override;
void showEvent(QShowEvent* event) override;
void resizeEvent(QResizeEvent* event) override;
void keyPressEvent(QKeyEvent* event);
};

View file

@ -0,0 +1,28 @@
#pragma once
#include <QtWidgets>
class DisabledWidgetOverlay : public QWidget {
Q_OBJECT
public:
DisabledWidgetOverlay(QWidget *parent = nullptr, QString overlayText = tr("This widget is disabled")) : text(overlayText), QWidget(parent) {
setVisible(false);
}
private:
QString text;
void paintEvent(QPaintEvent *) override {
QPainter painter = QPainter(this);
painter.fillRect(rect(), QColor(60, 60, 60, 128));
painter.setPen(Qt::gray);
QFont font = painter.font();
font.setBold(true);
font.setPointSize(18);
painter.setFont(font);
painter.drawText(rect(), Qt::AlignCenter, text);
}
};

View file

@ -17,6 +17,7 @@
#include "panda_qt/about_window.hpp"
#include "panda_qt/cheats_window.hpp"
#include "panda_qt/config_window.hpp"
#include "panda_qt/cpu_debugger.hpp"
#include "panda_qt/patch_window.hpp"
#include "panda_qt/screen.hpp"
#include "panda_qt/shader_editor.hpp"
@ -110,6 +111,7 @@ class MainWindow : public QMainWindow {
TextEditorWindow* luaEditor;
PatchWindow* patchWindow;
ShaderEditorWindow* shaderEditor;
CPUDebugger* cpuDebugger;
ThreadDebugger* threadDebugger;
// We use SDL's game controller API since it's the sanest API that supports as many controllers as possible