[ros-diffs] [fireball] 22412: Alexey Zavyalov: Start implementing new International Settings applet (Windows XP-alike style, and eventually will work in Windows XP). I keep the old intl.cpl in our tree since it contains some hacks to switch languages/locales/layouts, which will soon be gone (along with the old intl.cpl logically)

fireball at svn.reactos.org fireball at svn.reactos.org
Mon Jun 19 14:43:31 CEST 2006


Author: fireball
Date: Mon Jun 19 16:43:29 2006
New Revision: 22412

URL: http://svn.reactos.ru/svn/reactos?rev=22412&view=rev
Log:
Alexey Zavyalov: Start implementing new International Settings applet (Windows XP-alike style, and eventually will work in Windows XP).

I keep the old intl.cpl in our tree since it contains some hacks to switch languages/locales/layouts, which will soon be gone (along with the old intl.cpl logically)

Added:
    trunk/reactos/dll/cpl/intl_new/
    trunk/reactos/dll/cpl/intl_new/En.rc
    trunk/reactos/dll/cpl/intl_new/extra.c   (with props)
    trunk/reactos/dll/cpl/intl_new/intl.c   (with props)
    trunk/reactos/dll/cpl/intl_new/intl.def   (with props)
    trunk/reactos/dll/cpl/intl_new/intl.h   (with props)
    trunk/reactos/dll/cpl/intl_new/intl.rbuild   (with props)
    trunk/reactos/dll/cpl/intl_new/intl.rc   (with props)
    trunk/reactos/dll/cpl/intl_new/locale.c   (with props)
    trunk/reactos/dll/cpl/intl_new/resource.h   (with props)
    trunk/reactos/dll/cpl/intl_new/resources/
    trunk/reactos/dll/cpl/intl_new/resources/applet.ico   (with props)
    trunk/reactos/dll/cpl/intl_new/resources/flags.ico   (with props)
Modified:
    trunk/reactos/dll/cpl/cpl.rbuild

Modified: trunk/reactos/dll/cpl/cpl.rbuild
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/cpl.rbuild?rev=22412&r1=22411&r2=22412&view=diff
==============================================================================
--- trunk/reactos/dll/cpl/cpl.rbuild (original)
+++ trunk/reactos/dll/cpl/cpl.rbuild Mon Jun 19 16:43:29 2006
@@ -12,6 +12,9 @@
 </directory>
 <directory name="intl">
 	<xi:include href="intl/intl.rbuild" />
+</directory>
+<directory name="intl_new">
+	<xi:include href="intl_new/intl.rbuild" />
 </directory>
 <directory name="main">
 	<xi:include href="main/main.rbuild" />

Added: trunk/reactos/dll/cpl/intl_new/En.rc
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/En.rc?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/En.rc (added)
+++ trunk/reactos/dll/cpl/intl_new/En.rc Mon Jun 19 16:43:29 2006
@@ -1,0 +1,48 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+IDD_REGOPTSPAGE DIALOGEX 0, 0, 252, 236
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Regional options"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    GROUPBOX "Regional options and standards", IDC_GROUPBOX, 5, 3, 242, 165
+    LTEXT "This option influences a way of display by some programs of numbers, sums of money, dates and time.", IDC_STATIC, 14, 15, 230, 16
+    LTEXT "&Choose an element from the list or press the button ""Setup"" to set formats independently:", IDC_STATIC, 14, 36, 230, 16
+    COMBOBOX IDC_SETREG_COMBO, 14, 54, 168, 120, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | 
+             WS_VSCROLL | WS_TABSTOP | CBS_SORT
+    PUSHBUTTON "Se&tup...", IDC_SETUP_BUTTON, 187, 54, 52, 13
+    LTEXT "Samples", IDC_STATIC, 14, 73, 70, 10
+    LTEXT "Number:", IDC_STATIC, 16, 86, 48, 10 
+    LTEXT "Monetary:", IDC_STATIC, 16, 101, 48, 10
+    LTEXT "Time:", IDC_STATIC, 16, 116, 48, 10
+    LTEXT "Short date:", IDC_STATIC, 16, 131, 48, 10
+    LTEXT "Long date:", IDC_STATIC, 16, 146, 48, 10
+    EDITTEXT IDC_NUMSAMPLE_EDIT, 69, 86, 170, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
+    EDITTEXT IDC_MONEYSAMPLE_EDIT, 69, 101, 170, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
+    EDITTEXT IDC_TIMESAMPLE_EDIT, 69, 116, 170, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
+    EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 69, 131, 170, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
+    EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 69, 146, 170, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
+    GROUPBOX "Geographic location", IDC_GROUPBOX, 5, 172, 242, 56
+    LTEXT "Set up your location that services could supply you with the local information, for example, news and reports of weather", IDC_STATIC, 14, 184, 225, 24
+    COMBOBOX IDC_LOCATION_COMBO, 14, 211, 225, 40, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | 
+             WS_VSCROLL | WS_TABSTOP | CBS_SORT
+END
+
+IDD_EXTRAOPTSPAGE DIALOGEX 0, 0, 252, 236
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Extra"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    GROUPBOX "Program language that not unicode supported", IDC_GROUPBOX, 5, 5, 242, 90
+    COMBOBOX IDC_LANGUAGE_COMBO, 14, 75, 225, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | 
+             WS_VSCROLL | WS_TABSTOP | CBS_SORT
+    LTEXT "This option...", IDC_STATIC, 14, 18, 223, 33
+    LTEXT "Select language...", IDC_STATIC, 14, 55, 223, 18
+    GROUPBOX "Transformation tables codepages", IDC_GROUPBOX, 5, 101, 242, 88
+END
+
+STRINGTABLE
+BEGIN
+    IDS_CPLNAME "Language and regional options"
+    IDS_CPLDESCRIPTION "Choose language and formats of numbers, currencies, time and date"
+END

