wordpad: Store bar states in the registry.

This commit is contained in:
Alexander Nicolaysen Sørnes 2007-08-22 22:41:25 +02:00 committed by Alexandre Julliard
parent f0e0e9fb9b
commit d95fac1575
2 changed files with 146 additions and 64 deletions

View File

@ -65,12 +65,14 @@
#define ID_TOGGLE_FORMATBAR 1501
#define ID_TOGGLE_STATUSBAR 1502
#define BANDID_TOOLBAR 0
#define BANDID_FORMATBAR 1
#define FILELIST_ENTRIES 4
#define FILELIST_ENTRY_LENGTH 33
#define BANDID_TOOLBAR 2
#define BANDID_FORMATBAR 3
#define BANDID_RULER 0
#define BANDID_STATUSBAR 1
#define ID_NEWFILE_ABORT 100
#define ID_DATETIME 1600

View File

@ -47,9 +47,13 @@ static const WCHAR wszAppTitle[] = {'W','i','n','e',' ','W','o','r','d','p','a',
static const WCHAR key_recentfiles[] = {'R','e','c','e','n','t',' ','f','i','l','e',
' ','l','i','s','t',0};
static const WCHAR key_options[] = {'O','p','t','i','o','n','s',0};
static const WCHAR key_rtf[] = {'R','T','F',0};
static const WCHAR key_text[] = {'T','e','x','t',0};
static const WCHAR var_file[] = {'F','i','l','e','%','d',0};
static const WCHAR var_framerect[] = {'F','r','a','m','e','R','e','c','t',0};
static const WCHAR var_barstate0[] = {'B','a','r','S','t','a','t','e','0',0};
static HWND hMainWnd;
@ -481,6 +485,11 @@ static void clear_formatting(void)
SendMessageW(hEditorWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
}
static int reg_formatindex(WPARAM format)
{
return (format & SF_TEXT) ? 1 : 0;
}
static int fileformat_number(WPARAM format)
{
int number = 0;
@ -502,9 +511,82 @@ static WPARAM fileformat_flags(int format)
return flags[format];
}
static void update_window(void)
{
RECT rect;
GetWindowRect(hMainWnd, &rect);
(void) OnSize(hMainWnd, SIZE_RESTORED, MAKELONG(rect.bottom, rect.right));
}
static DWORD barState[2];
static BOOL is_bar_visible(int bandId)
{
return barState[reg_formatindex(fileFormat)] & (1 << bandId);
}
static void store_bar_state(int bandId, BOOL show)
{
int formatIndex = reg_formatindex(fileFormat);
if(show)
barState[formatIndex] |= (1 << bandId);
else
barState[formatIndex] &= ~(1 << bandId);
}
static void set_toolbar_state(int bandId, BOOL show)
{
HWND hwndReBar = GetDlgItem(hMainWnd, IDC_REBAR);
SendMessageW(hwndReBar, RB_SHOWBAND, SendMessageW(hwndReBar, RB_IDTOINDEX, bandId, 0), show);
if(bandId == BANDID_TOOLBAR)
{
REBARBANDINFOW rbbinfo;
int index = SendMessageW(hwndReBar, RB_IDTOINDEX, BANDID_FORMATBAR, 0);
rbbinfo.cbSize = sizeof(rbbinfo);
rbbinfo.fMask = RBBIM_STYLE;
SendMessageW(hwndReBar, RB_GETBANDINFO, index, (LPARAM)&rbbinfo);
if(!show)
rbbinfo.fStyle &= ~RBBS_BREAK;
else
rbbinfo.fStyle |= RBBS_BREAK;
SendMessageW(hwndReBar, RB_SETBANDINFO, index, (LPARAM)&rbbinfo);
}
if(bandId == BANDID_TOOLBAR || bandId == BANDID_FORMATBAR)
store_bar_state(bandId, show);
}
static void set_statusbar_state(BOOL show)
{
HWND hStatusWnd = GetDlgItem(hMainWnd, IDC_STATUSBAR);
ShowWindow(hStatusWnd, show ? SW_SHOW : SW_HIDE);
store_bar_state(BANDID_STATUSBAR, show);
}
static void set_bar_states(void)
{
set_toolbar_state(BANDID_TOOLBAR, is_bar_visible(BANDID_TOOLBAR));
set_toolbar_state(BANDID_FORMATBAR, is_bar_visible(BANDID_FORMATBAR));
set_statusbar_state(is_bar_visible(BANDID_STATUSBAR));
update_window();
}
static void set_fileformat(WPARAM format)
{
fileFormat = format;
set_bar_states();
}
static void DoOpenFile(LPCWSTR szOpenFileName)
@ -887,47 +969,55 @@ static void DoDefaultFont(void)
SendMessageW(hEditorWnd, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&fmt);
}
static void update_window(void)
static void registry_read_options_format(int index, LPCWSTR key)
{
RECT rect;
HKEY hKey;
DWORD action = 0;
BOOL fetched = FALSE;
barState[index] = 0;
GetWindowRect(hMainWnd, &rect);
(void) OnSize(hMainWnd, SIZE_RESTORED, MAKELONG(rect.bottom, rect.right));
}
static void toggle_toolbar(int bandId)
{
HWND hwndReBar = GetDlgItem(hMainWnd, IDC_REBAR);
REBARBANDINFOW rbbinfo;
BOOL hide = TRUE;
if(!hwndReBar)
if(registry_get_handle(&hKey, &action, key) != ERROR_SUCCESS)
return;
rbbinfo.cbSize = sizeof(rbbinfo);
rbbinfo.fMask = RBBIM_STYLE | RBBIM_SIZE;
SendMessageW(hwndReBar, RB_GETBANDINFO, bandId, (LPARAM)&rbbinfo);
if(rbbinfo.fStyle & RBBS_HIDDEN)
hide = FALSE;
SendMessageW(hwndReBar, RB_SHOWBAND, bandId, hide ? 0 : 1);
if(bandId == BANDID_TOOLBAR)
if(action == REG_OPENED_EXISTING_KEY)
{
rbbinfo.fMask ^= RBBIM_SIZE;
DWORD size = sizeof(DWORD);
SendMessageW(hwndReBar, RB_GETBANDINFO, BANDID_FORMATBAR, (LPARAM)&rbbinfo);
if(hide)
rbbinfo.fStyle ^= RBBS_BREAK;
else
rbbinfo.fStyle |= RBBS_BREAK;
SendMessageW(hwndReBar, RB_SETBANDINFO, BANDID_FORMATBAR, (LPARAM)&rbbinfo);
if(RegQueryValueExW(hKey, var_barstate0, 0, NULL, (LPBYTE)&barState[index],
&size) == ERROR_SUCCESS)
fetched = TRUE;
}
if(!fetched)
barState[index] = (1 << BANDID_TOOLBAR) | (1 << BANDID_FORMATBAR) | (1 << BANDID_RULER) | (1 << BANDID_STATUSBAR);
RegCloseKey(hKey);
}
static void registry_read_options(void)
{
registry_read_options_format(reg_formatindex(SF_RTF), key_rtf);
registry_read_options_format(reg_formatindex(SF_TEXT), key_text);
}
static void registry_set_options_format(int index, LPCWSTR key)
{
HKEY hKey;
DWORD action = 0;
if(registry_get_handle(&hKey, &action, key) == ERROR_SUCCESS)
{
RegSetValueExW(hKey, var_barstate0, 0, REG_DWORD, (LPBYTE)&barState[index],
sizeof(DWORD));
RegCloseKey(hKey);
}
}
static void registry_set_options(void)
{
registry_set_options_format(reg_formatindex(SF_RTF), key_rtf);
registry_set_options_format(reg_formatindex(SF_TEXT), key_text);
}
BOOL CALLBACK datetime_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
@ -1078,14 +1168,15 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam)
SendMessageW(hToolBarWnd, TB_AUTOSIZE, 0, 0);
rbb.cbSize = sizeof(rbb);
rbb.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_CHILD | RBBIM_STYLE;
rbb.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_CHILD | RBBIM_STYLE | RBBIM_ID;
rbb.fStyle = RBBS_CHILDEDGE | RBBS_BREAK | RBBS_NOGRIPPER;
rbb.cx = 0;
rbb.hwndChild = hToolBarWnd;
rbb.cxMinChild = 0;
rbb.cyChild = rbb.cyMinChild = HIWORD(SendMessageW(hToolBarWnd, TB_GETBUTTONSIZE, 0, 0));
rbb.wID = BANDID_TOOLBAR;
SendMessageW(hReBarWnd, RB_INSERTBAND, BANDID_TOOLBAR, (LPARAM)&rbb);
SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb);
hFormatBarWnd = CreateToolbarEx(hReBarWnd,
CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_BUTTON,
@ -1104,8 +1195,9 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam)
SendMessageW(hFormatBarWnd, TB_AUTOSIZE, 0, 0);
rbb.hwndChild = hFormatBarWnd;
rbb.wID = BANDID_FORMATBAR;
SendMessageW(hReBarWnd, RB_INSERTBAND, BANDID_FORMATBAR, (LPARAM)&rbb);
SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb);
hDLL = LoadLibraryW(wszRichEditDll);
if(!hDLL)
@ -1137,6 +1229,7 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam)
ID_FINDMSGSTRING = RegisterWindowMessageW(FINDMSGSTRINGW);
registry_read_filelist(hWnd);
registry_read_options();
return 0;
}
@ -1219,7 +1312,6 @@ static LRESULT OnNotify( HWND hWnd, WPARAM wParam, LPARAM lParam)
static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
HWND hwndStatus = GetDlgItem(hWnd, IDC_STATUSBAR);
static FINDREPLACEW findreplace;
if ((HWND)lParam == hwndEditor)
@ -1489,17 +1581,17 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
break;
case ID_TOGGLE_TOOLBAR:
toggle_toolbar(BANDID_TOOLBAR);
set_toolbar_state(BANDID_TOOLBAR, !is_bar_visible(BANDID_TOOLBAR));
update_window();
break;
case ID_TOGGLE_FORMATBAR:
toggle_toolbar(BANDID_FORMATBAR);
set_toolbar_state(BANDID_FORMATBAR, !is_bar_visible(BANDID_FORMATBAR));
update_window();
break;
case ID_TOGGLE_STATUSBAR:
ShowWindow(hwndStatus, IsWindowVisible(hwndStatus) ? SW_HIDE : SW_SHOW);
set_statusbar_state(!is_bar_visible(BANDID_STATUSBAR));
update_window();
break;
@ -1521,11 +1613,9 @@ static LRESULT OnInitPopupMenu( HWND hWnd, WPARAM wParam, LPARAM lParam )
{
HMENU hMenu = (HMENU)wParam;
HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
HWND hwndStatus = GetDlgItem(hWnd, IDC_STATUSBAR);
PARAFORMAT pf;
int nAlignment = -1;
REBARBANDINFOW rbbinfo;
int selFrom, selTo;
GETTEXTLENGTHEX gt;
LRESULT textLength;
@ -1556,17 +1646,11 @@ static LRESULT OnInitPopupMenu( HWND hWnd, WPARAM wParam, LPARAM lParam )
EnableMenuItem(hMenu, ID_EDIT_REDO, MF_BYCOMMAND|(SendMessageW(hwndEditor, EM_CANREDO, 0, 0)) ?
MF_ENABLED : MF_GRAYED);
rbbinfo.cbSize = sizeof(rbbinfo);
rbbinfo.fMask = RBBIM_STYLE;
SendMessageW(hwndReBar, RB_GETBANDINFO, BANDID_TOOLBAR, (LPARAM)&rbbinfo);
CheckMenuItem(hMenu, ID_TOGGLE_TOOLBAR, MF_BYCOMMAND|(is_bar_visible(BANDID_TOOLBAR)) ?
MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu, ID_TOGGLE_TOOLBAR, MF_BYCOMMAND|(rbbinfo.fStyle & RBBS_HIDDEN) ?
MF_UNCHECKED : MF_CHECKED);
SendMessageW(hwndReBar, RB_GETBANDINFO, BANDID_FORMATBAR, (LPARAM)&rbbinfo);
CheckMenuItem(hMenu, ID_TOGGLE_FORMATBAR, MF_BYCOMMAND|(rbbinfo.fStyle & RBBS_HIDDEN) ?
MF_UNCHECKED : MF_CHECKED);
CheckMenuItem(hMenu, ID_TOGGLE_FORMATBAR, MF_BYCOMMAND|(is_bar_visible(BANDID_FORMATBAR)) ?
MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu, ID_TOGGLE_STATUSBAR, MF_BYCOMMAND|IsWindowVisible(hwndStatus) ?
MF_CHECKED : MF_UNCHECKED);
@ -1594,7 +1678,6 @@ static LRESULT OnSize( HWND hWnd, WPARAM wParam, LPARAM lParam )
HWND hwndStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
int rebarHeight = 0;
REBARBANDINFOW rbbinfo;
int rebarRows = 2;
if (hwndStatusBar)
@ -1611,15 +1694,10 @@ static LRESULT OnSize( HWND hWnd, WPARAM wParam, LPARAM lParam )
}
if (hwndReBar)
{
rbbinfo.cbSize = sizeof(rbbinfo);
rbbinfo.fMask = RBBIM_STYLE;
SendMessageW(hwndReBar, RB_GETBANDINFO, BANDID_TOOLBAR, (LPARAM)&rbbinfo);
if(rbbinfo.fStyle & RBBS_HIDDEN)
if(!is_bar_visible(BANDID_TOOLBAR))
rebarRows--;
SendMessageW(hwndReBar, RB_GETBANDINFO, BANDID_FORMATBAR, (LPARAM)&rbbinfo);
if(rbbinfo.fStyle & RBBS_HIDDEN)
if(!is_bar_visible(BANDID_FORMATBAR))
rebarRows--;
rebarHeight = rebarRows ? SendMessageW(hwndReBar, RB_GETBARHEIGHT, 0, 0) : 0;
@ -1665,6 +1743,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPara
if(prompt_save_changes())
{
registry_set_winrect();
registry_set_options();
PostQuitMessage(0);
}
break;
@ -1719,6 +1798,7 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar
ShowWindow(hMainWnd, SW_SHOWDEFAULT);
set_caption(NULL);
set_bar_states();
HandleCommandLine(GetCommandLineW());