Right click menu for CtrlDisplayListView

This commit is contained in:
Kingcom committed 2013-10-02 00:41:37 +02:00
1 parent a176fb85d3
commit f388697f88
6 files changed
+107 -4

No files matched your search

+78 -1
View File
@@ -1,10 +1,14 @@
#include "Windows/GEDebugger/CtrlDisplayListView.h"
#include "Core/Config.h"
#include "Windows/GEDebugger/GEDebugger.h"
#include "Windows/Main.h"
#include <algorithm>
const PTCHAR CtrlDisplayListView::windowClass = _T("CtrlDisplayListView");
const int POPUP_SUBMENU_ID_DISPLAYLISTVIEW = 8;
extern HMENU g_hPopupMenus;
void CtrlDisplayListView::registerClass()
{
WNDCLASSEX wndClass;
@@ -99,6 +103,15 @@ LRESULT CALLBACK CtrlDisplayListView::wndProc(HWND hwnd, UINT msg, WPARAM wParam
case WM_LBUTTONDOWN:
win->onMouseDown(wParam,lParam,1);
break;
case WM_RBUTTONDOWN:
win->onMouseDown(wParam,lParam,2);
break;
case WM_LBUTTONUP:
win->onMouseUp(wParam,lParam,1);
break;
case WM_RBUTTONUP:
win->onMouseUp(wParam,lParam,2);
break;
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
win->onKeyDown(wParam,lParam);
@@ -261,6 +274,71 @@ void CtrlDisplayListView::onMouseDown(WPARAM wParam, LPARAM lParam, int button)
redraw();
}
void CtrlDisplayListView::onMouseUp(WPARAM wParam, LPARAM lParam, int button)
{
if (button == 2)
{
//popup menu?
POINT pt;
GetCursorPos(&pt);
switch(TrackPopupMenuEx(GetSubMenu(g_hPopupMenus,POPUP_SUBMENU_ID_DISPLAYLISTVIEW),TPM_RIGHTBUTTON|TPM_RETURNCMD,pt.x,pt.y,wnd,0))
{
case ID_DISASM_GOTOINMEMORYVIEW:
for (int i=0; i<numCPUs; i++)
if (memoryWindow[i])
memoryWindow[i]->Goto(curAddress);
break;
case ID_DISASM_TOGGLEBREAKPOINT:
toggleBreakpoint();
redraw();
break;
case ID_DISASM_COPYINSTRUCTIONDISASM:
{
GPUDebugOp op = gpuDebug->DissassembleOp(curAddress);
W32Util::CopyTextToClipboard(wnd, op.desc.c_str());
}
break;
case ID_DISASM_COPYADDRESS:
{
char temp[16];
sprintf(temp,"%08X",curAddress);
W32Util::CopyTextToClipboard(wnd, temp);
}
break;
case ID_DISASM_SETPCTOHERE:
{
gpuDebug->ResetListPC(list.id,curAddress);
list.pc = curAddress;
redraw();
}
break;
case IDC_DEBUG_LIST_SETSTALL:
{
gpuDebug->ResetListStall(list.id,curAddress);
list.stall = curAddress;
redraw();
}
break;
case ID_DISASM_COPYINSTRUCTIONHEX:
{
char temp[16];
sprintf(temp,"%08X",Memory::ReadUnchecked_U32(curAddress));
W32Util::CopyTextToClipboard(wnd, temp);
}
break;
case ID_DISASM_RUNTOHERE:
{
SendMessage(GetParent(wnd),WM_GEDBG_RUNTOWPARAM,curAddress,0);
redraw();
}
break;
}
return;
}
redraw();
}
void CtrlDisplayListView::onVScroll(WPARAM wParam, LPARAM lParam)
{
switch (wParam & 0xFFFF)
@@ -329,7 +407,6 @@ void CtrlDisplayListView::onKeyDown(WPARAM wParam, LPARAM lParam)
redraw();
}
void CtrlDisplayListView::scrollAddressIntoView()
{
u32 windowEnd = windowStart + visibleRows * instructionSize;
+1
View File
@@ -38,6 +38,7 @@ public:
void onPaint(WPARAM wParam, LPARAM lParam);
void onKeyDown(WPARAM wParam, LPARAM lParam);
void onMouseDown(WPARAM wParam, LPARAM lParam, int button);
void onMouseUp(WPARAM wParam, LPARAM lParam, int button);
void onVScroll(WPARAM wParam, LPARAM lParam);
void redraw();
+11 -1
View File
@@ -53,6 +53,7 @@ static condition_variable actionWait;
static recursive_mutex breaksLock;
static std::vector<bool> breakCmds;
static std::set<u32> breakPCs;
static u32 tempBreakpoint = -1;
static std::set<u32> breakTextures;
static bool breakNextOp = false;
static bool breakNextDraw = false;
@@ -355,6 +356,7 @@ BOOL CGEDebugger::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
case WM_GEDBG_BREAK_CMD:
{
u32 pc = (u32)wParam;
tempBreakpoint = -1;
auto info = gpuDebug->DissassembleOp(pc);
NOTICE_LOG(COMMON, "Waiting at %08x, %s", pc, info.desc.c_str());
UpdatePreviews();
@@ -389,6 +391,14 @@ BOOL CGEDebugger::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
}
break;
case WM_GEDBG_RUNTOWPARAM:
{
lock_guard guard(breaksLock);
u32 pc = (u32)wParam;
tempBreakpoint = pc;
SendMessage(m_hDlg,WM_COMMAND,IDC_GEDBG_RESUME,0);
}
break;
}
return FALSE;
@@ -418,7 +428,7 @@ void WindowsHost::GPUNotifyCommand(u32 pc) {
u32 op = Memory::ReadUnchecked_U32(pc);
u8 cmd = op >> 24;
if (breakNextOp || CGEDebugger::IsOpOrTextureBreakPoint(op) || CGEDebugger::IsAddressBreakPoint(pc)) {
if (breakNextOp || CGEDebugger::IsOpOrTextureBreakPoint(op) || CGEDebugger::IsAddressBreakPoint(pc) || pc == tempBreakpoint) {
PauseWithMessage(WM_GEDBG_BREAK_CMD, (WPARAM) pc);
}
}
+2 -1
View File
@@ -28,7 +28,8 @@ enum {
WM_GEDBG_BREAK_CMD = WM_USER + 200,
WM_GEDBG_BREAK_DRAW,
WM_GEDBG_STEPDISPLAYLIST,
WM_GEDBG_TOGGLEPCBREAKPOINT
WM_GEDBG_TOGGLEPCBREAKPOINT,
WM_GEDBG_RUNTOWPARAM
};
class CtrlDisplayListView;
+13
View File
@@ -550,6 +550,19 @@ BEGIN
BEGIN
MENUITEM "Add New", ID_DISASM_ADDNEWBREAKPOINT
END
POPUP "displaylistview"
BEGIN
MENUITEM "Copy Address", ID_DISASM_COPYADDRESS
MENUITEM "Copy Instruction (Hex)", ID_DISASM_COPYINSTRUCTIONHEX
MENUITEM "Copy Instruction (Disasm)", ID_DISASM_COPYINSTRUCTIONDISASM
MENUITEM SEPARATOR
MENUITEM "Run to Cursor", ID_DISASM_RUNTOHERE
MENUITEM "Jump to Cursor", ID_DISASM_SETPCTOHERE
MENUITEM "Set Stall" IDC_DEBUG_LIST_SETSTALL
MENUITEM "Toggle Breakpoint", ID_DISASM_TOGGLEBREAKPOINT
MENUITEM SEPARATOR
MENUITEM "Go to in Memory View", ID_DISASM_GOTOINMEMORYVIEW
END
END
#endif // English (United States) resources
+2 -1
View File
@@ -284,6 +284,7 @@
#define IDC_DEBUG_BOTTOMTABS 40127
#define ID_DEBUG_HIDEBOTTOMTABS 40128
#define ID_DEBUG_TOGGLEBOTTOMTABTITLES 40129
#define IDC_DEBUG_LIST_SETSTALL 40130
// Dummy option to let the buffered rendering hotkey cycle through all the options.
#define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500
@@ -296,7 +297,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 254
#define _APS_NEXT_COMMAND_VALUE 40130
#define _APS_NEXT_COMMAND_VALUE 40131
#define _APS_NEXT_CONTROL_VALUE 1191
#define _APS_NEXT_SYMED_VALUE 101
#endif