#pragma once #include "Core/Debugger/DebugInterface.h" #include "Core/HLE/sceKernelThread.h" #include "Core/Debugger/Breakpoints.h" #include "Core/Debugger/SymbolMap.h" #include "Core/Debugger/Watch.h" #include "Core/MIPS/MIPSStackWalk.h" #include "Windows/W32Util/Misc.h" class CtrlThreadList: public GenericListControl { public: CtrlThreadList(HWND hwnd); void reloadThreads(); void showMenu(int itemIndex, const POINT &pt); const char* getCurrentThreadName(); protected: bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT &returnValue) override; void GetColumnText(wchar_t *dest, size_t destSize, int row, int col) override; int GetRowCount() override { return (int) threads.size(); } void OnDoubleClick(int itemIndex, int column) override; void OnRightClick(int itemIndex, int column, const POINT &point) override; private: std::vector threads; }; class CtrlDisAsmView; class CtrlBreakpointList: public GenericListControl { public: CtrlBreakpointList(HWND hwnd, MIPSDebugInterface* cpu, CtrlDisAsmView* disasm); void reloadBreakpoints(); protected: bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT &returnValue) override; void GetColumnText(wchar_t *dest, size_t destSize, int row, int col) override; int GetRowCount() override { return getTotalBreakpointCount(); } void OnDoubleClick(int itemIndex, int column) override; void OnRightClick(int itemIndex, int column, const POINT &point) override; void OnToggle(int item, bool newValue) override; private: std::vector displayedBreakPoints_; std::vector displayedMemChecks_; std::wstring breakpointText; MIPSDebugInterface* cpu; CtrlDisAsmView* disasm; void editBreakpoint(int itemIndex); void gotoBreakpointAddress(int itemIndex); void removeBreakpoint(int itemIndex); int getTotalBreakpointCount(); int getBreakpointIndex(int itemIndex, bool& isMemory); void showBreakpointMenu(int itemIndex, const POINT &pt); void toggleEnabled(int itemIndex); }; class CtrlStackTraceView: public GenericListControl { public: CtrlStackTraceView(HWND hwnd, DebugInterface* cpu, CtrlDisAsmView* disasm); void loadStackTrace(); protected: bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT &returnValue) override; void GetColumnText(wchar_t *dest, size_t destSize, int row, int col) override; int GetRowCount() override { return (int)frames.size(); } void OnDoubleClick(int itemIndex, int column) override; private: std::vector frames; DebugInterface* cpu; CtrlDisAsmView* disasm; }; class CtrlModuleList: public GenericListControl { public: CtrlModuleList(HWND hwnd, DebugInterface* cpu); void loadModules(); protected: bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT &returnValue) override; void GetColumnText(wchar_t *dest, size_t destSize, int row, int col) override; int GetRowCount() override { return (int)modules.size(); } void OnDoubleClick(int itemIndex, int column) override; private: std::vector modules; DebugInterface* cpu; }; class CtrlWatchList : public GenericListControl { public: CtrlWatchList(HWND hwnd, DebugInterface *cpu); void RefreshValues(); protected: bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT &returnValue) override; void GetColumnText(wchar_t *dest, size_t destSize, int row, int col) override; int GetRowCount() override { return (int)watches_.size(); } void OnRightClick(int itemIndex, int column, const POINT &point) override; bool ListenRowPrePaint() override { return true; } bool OnRowPrePaint(int row, LPNMLVCUSTOMDRAW msg) override; private: void AddWatch(); void EditWatch(int pos); void DeleteWatch(int pos); bool HasWatchChanged(int pos); std::vector watches_; DebugInterface *cpu_; };