- Enumerate time formats.
authorEric Kohl <eric.kohl@reactos.org>
Mon, 10 Sep 2007 20:46:27 +0000 (20:46 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Mon, 10 Sep 2007 20:46:27 +0000 (20:46 +0000)
- The user must able to change the locale id. Move it into a global structure.
- User the selected locale id instead of LOCALE_USER_DEFAULT.

svn path=/trunk/; revision=28996

reactos/dll/cpl/intl/currency.c
reactos/dll/cpl/intl/date.c
reactos/dll/cpl/intl/generalp.c
reactos/dll/cpl/intl/intl.h
reactos/dll/cpl/intl/misc.c
reactos/dll/cpl/intl/sort.c
reactos/dll/cpl/intl/time.c

index b433bf7..5d1bbd8 100644 (file)
@@ -301,7 +301,7 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
 static BOOL
 SetCurrencyDigNum(HWND hwndDlg)
 {
-    TCHAR szFieldDigNumSamples[MAX_FIELD_DIG_SAMPLES][MAX_SAMPLES_STR_SIZE]=
+    LPTSTR szFieldDigNumSamples[MAX_FIELD_DIG_SAMPLES]=
     {
         _T("0;0"),
         _T("3;0"),
index fe4bbc6..82953a4 100644 (file)
@@ -540,11 +540,15 @@ DatePageProc(HWND hwndDlg,
              WPARAM wParam,
              LPARAM lParam)
 {
+    PGLOBALDATA pGlobalData;
+
     switch (uMsg)
     {
         case WM_INITDIALOG:
+            pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+
             InitMinMaxDateSpin(hwndDlg);
-            UpdateDateLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT);
+            UpdateDateLocaleSamples(hwndDlg, pGlobalData->lcid);
             InitShortDateCB(hwndDlg);
             InitLongDateCB(hwndDlg);
             InitShortDateSepSamples(hwndDlg);
index 75476f1..80ab255 100644 (file)
@@ -235,6 +235,7 @@ SetNewLocale(LCID lcid)
 }
 
 /* Location enumerate procedure */
+#if 0
 BOOL
 CALLBACK
 LocationsEnumProc(GEOID gId)
@@ -255,12 +256,14 @@ LocationsEnumProc(GEOID gId)
 
     return TRUE;
 }
+#endif
 
 /* Enumerate all system locations identifiers */
 static
 VOID
 CreateLocationsList(HWND hWnd)
 {
+#if 0
     GEOID userGeoID;
     TCHAR loc[MAX_STR_SIZE];
 
@@ -280,6 +283,7 @@ CreateLocationsList(HWND hWnd)
                 CB_SELECTSTRING,
                 (WPARAM) -1,
                 (LPARAM)loc);
+#endif
 }
 
 DWORD
index 293b6fe..d9741b1 100644 (file)
@@ -14,6 +14,11 @@ typedef struct _APPLET
   APPLET_PROC AppletProc;
 } APPLET, *PAPPLET;
 
+typedef struct _GLOBALDATA
+{
+    LCID lcid;
+} GLOBALDATA, *PGLOBALDATA;
+
 extern HINSTANCE hApplet;
 extern DWORD IsUnattendedSetupEnabled;
 extern DWORD UnattendLCID;
index 8cfa9a2..188be28 100644 (file)
@@ -175,7 +175,7 @@ ReplaceSubStr(LPCTSTR szSourceStr,
 
 
 static VOID
-InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LCID lcid)
+InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, PGLOBALDATA pGlobalData)
 {
   ZeroMemory(psp, sizeof(PROPSHEETPAGE));
   psp->dwSize = sizeof(PROPSHEETPAGE);
@@ -183,7 +183,7 @@ InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LCID lcid)
   psp->hInstance = hApplet;
   psp->pszTemplate = MAKEINTRESOURCE(idDlg);
   psp->pfnDlgProc = DlgProc;
-  psp->lParam = (LPARAM)lcid;
+  psp->lParam = (LPARAM)pGlobalData;
 }
 
 