Added: trunk/reactos/dll/cpl/intl_new/extra.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/extra.c?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/extra.c (added)
+++ trunk/reactos/dll/cpl/intl_new/extra.c Mon Jun 19 16:43:29 2006
@@ -1,0 +1,102 @@
+/*
+ * PROJECT:         ReactOS International Control Panel
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            lib/cpl/intl/extra.c
+ * PURPOSE:         Extra parameters page
+ * PROGRAMMERS:     Alexey Zavyalov (gen_x at mail.ru)
+*/
+
+/* INCLUDES *****************************************************************/
+
+#include <windows.h>
+#include <commctrl.h>
+#include <cpl.h>
+
+#include "intl.h"
+#include "resource.h"
+
+/* GLOBALS ******************************************************************/
+
+HWND hLanguageList;
+
+/* FUNCTIONS ****************************************************************/
+
+/* Language enumerate procedure */
+BOOL
+CALLBACK
+LanguagesEnumProc(LPTSTR lpLanguage)
+{
+    LCID Lcid;
+    TCHAR Lang[MAX_STR_SIZE];
+    int Index;
+
+    Lcid = wcstoul(lpLanguage, NULL, 16);
+
+    GetLocaleInfo(Lcid, LOCALE_SLANGUAGE, Lang, sizeof(Lang));
+    Index = SendMessageW(hLanguageList,
+                         CB_ADDSTRING,
+                         0,
+                         (LPARAM)Lang);
+
+    SendMessageW(hLanguageList,
+                 CB_SETITEMDATA,
+                 Index,
+                 (LPARAM)Lcid);
+
+    return TRUE;
+}
+
+/* Enumerate all installed language identifiers */
+static
+VOID
+CreateLanguagesList(HWND hWnd)
+{
+    TCHAR LangSel[MAX_STR_SIZE];
+
+    hLanguageList = hWnd;
+
+    EnumSystemLocalesW(LanguagesEnumProc, LCID_INSTALLED);
+
+    // Select current locale
+    GetLocaleInfo(GetUserDefaultLCID(),
+                  LOCALE_SLANGUAGE,
+                  LangSel,
+                  sizeof(LangSel));
+
+    SendMessageW(hLanguageList,
+                 CB_SELECTSTRING,
+                 -1,
+                (LPARAM)LangSel);
+}
+
+
+/* Extra Parameters page dialog callback */
+INT_PTR
+CALLBACK
+ExtraOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+    switch(uMsg)
+    {
+        case WM_INITDIALOG:
+            CreateLanguagesList(GetDlgItem(hwndDlg, IDC_LANGUAGE_COMBO));
+        break;
+
+        case WM_COMMAND:
+
+        break;
+
+        case WM_NOTIFY:
+        {
+            LPNMHDR Lpnm = (LPNMHDR)lParam;
+            /* If push apply button */
+            if (Lpnm->code == (UINT)PSN_APPLY)
+            {
+                // TODO: Implement
+            }
+        }
+        break;
+    }
+    return FALSE;
+}
+
+/* EOF */

