mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Parser and Assembler implementations
This commit is contained in:
81
Source/Core/DolphinQt/Debugger/AssemblyEditor.h
Normal file
81
Source/Core/DolphinQt/Debugger/AssemblyEditor.h
Normal file
@ -0,0 +1,81 @@
|
||||
// Copyright 2023 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QPlainTextEdit>
|
||||
#include <QTextBlock>
|
||||
|
||||
class QWidget;
|
||||
class QPaintEvent;
|
||||
class QResizeEvent;
|
||||
class QRect;
|
||||
class QWheelEvent;
|
||||
class GekkoSyntaxHighlight;
|
||||
|
||||
class AsmEditor : public QPlainTextEdit
|
||||
{
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
AsmEditor(const QString& file_path, int editor_num, bool dark_scheme, QWidget* parent = nullptr);
|
||||
void LineNumberAreaPaintEvent(QPaintEvent* event);
|
||||
int LineNumberAreaWidth();
|
||||
const QString& Path() const { return m_path; }
|
||||
const QString& FileName() const { return m_filename; }
|
||||
const QString& EditorTitle() const { return m_title_ambiguous ? Path() : FileName(); }
|
||||
const QString& BaseAddress() const { return m_base_address; }
|
||||
void SetBaseAddress(const QString& ba);
|
||||
void SetAmbiguous(bool b) { m_title_ambiguous = b; }
|
||||
int EditorNum() const { return m_editor_num; }
|
||||
bool LoadFromPath();
|
||||
bool IsDirty() const { return m_dirty; }
|
||||
bool IsAmbiguous() const { return m_title_ambiguous; }
|
||||
bool PathsMatch(const QString& path) const;
|
||||
void Zoom(int amount);
|
||||
|
||||
public slots:
|
||||
bool SaveFile(const QString& save_path);
|
||||
|
||||
signals:
|
||||
void PathChanged();
|
||||
void DirtyChanged();
|
||||
void ZoomRequested(int amount);
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent* event) override;
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
bool event(QEvent* e) override;
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
void wheelEvent(QWheelEvent* event) override;
|
||||
|
||||
private:
|
||||
void UpdateLineNumberAreaWidth(int new_block_count);
|
||||
void HighlightCurrentLine();
|
||||
void UpdateLineNumberArea(const QRect& rect, int dy);
|
||||
int CharWidth() const;
|
||||
|
||||
class LineNumberArea : public QWidget
|
||||
{
|
||||
public:
|
||||
LineNumberArea(AsmEditor* editor) : QWidget(editor), asm_editor(editor) {}
|
||||
QSize sizeHint() const override;
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
|
||||
private:
|
||||
AsmEditor* asm_editor;
|
||||
};
|
||||
|
||||
QWidget* m_line_number_area;
|
||||
GekkoSyntaxHighlight* m_highlighter;
|
||||
QString m_path;
|
||||
QString m_filename;
|
||||
QString m_base_address;
|
||||
const int m_editor_num;
|
||||
bool m_dirty;
|
||||
QTextBlock m_last_block;
|
||||
bool m_title_ambiguous;
|
||||
bool m_dark_scheme;
|
||||
};
|
Reference in New Issue
Block a user