@@ -194,10 +194,16 @@ SetupApplet(LCID lcid)
 {
     PROPSHEETPAGE PsPage[NUM_SHEETS + 1];
     PROPSHEETHEADER psh;
+    PGLOBALDATA pGlobalData;
     TCHAR Caption[MAX_STR_SIZE];
+    INT ret;
 
     LoadString(hApplet, IDS_CUSTOMIZE_TITLE, Caption, sizeof(Caption) / sizeof(TCHAR));
 
+    pGlobalData = (PGLOBALDATA)malloc(sizeof(GLOBALDATA));
+
+    pGlobalData->lcid = lcid;
+
     ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
     psh.dwSize = sizeof(PROPSHEETHEADER);
     psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_USECALLBACK | PSH_PROPTITLE;
@@ -209,18 +215,22 @@ SetupApplet(LCID lcid)
     psh.nStartPage = 0;
     psh.ppsp = PsPage;
 
-    InitPropSheetPage(&PsPage[0], IDD_NUMBERSPAGE, NumbersPageProc, lcid);
-    InitPropSheetPage(&PsPage[1], IDD_CURRENCYPAGE, CurrencyPageProc, lcid);
-    InitPropSheetPage(&PsPage[2], IDD_TIMEPAGE, TimePageProc, lcid);
-    InitPropSheetPage(&PsPage[3], IDD_DATEPAGE, DatePageProc, lcid);
+    InitPropSheetPage(&PsPage[0], IDD_NUMBERSPAGE, NumbersPageProc, pGlobalData);
+    InitPropSheetPage(&PsPage[1], IDD_CURRENCYPAGE, CurrencyPageProc, pGlobalData);
+    InitPropSheetPage(&PsPage[2], IDD_TIMEPAGE, TimePageProc, pGlobalData);
+    InitPropSheetPage(&PsPage[3], IDD_DATEPAGE, DatePageProc, pGlobalData);
 
     if (IsSortPageNeeded(lcid))
     {
         psh.nPages++;
-        InitPropSheetPage(&PsPage[4], IDD_SORTPAGE, SortPageProc, lcid);
+        InitPropSheetPage(&PsPage[4], IDD_SORTPAGE, SortPageProc, pGlobalData);
     }
 
-    return (LONG)(PropertySheet(&psh) != -1);
+    ret = PropertySheet(&psh);
+
+    free(pGlobalData);
+
+    return (LONG)(ret != -1);
 }
 
 /* EOF */
index c5ab621..8a0c5a0 100644 (file)
@@ -156,14 +156,17 @@ SortPageProc(HWND hwndDlg,
              WPARAM wParam,
              LPARAM lParam)
 {
+    PGLOBALDATA pGlobalData;
+
+    pGlobalData = (PGLOBALDATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
     switch (uMsg)
     {
         case WM_INITDIALOG:
-            {
-              LCID lcid = (LCID)((LPPROPSHEETPAGE)lParam)->lParam;
+            pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+            SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
 
-              CreateSortList(GetDlgItem(hwndDlg, IDC_SORTLIST_COMBO), lcid);
-            }
+            CreateSortList(GetDlgItem(hwndDlg, IDC_SORTLIST_COMBO), pGlobalData->lcid);
             break;
 
         case WM_COMMAND:
@@ -172,6 +175,28 @@ SortPageProc(HWND hwndDlg,
                 case IDC_SORTLIST_COMBO:
                     if (HIWORD(wParam) == CBN_SELCHANGE)
                     {
+                        LCID NewLcid;
+                        INT iCurSel;
+
+                        iCurSel = SendDlgItemMessage(hwndDlg,
+                                                     IDC_SORTLIST_COMBO,
+                                                     CB_GETCURSEL,
+                                                     0,
+                                                     0);
+                        if (iCurSel == CB_ERR)
+                            break;
+
+                        NewLcid = SendDlgItemMessage(hwndDlg,
+                                                     IDC_SORTLIST_COMBO,
+                                                     CB_GETITEMDATA,
+                                                     iCurSel,
+                                                     0);
+                        if (NewLcid == (LCID)CB_ERR)
+                            break;
+
+                        /* Save the new LCID */
+                        pGlobalData->lcid = NewLcid;
+
                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
                     }
                     break;
@@ -179,34 +204,9 @@ SortPageProc(HWND hwndDlg,
             break;
 
         case WM_NOTIFY:
+            if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
             {
-                LPNMHDR lpnm = (LPNMHDR)lParam;
-
-                if (lpnm->code == (UINT)PSN_APPLY)
-                {
-
-                    LCID NewLcid;
-                    INT iCurSel;
-
-                    iCurSel = SendDlgItemMessage(hwndDlg,
-                                                 IDC_SORTLIST_COMBO,
-                                                 CB_GETCURSEL,
-                                                 0,
-                                                 0);
-                    if (iCurSel == CB_ERR)
-                        break;
-
-                    NewLcid = SendDlgItemMessage(hwndDlg,
-                                                 IDC_SORTLIST_COMBO,
-                                                 CB_GETITEMDATA,
-                                                 iCurSel,
-                                                 0);
-                    if (NewLcid == (LCID)CB_ERR)
-                        break;
-#if 0
-                    /* FIXME: Set locale ID */
-#endif
-                }
+                /* FIXME: Set locale ID: pGlobalData->lcid */
             }
             break;
     }
index b1d29a4..7b234bc 100644 (file)
 #include "intl.h"
 #include "resource.h"
 
-/*
- * TODO:
- *    - Enumerate available time formats (use EnumTimeFormats)
- */
+static HWND hwndEnum = NULL;
 
-static VOID
-UpdateTimeSample(HWND hWnd)
+static BOOL CALLBACK
+TimeFormatEnumProc(LPTSTR lpTimeFormatString)
 {
-    TCHAR InBuffer[80];
-    TCHAR OutBuffer[80];
+    SendMessage(hwndEnum,
+                CB_ADDSTRING,
+                0,
+                (LPARAM)lpTimeFormatString);
 
-    GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, InBuffer, 80);
+    return TRUE;
+}
 
-    GetTimeFormat(LOCALE_USER_DEFAULT, 0, NULL, InBuffer, OutBuffer, 80);
+static VOID
+UpdateTimeSample(HWND hWnd, LCID lcid)
+{
+    TCHAR szBuffer[80];
 
-    SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)OutBuffer);
+    GetTimeFormat(lcid, 0, NULL, NULL, szBuffer, 80);
+    SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)szBuffer);
 }
 
 
