diff --git a/src/drivers/win/debugger.cpp b/src/drivers/win/debugger.cpp index ea5d92fe..c38feaed 100644 --- a/src/drivers/win/debugger.cpp +++ b/src/drivers/win/debugger.cpp @@ -70,7 +70,7 @@ static HMENU hDisasmcontext; //Handle to context menu static HMENU hDisasmcontextsub; //Handle to context sub menu WNDPROC IDC_DEBUGGER_DISASSEMBLY_oldWndProc = 0; -static HFONT hFont; +// static HFONT hFont; static SCROLLINFO si; bool debuggerAutoload = false; @@ -276,8 +276,12 @@ BOOL CALLBACK AddbpCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: CenterWindow(hwndDlg); - SendDlgItemMessage(hwndDlg,IDC_ADDBP_ADDR_START,EM_SETLIMITTEXT,4,0); - SendDlgItemMessage(hwndDlg,IDC_ADDBP_ADDR_END,EM_SETLIMITTEXT,4,0); + SendDlgItemMessage(hwndDlg, IDC_ADDBP_ADDR_START, EM_SETLIMITTEXT, 4, 0); + SendDlgItemMessage(hwndDlg, IDC_ADDBP_ADDR_END, EM_SETLIMITTEXT, 4, 0); + + DefaultEditCtrlProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_ADDBP_ADDR_START), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_ADDBP_ADDR_END), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + if (WP_edit >= 0) { SetWindowText(hwndDlg,"Edit Breakpoint..."); @@ -359,7 +363,7 @@ BOOL CALLBACK AddbpCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) int tmp = NewBreakWindows(hwndDlg,WP_edit,(BOOL)(watchpoint[WP_edit].flags&WP_E)); if (tmp == 2 || tmp == INVALID_BREAKPOINT_CONDITION) { - MessageBox(hwndDlg, "Invalid breakpoint condition", "Error", MB_OK); + MessageBox(hwndDlg, "Invalid breakpoint condition", "Error", MB_OK | MB_ICONERROR); break; } EndDialog(hwndDlg,1); @@ -1820,6 +1824,14 @@ BOOL CALLBACK DebuggerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPara SendDlgItemMessage(hwndDlg,IDC_DEBUGGER_VAL_PPU,EM_SETLIMITTEXT,4,0); SendDlgItemMessage(hwndDlg,IDC_DEBUGGER_VAL_SPR,EM_SETLIMITTEXT,2,0); + // limit input + DefaultEditCtrlProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_DEBUGGER_VAL_PCSEEK), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_DEBUGGER_VAL_PC), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_DEBUGGER_VAL_A), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_DEBUGGER_VAL_X), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_DEBUGGER_VAL_Y), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_DEBUGGER_BOOKMARK), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + //I'm lazy, disable the controls which I can't mess with right now SendDlgItemMessage(hwndDlg,IDC_DEBUGGER_VAL_PPU,EM_SETREADONLY,TRUE,0); SendDlgItemMessage(hwndDlg,IDC_DEBUGGER_VAL_SPR,EM_SETREADONLY,TRUE,0); diff --git a/src/drivers/win/debugger.h b/src/drivers/win/debugger.h index 3f07f5aa..63e9722d 100644 --- a/src/drivers/win/debugger.h +++ b/src/drivers/win/debugger.h @@ -69,5 +69,7 @@ public: } *debugSystem; +// extern WNDPROC DefaultEditCtrlProc; +// extern LRESULT APIENTRY FilterEditCtrlProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP); #endif diff --git a/src/drivers/win/header_editor.cpp b/src/drivers/win/header_editor.cpp index 3ff4f14a..14c95733 100644 --- a/src/drivers/win/header_editor.cpp +++ b/src/drivers/win/header_editor.cpp @@ -307,10 +307,6 @@ HWND InitHeaderEditDialog(HWND hwnd, iNES_HEADER* header) SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_CHRRAM_COMBO), IDC_CHRRAM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc); // CHR NVRAM SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_CHRNVRAM_COMBO), IDC_CHRNVRAM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc); - // Sub Mapper# - SetWindowLong(GetDlgItem(hwnd, IDC_SUBMAPPER_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc); - // Misc. ROM(s) - SetWindowLong(GetDlgItem(hwnd, IDC_MISCELLANEOUS_ROMS_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc); ToggleINES20(hwnd, IsDlgButtonChecked(hwnd, IDC_RADIO_VERSION_INES20) == BST_CHECKED); diff --git a/src/drivers/win/memwatch.cpp b/src/drivers/win/memwatch.cpp index 2ff0bf28..34f0216b 100644 --- a/src/drivers/win/memwatch.cpp +++ b/src/drivers/win/memwatch.cpp @@ -202,29 +202,29 @@ void MemwAddRecentFile(const char *filename) } static const int MW_ADDR[] = { - MW_ADDR00,MW_ADDR01,MW_ADDR02,MW_ADDR03, - MW_ADDR04,MW_ADDR05,MW_ADDR06,MW_ADDR07, - MW_ADDR08,MW_ADDR09,MW_ADDR10,MW_ADDR11, - MW_ADDR12,MW_ADDR13,MW_ADDR14,MW_ADDR15, - MW_ADDR16,MW_ADDR17,MW_ADDR18,MW_ADDR19, - MW_ADDR20,MW_ADDR21,MW_ADDR22,MW_ADDR23 + MW_ADDR00, MW_ADDR01, MW_ADDR02, MW_ADDR03, + MW_ADDR04, MW_ADDR05, MW_ADDR06, MW_ADDR07, + MW_ADDR08, MW_ADDR09, MW_ADDR10, MW_ADDR11, + MW_ADDR12, MW_ADDR13, MW_ADDR14, MW_ADDR15, + MW_ADDR16, MW_ADDR17, MW_ADDR18, MW_ADDR19, + MW_ADDR20, MW_ADDR21, MW_ADDR22, MW_ADDR23 }; static const int MW_NAME[] = { - MW_NAME00,MW_NAME01,MW_NAME02,MW_NAME03, - MW_NAME04,MW_NAME05,MW_NAME06,MW_NAME07, - MW_NAME08,MW_NAME09,MW_NAME10,MW_NAME11, - MW_NAME12,MW_NAME13,MW_NAME14,MW_NAME15, - MW_NAME16,MW_NAME17,MW_NAME18,MW_NAME19, - MW_NAME20,MW_NAME21,MW_NAME22,MW_NAME23 + MW_NAME00, MW_NAME01, MW_NAME02, MW_NAME03, + MW_NAME04, MW_NAME05, MW_NAME06, MW_NAME07, + MW_NAME08, MW_NAME09, MW_NAME10, MW_NAME11, + MW_NAME12, MW_NAME13, MW_NAME14, MW_NAME15, + MW_NAME16, MW_NAME17, MW_NAME18, MW_NAME19, + MW_NAME20, MW_NAME21, MW_NAME22, MW_NAME23 }; static const int MW_VAL[] = { - MW_VAL00,MW_VAL01,MW_VAL02,MW_VAL03, - MW_VAL04,MW_VAL05,MW_VAL06,MW_VAL07, - MW_VAL08,MW_VAL09,MW_VAL10,MW_VAL11, - MW_VAL12,MW_VAL13,MW_VAL14,MW_VAL15, - MW_VAL16,MW_VAL17,MW_VAL18,MW_VAL19, - MW_VAL20,MW_VAL21,MW_VAL22,MW_VAL23 + MW_VAL00, MW_VAL01, MW_VAL02, MW_VAL03, + MW_VAL04, MW_VAL05, MW_VAL06, MW_VAL07, + MW_VAL08, MW_VAL09, MW_VAL10, MW_VAL11, + MW_VAL12, MW_VAL13, MW_VAL14, MW_VAL15, + MW_VAL16, MW_VAL17, MW_VAL18, MW_VAL19, + MW_VAL20, MW_VAL21, MW_VAL22, MW_VAL23 }; static const int MW_RESET[] = { MEMW_EDIT00RESET, MEMW_EDIT01RESET, @@ -240,7 +240,7 @@ static const int MW_RMADDR[] = { }; static const int MW_EDITFORMULA[] = { MEMW_EDIT00FORMULA, MEMW_EDIT01FORMULA, - MEMW_EDIT02FORMULA,MEMW_EDIT03FORMULA + MEMW_EDIT02FORMULA, MEMW_EDIT03FORMULA }; diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index faffec4c..643bc61c 100644 --- a/src/drivers/win/res.rc +++ b/src/drivers/win/res.rc @@ -707,7 +707,7 @@ END DIRCONFIG DIALOGEX 63, 7, 305, 255 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Directories Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "OK",CLOSE_BUTTON,175,230,56,14 PUSHBUTTON "Cancel",BTN_CANCEL,239,230,56,14 @@ -752,7 +752,7 @@ END DWBDIALOG DIALOG 33, 99, 250, 56 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "DWB!" -FONT 9, "MS Shell Dlg" +FONT 8, "MS Shell Dlg" BEGIN LTEXT "Text",LBL_DWBDIALOG_TEXT,7,9,237,8 PUSHBUTTON "Clear",BTN_CLEAR,64,32,50,14 @@ -762,7 +762,7 @@ END FKBDIALOG DIALOG 13, 72, 402, 194 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Family Keyboard Configuration" -FONT 9, "MS Shell Dlg" +FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,320,170,56,14 LTEXT "Remember to push the ""Scroll Lock"" key during emulation to enable Family Keyboard input.",65503,18,6,370,12 @@ -844,7 +844,7 @@ END GAMEPADDIALOG DIALOGEX 4, 109, 243, 220 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Gamepad Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,173,196,56,14 GROUPBOX "",GRP_GAMEPAD1,4,8,232,82,WS_GROUP @@ -874,7 +874,7 @@ END GUICONFIG DIALOGEX 16, 123, 184, 158 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "GUI Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,65,136,56,14 CONTROL "Load ""File Open"" dialog when FCEUX starts.",CB_LOAD_FILE_OPEN, @@ -896,7 +896,7 @@ END INPUTCONFIG DIALOGEX 122, 105, 349, 199 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Input Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Port 1:",102,20,31,152,50 COMBOBOX COMBO_PAD1,27,57,71,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -944,7 +944,7 @@ END MAHJONGDIALOG DIALOG 65510, 106, 340, 110 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "mahjong" -FONT 9, "MS Shell Dlg" +FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,277,91,56,14 GROUPBOX "",321,8,8,324,73,WS_GROUP @@ -974,7 +974,7 @@ END MAPINPUT DIALOGEX 0, 0, 318, 294 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hotkeys" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "OK",IDOK,261,274,50,14 PUSHBUTTON "Cancel",BTN_CANCEL,205,274,50,14 @@ -987,7 +987,7 @@ END MESSAGELOG DIALOGEX 33, 38, 197, 229 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Message Log" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT LBL_LOG_TEXT,1,1,194,208,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL PUSHBUTTON "Clear",CLEAR_LOG,94,211,47,14 @@ -997,7 +997,7 @@ END NETMOO DIALOGEX 44, 59, 365, 209 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Network Play" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT IDC_NETMOO_CMD_INPUT,10,137,347,12,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_OEMCONVERT | ES_WANTRETURN EDITTEXT IDC_NETMOO_STATUS,10,8,347,130,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL @@ -1019,7 +1019,7 @@ END NEWINPUT DIALOGEX 0, 0, 186, 66 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Enter New Input" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CTEXT "Press a key",LBL_KEY_COMBO,31,14,122,20 PUSHBUTTON "Clear",BTN_CLEAR,95,45,50,14 @@ -1029,7 +1029,7 @@ END PALCONFIG DIALOGEX 16, 81, 228, 217 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Palette Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",BUTTON_CLOSE,162,195,56,14 GROUPBOX "NES Palette",302,10,8,102,81,WS_GROUP @@ -1061,7 +1061,7 @@ END POWERPADDIALOG DIALOG 30, 123, 131, 119 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Power Pad Configuration" -FONT 9, "MS Shell Dlg" +FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,34,95,56,14 GROUPBOX "",312,8,10,114,74,WS_GROUP @@ -1082,7 +1082,7 @@ END QUIZKINGDIALOG DIALOG 30, 123, 160, 74 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "quiz king" -FONT 9, "MS Shell Dlg" +FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,54,56,56,14 GROUPBOX "Buzzers",312,8,7,144,39,WS_GROUP @@ -1097,7 +1097,7 @@ END SOUNDCONFIG DIALOGEX 8, 95, 334, 282 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sound Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,280,260,44,14 GROUPBOX "Output/Output Format:",302,10,9,131,93,WS_GROUP @@ -1140,7 +1140,7 @@ END SUBORKBDIALOG DIALOGEX 13, 72, 478, 171 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Subor Keyboard Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",1,405,151,56,14 LTEXT "Remember to push the ""Scroll Lock"" key during emulation to enable Keyboard input.",-1,18,6,370,12 @@ -1249,26 +1249,26 @@ BEGIN END TIMINGCONFIG DIALOGEX 23, 157, 203, 110 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Timing Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",1,137,87,56,14 CONTROL "Disable speed throttling used when sound is disabled.",CB_DISABLE_SPEED_THROTTLING, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,8,183,12 CONTROL "Set high-priority thread.",CB_SET_HIGH_PRIORITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,24,102,12 CONTROL "Overclocking (old PPU only).",CB_OVERCLOCKING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,41,101,10 - EDITTEXT IDC_EXTRA_SCANLINES,104,55,84,14,ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_EXTRA_SCANLINES,104,55,84,14,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED LTEXT "Post-render scanlines:",IDC_EXTRA_SCANLINES_TEXT,21,57,74,8,WS_DISABLED CONTROL "Don't overclock 7-bit samples.",CB_SKIP_7BIT,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,10,87,111,10 - EDITTEXT IDC_VBLANK_SCANLINES,104,68,84,14,ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_VBLANK_SCANLINES,104,68,84,14,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED LTEXT "VBlank scanlines:",IDC_VBLANK_SCANLINES_TEXT,21,71,76,8,WS_DISABLED END MOVIEOPTIONS DIALOGEX 65520, 76, 147, 222 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Movie Options" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",IDC_MOVIE_CLOSE,48,200,49,14,BS_CENTER CONTROL "Pause after playback",IDC_MOVIE_PAUSEAFTERPLAYBACK, @@ -1295,7 +1295,7 @@ END DWBDIALOGSIMPLE DIALOGEX 33, 99, 250, 39 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "DWBS!" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "Type a key, or press Escape to disable.",65429,53,14,125,8 END @@ -1305,7 +1305,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VI EXSTYLE WS_EX_ACCEPTFILES CAPTION "Memory Watch" MENU MEMWATCHMENU -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "",IDC_STATIC,3,0,126,200 GROUPBOX "",IDC_STATIC,131,0,128,200 @@ -1395,7 +1395,7 @@ END DEBUGGER DIALOGEX 54, 74, 546, 334 STYLE DS_SETFONT | DS_3DLOOK | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "6502 Debugger" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "",IDC_DEBUGGER_DISASSEMBLY,"RichEdit20A",ES_MULTILINE | ES_NOHIDESEL | ES_READONLY | WS_BORDER | WS_HSCROLL,18,5,316,317 SCROLLBAR IDC_DEBUGGER_DISASSEMBLY_VSCR,334,5,11,317,SBS_VERT @@ -1478,7 +1478,7 @@ END TRACER DIALOGEX 0, 0, 317, 181 STYLE DS_SETFONT | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Trace Logger" -FONT 9, "MS Shell Dlg", 400, 0, 0x0 +FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN EDITTEXT IDC_TRACER_LOG,3,3,300,44,ES_MULTILINE | ES_NOHIDESEL | ES_READONLY | WS_HSCROLL SCROLLBAR IDC_SCRL_TRACER_LOG,303,3,11,44,SBS_VERT @@ -1516,7 +1516,7 @@ END ADDBP DIALOGEX 66, 83, 197, 125 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Add Breakpoint..." -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Address:",-1,14,6,30,10 EDITTEXT IDC_ADDBP_ADDR_START,48,4,30,12,ES_UPPERCASE | ES_WANTRETURN @@ -1540,16 +1540,16 @@ BEGIN END NTVIEW DIALOGEX 44, 38, 352, 350 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Name Table Viewer" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Name Tables",IDC_NTVIEW_TABLE_BOX,2,0,347,251,WS_TABSTOP LTEXT "Refresh: More",IDC_STATIC,225,254,50,9 CONTROL "",IDC_NTVIEW_REFRESH_TRACKBAR,"msctls_trackbar32",WS_TABSTOP,275,254,50,11 LTEXT "Less",IDC_STATIC,325,254,18,10 - LTEXT "Display on scanline:",IDC_NTVIEW_SCANLINE_TEXT,253,269,65,9 - EDITTEXT IDC_NTVIEW_SCANLINE,315,267,27,12 + LTEXT "Display on scanline:",IDC_NTVIEW_SCANLINE_TEXT,249,269,65,9 + EDITTEXT IDC_NTVIEW_SCANLINE,315,267,27,12,ES_NUMBER CONTROL "Show Scroll Lines",IDC_NTVIEW_SHOW_SCROLL_LINES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,254,69,10 CONTROL "Show Attributes",IDC_NTVIEW_SHOW_ATTRIBUTES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,265,69,10 CONTROL "Ignore Palettes",IDC_NTVIEW_HIDE_PALETTES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,276,69,10 @@ -1571,7 +1571,7 @@ END ROMPATCHER DIALOGEX 84, 67, 304, 135 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Rom Data Editor" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT IDC_ROMPATCHER_CURRENT_DATA,7,47,282,12,ES_READONLY PUSHBUTTON "Apply",IDC_ROMPATCHER_BTN_APPLY,185,92,54,14 @@ -1590,7 +1590,7 @@ END GGCONV DIALOGEX 84, 67, 186, 146 STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Game Genie Encoder/Decoder Tool" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Game Genie Code",-1,107,5,69,42 EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_UPPERCASE | ES_AUTOHSCROLL @@ -1867,15 +1867,15 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_CAPTI CAPTION "Inline Assembler" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - EDITTEXT IDC_ASSEMBLER_DISASSEMBLY,27,9,167,12,ES_READONLY - COMBOBOX IDC_ASSEMBLER_HISTORY,15,25,180,54,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_ASSEMBLER_DISASSEMBLY,23,9,171,12,ES_READONLY + COMBOBOX IDC_ASSEMBLER_HISTORY,7,25,188,54,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Apply",IDC_ASSEMBLER_APPLY,159,114,36,14 - LTEXT "PC:",-1,15,10,12,10 - LTEXT "Patch:",-1,15,41,26,9 + LTEXT "PC:",-1,8,11,12,8 + LTEXT "Patch:",-1,8,41,22,8 PUSHBUTTON "Save...",IDC_ASSEMBLER_SAVE,117,114,36,14 - PUSHBUTTON "Undo",IDC_ASSEMBLER_UNDO,15,114,35,14 - DEFPUSHBUTTON "Def",IDC_ASSEMBLER_DEFPUSHBUTTON,55,116,16,12,NOT WS_VISIBLE - LISTBOX IDC_ASSEMBLER_PATCH_DISASM,15,50,180,59,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Undo",IDC_ASSEMBLER_UNDO,6,114,36,14 + DEFPUSHBUTTON "Define",IDC_ASSEMBLER_DEFPUSHBUTTON,46,114,36,14,NOT WS_VISIBLE + LISTBOX IDC_ASSEMBLER_PATCH_DISASM,7,50,188,59,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL | WS_TABSTOP END NAMEBOOKMARKDLG DIALOGEX 0, 0, 186, 73 @@ -1934,7 +1934,7 @@ END PPUVIEW DIALOGEX 44, 38, 353, 234 STYLE DS_SETFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "PPU Viewer" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Pattern Tables",GRP_PPUVIEW_TABLES,2,-1,348,185,WS_TABSTOP LTEXT "Tile:",LBL_PPUVIEW_TILE1,6,138,50,9 @@ -1943,7 +1943,7 @@ BEGIN CONTROL "",CTL_PPUVIEW_TRACKBAR,"msctls_trackbar32",WS_TABSTOP,280,151,50,11 LTEXT "Less",-1,330,151,18,10 LTEXT "Display on scanline:",-1,253,166,65,9 - EDITTEXT IDC_PPUVIEW_SCANLINE,315,164,27,12 + EDITTEXT IDC_PPUVIEW_SCANLINE,315,164,27,12,ES_NUMBER CONTROL "Sprites 8x16 mode",IDC_SPRITE16_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,151,160,10 CONTROL "Mask unused graphics (Code/Data Logger)",IDC_MASK_UNUSED_GRAPHICS, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,162,160,10 @@ -2071,9 +2071,9 @@ BEGIN END VIDEOCONFIG DIALOGEX 65520, 76, 511, 170 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Video Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Full Screen Settings",65453,5,3,171,141,WS_GROUP CONTROL "Full Screen (Alt + Enter or double-click)",IDC_VIDEOCONFIG_FS, @@ -2083,9 +2083,9 @@ BEGIN LTEXT "Sync method:",65452,11,108,46,10 COMBOBOX IDC_VIDEOCONFIG_SYNC_METHOD_FS,59,106,105,50,CBS_DROPDOWNLIST | WS_TABSTOP LTEXT "Mode:",13,11,67,23,9 - EDITTEXT IDC_VIDEOCONFIG_XRES,36,65,27,13,ES_RIGHT + EDITTEXT IDC_VIDEOCONFIG_XRES,36,65,27,13,ES_RIGHT | ES_NUMBER LTEXT "by",12,67,67,11,9 - EDITTEXT IDC_VIDEOCONFIG_YRES,79,65,27,13,ES_RIGHT + EDITTEXT IDC_VIDEOCONFIG_YRES,79,65,27,13,ES_RIGHT | ES_NUMBER LTEXT "@",11,110,67,11,9 COMBOBOX IDC_VIDEOCONFIG_BPP,122,65,32,12,CBS_DROPDOWNLIST | WS_TABSTOP LTEXT "bpp",10,157,67,14,9 @@ -2110,10 +2110,10 @@ BEGIN LTEXT "Last line:",65435,367,84,40,9 CTEXT "NTSC",65434,413,57,27,8 CTEXT "PAL/Dendy",65433,455,57,48,8 - EDITTEXT IDC_SCANLINE_FIRST_NTSC,414,66,27,12,ES_RIGHT - EDITTEXT IDC_SCANLINE_LAST_NTSC,414,83,27,12,ES_RIGHT - EDITTEXT IDC_SCANLINE_FIRST_PAL,465,66,27,12,ES_RIGHT - EDITTEXT IDC_SCANLINE_LAST_PAL,465,83,27,12,ES_RIGHT + EDITTEXT IDC_SCANLINE_FIRST_NTSC,414,66,27,12,ES_RIGHT | ES_NUMBER + EDITTEXT IDC_SCANLINE_LAST_NTSC,414,83,27,12,ES_RIGHT | ES_NUMBER + EDITTEXT IDC_SCANLINE_FIRST_PAL,465,66,27,12,ES_RIGHT | ES_NUMBER + EDITTEXT IDC_SCANLINE_LAST_PAL,465,83,27,12,ES_RIGHT | ES_NUMBER CONTROL "Clip left and right sides (8 px on each)",IDC_VIDEOCONFIG_CLIPSIDES, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,357,98,140,12 DEFPUSHBUTTON "Close",ID_CANCEL,449,150,56,14 @@ -2224,7 +2224,7 @@ END DLG_SNESPAD DIALOGEX 4, 109, 243, 121 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Gamepad Configuration" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "Close",BTN_CLOSE,177,97,56,14 GROUPBOX "",GRP_GAMEPAD1,4,8,232,82,WS_GROUP @@ -2312,7 +2312,7 @@ BEGIN LTEXT "Mapper#:",IDC_MAPPER_TEXT,104,24,33,8,WS_DISABLED COMBOBOX IDC_MAPPER_COMBO,139,22,115,30,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_DISABLED | WS_VSCROLL | WS_TABSTOP LTEXT "Sub#:",IDC_SUBMAPPER_TEXT,261,24,21,8,WS_DISABLED - EDITTEXT IDC_SUBMAPPER_EDIT,284,21,15,14,ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_SUBMAPPER_EDIT,284,21,15,14,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED GROUPBOX "PRG",IDC_PRG_GROUP,14,42,294,27,WS_DISABLED LTEXT "PRG ROM:",IDC_PRGROM_TEXT,20,53,34,8,WS_DISABLED COMBOBOX IDC_PRGROM_COMBO,57,51,46,30,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_UPPERCASE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP @@ -2360,7 +2360,7 @@ BEGIN LTEXT "Input device:",IDC_INPUT_DEVICE_TEXT,106,218,44,8,WS_DISABLED COMBOBOX IDC_INPUT_DEVICE_COMBO,153,216,154,30,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_DISABLED | WS_VSCROLL | WS_TABSTOP LTEXT "Misc. ROM(s)",IDC_MISCELLANEOUS_ROMS_TEXT,29,218,48,8,WS_DISABLED - EDITTEXT IDC_MISCELLANEOUS_ROMS_EDIT,14,215,12,14,ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_MISCELLANEOUS_ROMS_EDIT,14,215,12,14,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED PUSHBUTTON "Restore",IDC_RESTORE_BUTTON,6,237,44,14,WS_DISABLED PUSHBUTTON "Save as...",IDSAVE,223,237,44,14,WS_DISABLED DEFPUSHBUTTON "Close",IDCLOSE,270,237,44,14 @@ -2382,6 +2382,14 @@ BEGIN TOPMARGIN, 8 END + "DWBDIALOG", DIALOG + BEGIN + END + + "FKBDIALOG", DIALOG + BEGIN + END + "GAMEPADDIALOG", DIALOG BEGIN END @@ -2398,6 +2406,10 @@ BEGIN BOTTOMMARGIN, 191 END + "MAHJONGDIALOG", DIALOG + BEGIN + END + "NETMOO", DIALOG BEGIN LEFTMARGIN, 10 @@ -2438,6 +2450,10 @@ BEGIN BOTTOMMARGIN, 217 END + "DWBDIALOGSIMPLE", DIALOG + BEGIN + END + "MEMWATCH", DIALOG BEGIN RIGHTMARGIN, 260 @@ -2497,6 +2513,26 @@ BEGIN BEGIN END + IDD_TASEDITOR_ABOUT, DIALOG + BEGIN + END + + IDD_TASEDITOR_NEWPROJECT, DIALOG + BEGIN + END + + IDD_TASEDITOR_EXPORT, DIALOG + BEGIN + END + + IDD_TASEDITOR_FINDNOTE, DIALOG + BEGIN + END + + IDD_TASEDITOR_SAVECOMPACT, DIALOG + BEGIN + END + "ASSEMBLER", DIALOG BEGIN LEFTMARGIN, 7 @@ -2642,6 +2678,21 @@ BEGIN 0 END +ASSEMBLER AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +MEMVIEWFIND AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +VIDEOCONFIG AFX_DIALOG_LAYOUT +BEGIN + 0 +END + ///////////////////////////////////////////////////////////////////////////// // diff --git a/src/drivers/win/video.cpp b/src/drivers/win/video.cpp index e48bcd72..f20b470f 100644 --- a/src/drivers/win/video.cpp +++ b/src/drivers/win/video.cpp @@ -1288,6 +1288,11 @@ BOOL CALLBACK VideoConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPara EnableWindow(GetDlgItem(hwndDlg, IDC_TVASPECT_Y), eoptions&EO_TVASPECT); EnableWindow(GetDlgItem(hwndDlg, IDC_STATIC_SLASHTEXT), eoptions&EO_TVASPECT); + DefaultEditCtrlProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_WINSIZE_MUL_X), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_WINSIZE_MUL_Y), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_TVASPECT_X), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_TVASPECT_Y), GWL_WNDPROC, (LONG)FilterEditCtrlProc); + break; } case WM_CLOSE: diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index b4fe09e2..0e537eeb 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -243,7 +243,7 @@ int GetCheckedAutoFirePattern() if (AFon == 4 && AFoff == 2) return MENU_AUTOFIRE_PATTERN_14; if (AFon == 5 && AFoff == 1) return MENU_AUTOFIRE_PATTERN_15; -return MENU_AUTOFIRE_PATTERN_1; + return MENU_AUTOFIRE_PATTERN_1; } int GetCheckedAutoFireOffset() @@ -3269,96 +3269,92 @@ LRESULT APIENTRY FilterEditCtrlProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP) switch (msg) { - case WM_PASTE: - { - bool(*IsLetterLegal)(char) = GetIsLetterLegal(GetDlgCtrlID(hwnd)); - - if (IsLetterLegal) + case WM_PASTE: { - if (OpenClipboard(hwnd)) + + bool(*IsLetterLegal)(char) = GetIsLetterLegal(GetDlgCtrlID(hwnd)); + + if (IsLetterLegal) { - HANDLE handle = GetClipboardData(CF_TEXT); - if (handle) + if (OpenClipboard(hwnd)) { - - // copy the original clipboard string - char* clipStr = (char*)GlobalLock(handle); - char* original = (char*)calloc(1, strlen(clipStr) + 1); - strcpy(original, clipStr); - GlobalUnlock(handle); - - // filter it out - int lmt = SendMessage(hwnd, EM_GETLIMITTEXT, 0, 0); - char* filtered = (char*)calloc(1, lmt + 1); - int filteredIndex = 0, origIndex = 0; - while (clipStr[origIndex] && filteredIndex < lmt + 1) + HANDLE handle = GetClipboardData(CF_TEXT); + if (handle) { - if (IsLetterLegal(clipStr[origIndex])) + + // get the original clipboard string + char* clipStr = (char*)GlobalLock(handle); + + // check if the text in clipboard has illegal characters + int len = strlen(clipStr); + for (int i = 0; i < len; ++i) { - filtered[filteredIndex] = clipStr[origIndex]; - ++filteredIndex; - } - ++origIndex; - } - - // copy filtered str to clipboard - EmptyClipboard(); - HANDLE hNewStr = GlobalAlloc(GMEM_MOVEABLE, lmt); - char* newStr = (char*)GlobalLock(hNewStr); - strcpy(newStr, filtered); - GlobalUnlock(hNewStr); - SetClipboardData(CF_TEXT, hNewStr); - - // end - CloseClipboard(); - result = CallWindowProc(DefaultEditCtrlProc, hwnd, msg, wP, lP); - through = false; - free(filtered); - - // set it back to normal - if (OpenClipboard(hwnd)) - { - handle = GetClipboardData(CF_TEXT); - if (handle) - { - EmptyClipboard(); - HANDLE hOldStr = GlobalAlloc(GMEM_MOVEABLE, strlen(original) + 1); - char* oldStr = (char*)GlobalLock(hOldStr); - strcpy(oldStr, original); - GlobalUnlock(hOldStr); - SetClipboardData(CF_TEXT, hOldStr); + if (!IsLetterLegal(clipStr[i])) + { + through = false; + // Show Edit control tip, just like the control with ES_NUMBER do + ShowLetterIllegalError(hwnd, IsLetterLegal); + break; + } } + GlobalUnlock(handle); CloseClipboard(); - } - // end - free(original); + } } } } - } - break; - case WM_CHAR: - through = IsInputLegal(GetDlgCtrlID(GetFocus()), wP); + break; + case WM_CHAR: + { + bool(*IsLetterLegal)(char) = GetIsLetterLegal(GetDlgCtrlID(hwnd)); + through = IsInputLegal(GetIsLetterLegal(GetDlgCtrlID(hwnd)), wP); + if (!through) + ShowLetterIllegalError(hwnd, IsLetterLegal); + } } return through ? CallWindowProc(DefaultEditCtrlProc, hwnd, msg, wP, lP) : result; } +// return a letter legal checking function for the specified control with the given id bool inline (*GetIsLetterLegal(UINT id))(char letter) { switch (id) { + // owomomo TODO: RAM Search is a bit complicated, + // I'll handle it in later development + + + // Game genie text in Cheat and Game Genie Encoder/Decoder case IDC_CHEAT_GAME_GENIE_TEXT: case IDC_GAME_GENIE_CODE: return IsLetterLegalGG; + // Addresses in Debugger + case IDC_DEBUGGER_VAL_PCSEEK: + case IDC_DEBUGGER_VAL_PC: + case IDC_DEBUGGER_VAL_A: + case IDC_DEBUGGER_VAL_X: + case IDC_DEBUGGER_VAL_Y: + case IDC_DEBUGGER_BOOKMARK: + + // Debugger -> Add breakpoint + case IDC_ADDBP_ADDR_START: case IDC_ADDBP_ADDR_END: + + // RAM Watch / RAM Search / Cheat -> Add watch + // TODO: Some other features + // case IDC_EDIT_COMPAREADDRESS: + + // Address, Value, Compare, Known Value, Note equal, Greater than and Less than in Cheat case IDC_CHEAT_ADDR: case IDC_CHEAT_VAL: case IDC_CHEAT_COM: case IDC_CHEAT_VAL_KNOWN: case IDC_CHEAT_VAL_NE_BY: case IDC_CHEAT_VAL_GT_BY: case IDC_CHEAT_VAL_LT_BY: + // Address, Value and Compare in Game Genie Encoder/Decoder case IDC_GAME_GENIE_ADDR: case IDC_GAME_GENIE_VAL: case IDC_GAME_GENIE_COMP: + // Address controls in Memory watch case MW_ADDR00: case MW_ADDR01: case MW_ADDR02: case MW_ADDR03: case MW_ADDR04: case MW_ADDR05: case MW_ADDR06: case MW_ADDR07: case MW_ADDR08: case MW_ADDR09: case MW_ADDR10: case MW_ADDR11: @@ -3367,30 +3363,84 @@ bool inline (*GetIsLetterLegal(UINT id))(char letter) case MW_ADDR20: case MW_ADDR21: case MW_ADDR22: case MW_ADDR23: return IsLetterLegalHex; + // Size multiplier and TV Aspect in Video Config + case IDC_WINSIZE_MUL_X: case IDC_WINSIZE_MUL_Y: + case IDC_TVASPECT_X: case IDC_TVASPECT_Y: + return IsLetterLegalFloat; + // Cheat code in Cheat case IDC_CHEAT_TEXT: return IsLetterLegalCheat; - + // PRG ROM, PRG RAM, PRG NVRAM, CHR ROM, CHR RAM, CHR NVRAM in iNES Header Editor case IDC_PRGROM_EDIT: case IDC_PRGRAM_EDIT: case IDC_PRGNVRAM_EDIT: case IDC_CHRROM_EDIT: case IDC_CHRRAM_EDIT: case IDC_CHRNVRAM_EDIT: return IsLetterLegalSize; - - - case IDC_SUBMAPPER_EDIT: - case IDC_MISCELLANEOUS_ROMS_EDIT: - return IsLetterLegalPosDec; } return NULL; } -bool inline IsInputLegal(UINT id, char letter) +inline void ShowLetterIllegalError(HWND hwnd, bool(*IsLetterLegal)(char letter), bool balloon) +{ + (balloon ? ShowLetterIllegalBalloonTip : ShowLetterIllegalMessageBox)(hwnd, IsLetterLegal); +} + +void ShowLetterIllegalBalloonTip(HWND hwnd, bool(*IsLetterLegal)(char letter)) +{ + char* title = "Unacceptable Character"; + int uLen = MultiByteToWideChar(CP_ACP, NULL, title, -1, NULL, 0); + wchar_t* titleW = (wchar_t*)malloc(sizeof(wchar_t) * uLen); + MultiByteToWideChar(CP_ACP, 0, title, -1, (LPWSTR)titleW, uLen); + + char* msg = GetLetterIllegalErrMsg(IsLetterLegal); + uLen = MultiByteToWideChar(CP_ACP, NULL, msg, -1, NULL, 0); + wchar_t* msgW = (wchar_t*)malloc(sizeof(wchar_t) * uLen); + MultiByteToWideChar(CP_ACP, 0, msg, -1, (LPWSTR)msgW, uLen); + + EDITBALLOONTIP tip; + tip.cbStruct = sizeof(EDITBALLOONTIP); + tip.pszText = msgW; + tip.pszTitle = titleW; + tip.ttiIcon = TTI_ERROR; + SendMessage(hwnd, EM_SHOWBALLOONTIP, 0, (LPARAM)&tip); + + free(titleW); + free(msgW); +} + +inline void ShowLetterIllegalMessageBox(HWND hwnd, bool(*IsLetterLegal)(char letter)) +{ + MessageBox(hwnd, GetLetterIllegalErrMsg(IsLetterLegal), "Unacceptable Character", MB_OK | MB_ICONERROR); +} + +inline char* GetLetterIllegalErrMsg(bool(*IsLetterLegal)(char letter)) +{ + if (IsLetterLegal == IsLetterLegalGG) + return "You can only type Game Genie characters:\nA P Z L G I T Y E O X U K S V N"; + if (IsLetterLegal == IsLetterLegalHex) + return "You can only type characters for hexadecimal number (0-9,A-F)."; + if (IsLetterLegal == IsLetterLegalCheat) + return + "The cheat code comes into the following 2 formats:\n" + "AAAA:VV freezes the value in Address $AAAA to $VV.\n" + "AAAA?CC:VV changes the value in Address $AAAA to $VV only when it's $CC.\n" + "All the characters are hexadecimal number (0-9,A-F).\n"; + if (IsLetterLegal == IsLetterLegalFloat) + return "You can only type decimal number (decimal point is acceptable)."; + if (IsLetterLegal == IsLetterLegalSize) + return "You can only type decimal number followed with B, KB or MB."; + if (IsLetterLegal == IsLetterLegalDec) + return "You can only type decimal number (minus is acceptable)."; + + return "Your input contains invalid characters."; +} + +inline bool IsInputLegal(bool (*IsLetterLegal)(char letter), char letter) { - bool(*IsLetterLegal)(char) = GetIsLetterLegal(id); return !IsLetterLegal || letter == VK_BACK || GetKeyState(VK_CONTROL) & 0x8000 || IsLetterLegal(letter); } -bool inline IsLetterLegalGG(char letter) +inline bool IsLetterLegalGG(char letter) { char ch = toupper(letter); for (int i = 0; GameGenieLetters[i]; ++i) @@ -3399,27 +3449,27 @@ bool inline IsLetterLegalGG(char letter) return false; } -bool inline IsLetterLegalHex(char letter) +inline bool IsLetterLegalHex(char letter) { return letter >= '0' && letter <= '9' || letter >= 'A' && letter <= 'F' || letter >= 'a' && letter <= 'f'; } -bool inline IsLetterLegalCheat(char letter) +inline bool IsLetterLegalCheat(char letter) { return letter >= '0' && letter <= ':' || letter >= 'A' && letter <= 'F' || letter >= 'a' && letter <= 'f' || letter == '?'; } -bool inline IsLetterLegalSize(char letter) +inline bool IsLetterLegalSize(char letter) { return letter >= '0' && letter <= '9' || letter == 'm' || letter == 'M' || letter == 'k' || letter == 'K' || letter == 'b' || letter == 'B'; } -bool inline IsLetterLegalPosDec(char letter) -{ - return letter >= '0' && letter <= '9'; -} - -bool inline IsLetterLegalDec(char letter) +inline bool IsLetterLegalDec(char letter) { return letter >= '0' && letter <= '9' || letter == '-'; +} + +inline bool IsLetterLegalFloat(char letter) +{ + return letter >= '0' && letter <= '9' || letter == '.'; } \ No newline at end of file diff --git a/src/drivers/win/window.h b/src/drivers/win/window.h index a8c8b1a0..45cf98c5 100644 --- a/src/drivers/win/window.h +++ b/src/drivers/win/window.h @@ -128,14 +128,18 @@ struct HOTKEYMENUINDEX { void UpdateMenuHotkeys(FCEUMENU_INDEX index); int GetCurrentContextIndex(); -bool inline (*GetIsLetterLegal(UINT id))(char letter); -bool inline IsInputLegal(UINT id, char letter); -bool inline IsLetterLegalGG(char letter); -bool inline IsLetterLegalHex(char letter); -bool inline IsLetterLegalCheat(char letter); -bool inline IsLetterLegalDec(char letter); -bool inline IsLetterLegalPosDec(char letter); -bool inline IsLetterLegalSize(char letter); +inline bool (*GetIsLetterLegal(UINT id))(char letter); +inline char* GetLetterIllegalErrMsg(bool(*IsLetterLegal)(char letter)); +inline void ShowLetterIllegalError(HWND hwnd, bool(*IsLetterLegal)(char letter), bool balloon = true); +void ShowLetterIllegalBalloonTip(HWND hwnd, bool(*IsLetterLegal)(char letter)); +inline void ShowLetterIllegalMessageBox(HWND hwnd, bool(*IsLetterLegal)(char letter)); +inline bool IsInputLegal(bool(*IsLetterLegal)(char letter), char letter); +inline bool IsLetterLegalGG(char letter); +inline bool IsLetterLegalHex(char letter); +inline bool IsLetterLegalCheat(char letter); +inline bool IsLetterLegalDec(char letter); +inline bool IsLetterLegalSize(char letter); +inline bool IsLetterLegalFloat(char letter); extern WNDPROC DefaultEditCtrlProc; extern LRESULT APIENTRY FilterEditCtrlProc(HWND hDlg, UINT msg, WPARAM wP, LPARAM lP);