Files
ppsspp/UI/ImDebugger/ImMemView.h
T
Henrik Rydgård 20a17a0e8d Reorganize DebugInterface etc a bit.
KernelThreadDebugInterface no longer has a useless copy of a MIPSDebugInterface.
2024-12-12 18:54:46 +01:00

121 lines
3.3 KiB
C++

#pragma once
#include <cstdint>
#include <vector>
#include "ext/imgui/imgui.h"
#include "Core/Debugger/DebugInterface.h"
#include "Core/Debugger/MemBlockInfo.h"
enum OffsetSpacing {
offsetSpace = 3, // the number of blank lines that should be left to make space for the offsets
offsetLine = 1, // the line on which the offsets should be written
};
enum CommonToggles {
On,
Off,
};
class ImMemView {
public:
ImMemView();
~ImMemView();
void setDebugger(MIPSDebugInterface *deb) {
debugger_ = deb;
}
MIPSDebugInterface *getDebugger() {
return debugger_;
}
std::vector<u32> searchString(const std::string &searchQuery);
void Draw(ImDrawList *drawList);
// void onVScroll(WPARAM wParam, LPARAM lParam);
// void onKeyDown(WPARAM wParam, LPARAM lParam);
void onChar(int c);
void onMouseDown(float x, float y, int button);
void onMouseUp(float x, float y, int button);
void onMouseMove(float x, float y, int button);
void gotoAddr(unsigned int addr);
void drawOffsetScale(ImDrawList *drawList);
void toggleOffsetScale(CommonToggles toggle);
void setHighlightType(MemBlockFlags flags);
const std::string &StatusMessage() const {
return statusMessage_;
}
private:
void ProcessKeyboardShortcuts(bool focused);
bool ParseSearchString(const std::string &query, bool asHex, std::vector<uint8_t> &data);
void updateStatusBarText();
void search(bool continueSearch);
enum class GotoMode {
RESET,
RESET_IF_OUTSIDE,
FROM_CUR,
EXTEND,
};
static GotoMode GotoModeFromModifiers(bool isRightClick);
void UpdateSelectRange(uint32_t target, GotoMode mode);
void GotoPoint(int x, int y, GotoMode mode);
void ScrollWindow(int lines, GotoMode mdoe);
void ScrollCursor(int bytes, GotoMode mdoe);
void PopupMenu();
static wchar_t szClassName[];
MIPSDebugInterface *debugger_ = nullptr;
MemBlockFlags highlightFlags_ = MemBlockFlags::ALLOC;
// Current cursor position.
uint32_t curAddress_ = 0x08800000;
// Selected range, which should always be around the cursor.
uint32_t selectRangeStart_ = 0;
uint32_t selectRangeEnd_ = 0;
// Last select reset position, for selecting ranges.
uint32_t lastSelectReset_ = 0;
// Address of the first displayed byte.
uint32_t windowStart_ = 0x08800000;
// Number of bytes displayed per row.
int rowSize_ = 16;
// Width of one monospace character (to maintain grid.)
int charWidth_ = 0;
// Height of one monospace character (to maintain grid.)
int charHeight_ = 0;
// Height of one row of bytes.
int rowHeight_ = 0;
// Y position of offset header (at top.)
int offsetPositionY_ = 0;
// X position of addresses (at left.)
int addressStartX_ = 0;
// X position of hex display.
int hexStartX_ = 0;
// X position of text display.
int asciiStartX_ = 0;
// Whether cursor is within text display or hex display.
bool asciiSelected_ = false;
// Which nibble is selected, if in hex display. 0 means leftmost, i.e. most significant.
int selectedNibble_ = 0;
bool displayOffsetScale_ = false;
// Number of rows visible as of last redraw.
int visibleRows_ = 0;
// Last used search query, used when continuing a search.
std::string searchQuery_;
// Address of last match when continuing search.
uint32_t matchAddress_ = 0xFFFFFFFF;
// Whether a search is in progress.
bool searching_ = false;
std::string statusMessage_;
};