Propchange: trunk/reactos/dll/cpl/intl_new/extra.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/intl.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/intl.c?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/intl.c (added)
+++ trunk/reactos/dll/cpl/intl_new/intl.c Mon Jun 19 16:43:29 2006
@@ -1,0 +1,138 @@
+/*
+ * PROJECT:         ReactOS International Control Panel
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            lib/cpl/intl/intl.c
+ * PURPOSE:         ReactOS International Control Panel
+ * PROGRAMMERS:     Eric Kohl
+ *                  Alexey Zavyalov (gen_x at mail.ru)
+*/
+
+/* INCLUDES *****************************************************************/
+
+#include <windows.h>
+#include <commctrl.h>
+#include <cpl.h>
+
+#include "resource.h"
+#include "intl.h"
+
+/* GLOBALS ******************************************************************/
+
+#define NUM_APPLETS     (1)
+#define NUM_SHEETS      2
+
+LONG APIENTRY Applet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam);
+
+HINSTANCE hApplet;
+
+APPLET Applets[NUM_APPLETS] = 
+{
+  {IDC_CPLICON, IDS_CPLNAME, IDS_CPLDESCRIPTION, Applet}
+};
+
+/* FUNCTIONS ****************************************************************/
+
+static
+VOID
+InitPropSheetPage(PROPSHEETPAGE *PsPage, WORD IdDlg, DLGPROC DlgProc)
+{
+    ZeroMemory(PsPage, sizeof(PROPSHEETPAGE));
+    PsPage->dwSize = sizeof(PROPSHEETPAGE);
+    PsPage->dwFlags = PSP_DEFAULT;
+    PsPage->hInstance = hApplet;
+    PsPage->pszTemplate = MAKEINTRESOURCE(IdDlg);
+    PsPage->pfnDlgProc = DlgProc;
+}
+
+/* Create applets */
+LONG
+APIENTRY
+Applet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam)
+{
+
+    PROPSHEETPAGE PsPage[NUM_SHEETS];
+    PROPSHEETHEADER psh;
+    TCHAR Caption[MAX_STR_SIZE];
+
+    LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
+
+    ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
+    psh.dwSize = sizeof(PROPSHEETHEADER);
+    psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_USECALLBACK | PSH_PROPTITLE;
+    psh.hwndParent = NULL;
+    psh.hInstance = hApplet;
+    psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON));
+    psh.pszCaption = Caption;
+    psh.nPages = sizeof(PsPage) / sizeof(PROPSHEETPAGE);
+    psh.nStartPage = 0;
+    psh.ppsp = PsPage;
+
+    InitPropSheetPage(&PsPage[0], IDD_REGOPTSPAGE, RegOptsProc);
+    InitPropSheetPage(&PsPage[1], IDD_EXTRAOPTSPAGE, ExtraOptsProc);
+
+    return (LONG)(PropertySheet(&psh) != -1);
+}
+
+/* Control Panel Callback */
+LONG
+CALLBACK
+CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
+{
+    switch(uMsg)
+    {
+        case CPL_INIT:
+        {
+            return TRUE;
+        }
+        case CPL_GETCOUNT:
+        {
+            return NUM_APPLETS;
+        }
+        case CPL_INQUIRE:
+        {
+            CPLINFO *CplInfo = (CPLINFO*)lParam2;
+            UINT uAppIndex = (UINT)lParam1;
+
+            CplInfo->lData = 0;
+            CplInfo->idIcon = Applets[uAppIndex].idIcon;
+            CplInfo->idName = Applets[uAppIndex].idName;
+            CplInfo->idInfo = Applets[uAppIndex].idDescription;
+            break;
+        }
+        case CPL_DBLCLK:
+        {
+            UINT uAppIndex = (UINT)lParam1;
+            Applets[uAppIndex].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
+            break;
+        }
+    }
+
+    return FALSE;
+}
+
+/* Standart DLL entry */
+
+BOOL
+STDCALL
+DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
+{
+    INITCOMMONCONTROLSEX InitControls;
+    switch(dwReason)
+    {
+        case DLL_PROCESS_ATTACH:
+        case DLL_THREAD_ATTACH:
+        {
+            InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
+            InitControls.dwICC = ICC_LISTVIEW_CLASSES | ICC_UPDOWN_CLASS | ICC_BAR_CLASSES;
+            InitCommonControlsEx(&InitControls);
+
+            hApplet = hinstDLL;
+            break;
+        }
+    }
+
+
+    return TRUE;
+}
+
+/* EOF */

