1 /* 2 * PROJECT: ReactOS Character Map 3 * LICENSE: GPL - See COPYING in the top level directory 4 * FILE: base/applications/charmap/settings.c 5 * PURPOSE: save/load settings 6 * COPYRIGHT: Copyright 2012 Edijs Kolesnikovics <terminedijs@yahoo.com> 7 * 8 */ 9 10 #include "precomp.h" 11 12 #include <winreg.h> 13 #include <windowsx.h> 14 #include <tchar.h> 15 16 const TCHAR g_szGeneralRegKey[] = _T("Software\\Microsoft\\CharMap"); 17 HWND hWnd; 18 19 LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen) 20 { 21 LONG lResult; 22 HKEY hSubKey = NULL; 23 DWORD cbData, dwType; 24 25 if (lpSubKey) 26 { 27 lResult = RegOpenKey(hKey, lpSubKey, &hSubKey); 28 if (lResult != ERROR_SUCCESS) 29 goto done; 30 hKey = hSubKey; 31 } 32 33 cbData = (dwBufferLen - 1) * sizeof(*pszBuffer); 34 lResult = RegQueryValueEx(hKey, lpValueName, NULL, &dwType, (LPBYTE) pszBuffer, &cbData); 35 if (lResult != ERROR_SUCCESS) 36 goto done; 37 if (dwType != REG_SZ) 38 { 39 lResult = -1; 40 goto done; 41 } 42 43 pszBuffer[cbData / sizeof(*pszBuffer)] = _T('\0'); 44 45 done: 46 if (lResult != ERROR_SUCCESS) 47 pszBuffer[0] = _T('\0'); 48 if (hSubKey) 49 RegCloseKey(hSubKey); 50 return lResult; 51 } 52 53 extern void LoadSettings(void) 54 { 55 HKEY hKey = NULL; 56 int iItemIndex = -1; 57 58 if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) 59 { 60 TCHAR szBuffer[MAX_PATH]; 61 DWORD dwAdvancedChecked; 62 DWORD type, size = sizeof(dwAdvancedChecked); 63 LSTATUS lstatus; 64 65 /* Restore last selected font */ 66 if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("Font"), szBuffer, (sizeof(szBuffer)/sizeof(szBuffer[0]))) == ERROR_SUCCESS) 67 { 68 //Get combobox handle 69 hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO); 70 71 //Search for match and return index if match found 72 iItemIndex = ComboBox_FindStringExact(hWnd, -1, szBuffer); 73 if(iItemIndex != CB_ERR) 74 { 75 ComboBox_SetCurSel(hWnd, iItemIndex); 76 ChangeMapFont(hCharmapDlg); 77 } 78 } 79 80 /* Restore last selected character set */ 81 if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("CodePage"), szBuffer, (sizeof(szBuffer)/sizeof(szBuffer[0]))) == ERROR_SUCCESS) 82 { 83 //Get combobox handle 84 hWnd = GetDlgItem(hCharmapDlg, IDC_COMBO_CHARSET); 85 86 iItemIndex = ComboBox_FindStringExact(hWnd, -1, szBuffer); 87 if(iItemIndex != CB_ERR) 88 { 89 ComboBox_SetCurSel(hWnd, iItemIndex); 90 } 91 } 92 93 lstatus = RegQueryValueEx(hKey, _T("Advanced"), NULL, &type, (LPBYTE)&dwAdvancedChecked, &size); 94 if (lstatus == ERROR_SUCCESS && type == REG_DWORD && dwAdvancedChecked != FALSE) 95 { 96 SendDlgItemMessage(hCharmapDlg, IDC_CHECK_ADVANCED, BM_CLICK, MF_CHECKED, 0); 97 } 98 99 RegCloseKey(hKey); 100 } 101 else 102 { 103 /* Default font seems to be Arial */ 104 hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO); 105 106 iItemIndex = ComboBox_FindStringExact(hWnd, -1, _T("Arial")); 107 if(iItemIndex != CB_ERR) 108 { 109 ComboBox_SetCurSel(hWnd, iItemIndex); 110 ChangeMapFont(hCharmapDlg); 111 } 112 } 113 } 114 115 extern void SaveSettings(void) 116 { 117 HKEY hKey = NULL; 118 119 if (RegCreateKeyEx(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL) == ERROR_SUCCESS) 120 { 121 TCHAR szBuffer[MAX_PATH]; 122 123 hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO); 124 ComboBox_GetText(hWnd, szBuffer, MAX_PATH); 125 126 if(*szBuffer != '\0') 127 RegSetValueEx(hKey, _T("Font"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH); 128 129 hWnd = GetDlgItem(hCharmapDlg, IDC_COMBO_CHARSET); 130 ComboBox_GetText(hWnd, szBuffer, MAX_PATH); 131 132 if(*szBuffer != '\0') 133 RegSetValueEx(hKey, _T("CodePage"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH); 134 135 RegSetValueEx(hKey, _T("Advanced"), 0, REG_DWORD, (LPBYTE)&Settings.IsAdvancedView, (DWORD) sizeof(DWORD)); 136 137 RegCloseKey(hKey); 138 } 139 } 140