Author: akhaldi Date: Sat Apr 21 10:57:16 2012 New Revision: 56382
URL: http://svn.reactos.org/svn/reactos?rev=56382&view=rev Log: [CHARMAP] * Implement LoadSettings() and SaveSettings(). Patch by Edijs Kolesnikovics with some minor changes by me. See issue #6925 for more details.
Added: trunk/reactos/base/applications/charmap/settings.c (with props) Modified: trunk/reactos/base/applications/charmap/CMakeLists.txt trunk/reactos/base/applications/charmap/charmap.c trunk/reactos/base/applications/charmap/precomp.h
Modified: trunk/reactos/base/applications/charmap/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/charmap/C... ============================================================================== --- trunk/reactos/base/applications/charmap/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/base/applications/charmap/CMakeLists.txt [iso-8859-1] Sat Apr 21 10:57:16 2012 @@ -6,13 +6,14 @@ charmap.c lrgcell.c map.c + settings.c charmap.rc)
add_executable(charmap ${SOURCE})
set_module_type(charmap win32gui UNICODE)
-add_importlibs(charmap msvcrt user32 gdi32 comctl32 kernel32) +add_importlibs(charmap advapi32 user32 gdi32 comctl32 msvcrt kernel32)
add_pch(charmap precomp.h)
Modified: trunk/reactos/base/applications/charmap/charmap.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/charmap/c... ============================================================================== --- trunk/reactos/base/applications/charmap/charmap.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/charmap/charmap.c [iso-8859-1] Sat Apr 21 10:57:16 2012 @@ -11,17 +11,11 @@
#define ID_ABOUT 0x1
-typedef struct { - BOOL IsAdvancedView; -} SETTINGS; - HINSTANCE hInstance; -HWND hCharmapDlg; HWND hAdvancedDlg; HWND hStatusWnd; HICON hSmIcon; HICON hBgIcon; -SETTINGS Settings;
/* Font-enumeration callback */ static @@ -103,7 +97,7 @@ }
-static +extern VOID ChangeMapFont(HWND hDlg) { @@ -464,6 +458,7 @@ break;
case WM_DESTROY: + SaveSettings(); PostQuitMessage(0); return 0;
@@ -534,6 +529,7 @@
if (hWnd != NULL) { + LoadSettings(); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); }
Modified: trunk/reactos/base/applications/charmap/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/charmap/p... ============================================================================== --- trunk/reactos/base/applications/charmap/precomp.h [iso-8859-1] (original) +++ trunk/reactos/base/applications/charmap/precomp.h [iso-8859-1] Sat Apr 21 10:57:16 2012 @@ -3,6 +3,8 @@
#define WIN32_LEAN_AND_MEAN #include <windows.h> +#include <windowsx.h> +#include <tchar.h> #include <stdio.h> #include <stdlib.h> #include <commctrl.h> @@ -51,6 +53,12 @@ WCHAR ch; } MAPNOTIFY, *LPMAPNOTIFY;
+typedef struct { + BOOL IsAdvancedView; +} SETTINGS; + +SETTINGS Settings; +HWND hCharmapDlg;
LRESULT CALLBACK LrgCellWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
@@ -59,4 +67,11 @@ BOOL RegisterMapClasses(HINSTANCE hInstance); VOID UnregisterMapClasses(HINSTANCE hInstance);
+/* charmap.c */ +extern VOID ChangeMapFont(HWND hDlg); + +/* settings.c */ +extern void LoadSettings(void); +extern void SaveSettings(void); + #endif /* __CHARMAP_PRECOMP_H */
Added: trunk/reactos/base/applications/charmap/settings.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/charmap/s... ============================================================================== --- trunk/reactos/base/applications/charmap/settings.c (added) +++ trunk/reactos/base/applications/charmap/settings.c [iso-8859-1] Sat Apr 21 10:57:16 2012 @@ -1,0 +1,136 @@ +/* + * PROJECT: ReactOS Character Map + * LICENSE: GPL - See COPYING in the top level directory + * FILE: base/applications/charmap/settings.c + * PURPOSE: save/load settings + * COPYRIGHT: Copyright 2012 Edijs Kolesnikovics terminedijs@yahoo.com + * + */ + +#include <precomp.h> + + +const TCHAR g_szGeneralRegKey[] = _T("Software\Microsoft\CharMap"); +HWND hWnd; + +LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen) +{ + LONG lResult; + HKEY hSubKey = NULL; + DWORD cbData, dwType; + + if (lpSubKey) + { + lResult = RegOpenKey(hKey, lpSubKey, &hSubKey); + if (lResult != ERROR_SUCCESS) + goto done; + hKey = hSubKey; + } + + cbData = (dwBufferLen - 1) * sizeof(*pszBuffer); + lResult = RegQueryValueEx(hKey, lpValueName, NULL, &dwType, (LPBYTE) pszBuffer, &cbData); + if (lResult != ERROR_SUCCESS) + goto done; + if (dwType != REG_SZ) + { + lResult = -1; + goto done; + } + + pszBuffer[cbData / sizeof(*pszBuffer)] = _T('\0'); + +done: + if (lResult != ERROR_SUCCESS) + pszBuffer[0] = _T('\0'); + if (hSubKey) + RegCloseKey(hSubKey); + return lResult; +} + +extern void LoadSettings(void) +{ + HKEY hKey = NULL; + int iItemIndex = -1; + + if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + TCHAR szBuffer[MAX_PATH]; + DWORD dwAdvanChecked; + unsigned long type = REG_DWORD, size = 1024; + + /* Restore last selected font */ + if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("Font"), szBuffer, (sizeof(szBuffer)/sizeof(szBuffer[0]))) == ERROR_SUCCESS) + { + //Get combobox handle + hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO); + + //Search for match and return index if match found + iItemIndex = ComboBox_FindStringExact(hWnd, -1, szBuffer); + if(iItemIndex != CB_ERR) + { + ComboBox_SetCurSel(hWnd, iItemIndex); + ChangeMapFont(hCharmapDlg); + } + } + + /* Restore last selected character set */ + if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("CodePage"), szBuffer, (sizeof(szBuffer)/sizeof(szBuffer[0]))) == ERROR_SUCCESS) + { + //Get combobox handle + hWnd = GetDlgItem(hCharmapDlg, IDC_COMBO_CHARSET); + + iItemIndex = ComboBox_FindStringExact(hWnd, -1, szBuffer); + if(iItemIndex != CB_ERR) + { + ComboBox_SetCurSel(hWnd, iItemIndex); + } + } + + RegQueryValueEx(hKey, _T("Advanced"), NULL, &type, (LPBYTE)&dwAdvanChecked, &size); + if(dwAdvanChecked == TRUE) + SendDlgItemMessage(hCharmapDlg, IDC_CHECK_ADVANCED, BM_CLICK, (dwAdvanChecked ? MF_CHECKED : MF_UNCHECKED), 0); + + RegCloseKey(hKey); + } + else + { + /* Default font seems to be Arial */ + hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO); + + iItemIndex = ComboBox_FindStringExact(hWnd, -1, _T("Arial")); + if(iItemIndex != CB_ERR) + { + ComboBox_SetCurSel(hWnd, iItemIndex); + ChangeMapFont(hCharmapDlg); + } + } +} + +extern void SaveSettings(void) +{ + HKEY hKey = NULL; + + if (RegCreateKey(HKEY_CURRENT_USER, g_szGeneralRegKey, &hKey) == ERROR_SUCCESS) + { + if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS) + { + TCHAR szBuffer[MAX_PATH]; + + hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO); + ComboBox_GetText(hWnd, szBuffer, MAX_PATH); + + if(szBuffer != NULL && *szBuffer != '\0') + RegSetValueEx(hKey, _T("Font"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH); + + hWnd = GetDlgItem(hCharmapDlg, IDC_COMBO_CHARSET); + ComboBox_GetText(hWnd, szBuffer, MAX_PATH); + + if(szBuffer != NULL && *szBuffer != '\0') + RegSetValueEx(hKey, _T("CodePage"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH); + + RegSetValueEx(hKey, _T("Advanced"), 0, REG_DWORD, (LPBYTE)&Settings.IsAdvancedView, (DWORD) sizeof(DWORD)); + + RegCloseKey(hKey); + } + } +}
Propchange: trunk/reactos/base/applications/charmap/settings.c ------------------------------------------------------------------------------ svn:eol-style = native