Propchange: trunk/reactos/dll/cpl/intl_new/intl.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/intl.def
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/intl.def?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/intl.def (added)
+++ trunk/reactos/dll/cpl/intl_new/intl.def Mon Jun 19 16:43:29 2006
@@ -1,0 +1,8 @@
+LIBRARY intl.cpl
+
+EXPORTS
+CPlApplet at 16
+RegOptsProc at 16
+ExtraOptsProc at 16
+
+; EOF

Propchange: trunk/reactos/dll/cpl/intl_new/intl.def
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/intl.h
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/intl.h?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/intl.h (added)
+++ trunk/reactos/dll/cpl/intl_new/intl.h Mon Jun 19 16:43:29 2006
@@ -1,0 +1,31 @@
+#ifndef __INTL_H
+#define __INTL_H
+
+/* GLOBALS ******************************************************************/
+
+#define MAX_STR_SIZE    128
+#define MAX_FMT_SIZE    30
+
+typedef struct
+{
+    int idIcon;
+    int idName;
+    int idDescription;
+    APPLET_PROC AppletProc;
+} APPLET, *PAPPLET;
+
+extern HINSTANCE hApplet;
+
+/* locale.c */
+INT_PTR
+CALLBACK
+RegOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+/* extra.c */
+INT_PTR
+CALLBACK
+ExtraOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+#endif /* __INTL_H */
+
+/* EOF */

Propchange: trunk/reactos/dll/cpl/intl_new/intl.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/intl.rbuild
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/intl.rbuild?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/intl.rbuild (added)
+++ trunk/reactos/dll/cpl/intl_new/intl.rbuild Mon Jun 19 16:43:29 2006
@@ -1,0 +1,18 @@
+<module name="intl_new" type="win32dll" extension=".cpl" baseaddress="${BASEADDRESS_INTL}" installbase="system32" installname="intl_new.cpl" usewrc="false">
+	<importlibrary definition="intl.def" />
+	<include base="intl">.</include>
+	<define name="UNICODE" />
+	<define name="_UNICODE" />
+	<define name="__REACTOS__" />
+	<define name="__USE_W32API" />
+	<define name="_WIN32_IE">0x600</define>
+	<define name="_WIN32_WINNT">0x501</define>
+	<library>kernel32</library>
+	<library>user32</library>
+	<library>comctl32</library>
+	<library>advapi32</library>
+	<file>intl.c</file>
+	<file>locale.c</file>
+	<file>extra.c</file>
+	<file>intl.rc</file>
+</module>

Propchange: trunk/reactos/dll/cpl/intl_new/intl.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/intl.rc
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/intl.rc?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/intl.rc (added)
+++ trunk/reactos/dll/cpl/intl_new/intl.rc Mon Jun 19 16:43:29 2006
@@ -1,0 +1,20 @@
+#include <windows.h>
+#include "resource.h"
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION	"ReactOS Control Panel\0"
+#define REACTOS_STR_INTERNAL_NAME	"intl\0"
+#define REACTOS_STR_ORIGINAL_FILENAME	"intl.cpl\0"
+#include <reactos/version.rc>
+
+IDC_CPLICON ICON "resources/applet.ico"
+IDC_FLAGS ICON "resources/flags.ico"
+
+
+/*
+ * Everything specific to any language goes in one of the specific
+ * files. Note that you can and may override resources which also have
+ * a neutral version. This is to get localized bitmaps for example.
+*/
+
+#include "En.rc"

