diff --git a/Windows/Debugger/CtrlDisAsmView.cpp b/Windows/Debugger/CtrlDisAsmView.cpp index c274a9ef3c..1097b65ab6 100644 --- a/Windows/Debugger/CtrlDisAsmView.cpp +++ b/Windows/Debugger/CtrlDisAsmView.cpp @@ -80,6 +80,7 @@ LRESULT CALLBACK CtrlDisAsmView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPA ccp->onVScroll(wParam,lParam); break; case WM_MOUSEWHEEL: + ccp->dontRedraw = false; if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) { ccp->scrollWindow(-3); @@ -92,6 +93,9 @@ LRESULT CALLBACK CtrlDisAsmView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPA case WM_KEYDOWN: ccp->onKeyDown(wParam,lParam); return 0; + case WM_CHAR: + ccp->onChar(wParam,lParam); + return 0; case WM_SYSKEYDOWN: ccp->onKeyDown(wParam,lParam); return 0; // return a value so that windows doesn't execute the standard syskey action @@ -161,6 +165,7 @@ CtrlDisAsmView::CtrlDisAsmView(HWND _wnd) hasFocus = false; controlHeld = false; dontRedraw = false; + keyTaken = false; matchAddress = -1; searching = false; @@ -295,7 +300,7 @@ void CtrlDisAsmView::assembleOpcode(u32 address, std::string defaultText) return; } - bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,"Assemble opcode",(char*)defaultText.c_str(),op); + bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,"Assemble opcode",(char*)defaultText.c_str(),op,false); if (result == false) return; result = MIPSAsm::MipsAssembleOpcode(op,debugger,address,encoded); @@ -511,10 +516,21 @@ void CtrlDisAsmView::followBranch() } } +void CtrlDisAsmView::onChar(WPARAM wParam, LPARAM lParam) +{ + if (keyTaken) return; + + char str[2]; + str[0] = wParam; + str[1] = 0; + assembleOpcode(curAddress,str); +} void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam) { + dontRedraw = false; u32 windowEnd = windowStart+visibleRows*instructionSize; + keyTaken = true; if (controlHeld) { @@ -594,6 +610,7 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam) debugger->toggleBreakpoint(curAddress); break; default: + keyTaken = false; return; } } @@ -663,6 +680,7 @@ void CtrlDisAsmView::toggleBreakpoint() void CtrlDisAsmView::onMouseDown(WPARAM wParam, LPARAM lParam, int button) { + dontRedraw = false; int x = LOWORD(lParam); int y = HIWORD(lParam); diff --git a/Windows/Debugger/CtrlDisAsmView.h b/Windows/Debugger/CtrlDisAsmView.h index bf1ce6afb1..aefbc9eb5f 100644 --- a/Windows/Debugger/CtrlDisAsmView.h +++ b/Windows/Debugger/CtrlDisAsmView.h @@ -68,6 +68,7 @@ class CtrlDisAsmView int matchAddress; bool searching; bool dontRedraw; + bool keyTaken; void assembleOpcode(u32 address, std::string defaultText); void disassembleToFile(); @@ -85,6 +86,7 @@ public: static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); static CtrlDisAsmView * getFrom(HWND wnd); + void onChar(WPARAM wParam, LPARAM lParam); void onPaint(WPARAM wParam, LPARAM lParam); void onVScroll(WPARAM wParam, LPARAM lParam); void onKeyDown(WPARAM wParam, LPARAM lParam); diff --git a/Windows/InputBox.cpp b/Windows/InputBox.cpp index 470474accd..ae45706859 100644 --- a/Windows/InputBox.cpp +++ b/Windows/InputBox.cpp @@ -5,6 +5,7 @@ static TCHAR textBoxContents[256]; static TCHAR out[256]; static TCHAR windowTitle[256]; +static bool defaultSelected; static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { @@ -12,6 +13,7 @@ static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPA case WM_INITDIALOG: SetWindowText(GetDlgItem(hDlg,IDC_INPUTBOX),textBoxContents); SetWindowText(hDlg, windowTitle); + if (defaultSelected == false) PostMessage(GetDlgItem(hDlg,IDC_INPUTBOX),EM_SETSEL,-1,-1); return TRUE; case WM_COMMAND: switch (wParam) @@ -35,13 +37,19 @@ void InputBoxFunc() } -bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue) +bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, bool selected) { + defaultSelected = selected; if (defaultvalue && strlen(defaultvalue)<255) strcpy(textBoxContents,defaultvalue); else strcpy(textBoxContents,""); + if (title != NULL) + strcpy(windowTitle,title); + else + strcpy(windowTitle,""); + if (IDOK==DialogBox(hInst,(LPCSTR)IDD_INPUTBOX,hParent,InputBoxFunc)) { strcpy(outvalue,out); @@ -54,6 +62,7 @@ bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defa bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, size_t outlength) { const char *defaultTitle = "Input value"; + defaultSelected = true; if (defaultvalue && strlen(defaultvalue)<255) strcpy(textBoxContents,defaultvalue); diff --git a/Windows/InputBox.h b/Windows/InputBox.h index 687d683b13..1591cec56c 100644 --- a/Windows/InputBox.h +++ b/Windows/InputBox.h @@ -3,6 +3,6 @@ #include "Globals.h" #include "Common/CommonWindows.h" -bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue); +bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, bool selected = true); bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, size_t outlength); bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, TCHAR *title, u32 defaultvalue, u32 &outvalue);