implement notepad view status bar -

TODO: update caret position on arrow key/mouse scroll events


svn path=/trunk/; revision=21793
This commit is contained in:
Johannes Anderwald 2006-05-03 16:17:12 +00:00
parent ef7ec993b7
commit 6da2349338
7 changed files with 89 additions and 10 deletions

View file

@ -620,7 +620,7 @@ VOID DIALOG_EditWrap(VOID)
{ {
static const WCHAR editW[] = { 'e','d','i','t',0 }; static const WCHAR editW[] = { 'e','d','i','t',0 };
DWORD dwStyle; DWORD dwStyle;
RECT rc; RECT rc, rcstatus;
DWORD size; DWORD size;
LPWSTR pTemp; LPWSTR pTemp;
@ -637,6 +637,19 @@ VOID DIALOG_EditWrap(VOID)
DestroyWindow(Globals.hEdit); DestroyWindow(Globals.hEdit);
GetClientRect(Globals.hMainWnd, &rc); GetClientRect(Globals.hMainWnd, &rc);
dwStyle = Globals.bWrapLongLines ? EDIT_STYLE_WRAP : EDIT_STYLE; dwStyle = Globals.bWrapLongLines ? EDIT_STYLE_WRAP : EDIT_STYLE;
EnableMenuItem(GetMenu(Globals.hMainWnd), CMD_STATUSBAR,
MF_BYCOMMAND | (Globals.bWrapLongLines ? MF_DISABLED | MF_GRAYED : MF_ENABLED));
if ( Globals.hStatusBar )
{
if ( Globals.bWrapLongLines )
ShowWindow(Globals.hStatusBar, SW_HIDE);
else if ( Globals.bShowStatusBar )
{
GetClientRect(Globals.hStatusBar, &rcstatus);
rc.bottom -= (rcstatus.bottom - rcstatus.top);
ShowWindow(Globals.hStatusBar, SW_SHOW);
}
}
Globals.hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, editW, NULL, dwStyle, Globals.hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, editW, NULL, dwStyle,
0, 0, rc.right, rc.bottom, Globals.hMainWnd, 0, 0, rc.right, rc.bottom, Globals.hMainWnd,
NULL, Globals.hInstance, NULL); NULL, Globals.hInstance, NULL);
@ -645,6 +658,7 @@ VOID DIALOG_EditWrap(VOID)
SetWindowTextW(Globals.hEdit, pTemp); SetWindowTextW(Globals.hEdit, pTemp);
SetFocus(Globals.hEdit); SetFocus(Globals.hEdit);
HeapFree(GetProcessHeap(), 0, pTemp); HeapFree(GetProcessHeap(), 0, pTemp);
DrawMenuBar(Globals.hMainWnd);
} }
VOID DIALOG_SelectFont(VOID) VOID DIALOG_SelectFont(VOID)
@ -780,6 +794,50 @@ VOID DIALOG_GoTo(VOID)
HeapFree(GetProcessHeap(), 0, pszText); HeapFree(GetProcessHeap(), 0, pszText);
} }
VOID DIALOG_StatusBarUpdateCaretPos(VOID)
{
int line;
int col;
int ccol;
POINT point;
TCHAR buff[MAX_PATH];
GetCaretPos(&point);
line = SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)-1, (LPARAM)0);
ccol = SendMessage(Globals.hEdit, EM_CHARFROMPOS, (WPARAM)0, (LPARAM)MAKELPARAM(point.x, point.y));
ccol = LOWORD(ccol);
col = ccol - SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, (LPARAM)0);
_stprintf(buff, TEXT("%S %d, %S %d"), Globals.szStatusBarLine, line+1, Globals.szStatusBarCol, col+1);
SendMessage(Globals.hStatusBar, SB_SETTEXT, (WPARAM) SB_SIMPLEID, (LPARAM)buff);
}
VOID DIALOG_ViewStatusBar(VOID)
{
RECT rc;
RECT rcstatus;
Globals.bShowStatusBar = !Globals.bShowStatusBar;
if ( !Globals.hStatusBar )
{
Globals.hStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE, TEXT("test"), Globals.hMainWnd, CMD_STATUSBAR_WND_ID );
LoadString(Globals.hInstance, STRING_LINE, Globals.szStatusBarLine, MAX_PATH-1);
LoadString(Globals.hInstance, STRING_COLUMN, Globals.szStatusBarCol, MAX_PATH-1);
SendMessage(Globals.hStatusBar, SB_SIMPLE, (WPARAM)TRUE, (LPARAM)0);
}
CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_STATUSBAR,
MF_BYCOMMAND | (Globals.bShowStatusBar ? MF_CHECKED : MF_UNCHECKED));
DrawMenuBar(Globals.hMainWnd);
GetClientRect(Globals.hMainWnd, &rc);
GetClientRect(Globals.hStatusBar, &rcstatus);
if ( Globals.bShowStatusBar )
rc.bottom -= (rcstatus.bottom - rcstatus.top);
MoveWindow(Globals.hEdit, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
ShowWindow(Globals.hStatusBar, Globals.bShowStatusBar);
DIALOG_StatusBarUpdateCaretPos();
}
VOID DIALOG_HelpContents(VOID) VOID DIALOG_HelpContents(VOID)
{ {
WinHelp(Globals.hMainWnd, helpfileW, HELP_INDEX, 0); WinHelp(Globals.hMainWnd, helpfileW, HELP_INDEX, 0);

View file

@ -43,6 +43,9 @@ VOID DIALOG_GoTo(VOID);
VOID DIALOG_SelectFont(VOID); VOID DIALOG_SelectFont(VOID);
VOID DIALOG_ViewStatusBar(VOID);
VOID DIALOG_StatusBarUpdateCaretPos(VOID);
VOID DIALOG_HelpContents(VOID); VOID DIALOG_HelpContents(VOID);
VOID DIALOG_HelpSearch(VOID); VOID DIALOG_HelpSearch(VOID);
VOID DIALOG_HelpHelp(VOID); VOID DIALOG_HelpHelp(VOID);

View file

@ -75,6 +75,8 @@ static int NOTEPAD_MenuCommand(WPARAM wParam)
case CMD_WRAP: DIALOG_EditWrap(); break; case CMD_WRAP: DIALOG_EditWrap(); break;
case CMD_FONT: DIALOG_SelectFont(); break; case CMD_FONT: DIALOG_SelectFont(); break;
case CMD_STATUSBAR: DIALOG_ViewStatusBar(); break;
case CMD_HELP_CONTENTS: DIALOG_HelpContents(); break; case CMD_HELP_CONTENTS: DIALOG_HelpContents(); break;
case CMD_HELP_SEARCH: DIALOG_HelpSearch(); break; case CMD_HELP_SEARCH: DIALOG_HelpSearch(); break;
case CMD_HELP_ON_HELP: DIALOG_HelpHelp(); break; case CMD_HELP_ON_HELP: DIALOG_HelpHelp(); break;
@ -267,7 +269,11 @@ static VOID NOTEPAD_InitMenuPopup(HMENU menu, int index)
CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_WRAP, CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_WRAP,
MF_BYCOMMAND | (Globals.bWrapLongLines ? MF_CHECKED : MF_UNCHECKED)); MF_BYCOMMAND | (Globals.bWrapLongLines ? MF_CHECKED : MF_UNCHECKED));
if ( !Globals.bWrapLongLines )
{
CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_STATUSBAR,
MF_BYCOMMAND | (Globals.bShowStatusBar ? MF_CHECKED : MF_UNCHECKED));
}
EnableMenuItem(menu, CMD_UNDO, EnableMenuItem(menu, CMD_UNDO,
SendMessage(Globals.hEdit, EM_CANUNDO, 0, 0) ? MF_ENABLED : MF_GRAYED); SendMessage(Globals.hEdit, EM_CANUNDO, 0, 0) ? MF_ENABLED : MF_GRAYED);
EnableMenuItem(menu, CMD_PASTE, EnableMenuItem(menu, CMD_PASTE,
@ -280,6 +286,7 @@ static VOID NOTEPAD_InitMenuPopup(HMENU menu, int index)
EnableMenuItem(menu, CMD_SELECT_ALL, EnableMenuItem(menu, CMD_SELECT_ALL,
GetWindowTextLength(Globals.hEdit) ? MF_ENABLED : MF_GRAYED); GetWindowTextLength(Globals.hEdit) ? MF_ENABLED : MF_GRAYED);
DrawMenuBar(Globals.hMainWnd);
} }
/*********************************************************************** /***********************************************************************
@ -308,6 +315,8 @@ static LRESULT WINAPI NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam,
} }
case WM_COMMAND: case WM_COMMAND:
if (HIWORD(wParam) == EN_CHANGE || HIWORD(wParam) == EN_HSCROLL || HIWORD(wParam) == EN_VSCROLL)
DIALOG_StatusBarUpdateCaretPos();
NOTEPAD_MenuCommand(LOWORD(wParam)); NOTEPAD_MenuCommand(LOWORD(wParam));
break; break;
@ -350,11 +359,10 @@ static LRESULT WINAPI NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam,
DoOpenFile(szFileName); DoOpenFile(szFileName);
break; break;
} }
case WM_CHAR:
case WM_INITMENUPOPUP: case WM_INITMENUPOPUP:
NOTEPAD_InitMenuPopup((HMENU)wParam, lParam); NOTEPAD_InitMenuPopup((HMENU)wParam, lParam);
break; break;
default: default:
if (msg == aFINDMSGSTRING) if (msg == aFINDMSGSTRING)
{ {

View file

@ -45,9 +45,11 @@ typedef struct
HWND hMainWnd; HWND hMainWnd;
HWND hFindReplaceDlg; HWND hFindReplaceDlg;
HWND hEdit; HWND hEdit;
HWND hStatusBar;
HFONT hFont; /* Font used by the edit control */ HFONT hFont; /* Font used by the edit control */
LOGFONT lfFont; LOGFONT lfFont;
BOOL bWrapLongLines; BOOL bWrapLongLines;
BOOL bShowStatusBar;
WCHAR szFindText[MAX_PATH]; WCHAR szFindText[MAX_PATH];
WCHAR szReplaceText[MAX_PATH]; WCHAR szReplaceText[MAX_PATH];
WCHAR szFileName[MAX_PATH]; WCHAR szFileName[MAX_PATH];
@ -59,6 +61,8 @@ typedef struct
WCHAR szMarginRight[MAX_PATH]; WCHAR szMarginRight[MAX_PATH];
WCHAR szHeader[MAX_PATH]; WCHAR szHeader[MAX_PATH];
WCHAR szFooter[MAX_PATH]; WCHAR szFooter[MAX_PATH];
WCHAR szStatusBarLine[MAX_PATH];
WCHAR szStatusBarCol[MAX_PATH];
int iEncoding; int iEncoding;
int iEoln; int iEoln;

