From 537ab396e7c47a04a621a158643afd1e55c617bb Mon Sep 17 00:00:00 2001 From: Kingcom Date: Fri, 16 Aug 2013 14:19:04 +0200 Subject: [PATCH] Change the bottom control of the disassembly with Ctrl+1-4 --- Windows/Debugger/Debugger_Disasm.cpp | 116 ++++++++++++++++++--------- Windows/Debugger/Debugger_Disasm.h | 5 ++ Windows/ppsspp.rc | Bin 40416 -> 41102 bytes Windows/resource.h | Bin 22042 -> 22402 bytes 4 files changed, 81 insertions(+), 40 deletions(-) diff --git a/Windows/Debugger/Debugger_Disasm.cpp b/Windows/Debugger/Debugger_Disasm.cpp index 3eb8a101c5..f4fde27c93 100644 --- a/Windows/Debugger/Debugger_Disasm.cpp +++ b/Windows/Debugger/Debugger_Disasm.cpp @@ -145,11 +145,8 @@ CDisasm::CDisasm(HINSTANCE _hInstance, HWND _hParent, DebugInterface *_cpu) : Di stackTraceView->setDialogItem(GetDlgItem(m_hDlg,IDC_STACKFRAMES)); stackTraceView->loadStackTrace(); - // init memory/breakpoint "tab" - ShowWindow(GetDlgItem(m_hDlg, IDC_BREAKPOINTLIST), SW_HIDE); - ShowWindow(GetDlgItem(m_hDlg, IDC_DEBUGMEMVIEW), SW_NORMAL); - ShowWindow(GetDlgItem(m_hDlg, IDC_THREADLIST), SW_HIDE); - ShowWindow(GetDlgItem(m_hDlg, IDC_STACKFRAMES), SW_HIDE); + // init bottom "tab" + changeSubWindow(SUBWIN_FIRST); // init status bar statusBarWnd = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", m_hDlg, IDC_DISASMSTATUSBAR); @@ -173,6 +170,62 @@ CDisasm::~CDisasm() } +void CDisasm::changeSubWindow(SubWindowType type) +{ + HWND bp = GetDlgItem(m_hDlg, IDC_BREAKPOINTLIST); + HWND mem = GetDlgItem(m_hDlg, IDC_DEBUGMEMVIEW); + HWND threads = GetDlgItem(m_hDlg, IDC_THREADLIST); + HWND stackFrames = GetDlgItem(m_hDlg, IDC_STACKFRAMES); + + // determine if any of the windows are focused, if not + // then leave the focus unchanged + HWND focus = GetFocus(); + bool changeFocus = (focus == bp || focus == mem || focus == threads || focus == stackFrames); + + if (type == SUBWIN_FIRST) + { + type = SUBWIN_MEM; + } else if (type == SUBWIN_NEXT) + { + if (IsWindowVisible(mem)) + { + type = SUBWIN_BREAKPOINT; + } else if (IsWindowVisible(bp)) + { + type = SUBWIN_THREADS; + } else if (IsWindowVisible(threads)) + { + type = SUBWIN_STACKFRAMES; + } else { + type = SUBWIN_MEM; + } + } + + ShowWindow(mem,type == SUBWIN_MEM ? SW_NORMAL : SW_HIDE); + ShowWindow(bp,type == SUBWIN_BREAKPOINT ? SW_NORMAL : SW_HIDE); + ShowWindow(threads,type == SUBWIN_THREADS ? SW_NORMAL : SW_HIDE); + ShowWindow(stackFrames,type == SUBWIN_STACKFRAMES ? SW_NORMAL : SW_HIDE); + + if (changeFocus) + { + switch (type) + { + case SUBWIN_MEM: + SetFocus(mem); + break; + case SUBWIN_BREAKPOINT: + SetFocus(bp); + break; + case SUBWIN_THREADS: + SetFocus(threads); + break; + case SUBWIN_STACKFRAMES: + SetFocus(stackFrames); + break; + } + } +} + BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) { //if (!m_hDlg) return FALSE; @@ -228,6 +281,23 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) case ID_TOGGLE_PAUSE: SendMessage(MainWindow::GetHWND(),WM_COMMAND,ID_TOGGLE_PAUSE,0); break; + + case ID_DEBUG_DISPLAYMEMVIEW: + changeSubWindow(SUBWIN_MEM); + break; + + case ID_DEBUG_DISPLAYBREAKPOINTLIST: + changeSubWindow(SUBWIN_BREAKPOINT); + break; + + case ID_DEBUG_DISPLAYTHREADLIST: + changeSubWindow(SUBWIN_THREADS); + break; + + case ID_DEBUG_DISPLAYSTACKFRAMELIST: + changeSubWindow(SUBWIN_STACKFRAMES); + break; + case IDC_SHOWVFPU: vfpudlg->Show(true); break; @@ -515,41 +585,7 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) return TRUE; case WM_DEB_TABPRESSED: - { - HWND bp = GetDlgItem(m_hDlg, IDC_BREAKPOINTLIST); - HWND mem = GetDlgItem(m_hDlg, IDC_DEBUGMEMVIEW); - HWND threads = GetDlgItem(m_hDlg, IDC_THREADLIST); - HWND stackFrames = GetDlgItem(m_hDlg, IDC_STACKFRAMES); - - if (IsWindowVisible(bp)) - { - ShowWindow(mem,SW_HIDE); - ShowWindow(bp,SW_HIDE); - ShowWindow(threads,SW_NORMAL); - ShowWindow(stackFrames,SW_HIDE); - SetFocus(threads); - } else if (IsWindowVisible(threads)) - { - ShowWindow(mem,SW_HIDE); - ShowWindow(bp,SW_HIDE); - ShowWindow(threads,SW_HIDE); - ShowWindow(stackFrames,SW_NORMAL); - SetFocus(stackFrames); - } else if (IsWindowVisible(stackFrames)) - { - ShowWindow(mem,SW_NORMAL); - ShowWindow(bp,SW_HIDE); - ShowWindow(threads,SW_HIDE); - ShowWindow(stackFrames,SW_HIDE); - SetFocus(mem); - } else { - ShowWindow(mem,SW_HIDE); - ShowWindow(bp,SW_NORMAL); - ShowWindow(threads,SW_HIDE); - ShowWindow(stackFrames,SW_HIDE); - SetFocus(bp); - } - } + changeSubWindow(SUBWIN_NEXT); break; case WM_DEB_SETSTATUSBARTEXT: SendMessage(statusBarWnd,WM_SETTEXT,0,lParam); diff --git a/Windows/Debugger/Debugger_Disasm.h b/Windows/Debugger/Debugger_Disasm.h index db4dd8f5eb..c8024cbf97 100644 --- a/Windows/Debugger/Debugger_Disasm.h +++ b/Windows/Debugger/Debugger_Disasm.h @@ -18,6 +18,10 @@ class CDisasm : public Dialog { private: + typedef enum { SUBWIN_MEM, SUBWIN_BREAKPOINT, SUBWIN_THREADS, SUBWIN_STACKFRAMES, + // pseudo controls + SUBWIN_NEXT, SUBWIN_FIRST } SubWindowType; + RECT defaultRect; RECT defaultBreakpointRect; RECT regRect; @@ -38,6 +42,7 @@ private: void UpdateSize(WORD width, WORD height); void SavePosition(); void updateThreadLabel(bool clear); + void changeSubWindow(SubWindowType type); public: int index; //helper diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index 4b8e2deb4e48d4017b5e3556ef9bb41dcf08d60b..9812544a31d481c83b06fdda9a4c394d5a9120bf 100644 GIT binary patch delta 198 zcmaE`o2l<0(*_6O$r}7>le4&lcmo)G7#tZQ8GIRB8GI)n>=ziS%6(^^9135E&#T3FhT$T delta 22 ecmeA>$n;=0(*_6O$@};@CO;7M*lZ^j&;W9ZV=Q)D!n+=xZSQD0QhhXG_m2!jHH0)r8Q34_7pMt#}I0!$p6`^0*Z}}9IR-ia