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/…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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(a)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