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/CMakeLists.txt?rev=56382&r1=56381&r2=56382&view=diff
==============================================================================
--- 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/charmap.c?rev=56382&r1=56381&r2=56382&view=diff
==============================================================================
--- 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/precomp.h?rev=56382&r1=56381&r2=56382&view=diff
==============================================================================
--- 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/settings.c?rev=56382&view=auto
==============================================================================
--- 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 <[email protected]>
+ *
+ */
+
+#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


Reply via email to