@@ -57,36 +61,41 @@ TimePageProc(HWND hwndDlg,
              WPARAM wParam,
              LPARAM lParam)
 {
-  switch (uMsg)
-  {
-    case WM_INITDIALOG:
-      {
-        TCHAR Buffer[80];
-        int nLen;
+    PGLOBALDATA pGlobalData;
+
+    pGlobalData = (PGLOBALDATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
+    switch (uMsg)
+    {
+        case WM_INITDIALOG:
+            {
+                TCHAR Buffer[80];
+                int nLen;
+
+            pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+            SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
 
         /* Update the time format sample */
-        UpdateTimeSample(GetDlgItem(hwndDlg, IDC_TIMESAMPLE));
+        UpdateTimeSample(GetDlgItem(hwndDlg, IDC_TIMESAMPLE), pGlobalData->lcid);
 
         /* Get the time format (max. 80 characters) */
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT),
                     CB_LIMITTEXT, 80, 0);
 
-        /* FIXME: add available time formats to the list */
+        /* Add available time formats to the list */
+        hwndEnum = GetDlgItem(hwndDlg, IDC_TIMEFORMAT);
+        EnumTimeFormats(TimeFormatEnumProc, pGlobalData->lcid, 0);
 
-        GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, Buffer, 80);
+        GetLocaleInfo(pGlobalData->lcid, LOCALE_STIMEFORMAT, Buffer, 80);
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT),
-                    CB_ADDSTRING,
-                    0,
+                    CB_SELECTSTRING,
+                    -1,
                     (LPARAM)Buffer);
-        SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT),
-                    CB_SETCURSEL,
-                    0, /* index */
-                    0);
 
         /* Get the time separator (max. 4 characters) */
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR),
                     CB_LIMITTEXT, 4, 0);
-        GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIME, Buffer, 80);
+        GetLocaleInfo(pGlobalData->lcid, LOCALE_STIME, Buffer, 80);
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR),
                     CB_ADDSTRING,
                     0,
@@ -99,7 +108,7 @@ TimePageProc(HWND hwndDlg,
         /* Get the AM symbol (max. 9 characters) */
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL),
                     CB_LIMITTEXT, 9, 0);
-        nLen = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_S1159, Buffer, 80);
+        nLen = GetLocaleInfo(pGlobalData->lcid, LOCALE_S1159, Buffer, 80);
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL),
                     CB_ADDSTRING,
                     0,
@@ -119,7 +128,7 @@ TimePageProc(HWND hwndDlg,
         /* Get the PM symbol (max. 9 characters) */
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL),
                     CB_LIMITTEXT, 9, 0);
-        nLen = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_S2359, Buffer, 80);
+        nLen = GetLocaleInfo(pGlobalData->lcid, LOCALE_S2359, Buffer, 80);
         SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL),
                     CB_ADDSTRING,
                     0,
@@ -168,14 +177,14 @@ TimePageProc(HWND hwndDlg,
                                CB_GETCURSEL, 0, 0);
           SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT),
                       CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer);
-          SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, Buffer);
+          SetLocaleInfo(pGlobalData->lcid, LOCALE_STIMEFORMAT, Buffer);
 
           /* Set time separator */
           nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR),
                                CB_GETCURSEL, 0, 0);
           SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR),
                       CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer);
-          SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIME, Buffer);
+          SetLocaleInfo(pGlobalData->lcid, LOCALE_STIME, Buffer);
 
           /* Set the AM symbol */
           nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL),
@@ -184,11 +193,11 @@ TimePageProc(HWND hwndDlg,
           {
             SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL),
                         CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer);
-            SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_S1159, Buffer);
+            SetLocaleInfo(pGlobalData->lcid, LOCALE_S1159, Buffer);
           }
           else
           {
-            SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_S1159, _T(""));
+            SetLocaleInfo(pGlobalData->lcid, LOCALE_S1159, _T(""));
           }
 
           /* Set the PM symbol */
@@ -198,21 +207,21 @@ TimePageProc(HWND hwndDlg,
           {
             SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL),
                         CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer);
-            SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_S2359, Buffer);
+            SetLocaleInfo(pGlobalData->lcid, LOCALE_S2359, Buffer);
           }
           else
           {
-            SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_S2359, _T(""));
+            SetLocaleInfo(pGlobalData->lcid, LOCALE_S2359, _T(""));
           }
 
           /* Update the time format sample */
-          UpdateTimeSample(GetDlgItem(hwndDlg, IDC_TIMESAMPLE));
+          UpdateTimeSample(GetDlgItem(hwndDlg, IDC_TIMESAMPLE), pGlobalData->lcid);
         }
       }
       break;
-  }
+    }
 
-  return FALSE;
+    return FALSE;
 }
 
 /* EOF */