View file

@ -5,7 +5,9 @@
#include <stdio.h> #include <stdio.h>
#include <windows.h> #include <windows.h>
#include <commdlg.h> #include <commdlg.h>
#include <commctrl.h>
#include <tchar.h> #include <tchar.h>
#include <Richedit.h>
#include "main.h" #include "main.h"
#include "dialog.h" #include "dialog.h"

View file

@ -6,6 +6,7 @@
<library>user32</library> <library>user32</library>
<library>gdi32</library> <library>gdi32</library>
<library>comdlg32</library> <library>comdlg32</library>
<library>comctl32</library>
<library>advapi32</library> <library>advapi32</library>
<library>shell32</library> <library>shell32</library>
<file>dialog.c</file> <file>dialog.c</file>

View file

@ -58,6 +58,7 @@
#define CMD_FONT 0x140 #define CMD_FONT 0x140
#define CMD_STATUSBAR 0x150 #define CMD_STATUSBAR 0x150
#define CMD_STATUSBAR_WND_ID 0x151
#define CMD_HELP_CONTENTS 0x130 #define CMD_HELP_CONTENTS 0x130
#define CMD_HELP_SEARCH 0x131 #define CMD_HELP_SEARCH 0x131
@ -100,3 +101,5 @@
#define STRING_CR 0x184 #define STRING_CR 0x184
#define STRING_LICENSE 0x185 #define STRING_LICENSE 0x185
#define STRING_LINE 0x186
#define STRING_COLUMN 0x187