- Enumerate short and long date formats.

- Use the currently selected locale id instead of LOCALE_USER_DEFAULT.

svn path=/trunk/; revision=28998
This commit is contained in:
Eric Kohl 2007-09-10 22:16:01 +00:00
parent 9fe96d7b9b
commit f9e9cc03c6

View file

@ -35,13 +35,13 @@
/* GLOBALS ******************************************************************/ /* GLOBALS ******************************************************************/
#define YEAR_STR_MAX_SIZE 4 #define YEAR_STR_MAX_SIZE 4
#define MAX_SHORT_FMT_SAMPLES 5
#define MAX_LONG_FMT_SAMPLES 2
#define MAX_SHRT_DATE_SEPARATORS 3 #define MAX_SHRT_DATE_SEPARATORS 3
#define STD_DATE_SEP _T(".") #define STD_DATE_SEP _T(".")
#define YEAR_DIFF (99) #define YEAR_DIFF (99)
#define MAX_YEAR (9999) #define MAX_YEAR (9999)
static HWND hwndEnum = NULL;
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
/* if char is 'y' or 'M' or 'd' return TRUE, else FALSE */ /* if char is 'y' or 'M' or 'd' return TRUE, else FALSE */
@ -91,7 +91,7 @@ FindDateSep(const TCHAR *szSourceStr)
/* Setted up short date separator to registry */ /* Setted up short date separator to registry */
static BOOL static BOOL
SetShortDateSep(HWND hwndDlg) SetShortDateSep(HWND hwndDlg, LCID lcid)
{ {
TCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE]; TCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE];
INT nSepStrSize; INT nSepStrSize;
@ -119,14 +119,14 @@ SetShortDateSep(HWND hwndDlg)
} }
/* Save date separator */ /* Save date separator */
SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDATE, szShortDateSep); SetLocaleInfo(lcid, LOCALE_SDATE, szShortDateSep);
return TRUE; return TRUE;
} }
/* Setted up short date format to registry */ /* Setted up short date format to registry */
static BOOL static BOOL
SetShortDateFormat(HWND hwndDlg) SetShortDateFormat(HWND hwndDlg, LCID lcid)
{ {
TCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE]; TCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE];
TCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE]; TCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE];
@ -186,14 +186,14 @@ SetShortDateFormat(HWND hwndDlg)
free(pszResultStr); free(pszResultStr);
/* Save short date format */ /* Save short date format */
SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, szShortDateFmt); SetLocaleInfo(lcid, LOCALE_SSHORTDATE, szShortDateFmt);
return TRUE; return TRUE;
} }
/* Setted up long date format to registry */ /* Setted up long date format to registry */
static BOOL static BOOL
SetLongDateFormat(HWND hwndDlg) SetLongDateFormat(HWND hwndDlg, LCID lcid)
{ {
TCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE]; TCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE];
BOOL OpenApostFlg = FALSE; BOOL OpenApostFlg = FALSE;
@ -238,14 +238,14 @@ SetLongDateFormat(HWND hwndDlg)
} }
/* Save short date format */ /* Save short date format */
SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, szLongDateFmt); SetLocaleInfo(lcid, LOCALE_SLONGDATE, szLongDateFmt);
return TRUE; return TRUE;
} }
/* Init short date separator control box */ /* Init short date separator control box */
static VOID static VOID
InitShortDateSepSamples(HWND hwndDlg) InitShortDateSepSamples(HWND hwndDlg, LCID lcid)
{ {
LPTSTR ShortDateSepSamples[MAX_SHRT_DATE_SEPARATORS] = LPTSTR ShortDateSepSamples[MAX_SHRT_DATE_SEPARATORS] =
{ {
@ -258,7 +258,7 @@ InitShortDateSepSamples(HWND hwndDlg)
INT nRetCode; INT nRetCode;
/* Get current short date separator */ /* Get current short date separator */
GetLocaleInfo(LOCALE_USER_DEFAULT, GetLocaleInfo(lcid,
LOCALE_SDATE, LOCALE_SDATE,
szShortDateSep, szShortDateSep,
MAX_SAMPLES_STR_SIZE); MAX_SAMPLES_STR_SIZE);
@ -274,7 +274,7 @@ InitShortDateSepSamples(HWND hwndDlg)
{ {
SendMessageW(GetDlgItem(hwndDlg, IDC_SHRTDATESEP_COMBO), SendMessageW(GetDlgItem(hwndDlg, IDC_SHRTDATESEP_COMBO),
CB_ADDSTRING, CB_ADDSTRING,
nCBIndex, 0,
(LPARAM)ShortDateSepSamples[nCBIndex]); (LPARAM)ShortDateSepSamples[nCBIndex]);
} }
@ -289,7 +289,7 @@ InitShortDateSepSamples(HWND hwndDlg)
{ {
SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATESEP_COMBO), SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATESEP_COMBO),
CB_ADDSTRING, CB_ADDSTRING,
MAX_SHRT_DATE_SEPARATORS+1, 0,
(LPARAM)szShortDateSep); (LPARAM)szShortDateSep);
SendMessageW(GetDlgItem(hwndDlg, IDC_SHRTDATESEP_COMBO), SendMessageW(GetDlgItem(hwndDlg, IDC_SHRTDATESEP_COMBO),
CB_SELECTSTRING, CB_SELECTSTRING,
@ -298,24 +298,26 @@ InitShortDateSepSamples(HWND hwndDlg)
} }
} }
static BOOL CALLBACK
ShortDateFormatEnumProc(LPTSTR lpTimeFormatString)
{
SendMessage(hwndEnum,
CB_ADDSTRING,
0,
(LPARAM)lpTimeFormatString);
return TRUE;
}
/* Init short date control box */ /* Init short date control box */
VOID VOID
InitShortDateCB(HWND hwndDlg) InitShortDateCB(HWND hwndDlg, LCID lcid)
{ {
LPTSTR ShortDateFmtSamples[MAX_SHORT_FMT_SAMPLES] =
{
_T("dd.MM.yyyy"),
_T("dd.MM.yy"),
_T("d.M.yy"),
_T("dd/MM/yy"),
_T("yyyy-MM-dd")
};
TCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE]; TCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode; INT nRetCode;
/* Get current short date format */ /* Get current short date format */
GetLocaleInfo(LOCALE_USER_DEFAULT, GetLocaleInfo(lcid,
LOCALE_SSHORTDATE, LOCALE_SSHORTDATE,
szShortDateFmt, szShortDateFmt,
MAX_SAMPLES_STR_SIZE); MAX_SAMPLES_STR_SIZE);
@ -326,14 +328,9 @@ InitShortDateCB(HWND hwndDlg)
(WPARAM)0, (WPARAM)0,
(LPARAM)0); (LPARAM)0);
/* Create standart list of date formats */ /* Enumerate short date formats */
for (nCBIndex = 0; nCBIndex < MAX_SHORT_FMT_SAMPLES; nCBIndex++) hwndEnum = GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO);
{ EnumDateFormats(ShortDateFormatEnumProc, lcid, DATE_SHORTDATE);
SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO),
CB_ADDSTRING,
nCBIndex,
(LPARAM)ShortDateFmtSamples[nCBIndex]);
}
/* Set current item to value from registry */ /* Set current item to value from registry */
nRetCode = SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO), nRetCode = SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO),
@ -346,7 +343,7 @@ InitShortDateCB(HWND hwndDlg)
{ {
SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO), SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO),
CB_ADDSTRING, CB_ADDSTRING,
MAX_SHORT_FMT_SAMPLES+1, 0,
(LPARAM)szShortDateFmt); (LPARAM)szShortDateFmt);
SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO), SendMessage(GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO),
CB_SELECTSTRING, CB_SELECTSTRING,
@ -357,20 +354,13 @@ InitShortDateCB(HWND hwndDlg)
/* Init long date control box */ /* Init long date control box */
static VOID static VOID
InitLongDateCB(HWND hwndDlg) InitLongDateCB(HWND hwndDlg, LCID lcid)
{ {
/* Where this data stored? */
LPTSTR LongDateFmtSamples[MAX_LONG_FMT_SAMPLES] =
{
_T("d MMMM yyyy 'y.'"),
_T("dd MMMM yyyy 'y.'")
};
TCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE]; TCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode; INT nRetCode;
/* Get current long date format */ /* Get current long date format */
GetLocaleInfo(LOCALE_USER_DEFAULT, GetLocaleInfo(lcid,
LOCALE_SLONGDATE, LOCALE_SLONGDATE,
szLongDateFmt, szLongDateFmt,
MAX_SAMPLES_STR_SIZE); MAX_SAMPLES_STR_SIZE);
@ -381,14 +371,9 @@ InitLongDateCB(HWND hwndDlg)
(WPARAM)0, (WPARAM)0,
(LPARAM)0); (LPARAM)0);
/* Create standart list of date formats */ /* Enumerate short long formats */
for (nCBIndex = 0; nCBIndex < MAX_LONG_FMT_SAMPLES; nCBIndex++) hwndEnum = GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO);
{ EnumDateFormats(ShortDateFormatEnumProc, lcid, DATE_LONGDATE);
SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO),
CB_ADDSTRING,
nCBIndex,
(LPARAM)LongDateFmtSamples[nCBIndex]);
}
/* Set current item to value from registry */ /* Set current item to value from registry */
nRetCode = SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO), nRetCode = SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO),
@ -401,7 +386,7 @@ InitLongDateCB(HWND hwndDlg)
{ {
SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO), SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO),
CB_ADDSTRING, CB_ADDSTRING,
MAX_LONG_FMT_SAMPLES+1, 0,
(LPARAM)szLongDateFmt); (LPARAM)szLongDateFmt);
SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO), SendMessage(GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO),
CB_SELECTSTRING, CB_SELECTSTRING,
@ -412,7 +397,7 @@ InitLongDateCB(HWND hwndDlg)
/* Set up max date value to registry */ /* Set up max date value to registry */
static VOID static VOID
SetMaxDate(HWND hwndDlg) SetMaxDate(HWND hwndDlg, LCID lcid)
{ {
TCHAR szMaxDateVal[YEAR_STR_MAX_SIZE]; TCHAR szMaxDateVal[YEAR_STR_MAX_SIZE];
HWND hWndYearSpin; HWND hWndYearSpin;
@ -430,7 +415,7 @@ SetMaxDate(HWND hwndDlg)
_itot(nSpinVal, szMaxDateVal, DECIMAL_RADIX); _itot(nSpinVal, szMaxDateVal, DECIMAL_RADIX);
/* Save max date value */ /* Save max date value */
SetCalendarInfo(LOCALE_USER_DEFAULT, SetCalendarInfo(lcid,
CAL_GREGORIAN, CAL_GREGORIAN,
48 , /* CAL_ITWODIGITYEARMAX */ 48 , /* CAL_ITWODIGITYEARMAX */
(LPCTSTR)&szMaxDateVal); (LPCTSTR)&szMaxDateVal);
@ -438,11 +423,11 @@ SetMaxDate(HWND hwndDlg)
/* Get max date value from registry set */ /* Get max date value from registry set */
static INT static INT
GetMaxDate(VOID) GetMaxDate(LCID lcid)
{ {
INT nMaxDateVal; INT nMaxDateVal;
GetCalendarInfo(LOCALE_USER_DEFAULT, GetCalendarInfo(lcid,
CAL_GREGORIAN, CAL_GREGORIAN,
CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER, CAL_ITWODIGITYEARMAX | CAL_RETURN_NUMBER,
NULL, NULL,
@ -478,7 +463,7 @@ SetMinData(HWND hwndDlg)
/* Init spin control */ /* Init spin control */
static VOID static VOID
InitMinMaxDateSpin(HWND hwndDlg) InitMinMaxDateSpin(HWND hwndDlg, LCID lcid)
{ {
TCHAR OutBuffer[YEAR_STR_MAX_SIZE]; TCHAR OutBuffer[YEAR_STR_MAX_SIZE];
HWND hWndYearSpin; HWND hWndYearSpin;
@ -486,14 +471,14 @@ InitMinMaxDateSpin(HWND hwndDlg)
hWndYearSpin = GetDlgItem(hwndDlg, IDC_SCR_MAX_YEAR); hWndYearSpin = GetDlgItem(hwndDlg, IDC_SCR_MAX_YEAR);
/* Init max date value */ /* Init max date value */
wsprintf(OutBuffer, _T("%04d"), (DWORD)GetMaxDate()); wsprintf(OutBuffer, _T("%04d"), (DWORD)GetMaxDate(lcid));
SendMessage(GetDlgItem(hwndDlg, IDC_SECONDYEAR_EDIT), SendMessage(GetDlgItem(hwndDlg, IDC_SECONDYEAR_EDIT),
WM_SETTEXT, WM_SETTEXT,
0, 0,
(LPARAM)OutBuffer); (LPARAM)OutBuffer);
/* Init min date value */ /* Init min date value */
wsprintf(OutBuffer, _T("%04d"), (DWORD)GetMaxDate()-YEAR_DIFF); wsprintf(OutBuffer, _T("%04d"), (DWORD)GetMaxDate(lcid) - YEAR_DIFF);
SendMessage(GetDlgItem(hwndDlg, IDC_FIRSTYEAR_EDIT), SendMessage(GetDlgItem(hwndDlg, IDC_FIRSTYEAR_EDIT),
WM_SETTEXT, WM_SETTEXT,
0, 0,
@ -510,7 +495,7 @@ InitMinMaxDateSpin(HWND hwndDlg)
SendMessage(hWndYearSpin, SendMessage(hWndYearSpin,
UDM_SETPOS, UDM_SETPOS,
0, 0,
MAKELONG(GetMaxDate(),0)); MAKELONG(GetMaxDate(lcid),0));
} }
/* Update all date locale samples */ /* Update all date locale samples */
@ -542,16 +527,19 @@ DatePageProc(HWND hwndDlg,
{ {
PGLOBALDATA pGlobalData; PGLOBALDATA pGlobalData;
pGlobalData = (PGLOBALDATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam; pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
InitMinMaxDateSpin(hwndDlg); InitMinMaxDateSpin(hwndDlg, pGlobalData->lcid);
UpdateDateLocaleSamples(hwndDlg, pGlobalData->lcid); UpdateDateLocaleSamples(hwndDlg, pGlobalData->lcid);
InitShortDateCB(hwndDlg); InitShortDateCB(hwndDlg, pGlobalData->lcid);
InitLongDateCB(hwndDlg); InitLongDateCB(hwndDlg, pGlobalData->lcid);
InitShortDateSepSamples(hwndDlg); InitShortDateSepSamples(hwndDlg, pGlobalData->lcid);
/* TODO: Add other calendar types */ /* TODO: Add other calendar types */
break; break;
@ -595,14 +583,14 @@ DatePageProc(HWND hwndDlg,
/* If push apply button */ /* If push apply button */
if (lpnm->code == (UINT)PSN_APPLY) if (lpnm->code == (UINT)PSN_APPLY)
{ {
SetMaxDate(hwndDlg); SetMaxDate(hwndDlg, pGlobalData->lcid);
if(!SetShortDateSep(hwndDlg)) break; if(!SetShortDateSep(hwndDlg, pGlobalData->lcid)) break;
if(!SetShortDateFormat(hwndDlg)) break; if(!SetShortDateFormat(hwndDlg, pGlobalData->lcid)) break;
if(!SetLongDateFormat(hwndDlg)) break; if(!SetLongDateFormat(hwndDlg, pGlobalData->lcid)) break;
InitShortDateCB(hwndDlg); InitShortDateCB(hwndDlg, pGlobalData->lcid);
/* FIXME: */ /* FIXME: */
//Sleep(15); //Sleep(15);
UpdateDateLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT); UpdateDateLocaleSamples(hwndDlg, pGlobalData->lcid);
} }
} }
break; break;