Propchange: trunk/reactos/dll/cpl/intl_new/intl.rc
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/locale.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/locale.c?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/locale.c (added)
+++ trunk/reactos/dll/cpl/intl_new/locale.c Mon Jun 19 16:43:29 2006
@@ -1,0 +1,301 @@
+/*
+ * PROJECT:         ReactOS International Control Panel
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * FILE:            lib/cpl/intl/locale.h
+ * PURPOSE:         Regional parameters page
+ * PROGRAMMERS:     Eric Kohl
+ *                  Alexey Zavyalov (gen_x at mail.ru)
+*/
+
+/* INCLUDES *****************************************************************/
+
+#include <windows.h>
+#include <commctrl.h>
+#include <cpl.h>
+
+#include "intl.h"
+#include "resource.h"
+
+/* GLOBALS ******************************************************************/
+
+#define SAMPLE_NUMBER   L"123456789"
+#define NO_FLAG         0
+
+HWND hLocaleList, hGeoList;
+
+/* FUNCTIONS ****************************************************************/
+
+/* Location enumerate procedure */
+BOOL
+CALLBACK
+LocationsEnumProc(GEOID gId)
+{
+    TCHAR loc[MAX_STR_SIZE];
+    int index;
+
+    GetGeoInfo(gId, GEO_FRIENDLYNAME, loc, MAX_FMT_SIZE, LANG_SYSTEM_DEFAULT);
+    index = SendMessageW(hGeoList,
+                         CB_ADDSTRING,
+                         0,
+                         (LPARAM)loc);
+
+    SendMessageW(hGeoList,
+                 CB_SETITEMDATA,
+                 index,
+                 (LPARAM)gId);
+
+    return TRUE;
+}
+
+/* Enumerate all system locations identifiers */
+static
+VOID
+CreateLocationsList(HWND hWnd)
+{
+    GEOID userGeoID;
+    TCHAR loc[MAX_STR_SIZE];
+
+    hGeoList = hWnd;
+
+    EnumSystemGeoID(GEOCLASS_NATION, 0, LocationsEnumProc);
+
+    // Select current location
+    userGeoID = GetUserGeoID(GEOCLASS_NATION);
+    GetGeoInfo(userGeoID,
+               GEO_FRIENDLYNAME,
+               loc,
+               MAX_FMT_SIZE,
+               LANG_SYSTEM_DEFAULT);
+
+    SendMessageW(hGeoList,
+                 CB_SELECTSTRING,
+                 -1,
+                 (LPARAM)loc);
+}
+
+/* Locale enumerate procedure */
+BOOL
+CALLBACK
+LocalesEnumProc(LPTSTR lpLocale)
+{
+    LCID lcid;
+    TCHAR lang[MAX_STR_SIZE];
+    int index;
+
+    lcid = wcstoul(lpLocale, NULL, 16);
+
+    GetLocaleInfo(lcid, LOCALE_SLANGUAGE, lang, sizeof(lang));
+    index = SendMessageW(hLocaleList,
+                         CB_ADDSTRING,
+                         0,
+                         (LPARAM)lang);
+
+    SendMessageW(hLocaleList,
+                 CB_SETITEMDATA,
+                 index,
+                 (LPARAM)lcid);
+
+    return TRUE;
+}
+
+/* Enumerate all installed locale identifiers */
+static
+VOID
+CreateLanguagesList(HWND hWnd)
+{
+    TCHAR langSel[MAX_STR_SIZE];
+
+    hLocaleList = hWnd;
+
+    EnumSystemLocalesW(LocalesEnumProc, LCID_INSTALLED);
+
+    // Select current locale
+    GetLocaleInfo(GetUserDefaultLCID(),
+                  LOCALE_SLANGUAGE,
+                  langSel,
+                  sizeof(langSel));
+
+    SendMessageW(hLocaleList,
+                 CB_SELECTSTRING,
+                 -1,
+                 (LPARAM)langSel);
+}
+
+
+/* Update all locale samples */
+static
+VOID
+UpdateLocaleSample(HWND hwndDlg, LCID lcidLocale)
+{
+    WCHAR OutBuffer[MAX_FMT_SIZE];
+
+    /* Get number format sample */
+    GetNumberFormatW(lcidLocale, NO_FLAG, SAMPLE_NUMBER, NULL, OutBuffer,
+        MAX_FMT_SIZE);
+    SendMessageW(GetDlgItem(hwndDlg, IDC_NUMSAMPLE_EDIT),
+                 WM_SETTEXT, 0, (LPARAM)OutBuffer);
+
+    /* Get monetary format sample */
+    GetCurrencyFormatW(lcidLocale, LOCALE_USE_CP_ACP, SAMPLE_NUMBER, NULL,
+        OutBuffer, MAX_FMT_SIZE);
+    SendMessageW(GetDlgItem(hwndDlg, IDC_MONEYSAMPLE_EDIT),
+                 WM_SETTEXT, 0, (LPARAM)OutBuffer);
+
+    /* Get time format sample */
+    GetTimeFormatW(lcidLocale, NO_FLAG, NULL, NULL, OutBuffer, MAX_FMT_SIZE);
+    SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESAMPLE_EDIT),
+        WM_SETTEXT,
+        0,
+        (LPARAM)OutBuffer);
+
+    /* Get short date format sample */
+    GetDateFormatW(lcidLocale, DATE_SHORTDATE, NULL, NULL, OutBuffer,
+        MAX_FMT_SIZE);
+    SendMessageW(GetDlgItem(hwndDlg, IDC_SHORTTIMESAMPLE_EDIT), WM_SETTEXT,
+        0, (LPARAM)OutBuffer);
+
+    /* Get long date sample */
+    GetDateFormatW(lcidLocale, DATE_LONGDATE, NULL, NULL, OutBuffer,
+        MAX_FMT_SIZE);
+    SendMessageW(GetDlgItem(hwndDlg, IDC_FULLTIMESAMPLE_EDIT),
+        WM_SETTEXT, 0, (LPARAM)OutBuffer);
+}
+
+/* Setting up new locale */
+static
+VOID
+SetNewLocale(LCID LcidLocale)
+{
+    int RetCode;
+    TCHAR OutBuff[MAX_STR_SIZE];
+    int LocaleCounter;
+    HKEY LocaleKey;
+    TCHAR Value[9];
+    DWORD ValueSize;
+
+    //SetUserDefaultLCID(LcidLocale); // Not implemented in MS :(
+
+    if(!IsValidLocale(LcidLocale, LCID_INSTALLED)) 
+    {
+        MessageBoxW(NULL, L"Invalid locale.", L"Critical error",
+            MB_OK | MB_ICONERROR);
+        return;
+    }
+
+    //HACKHACK: I'm sure there is a better way to do this
+    for(LocaleCounter = LOCALE_ILANGUAGE;
+        LocaleCounter <= LOCALE_SISO3166CTRYNAME; LocaleCounter++)
+    {
+        RetCode = GetLocaleInfoW(LcidLocale,
+                                 (LCTYPE)LocaleCounter,
+                                 OutBuff,
+                                 sizeof(OutBuff));
+        if(RetCode == ERROR_INVALID_PARAMETER)
+            continue;
+        SetLocaleInfoW(LOCALE_USER_DEFAULT, (LCTYPE)LocaleCounter, OutBuff);
+    }
+
+    RetCode = RegOpenKeyW(HKEY_CURRENT_USER,
+                          L"Control Panel\\International",
+                          &LocaleKey);
+
+    if(RetCode != ERROR_SUCCESS)
+    {
+        MessageBoxW(NULL,
+                    L"Problem opening HKCU\\Control Panel\\International key",
+                    L"Critical error", MB_OK | MB_ICONERROR);
+        return;
+    }
+
+    wsprintf(Value, L"%04X", (DWORD)LcidLocale);
+    ValueSize = (wcslen(Value) + 1) * sizeof(WCHAR);
+
+    RegSetValueExW(LocaleKey, L"Locale", 0, REG_SZ, (BYTE *)Value, ValueSize);
+    RegCloseKey(LocaleKey);
+}
+
+/* Regional Parameters page dialog callback */
+INT_PTR
+CALLBACK
+RegOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+    int CurrSel;
+    LCID NewLCID;
+    GEOID NewLocation;
+
+    switch(uMsg)
+    {
+        case WM_INITDIALOG:
+            CreateLocationsList(GetDlgItem(hwndDlg, IDC_LOCATION_COMBO));
+            CreateLanguagesList(GetDlgItem(hwndDlg, IDC_SETREG_COMBO));
+            /* Update locale samples */
+            UpdateLocaleSample(hwndDlg, LOCALE_USER_DEFAULT);
+        break;
+
+        case WM_COMMAND:
+            switch (LOWORD(wParam))
+            {
+                case IDC_SETUP_BUTTON:
+                        // setup button code...
+                        MessageBox(NULL, L"Not implemented yet", L"Info",
+                            MB_OK | MB_ICONINFORMATION);
+                break;
+
+                /* If selected other locale */
+                case IDC_SETREG_COMBO:
+                    if (HIWORD(wParam) == CBN_SELCHANGE ||
+                        HIWORD(wParam) == CBN_EDITCHANGE)
+                    {
+                        CurrSel = SendMessageW((HWND)lParam, CB_GETCURSEL,
+                            0, 0);
+                        NewLCID = SendMessageW((HWND)lParam, CB_GETITEMDATA,
+                            CurrSel, 0);
+                        UpdateLocaleSample(hwndDlg,
+                                           MAKELCID(NewLCID, SORT_DEFAULT));
+                        PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                    }
+                break;
+
+                case IDC_LOCATION_COMBO:
+                    if (HIWORD(wParam) == CBN_SELCHANGE ||
+                        HIWORD(wParam) == CBN_EDITCHANGE)
+                    {
+                        PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                    }
+                break;
+            }
+        break;
+
+        case WM_NOTIFY:
+        {
+            LPNMHDR lpnm = (LPNMHDR)lParam;
+            /* If push apply button */
+            if (lpnm->code == (UINT)PSN_APPLY)
+            {
+                /* Set locale */
+                CurrSel = SendMessageW(GetDlgItem(hwndDlg, IDC_SETREG_COMBO),
+                    CB_GETCURSEL, 0, 0);
+                NewLCID = SendMessageW(GetDlgItem(hwndDlg, IDC_SETREG_COMBO),
+                    CB_GETITEMDATA, CurrSel, 0);
+                if (NewLCID == (LCID)CB_ERR) break;
+
+                SetNewLocale(MAKELCID(NewLCID, SORT_DEFAULT));
+
+                /* Set geo location */
+                CurrSel = SendMessageW(GetDlgItem(hwndDlg, IDC_LOCATION_COMBO),
+                               CB_GETCURSEL,
+                               0,
+                               0);
+                NewLocation = SendMessageW(GetDlgItem(hwndDlg, IDC_LOCATION_COMBO),
+                              CB_GETITEMDATA,
+                              CurrSel,
+                              0);
+                SetUserGeoID(NewLocation);
+            }
+        }
+        break;
+    }
+    return FALSE;
+}
+
+/* EOF */

