1. Add more controls to limit input text.

2. Changed limit input behaviour to match the system default ES_NUMBER.
This commit is contained in:
owomomo 2019-06-20 01:58:35 +08:00
parent 4e3473ac5d
commit fee4fc83a8
8 changed files with 286 additions and 166 deletions

View File

@ -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);

View File

@ -69,5 +69,7 @@ public:
} *debugSystem;
// extern WNDPROC DefaultEditCtrlProc;
// extern LRESULT APIENTRY FilterEditCtrlProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP);
#endif

View File

@ -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);

View File

@ -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
};

View File

@ -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
/////////////////////////////////////////////////////////////////////////////
//

View File

@ -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:

View File

@ -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 == '.';
}

View File

@ -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);