From: Jacob Czekalla jacobczekalla@gmail.com
--- programs/notepad/dialog.c | 49 ++++++++++++++++++++++++++++++++++ programs/notepad/dialog.h | 1 + programs/notepad/main.c | 1 + programs/notepad/notepad.rc | 14 ++++++++++ programs/notepad/notepad_res.h | 3 +++ 5 files changed, 68 insertions(+)
diff --git a/programs/notepad/dialog.c b/programs/notepad/dialog.c index c594fe0b79b..9cbdc1398c3 100644 --- a/programs/notepad/dialog.c +++ b/programs/notepad/dialog.c @@ -39,6 +39,7 @@ static const WCHAR helpfileW[] = { 'n','o','t','e','p','a','d','.','h','l','p',0 };
static INT_PTR WINAPI DIALOG_PAGESETUP_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static INT_PTR WINAPI DIALOG_GOTO_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
/* Swap bytes of WCHAR buffer (big-endian <-> little-endian). */ static inline void byteswap_wide_string(LPWSTR str, UINT num) @@ -1276,3 +1277,51 @@ static INT_PTR WINAPI DIALOG_PAGESETUP_DlgProc(HWND hDlg, UINT msg, WPARAM wPara
return FALSE; } + +VOID DIALOG_EditGoTo(VOID) +{ + DialogBoxW(Globals.hInstance, MAKEINTRESOURCEW(DIALOG_GOTO), + Globals.hMainWnd, DIALOG_GOTO_DlgProc); +} + +static INT_PTR WINAPI DIALOG_GOTO_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch(msg) + { + case WM_COMMAND: + { + switch (wParam) + { + case IDOK: + { + int lineValue = GetDlgItemInt(hDlg, IDC_GOTO_LINEVALUE, NULL, FALSE)-1; + long lineIndex = SendMessageW(Globals.hEdit,EM_LINEINDEX,lineValue,0); + + SendMessageW(Globals.hEdit,EM_SETSEL,lineIndex,lineIndex); + UpdateStatusBar(); + EndDialog(hDlg, IDOK); + return TRUE; + } + case IDCANCEL: + { + EndDialog(hDlg, IDCANCEL); + return TRUE; + } + default: + { + break; + } + + } + break; + } + case WM_INITDIALOG: + { + int currentLine = SendMessageW(Globals.hEdit,EM_LINEFROMCHAR,-1,0) + 1; + SetDlgItemInt(hDlg, IDC_GOTO_LINEVALUE, currentLine,FALSE); + break; + } + + } + return FALSE; +} diff --git a/programs/notepad/dialog.h b/programs/notepad/dialog.h index ae41ac2762a..ec495d87893 100644 --- a/programs/notepad/dialog.h +++ b/programs/notepad/dialog.h @@ -35,6 +35,7 @@ VOID DIALOG_EditDelete(VOID); VOID DIALOG_EditSelectAll(VOID); VOID DIALOG_EditTimeDate(VOID); VOID DIALOG_EditWrap(VOID); +VOID DIALOG_EditGoTo(VOID);
VOID DIALOG_Search(VOID); VOID DIALOG_SearchNext(VOID); diff --git a/programs/notepad/main.c b/programs/notepad/main.c index 838fc6faaaf..030989564fa 100644 --- a/programs/notepad/main.c +++ b/programs/notepad/main.c @@ -338,6 +338,7 @@ static int NOTEPAD_MenuCommand(WPARAM wParam) case CMD_SEARCH: DIALOG_Search(); break; case CMD_SEARCH_NEXT: DIALOG_SearchNext(); break; case CMD_REPLACE: DIALOG_Replace(); break; + case CMD_GO_TO: DIALOG_EditGoTo(); break;
case CMD_WRAP: DIALOG_EditWrap(); break; case CMD_FONT: DIALOG_SelectFont(); break; diff --git a/programs/notepad/notepad.rc b/programs/notepad/notepad.rc index f29370389ad..02397ec830e 100644 --- a/programs/notepad/notepad.rc +++ b/programs/notepad/notepad.rc @@ -50,6 +50,7 @@ POPUP "&Edit" { MENUITEM SEPARATOR MENUITEM "&Wrap long lines", CMD_WRAP MENUITEM "&Font...", CMD_FONT + MENUITEM "&Go To...\tCtrl+G", CMD_GO_TO } POPUP "&Search" { MENUITEM "&Search...\tCtrl+F", CMD_SEARCH @@ -122,6 +123,18 @@ PUSHBUTTON "Cancel", IDCANCEL, 195, 21, 40, 15, WS_TABSTOP PUSHBUTTON "&Help", IDHELP, 195, 39, 40, 15, WS_TABSTOP }
+DIALOG_GOTO DIALOG 0, 0, 130, 55 +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Go To Line" +{ +LTEXT "&Line Number:", 0x140, 10, 07, 68, 12 +EDITTEXT IDC_GOTO_LINEVALUE, 10, 19, 110,12, WS_BORDER | WS_TABSTOP | ES_NUMBER + +DEFPUSHBUTTON "Go To", IDOK, 35, 35, 40, 15, WS_TABSTOP +PUSHBUTTON "Cancel", IDCANCEL, 80, 35, 40, 15, WS_TABSTOP +} + IDD_OFN_TEMPLATE DIALOG 50,50,300,15 STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER FONT 8, "MS Shell Dlg" @@ -143,6 +156,7 @@ ID_ACCEL ACCELERATORS "#msgctxt#accelerator Paste#V", CMD_PASTE, VIRTKEY, CONTROL "#msgctxt#accelerator Cut#X", CMD_CUT, VIRTKEY, CONTROL "#msgctxt#accelerator Undo#Z", CMD_UNDO, VIRTKEY, CONTROL + "#msgctxt#accelerator GoTo#G", CMD_GO_TO, VIRTKEY, CONTROL VK_BACK, CMD_UNDO, VIRTKEY, ALT VK_F1, CMD_HELP_CONTENTS, VIRTKEY VK_F3, CMD_SEARCH_NEXT, VIRTKEY diff --git a/programs/notepad/notepad_res.h b/programs/notepad/notepad_res.h index bd994d9eede..38b95472948 100644 --- a/programs/notepad/notepad_res.h +++ b/programs/notepad/notepad_res.h @@ -25,6 +25,7 @@ #define MAIN_MENU 0x201 #define DIALOG_PAGESETUP 0x202 #define ID_ACCEL 0x203 +#define DIALOG_GOTO 0x204
#define IDI_NOTEPAD 0x300
@@ -49,6 +50,7 @@ #define CMD_SEARCH 0x120 #define CMD_SEARCH_NEXT 0x121 #define CMD_REPLACE 0x122 +#define CMD_GO_TO 0x192
#define CMD_WRAP 0x119 #define CMD_FONT 0x140 @@ -64,6 +66,7 @@ #define IDC_PAGESETUP_RIGHTVALUE 0x14A #define IDC_PAGESETUP_TOPVALUE 0x14D #define IDC_PAGESETUP_BOTTOMVALUE 0x150 +#define IDC_GOTO_LINEVALUE 0x194
/* Strings */ #define STRING_PAGESETUP_HEADERVALUE 0x160