Propchange: trunk/reactos/dll/cpl/intl_new/locale.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/resource.h
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/resource.h?rev=22412&view=auto
==============================================================================
--- trunk/reactos/dll/cpl/intl_new/resource.h (added)
+++ trunk/reactos/dll/cpl/intl_new/resource.h Mon Jun 19 16:43:29 2006
@@ -1,0 +1,38 @@
+#ifndef __CPL_RESOURCE_H
+#define __CPL_RESOURCE_H
+
+/* CPL file info */
+#define IDC_CPLICON		1
+#define IDC_FLAGS		2
+#define IDC_ICON1		3
+
+#define IDS_CPLNAME		         10
+#define IDS_CPLDESCRIPTION	     11
+
+/* Region page options */
+#define IDD_REGOPTSPAGE		     100
+
+#define IDC_GROUPBOX             101
+#define IDC_STATIC               102
+#define IDC_SETREG_COMBO         103
+#define IDC_SETUP_BUTTON         104
+#define IDC_NUMSAMPLE_EDIT       105
+#define IDC_MONEYSAMPLE_EDIT     106
+#define IDC_TIMESAMPLE_EDIT      107
+#define IDC_SHORTTIMESAMPLE_EDIT 108
+#define IDC_FULLTIMESAMPLE_EDIT  109
+#define IDC_LOCATION_COMBO       110
+
+/* Extra page options */
+
+#define IDD_EXTRAOPTSPAGE        200
+
+#define IDC_LANGUAGE_COMBO       103
+
+/* Other page options */
+
+// ... something
+
+#endif /* __CPL_RESOURCE_H */
+
+/* EOF */

Propchange: trunk/reactos/dll/cpl/intl_new/resource.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/dll/cpl/intl_new/resources/applet.ico
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/resources/applet.ico?rev=22412&view=auto
==============================================================================
Binary file - no diff available.

Propchange: trunk/reactos/dll/cpl/intl_new/resources/applet.ico
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: trunk/reactos/dll/cpl/intl_new/resources/flags.ico
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/cpl/intl_new/resources/flags.ico?rev=22412&view=auto
==============================================================================
Binary file - no diff available.

Propchange: trunk/reactos/dll/cpl/intl_new/resources/flags.ico
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream




More information about the Ros-diffs mailing list