From b0f8c4a5fe5d44daaa371dfab70a37c00b09fcff Mon Sep 17 00:00:00 2001 From: Nathan Woods Date: Fri, 30 Sep 2005 02:53:34 +0000 Subject: [PATCH] Notepad: 1. Fixed syntax errors in the ES and NL localizations 2. Added code to save and restore settings; just the font for now svn path=/trunk/; revision=18164 --- reactos/subsys/system/notepad/Es.rc | 2 - reactos/subsys/system/notepad/Nl.rc | 4 +- reactos/subsys/system/notepad/main.c | 4 + reactos/subsys/system/notepad/main.h | 4 + reactos/subsys/system/notepad/notepad.xml | 1 + reactos/subsys/system/notepad/rsrc.rc | 2 +- reactos/subsys/system/notepad/settings.c | 217 ++++++++++++++++++++++ 7 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 reactos/subsys/system/notepad/settings.c diff --git a/reactos/subsys/system/notepad/Es.rc b/reactos/subsys/system/notepad/Es.rc index e41c4e60ff2..1c4920902da 100644 --- a/reactos/subsys/system/notepad/Es.rc +++ b/reactos/subsys/system/notepad/Es.rc @@ -55,8 +55,6 @@ POPUP "&Editar" { MENUITEM "&Ajuste de línea", CMD_WRAP MENUITEM "Tipo de &letra...", CMD_FONT } -POPUP "&Buscar" { - } POPUP "A&yuda" { MENUITEM "Í&ndice", CMD_HELP_CONTENTS MENUITEM "&Buscar...", CMD_HELP_SEARCH diff --git a/reactos/subsys/system/notepad/Nl.rc b/reactos/subsys/system/notepad/Nl.rc index 69b40fc917d..a2e2f57e8e5 100644 --- a/reactos/subsys/system/notepad/Nl.rc +++ b/reactos/subsys/system/notepad/Nl.rc @@ -1,4 +1,4 @@ -/* +/* * Notepad (Dutch resources) * * Copyright 2003 Hans Leidekker @@ -38,7 +38,7 @@ POPUP "Be&werken" { MENUITEM "&Ongedaan maken\tCtrl+Z", CMD_UNDO MENUITEM SEPARATOR MENUITEM "K&nippen\tCtrl+X", CMD_CUT - MENUITEM "&Kopiëren\tCtrl+C", CMD_COPY + MENUITEM "&Kopiëren\tCtrl+C", CMD_COPY MENUITEM "&Plakken\tCtrl+V", CMD_PASTE MENUITEM "&Verwijderen\tDel", CMD_DELETE MENUITEM SEPARATOR diff --git a/reactos/subsys/system/notepad/main.c b/reactos/subsys/system/notepad/main.c index 0c9a800aa57..2605b97f901 100644 --- a/reactos/subsys/system/notepad/main.c +++ b/reactos/subsys/system/notepad/main.c @@ -292,6 +292,8 @@ static LRESULT WINAPI NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, if (!Globals.hEdit) return -1; SendMessage(Globals.hEdit, EM_LIMITTEXT, 0, 0); + if (Globals.hFont) + SendMessage(Globals.hEdit, WM_SETFONT, (WPARAM)Globals.hFont, (LPARAM)TRUE); break; } @@ -492,6 +494,7 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show) ZeroMemory(&Globals, sizeof(Globals)); Globals.hInstance = hInstance; + LoadSettings(); ZeroMemory(&class, sizeof(class)); class.cbSize = sizeof(class); @@ -537,5 +540,6 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show) DispatchMessage(&msg); } } + SaveSettings(); return msg.wParam; } diff --git a/reactos/subsys/system/notepad/main.h b/reactos/subsys/system/notepad/main.h index b7cf72c2c20..7e0c59b26b5 100644 --- a/reactos/subsys/system/notepad/main.h +++ b/reactos/subsys/system/notepad/main.h @@ -73,4 +73,8 @@ VOID SetFileName(LPCWSTR szFileName); BOOL ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, int *piEncoding, int *piEoln); BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding, int iEoln); +/* from settings.c */ +void LoadSettings(void); +void SaveSettings(void); + diff --git a/reactos/subsys/system/notepad/notepad.xml b/reactos/subsys/system/notepad/notepad.xml index 50e928f0f7a..663da7c58bf 100644 --- a/reactos/subsys/system/notepad/notepad.xml +++ b/reactos/subsys/system/notepad/notepad.xml @@ -11,5 +11,6 @@ license.c main.c text.c + settings.c rsrc.rc diff --git a/reactos/subsys/system/notepad/rsrc.rc b/reactos/subsys/system/notepad/rsrc.rc index 5dabcf987bb..75cee096822 100644 --- a/reactos/subsys/system/notepad/rsrc.rc +++ b/reactos/subsys/system/notepad/rsrc.rc @@ -31,7 +31,7 @@ ID_ACCEL ACCELERATORS "^C", CMD_COPY "^F", CMD_SEARCH "^G", CMD_GOTO - "^H", CMD_REPLACE + "H", CMD_REPLACE, VIRTKEY, CONTROL "^O", CMD_OPEN "^S", CMD_SAVE "^V", CMD_PASTE diff --git a/reactos/subsys/system/notepad/settings.c b/reactos/subsys/system/notepad/settings.c new file mode 100644 index 00000000000..fe6717e3c1b --- /dev/null +++ b/reactos/subsys/system/notepad/settings.c @@ -0,0 +1,217 @@ +/* + * Notepad (settings.c) + * + * Copyright 1998,99 Marcel Baur + * Copyright 2002 Sylvain Petreolle + * Copyright 2002 Andriy Palamarchuk + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define UNICODE +#define _UNICODE + +#include +#include +#include +#include +#include + +#include "main.h" + +static const TCHAR s_szRegistryKey[] = { 'S','o','f','t','w','a','r','e', + '\\','M','i','c','r','o','s','o','f','t', + '\\','N','o','t','e','p','a','d',0 }; + + +static LONG HeightFromPointSize(DWORD dwPointSize) +{ + LONG lHeight; + HDC hDC; + + hDC = GetDC(NULL); + lHeight = -MulDiv(dwPointSize, GetDeviceCaps(hDC, LOGPIXELSY), 720); + ReleaseDC(NULL, hDC); + + return lHeight; +} + +static DWORD PointSizeFromHeight(LONG lHeight) +{ + DWORD dwPointSize; + HDC hDC; + + hDC = GetDC(NULL); + dwPointSize = -MulDiv(lHeight, 720, GetDeviceCaps(hDC, LOGPIXELSY)); + ReleaseDC(NULL, hDC); + + /* round to nearest multiple of 10 */ + dwPointSize += 5; + dwPointSize -= dwPointSize % 10; + + return dwPointSize; +} + +static BOOL QueryGeneric(HKEY hKey, LPCSTR pszValueName, DWORD dwExpectedType, + LPVOID pvResult, DWORD dwResultSize) +{ + WCHAR szValueW[32]; + LPCTSTR pszValueNameT; + DWORD dwType, cbData; + LPVOID *pTemp; + BOOL bSuccess = FALSE; + +#ifdef UNICODE + MultiByteToWideChar(CP_ACP, 0, pszValueName, -1, szValueW, sizeof(szValueW) / sizeof(szValueW[0])); + pszValueNameT = szValueW; +#else + pszValueNameT = pszValueName; +#endif + + pTemp = HeapAlloc(GetProcessHeap(), 0, dwResultSize); + if (!pTemp) + goto done; + memset(pTemp, 0, dwResultSize); + + cbData = dwResultSize; + if (RegQueryValueEx(hKey, pszValueNameT, NULL, &dwType, (LPBYTE) pTemp, &cbData) != ERROR_SUCCESS) + goto done; + + if (dwType != dwExpectedType) + goto done; + + memcpy(pvResult, pTemp, cbData); + bSuccess = TRUE; + +done: + if (pTemp) + HeapFree(GetProcessHeap(), 0, pTemp); + return bSuccess; +} + +static BOOL QueryDword(HKEY hKey, LPCSTR pszValueName, DWORD *pdwResult) +{ + return QueryGeneric(hKey, pszValueName, REG_DWORD, pdwResult, sizeof(*pdwResult)); +} + +static BOOL QueryByte(HKEY hKey, LPCSTR pszValueName, BYTE *pbResult) +{ + DWORD dwResult; + if (!QueryGeneric(hKey, pszValueName, REG_DWORD, &dwResult, sizeof(dwResult))) + return FALSE; + if (dwResult >= 0x100) + return FALSE; + *pbResult = (BYTE) dwResult; + return TRUE; +} + +static BOOL QueryString(HKEY hKey, LPCSTR pszValueName, LPTSTR pszResult, DWORD dwResultSize) +{ + return QueryGeneric(hKey, pszValueName, REG_SZ, pszResult, dwResultSize * sizeof(*pszResult)); +} + +void LoadSettings(void) +{ + HKEY hKey = NULL; + HFONT hFont; + DWORD dwPointSize = 0; + + if (RegOpenKey(HKEY_CURRENT_USER, s_szRegistryKey, &hKey) == ERROR_SUCCESS) + { + QueryByte(hKey, "lfCharSet", &Globals.lfFont.lfCharSet); + QueryByte(hKey, "lfClipPrecision", &Globals.lfFont.lfClipPrecision); + QueryDword(hKey, "lfEscapement", &Globals.lfFont.lfEscapement); + QueryString(hKey, "lfFaceName", Globals.lfFont.lfFaceName, sizeof(Globals.lfFont.lfFaceName) / sizeof(Globals.lfFont.lfFaceName[0])); + QueryByte(hKey, "lfItalic", &Globals.lfFont.lfItalic); + QueryDword(hKey, "lfOrientation", &Globals.lfFont.lfOrientation); + QueryByte(hKey, "lfOutPrecision", &Globals.lfFont.lfOutPrecision); + QueryByte(hKey, "lfPitchAndFamily", &Globals.lfFont.lfPitchAndFamily); + QueryByte(hKey, "lfQuality", &Globals.lfFont.lfQuality); + QueryByte(hKey, "lfStrikeOut", &Globals.lfFont.lfStrikeOut); + QueryByte(hKey, "lfUnderline", &Globals.lfFont.lfUnderline); + QueryDword(hKey, "lfWeight", &Globals.lfFont.lfWeight); + QueryDword(hKey, "iPointSize", &dwPointSize); + + if (dwPointSize != 0) + Globals.lfFont.lfHeight = HeightFromPointSize(dwPointSize); + + hFont = CreateFontIndirect(&Globals.lfFont); + if (hFont) + { + if (Globals.hFont) + DeleteObject(Globals.hFont); + Globals.hFont = hFont; + } + + RegCloseKey(hKey); + } +} + +static BOOL SaveDword(HKEY hKey, LPCSTR pszValueName, DWORD dwValue) +{ + WCHAR szValueW[32]; + LPCTSTR pszValueNameT; + +#ifdef UNICODE + MultiByteToWideChar(CP_ACP, 0, pszValueName, -1, szValueW, sizeof(szValueW) / sizeof(szValueW[0])); + pszValueNameT = szValueW; +#else + pszValueNameT = pszValueName; +#endif + + return RegSetValueEx(hKey, pszValueNameT, 0, REG_DWORD, (LPBYTE) &dwValue, sizeof(dwValue)) == ERROR_SUCCESS; +} + +static BOOL SaveString(HKEY hKey, LPCSTR pszValueName, LPCTSTR pszValue) +{ + WCHAR szValueW[32]; + LPCTSTR pszValueNameT; + +#ifdef UNICODE + MultiByteToWideChar(CP_ACP, 0, pszValueName, -1, szValueW, sizeof(szValueW) / sizeof(szValueW[0])); + pszValueNameT = szValueW; +#else + pszValueNameT = pszValueName; +#endif + + return RegSetValueEx(hKey, pszValueNameT, 0, REG_SZ, (LPBYTE) pszValue, _tcslen(pszValue) * sizeof(*pszValue)) == ERROR_SUCCESS; +} + +void SaveSettings(void) +{ + HKEY hKey; + DWORD dwDisposition; + + if (RegCreateKeyEx(HKEY_CURRENT_USER, s_szRegistryKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) + == ERROR_SUCCESS) + { + SaveDword(hKey, "lfCharSet", Globals.lfFont.lfCharSet); + SaveDword(hKey, "lfClipPrecision", Globals.lfFont.lfClipPrecision); + SaveDword(hKey, "lfEscapement", Globals.lfFont.lfEscapement); + SaveString(hKey, "lfFaceName", Globals.lfFont.lfFaceName); + SaveDword(hKey, "lfItalic", Globals.lfFont.lfItalic); + SaveDword(hKey, "lfOrientation", Globals.lfFont.lfOrientation); + SaveDword(hKey, "lfOutPrecision", Globals.lfFont.lfOutPrecision); + SaveDword(hKey, "lfPitchAndFamily", Globals.lfFont.lfPitchAndFamily); + SaveDword(hKey, "lfQuality", Globals.lfFont.lfQuality); + SaveDword(hKey, "lfStrikeOut", Globals.lfFont.lfStrikeOut); + SaveDword(hKey, "lfUnderline", Globals.lfFont.lfUnderline); + SaveDword(hKey, "lfWeight", Globals.lfFont.lfWeight); + SaveDword(hKey, "iPointSize", PointSizeFromHeight(Globals.lfFont.lfHeight)); + + RegCloseKey(hKey); + } + +}