- Enumerate time formats.

- 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
This commit is contained in:
Eric Kohl 2007-09-10 20:46:27 +00:00
parent 4c8cd18f0e
commit edc540afb1
7 changed files with 112 additions and 80 deletions

View 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"),

View 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);

View 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

View 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;

View 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 */

View 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;
}

View file

@ -31,22 +31,26 @@
#include "intl.h"
#include "resource.h"
/*
* TODO:
* - Enumerate available time formats (use EnumTimeFormats)
*/
static HWND hwndEnum = NULL;
static BOOL CALLBACK
TimeFormatEnumProc(LPTSTR lpTimeFormatString)
{
SendMessage(hwndEnum,
CB_ADDSTRING,
0,
(LPARAM)lpTimeFormatString);
return TRUE;
}
static VOID
UpdateTimeSample(HWND hWnd)
UpdateTimeSample(HWND hWnd, LCID lcid)
{
TCHAR InBuffer[80];
TCHAR OutBuffer[80];
TCHAR szBuffer[80];
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, InBuffer, 80);
GetTimeFormat(LOCALE_USER_DEFAULT, 0, NULL, InBuffer, OutBuffer, 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 */