- Improve the internal locale storage. Replace the array of strings by a customized struct.
- Implement the locale customization properly. The customization property sheet modifies the internal locale storage rather than the registry. Now, cancelling changes works properly.
CORE-10074
svn path=/trunk/; revision=69449
#define POSITIVE_EXAMPLE L"123456789.00"
#define NEGATIVE_EXAMPLE L"-123456789.00"
-#define MAX_FIELD_DIG_SAMPLES 3
static VOID
WCHAR szBuffer[MAX_FMT_SIZE];
/* Positive example */
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
POSITIVE_EXAMPLE,
NULL, szBuffer, MAX_FMT_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYPOSSAMPLE, WM_SETTEXT, 0, (LPARAM)szBuffer);
/* Negative example */
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
NEGATIVE_EXAMPLE,
NULL, szBuffer, MAX_FMT_SIZE);
static VOID
InitCurrencySymbols(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szBuffer[MAX_FMT_SIZE];
-
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
CB_LIMITTEXT,
- MAX_CURRENCYSYMBOL,
+ MAX_CURRSYMBOL - 1,
0);
/* Set currency symbols */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SCURRENCY,
- szBuffer, MAX_FMT_SIZE);
-
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
CB_ADDSTRING,
0,
- (LPARAM)szBuffer);
+ (LPARAM)pGlobalData->szCurrSymbol);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
CB_SETCURSEL,
static VOID
InitCurrencyPositiveFormats(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szDecimalSep[MAX_FMT_SIZE];
- WCHAR szThousandSep[MAX_FMT_SIZE];
- WCHAR szCurrencySymbol[MAX_FMT_SIZE];
WCHAR szBuffer[MAX_FMT_SIZE];
CURRENCYFMTW cyFmt;
- INT nPositiveOrder = 0;
- INT ret;
INT i;
-
- /* Get positive format */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_ICURRENCY,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- nPositiveOrder = _wtoi(szBuffer);
- }
-
- /* Get number of fractional digits */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_ICURRDIGITS,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- cyFmt.NumDigits = _wtoi(szBuffer);
- }
- else
- {
- cyFmt.NumDigits = 0;
- }
-
- /* Get decimal separator */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONDECIMALSEP,
- szDecimalSep, MAX_FMT_SIZE);
-
- /* Get group separator */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szThousandSep, MAX_FMT_SIZE);
-
- /* Get currency symbol */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SCURRENCY,
- szCurrencySymbol, MAX_FMT_SIZE);
-
/* positive currency values */
+ cyFmt.NumDigits = pGlobalData->nCurrDigits;
cyFmt.LeadingZero = 0;
cyFmt.Grouping = 3;
- cyFmt.lpDecimalSep = szDecimalSep;
- cyFmt.lpThousandSep = szThousandSep;
- cyFmt.lpCurrencySymbol = szCurrencySymbol;
+ cyFmt.lpDecimalSep = pGlobalData->szCurrDecimalSep;
+ cyFmt.lpThousandSep = pGlobalData->szCurrThousandSep;
+ cyFmt.lpCurrencySymbol = pGlobalData->szCurrSymbol;
cyFmt.NegativeOrder = 0;
for (i = 0; i < 4; i++)
{
cyFmt.PositiveOrder = i;
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
L"1.1",
&cyFmt, szBuffer, MAX_FMT_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYPOSVALUE,
CB_SETCURSEL,
- nPositiveOrder,
+ pGlobalData->nCurrPosFormat,
0);
}
static VOID
InitCurrencyNegativeFormats(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szDecimalSep[MAX_FMT_SIZE];
- WCHAR szThousandSep[MAX_FMT_SIZE];
- WCHAR szCurrencySymbol[MAX_FMT_SIZE];
WCHAR szBuffer[MAX_FMT_SIZE];
CURRENCYFMTW cyFmt;
- INT nNegativeOrder = 0;
- INT ret;
int i;
- /* Get negative format */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_INEGCURR,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- nNegativeOrder = _wtoi(szBuffer);
- }
-
- /* Get number of fractional digits */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_ICURRDIGITS,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- cyFmt.NumDigits = _wtoi(szBuffer);
- }
- else
- {
- cyFmt.NumDigits = 0;
- }
-
- /* Get decimal separator */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONDECIMALSEP,
- szDecimalSep, MAX_FMT_SIZE);
-
- /* Get group separator */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szThousandSep, MAX_FMT_SIZE);
-
- /* Get currency symbol */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SCURRENCY,
- szCurrencySymbol, MAX_FMT_SIZE);
-
/* negative currency values */
+ cyFmt.NumDigits = pGlobalData->nCurrDigits;
cyFmt.LeadingZero = 0;
cyFmt.Grouping = 3;
- cyFmt.lpDecimalSep = szDecimalSep;
- cyFmt.lpThousandSep = szThousandSep;
- cyFmt.lpCurrencySymbol = szCurrencySymbol;
+ cyFmt.lpDecimalSep = pGlobalData->szCurrDecimalSep;
+ cyFmt.lpThousandSep = pGlobalData->szCurrThousandSep;
+ cyFmt.lpCurrencySymbol = pGlobalData->szCurrSymbol;
cyFmt.PositiveOrder = 0;
for (i = 0; i < 16; i++)
{
cyFmt.NegativeOrder = i;
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
L"-1.1",
&cyFmt, szBuffer, MAX_FMT_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYNEGVALUE,
CB_SETCURSEL,
- nNegativeOrder,
+ pGlobalData->nCurrNegFormat,
0);
}
static VOID
InitCurrencyDecimalSeparators(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szBuffer[MAX_FMT_SIZE];
-
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
CB_LIMITTEXT,
- MAX_CURRENCYDECSEP,
+ MAX_CURRDECIMALSEP - 1,
0);
- /* Get decimal separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONDECIMALSEP,
- szBuffer, MAX_FMT_SIZE);
-
/* Decimal separator */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
CB_ADDSTRING,
0,
- (LPARAM)szBuffer);
+ (LPARAM)pGlobalData->szCurrDecimalSep);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
CB_SETCURSEL,
InitCurrencyNumFracDigits(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
WCHAR szBuffer[MAX_FMT_SIZE];
- int ret;
int i;
/* Create standard list of fractional symbols */
(LPARAM)szBuffer);
}
- /* Get number of fractional digits */
- ret = GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_ICURRDIGITS,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECNUM,
- CB_SETCURSEL,
- _wtoi(szBuffer),
- 0);
- }
- else
- {
- SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECNUM,
- CB_SETCURSEL,
- 0,
- 0);
- }
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECNUM,
+ CB_SETCURSEL,
+ pGlobalData->nCurrDigits,
+ 0);
}
static VOID
InitCurrencyGroupSeparators(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szBuffer[MAX_FMT_SIZE];
-
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
CB_LIMITTEXT,
- MAX_CURRENCYGRPSEP,
+ MAX_CURRTHOUSANDSEP - 1,
0);
- /* Get group separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szBuffer, MAX_FMT_SIZE);
-
/* Digit group separator */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
CB_ADDSTRING,
0,
- (LPARAM)szBuffer);
+ (LPARAM)pGlobalData->szCurrThousandSep);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
CB_SETCURSEL,
static VOID
InitDigitGroupCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szThousandSep[MAX_FMT_SIZE];
- WCHAR szGrouping[MAX_FMT_SIZE];
WCHAR szBuffer[MAX_FMT_SIZE];
CURRENCYFMTW cyFmt;
- INT i;
-
- /* Get group separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szThousandSep, MAX_FMT_SIZE);
-
- /* Get grouping */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SMONGROUPING,
- szGrouping, MAX_FMT_SIZE);
/* Digit grouping */
cyFmt.NumDigits = 0;
cyFmt.LeadingZero = 0;
cyFmt.lpDecimalSep = L"";
- cyFmt.lpThousandSep = szThousandSep;
+ cyFmt.lpThousandSep = pGlobalData->szCurrThousandSep;
cyFmt.PositiveOrder = 0;
cyFmt.NegativeOrder = 0;
cyFmt.lpCurrencySymbol = L"";
cyFmt.Grouping = 0;
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
L"123456789",
&cyFmt, szBuffer, MAX_FMT_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
(LPARAM)szBuffer);
cyFmt.Grouping = 3;
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
L"123456789",
&cyFmt, szBuffer, MAX_FMT_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
(LPARAM)szBuffer);
cyFmt.Grouping = 32;
- GetCurrencyFormatW(pGlobalData->lcid, 0,
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
L"123456789",
&cyFmt, szBuffer, MAX_FMT_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
-1,
(LPARAM)szBuffer);
- i = 0;
- if (szGrouping[0] == L'3')
- {
- if ((szGrouping[1] == L';') &&
- (szGrouping[2] == L'2'))
- i = 2;
- else
- i = 1;
- }
-
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
CB_SETCURSEL,
- i, /* Index */
+ pGlobalData->nCurrGrouping, /* Index */
0);
}
static BOOL
SetCurrencyDigNum(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- PWSTR szFieldDigNumSamples[MAX_FIELD_DIG_SAMPLES]=
- {
- L"0;0",
- L"3;0",
- L"3;2;0"
- };
-
- int nCurrSel;
+ INT nCurrSel;
/* Get setted number of digits in field */
nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
/* Save number of digits in field */
if (nCurrSel != CB_ERR)
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SMONGROUPING, szFieldDigNumSamples[nCurrSel]);
+ pGlobalData->nCurrGrouping = nCurrSel;
return TRUE;
}
static BOOL
SetCurrencyFieldSep(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szCurrencyFieldSep[MAX_SAMPLES_STR_SIZE];
-
/* Get setted currency field separator */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szCurrencyFieldSep);
-
- /* Save currency field separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SMONTHOUSANDSEP, szCurrencyFieldSep);
+ (LPARAM)pGlobalData->szCurrThousandSep);
return TRUE;
}
static BOOL
SetCurrencyFracSymNum(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szCurrencyFracSymNum[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted number of fractional symbols */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* Convert to wide char */
- _itow(nCurrSel, szCurrencyFracSymNum, DECIMAL_RADIX);
-
- /* Save number of fractional symbols */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_ICURRDIGITS, szCurrencyFracSymNum);
+ pGlobalData->nCurrDigits = nCurrSel;
return TRUE;
}
static BOOL
SetCurrencySep(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szCurrencySep[MAX_SAMPLES_STR_SIZE];
-
/* Get setted currency decimal separator */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szCurrencySep);
-
- /* TODO: Add check for correctly input */
-
- /* Save currency separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SMONDECIMALSEP, szCurrencySep);
+ (LPARAM)pGlobalData->szCurrDecimalSep);
return TRUE;
}
static BOOL
SetNegCurrencySumFmt(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szNegCurrencySumFmt[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted currency unit */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* Convert to wide char */
- _itow(nCurrSel, szNegCurrencySumFmt, DECIMAL_RADIX);
-
- /* Save currency sum format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_INEGCURR, szNegCurrencySumFmt);
+ pGlobalData->nCurrNegFormat = nCurrSel;
return TRUE;
}
static BOOL
SetPosCurrencySumFmt(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szPosCurrencySumFmt[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted currency unit */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* Convert to wide char */
- _itow(nCurrSel, szPosCurrencySumFmt, DECIMAL_RADIX);
-
- /* Save currency sum format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_ICURRENCY, szPosCurrencySumFmt);
+ pGlobalData->nCurrPosFormat = nCurrSel;
return TRUE;
}
-/* Set currency unit */
+/* Set currency symbol */
static BOOL
-SetCurrencyUnit(HWND hwndDlg, PGLOBALDATA pGlobalData)
+SetCurrencySymbol(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szCurrencyUnit[MAX_SAMPLES_STR_SIZE];
-
/* Get setted currency unit */
SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)(PCWSTR)szCurrencyUnit);
-
- /* Save currency unit */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SCURRENCY, szCurrencyUnit);
+ (LPARAM)(PCWSTR)pGlobalData->szCurrSymbol);
return TRUE;
}
break;
case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
{
- LPNMHDR lpnm = (LPNMHDR)lParam;
- /* If push apply button */
- if (lpnm->code == (UINT)PSN_APPLY)
- {
- if (!SetCurrencyDigNum(hwndDlg, pGlobalData))
- break;
+ if (!SetCurrencySymbol(hwndDlg, pGlobalData))
+ break;
+
+ if (!SetCurrencyDigNum(hwndDlg, pGlobalData))
+ break;
- if (!SetCurrencyUnit(hwndDlg, pGlobalData))
- break;
+ if (!SetPosCurrencySumFmt(hwndDlg, pGlobalData))
+ break;
- if (!SetPosCurrencySumFmt(hwndDlg, pGlobalData))
- break;
+ if (!SetNegCurrencySumFmt(hwndDlg, pGlobalData))
+ break;
- if (!SetNegCurrencySumFmt(hwndDlg, pGlobalData))
- break;
+ if (!SetCurrencySep(hwndDlg, pGlobalData))
+ break;
- if (!SetCurrencySep(hwndDlg, pGlobalData))
- break;
+ if (!SetCurrencyFracSymNum(hwndDlg, pGlobalData))
+ break;
- if (!SetCurrencyFracSymNum(hwndDlg, pGlobalData))
- break;
+ if (!SetCurrencyFieldSep(hwndDlg, pGlobalData))
+ break;
- if (!SetCurrencyFieldSep(hwndDlg, pGlobalData))
- break;
+ pGlobalData->fUserLocaleChanged = TRUE;
- UpdateExamples(hwndDlg, pGlobalData);
- }
+ UpdateExamples(hwndDlg, pGlobalData);
}
break;
}
INT nSepStrSize;
INT nSepCount;
- /* Get setted separator */
+ /* Get separator */
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)szShortDateSep);
- /* Get setted separator string size */
+ /* Get separator string size */
nSepStrSize = wcslen(szShortDateSep);
/* Check date components */
}
/* Save date separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SDATE, szShortDateSep);
+ wcscpy(pGlobalData->szDateSep, szShortDateSep);
return TRUE;
}
INT nFmtStrSize;
INT nDateCompCount;
- /* Get setted format */
+ /* Get format */
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)szShortDateFmt);
- /* Get setted separator */
+ /* Get separator */
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)szShortDateSep);
- /* Get setted format-string size */
+ /* Get format-string size */
nFmtStrSize = wcslen(szShortDateFmt);
/* Check date components */
wcscpy(szShortDateFmt, pszResultStr);
free(pszResultStr);
- if(pszFoundSep)
+ if (pszFoundSep)
free(pszFoundSep);
/* Save short date format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SSHORTDATE, szShortDateFmt);
+ wcscpy(pGlobalData->szShortDateFormat, szShortDateFmt);
return TRUE;
}
INT nFmtStrSize;
INT nDateCompCount;
- /* Get setted format */
+ /* Get format */
SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO,
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)szLongDateFmt);
- /* Get setted format string size */
+ /* Get format string size */
nFmtStrSize = wcslen(szLongDateFmt);
/* Check date components */
return FALSE;
}
- /* Save short date format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SLONGDATE, szLongDateFmt);
+ /* Save long date format */
+ wcscpy(pGlobalData->szLongDateFormat, szLongDateFmt);
return TRUE;
}
L"/",
L"-"
};
- WCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode;
- /* Get current short date separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SDATE,
- szShortDateSep,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
CB_RESETCONTENT,
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
CB_SELECTSTRING,
-1,
- (LPARAM)szShortDateSep);
+ (LPARAM)pGlobalData->szDateSep);
/* If it is not successful, add new value to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
CB_ADDSTRING,
0,
- (LPARAM)szShortDateSep);
+ (LPARAM)pGlobalData->szDateSep);
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
CB_SELECTSTRING,
-1,
- (LPARAM)szShortDateSep);
+ (LPARAM)pGlobalData->szDateSep);
}
}
VOID
InitShortDateCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE];
INT nRetCode;
/* Limit text lengths */
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO,
CB_LIMITTEXT,
- MAX_SHRTDATEFMT,
+ MAX_SHORTDATEFORMAT,
0);
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO,
CB_LIMITTEXT,
- MAX_SHRTDATESEP,
+ MAX_DATESEPARATOR,
0);
- /* Get current short date format */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SSHORTDATE,
- szShortDateFmt,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO,
CB_RESETCONTENT,
/* Enumerate short date formats */
hwndEnum = GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO);
- EnumDateFormatsW(ShortDateFormatEnumProc, pGlobalData->lcid, DATE_SHORTDATE);
+ EnumDateFormatsW(ShortDateFormatEnumProc, pGlobalData->UserLCID, DATE_SHORTDATE);
/* Set current item to value from registry */
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO,
CB_SELECTSTRING,
-1,
- (LPARAM)szShortDateFmt);
+ (LPARAM)pGlobalData->szShortDateFormat);
/* If it is not successful, add new value to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO,
CB_ADDSTRING,
0,
- (LPARAM)szShortDateFmt);
+ (LPARAM)pGlobalData->szShortDateFormat);
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO,
CB_SELECTSTRING,
-1,
- (LPARAM)szShortDateFmt);
+ (LPARAM)pGlobalData->szShortDateFormat);
}
}
static VOID
InitLongDateCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE];
INT nRetCode;
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO,
CB_LIMITTEXT,
- MAX_LONGDATEFMT,
+ MAX_LONGDATEFORMAT,
0);
- /* Get current long date format */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SLONGDATE,
- szLongDateFmt,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO,
CB_RESETCONTENT,
/* Enumerate short long formats */
hwndEnum = GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO);
- EnumDateFormatsW(ShortDateFormatEnumProc, pGlobalData->lcid, DATE_LONGDATE);
+ EnumDateFormatsW(ShortDateFormatEnumProc, pGlobalData->UserLCID, DATE_LONGDATE);
/* Set current item to value from registry */
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO,
CB_SELECTSTRING,
-1,
- (LPARAM)szLongDateFmt);
+ (LPARAM)pGlobalData->szLongDateFormat);
/* If it is not successful, add new value to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO,
CB_ADDSTRING,
0,
- (LPARAM)szLongDateFmt);
+ (LPARAM)pGlobalData->szLongDateFormat);
SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO,
CB_SELECTSTRING,
-1,
- (LPARAM)szLongDateFmt);
+ (LPARAM)pGlobalData->szLongDateFormat);
}
}
/* Set's MIN data edit control value to MAX-99 */
static VOID
-SetMinData(HWND hwndDlg)
+SetMinDate(HWND hwndDlg)
{
WCHAR OutBuffer[YEAR_STR_MAX_SIZE];
HWND hWndYearSpin;
hWndYearSpin = GetDlgItem(hwndDlg, IDC_SCR_MAX_YEAR);
/* Init max date value */
- wsprintf(OutBuffer, L"%04d", (DWORD)GetMaxDate(pGlobalData->lcid));
+ wsprintf(OutBuffer, L"%04d", (DWORD)GetMaxDate(pGlobalData->UserLCID));
SendDlgItemMessageW(hwndDlg, IDC_SECONDYEAR_EDIT,
WM_SETTEXT,
0,
(LPARAM)OutBuffer);
/* Init min date value */
- wsprintf(OutBuffer, L"%04d", (DWORD)GetMaxDate(pGlobalData->lcid) - YEAR_DIFF);
+ wsprintf(OutBuffer, L"%04d", (DWORD)GetMaxDate(pGlobalData->UserLCID) - YEAR_DIFF);
SendDlgItemMessageW(hwndDlg, IDC_FIRSTYEAR_EDIT,
WM_SETTEXT,
0,
SendMessageW(hWndYearSpin,
UDM_SETPOS,
0,
- MAKELONG(GetMaxDate(pGlobalData->lcid),0));
+ MAKELONG(GetMaxDate(pGlobalData->UserLCID),0));
}
/* Update all date locale samples */
WCHAR OutBuffer[MAX_SAMPLES_STR_SIZE];
/* Get short date format sample */
- GetDateFormatW(pGlobalData->lcid, DATE_SHORTDATE, NULL, NULL, OutBuffer,
+ GetDateFormatW(pGlobalData->UserLCID, DATE_SHORTDATE, NULL, NULL, OutBuffer,
MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESAMPLE_EDIT, WM_SETTEXT,
0, (LPARAM)OutBuffer);
/* Get long date sample */
- GetDateFormatW(pGlobalData->lcid, DATE_LONGDATE, NULL, NULL, OutBuffer,
+ GetDateFormatW(pGlobalData->UserLCID, DATE_LONGDATE, NULL, NULL, OutBuffer,
MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_LONGDATESAMPLE_EDIT,
WM_SETTEXT, 0, (LPARAM)OutBuffer);
break;
case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
- case IDC_SECONDYEAR_EDIT:
+ switch (LOWORD(wParam))
{
- if(HIWORD(wParam)==EN_CHANGE)
- {
- SetMinData(hwndDlg);
- }
- }
- case IDC_SCR_MAX_YEAR:
- {
- /* Set "Apply" button enabled */
- /* FIXME */
- //PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+ case IDC_SECONDYEAR_EDIT:
+ if (HIWORD(wParam) == EN_CHANGE)
+ {
+ SetMinDate(hwndDlg);
+ }
+ break;
+
+ case IDC_SCR_MAX_YEAR:
+ /* Set "Apply" button enabled */
+ /* FIXME */
+ //PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+ break;
+
+ case IDC_CALTYPE_COMBO:
+ case IDC_HIJCHRON_COMBO:
+ case IDC_SHRTDATEFMT_COMBO:
+ case IDC_LONGDATEFMT_COMBO:
+ case IDC_SHRTDATESEP_COMBO:
+ if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE)
+ {
+ /* Set "Apply" button enabled */
+ PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+ }
+ break;
}
break;
- case IDC_CALTYPE_COMBO:
- case IDC_HIJCHRON_COMBO:
- case IDC_SHRTDATEFMT_COMBO:
- case IDC_SHRTDATESEP_COMBO:
- case IDC_LONGDATEFMT_COMBO:
+
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
{
- if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE)
- {
- /* Set "Apply" button enabled */
- PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
- }
+ if (!SetLongDateFormat(hwndDlg, pGlobalData))
+ break;
+
+ if (!SetShortDateFormat(hwndDlg, pGlobalData))
+ break;
+
+ if (!SetShortDateSep(hwndDlg, pGlobalData))
+ break;
+
+ pGlobalData->fUserLocaleChanged = TRUE;
+
+ SetMaxDate(hwndDlg, pGlobalData->UserLCID);
+ InitShortDateCB(hwndDlg, pGlobalData);
+ UpdateDateLocaleSamples(hwndDlg, pGlobalData);
}
break;
- }
- }
- break;
- case WM_NOTIFY:
- {
- LPNMHDR lpnm = (LPNMHDR)lParam;
- /* If push apply button */
- if (lpnm->code == (UINT)PSN_APPLY)
- {
- SetMaxDate(hwndDlg, pGlobalData->lcid);
- if(!SetShortDateSep(hwndDlg, pGlobalData)) break;
- if(!SetShortDateFormat(hwndDlg, pGlobalData)) break;
- if(!SetLongDateFormat(hwndDlg, pGlobalData)) break;
- InitShortDateCB(hwndDlg, pGlobalData);
- /* FIXME: */
- //Sleep(15);
- UpdateDateLocaleSamples(hwndDlg, pGlobalData);
- }
- }
- break;
}
return FALSE;
#define SAMPLE_NUMBER L"123456789"
#define NO_FLAG 0
+#define NUM_SHEETS 4
+
+#define MAX_FIELD_DIG_SAMPLES 3
+
typedef struct
{
LCTYPE lcType;
HWND hLocaleList, hGeoList;
BOOL bSpain = FALSE;
-LOCALE_KEY_DATA LocaleKeyData[] =
+
+PWSTR szCurrencyGrouping[3] =
{
- {LOCALE_ICALENDARTYPE, L"iCalendarType"},
- {LOCALE_ICOUNTRY, L"iCountry"},
- {LOCALE_ICURRDIGITS, L"iCurrDigits"},
- {LOCALE_ICURRENCY, L"iCurrency"},
- {LOCALE_IDATE, L"iDate"},
- {LOCALE_IDIGITS, L"iDigits"},
- {LOCALE_IFIRSTDAYOFWEEK, L"iFirstDayOfWeek"},
- {LOCALE_IFIRSTWEEKOFYEAR, L"iFirstWeekOfYear"},
- {LOCALE_ILZERO, L"iLZero"},
- {LOCALE_IMEASURE, L"iMeasure"},
- {LOCALE_INEGCURR, L"iNegCurr"},
- {LOCALE_INEGNUMBER, L"iNegNumber"},
- {LOCALE_ITIME, L"iTime"},
- {LOCALE_ITIMEMARKPOSN, L"iTimePrefix"},
- {LOCALE_ITLZERO, L"iTLZero"},
- {LOCALE_IDIGITSUBSTITUTION, L"NumShape"},
- {LOCALE_S1159, L"s1159"},
- {LOCALE_S2359, L"s2359"},
- {LOCALE_SCOUNTRY, L"sCountry"},
- {LOCALE_SCURRENCY, L"sCurrency"},
- {LOCALE_SDATE, L"sDate"},
- {LOCALE_SDECIMAL, L"sDecimal"},
- {LOCALE_SGROUPING, L"sGrouping"},
- {LOCALE_SABBREVLANGNAME, L"sLanguage"},
- {LOCALE_SLIST, L"sList"},
- {LOCALE_SLONGDATE, L"sLongDate"},
- {LOCALE_SMONDECIMALSEP, L"sMonDecimalSep"},
- {LOCALE_SMONGROUPING, L"sMonGrouping"},
- {LOCALE_SMONTHOUSANDSEP, L"sMonThousandSep"},
- {LOCALE_SNATIVEDIGITS, L"sNativeDigits"},
- {LOCALE_SNEGATIVESIGN, L"sNegativeSign"},
- {LOCALE_SPOSITIVESIGN, L"sPositiveSign"},
- {LOCALE_SSHORTDATE, L"sShortDate"},
- {LOCALE_STHOUSAND, L"sThousand"},
- {LOCALE_STIME, L"sTime"},
- {LOCALE_STIMEFORMAT, L"sTimeFormat"}
+ L"0;0",
+ L"3;0",
+ L"3;2;0"
};
-
static BOOL CALLBACK
LocalesEnumProc(LPTSTR lpLocale)
{
}
-PWSTR
-GetLocaleString(
- PWSTR *pLocaleArray,
- LCTYPE lcType)
-{
- DWORD dwDataCount, i;
-
- dwDataCount = sizeof(LocaleKeyData) / sizeof(LOCALE_KEY_DATA);
- for (i = 0; i < dwDataCount; i++)
- {
- if (LocaleKeyData[i].lcType == lcType)
- return pLocaleArray[i];
- }
-
- return NULL;
-}
-
-
/* Update all locale samples */
static
VOID
WCHAR OutBuffer[MAX_SAMPLES_STR_SIZE];
/* Get number format sample */
- GetNumberFormatW(pGlobalData->lcid, NO_FLAG, SAMPLE_NUMBER, NULL,
+ GetNumberFormatW(pGlobalData->UserLCID, NO_FLAG, SAMPLE_NUMBER, NULL,
OutBuffer, MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_NUMSAMPLE_EDIT,
WM_SETTEXT, 0, (LPARAM)OutBuffer);
ZeroMemory(OutBuffer, MAX_SAMPLES_STR_SIZE * sizeof(WCHAR));
/* Get monetary format sample */
- GetCurrencyFormatW(pGlobalData->lcid, NO_FLAG, SAMPLE_NUMBER, NULL,
+ GetCurrencyFormatW(pGlobalData->UserLCID, NO_FLAG, SAMPLE_NUMBER, NULL,
OutBuffer, MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_MONEYSAMPLE_EDIT,
WM_SETTEXT, 0, (LPARAM)OutBuffer);
ZeroMemory(OutBuffer, MAX_SAMPLES_STR_SIZE * sizeof(WCHAR));
/* Get time format sample */
- GetTimeFormatW(pGlobalData->lcid, NO_FLAG, NULL, NULL,
+ GetTimeFormatW(pGlobalData->UserLCID, NO_FLAG, NULL, NULL,
OutBuffer, MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_TIMESAMPLE_EDIT,
WM_SETTEXT, 0, (LPARAM)OutBuffer);
ZeroMemory(OutBuffer, MAX_SAMPLES_STR_SIZE * sizeof(WCHAR));
/* Get short date format sample */
- GetDateFormatW(pGlobalData->lcid, DATE_SHORTDATE, NULL, NULL,
+ GetDateFormatW(pGlobalData->UserLCID, DATE_SHORTDATE, NULL, NULL,
OutBuffer, MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_SHORTTIMESAMPLE_EDIT,
WM_SETTEXT, 0, (LPARAM)OutBuffer);
/* Get long date sample */
- GetDateFormatW(pGlobalData->lcid, DATE_LONGDATE, NULL, NULL,
+ GetDateFormatW(pGlobalData->UserLCID, DATE_LONGDATE, NULL, NULL,
OutBuffer, MAX_SAMPLES_STR_SIZE);
SendDlgItemMessageW(hwndDlg, IDC_FULLTIMESAMPLE_EDIT,
WM_SETTEXT, 0, (LPARAM)OutBuffer);
LoadCurrentLocale(
PGLOBALDATA pGlobalData)
{
- WCHAR szValue[9];
+ WCHAR szBuffer[16];
PWSTR ptr;
HKEY hLocaleKey;
DWORD ret;
DWORD dwSize;
- DWORD i;
ret = RegOpenKeyExW(HKEY_CURRENT_USER,
L"Control Panel\\International",
return FALSE;
}
- pGlobalData->dwLocaleCount = sizeof(LocaleKeyData) / sizeof(LOCALE_KEY_DATA);
+ dwSize = 9 * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"Locale",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize);
+ pGlobalData->UserLCID = (LCID)wcstoul(szBuffer, &ptr, 16);
+
+ /* Number */
+ dwSize = MAX_NUMDECIMALSEP * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sDecimal",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szNumDecimalSep,
+ &dwSize);
+
+ dwSize = MAX_NUMTHOUSANDSEP * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sThousand",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szNumThousandSep,
+ &dwSize);
+
+ dwSize = MAX_NUMNEGATIVESIGN * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sNegativeSign",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szNumNegativeSign,
+ &dwSize);
- pGlobalData->pLocaleArray = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
- pGlobalData->dwLocaleCount * sizeof(PWSTR));
- if (pGlobalData->pLocaleArray == NULL)
+ dwSize = MAX_NUMPOSITIVESIGN * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sPositiveSign",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szNumPositiveSign,
+ &dwSize);
+
+ dwSize = MAX_NUMLISTSEP * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sList",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szNumListSep,
+ &dwSize);
+
+ dwSize = MAX_NUMNATIVEDIGITS * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sNativeDigits",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szNumNativeDigits,
+ &dwSize);
+
+ pGlobalData->nNumNegFormat = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iNegNumber",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nNumNegFormat = _wtoi(szBuffer);
+
+ pGlobalData->nNumDigits = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iDigits",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nNumDigits = _wtoi(szBuffer);
+
+ pGlobalData->nNumLeadingZero = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iLZero",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nNumLeadingZero = _wtoi(szBuffer);
+
+ pGlobalData->nNumMeasure = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iMeasure",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nNumMeasure = _wtoi(szBuffer);
+
+ pGlobalData->nNumShape = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"NumShape",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nNumShape = _wtoi(szBuffer);
+
+ pGlobalData->nNumGrouping = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"sGrouping",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
{
- RegCloseKey(hLocaleKey);
- return FALSE;
+ pGlobalData->nNumGrouping = 0;
+ if (szBuffer[0] == L'3')
+ {
+ if ((szBuffer[1] == L';') &&
+ (szBuffer[2] == L'2'))
+ pGlobalData->nNumGrouping = 2;
+ else
+ pGlobalData->nNumGrouping = 1;
+ }
}
- dwSize = 9 * sizeof(WCHAR);
+ /* Currency */
+ dwSize = MAX_CURRSYMBOL * sizeof(WCHAR);
RegQueryValueExW(hLocaleKey,
- L"Locale",
+ L"sCurrency",
NULL,
NULL,
- (PBYTE)szValue,
+ (PBYTE)pGlobalData->szCurrSymbol,
&dwSize);
- pGlobalData->lcid = (LCID)wcstoul(szValue, &ptr, 16);
- for (i = 0; i < pGlobalData->dwLocaleCount; i++)
- {
- RegQueryValueExW(hLocaleKey,
- LocaleKeyData[i].pKeyName,
- NULL,
+ dwSize = MAX_CURRDECIMALSEP * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sMonDecimalSep",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szCurrDecimalSep,
+ &dwSize);
+
+ dwSize = MAX_CURRTHOUSANDSEP * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sMonThousandSep",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szCurrThousandSep,
+ &dwSize);
+
+ pGlobalData->nCurrGrouping = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"sMonGrouping",
NULL,
NULL,
- &dwSize);
- if (dwSize > 0)
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ {
+ pGlobalData->nCurrGrouping = 0;
+ if (szBuffer[0] == L'3')
{
- pGlobalData->pLocaleArray[i] = HeapAlloc(GetProcessHeap(), 0, dwSize);
- if (pGlobalData->pLocaleArray[i])
- {
- RegQueryValueExW(hLocaleKey,
- LocaleKeyData[i].pKeyName,
- NULL,
- NULL,
- (LPVOID)pGlobalData->pLocaleArray[i],
- &dwSize);
- }
+ if ((szBuffer[1] == L';') &&
+ (szBuffer[2] == L'2'))
+ pGlobalData->nCurrGrouping = 2;
+ else
+ pGlobalData->nCurrGrouping = 1;
}
}
+ pGlobalData->nCurrPosFormat = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iCurrency",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nCurrPosFormat = _wtoi(szBuffer);
+
+ pGlobalData->nCurrNegFormat = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iNegCurr",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nCurrNegFormat = _wtoi(szBuffer);
+
+ pGlobalData->nCurrDigits = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iCurrDigits",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nCurrDigits = _wtoi(szBuffer);
+
+ /* Time */
+ dwSize = MAX_TIMEFORMAT * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sTimeFormat",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szTimeFormat,
+ &dwSize);
+
+ dwSize = MAX_TIMESEPARATOR * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sTime",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szTimeSep,
+ &dwSize);
+
+ dwSize = MAX_TIMEAMSYMBOL * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"s1159",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szTimeAM,
+ &dwSize);
+
+ dwSize = MAX_TIMEPMSYMBOL * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"s2359",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szTimePM,
+ &dwSize);
+
+ pGlobalData->nTime = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iTime",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nTime = _wtoi(szBuffer);
+
+ pGlobalData->nTimePrefix = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iTimePrefix",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nTimePrefix = _wtoi(szBuffer);
+
+ pGlobalData->nTimeLeadingZero = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iTLZero",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nTimeLeadingZero = _wtoi(szBuffer);
+
+ /* Date */
+ dwSize = MAX_LONGDATEFORMAT * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sLongDate",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szLongDateFormat,
+ &dwSize);
+
+ dwSize = MAX_SHORTDATEFORMAT * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sShortDate",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szShortDateFormat,
+ &dwSize);
+
+ dwSize = MAX_DATESEPARATOR * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sDate",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szDateSep,
+ &dwSize);
+
+ pGlobalData->nFirstDayOfWeek = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iFirstDayOfWeek",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nFirstDayOfWeek = _wtoi(szBuffer);
+
+ pGlobalData->nFirstWeekOfYear = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iFirstWeekOfYear",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nFirstWeekOfYear = _wtoi(szBuffer);
+
+ pGlobalData->nDate = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iDate",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nDate = _wtoi(szBuffer);
+
+ pGlobalData->nCalendarType = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iCalendarType",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nCalendarType = _wtoi(szBuffer);
+
+ /* Misc */
+ dwSize = MAX_MISCCOUNTRY * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sCountry",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szMiscCountry,
+ &dwSize);
+
+ dwSize = MAX_MISCLANGUAGE * sizeof(WCHAR);
+ RegQueryValueExW(hLocaleKey,
+ L"sLanguage",
+ NULL,
+ NULL,
+ (PBYTE)pGlobalData->szMiscLanguage,
+ &dwSize);
+
+ pGlobalData->nMiscCountry = 0;
+ dwSize = 16 * sizeof(WCHAR);
+ if (RegQueryValueExW(hLocaleKey,
+ L"iCountry",
+ NULL,
+ NULL,
+ (PBYTE)szBuffer,
+ &dwSize) == ERROR_SUCCESS)
+ pGlobalData->nMiscCountry = _wtoi(szBuffer);
+
RegCloseKey(hLocaleKey);
return TRUE;
VOID
-FreeCurrentLocale(
- PGLOBALDATA pGlobalData)
+SetNewLocale(
+ PGLOBALDATA pGlobalData,
+ LCID lcid)
{
- DWORD i;
-
- if (pGlobalData == NULL || pGlobalData->pLocaleArray == NULL)
- return;
+ WCHAR szBuffer[16];
+
+ pGlobalData->UserLCID = lcid;
+
+ /* Number */
+ GetLocaleInfo(lcid,
+ LOCALE_SDECIMAL | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szNumDecimalSep,
+ MAX_NUMDECIMALSEP * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_STHOUSAND | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szNumThousandSep,
+ MAX_NUMTHOUSANDSEP * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SNEGATIVESIGN | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szNumNegativeSign,
+ MAX_NUMNEGATIVESIGN * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SPOSITIVESIGN | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szNumPositiveSign,
+ MAX_NUMPOSITIVESIGN * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SLIST | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szNumListSep,
+ MAX_NUMLISTSEP * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SNATIVEDIGITS | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szNumNativeDigits,
+ MAX_NUMNATIVEDIGITS * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_INEGNUMBER | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nNumNegFormat = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_IDIGITS | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nNumDigits = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_ILZERO | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nNumLeadingZero = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_IMEASURE | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nNumMeasure = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_IDIGITSUBSTITUTION | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nNumShape = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_SGROUPING | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nNumGrouping = 0;
+ if (szBuffer[0] == L'3')
+ {
+ if ((szBuffer[1] == L';') &&
+ (szBuffer[2] == L'2'))
+ pGlobalData->nNumGrouping = 2;
+ else
+ pGlobalData->nNumGrouping = 1;
+ }
- for (i = 0; i < pGlobalData->dwLocaleCount; i++)
+ /* Currency */
+ GetLocaleInfo(lcid,
+ LOCALE_SCURRENCY | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szCurrSymbol,
+ MAX_CURRSYMBOL * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SMONDECIMALSEP | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szCurrDecimalSep,
+ MAX_CURRDECIMALSEP * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SMONTHOUSANDSEP | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szCurrThousandSep,
+ MAX_CURRTHOUSANDSEP * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SMONGROUPING | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nCurrGrouping = 0;
+ if (szBuffer[0] == L'3')
{
- if (pGlobalData->pLocaleArray[i])
- HeapFree(GetProcessHeap(), 0, pGlobalData->pLocaleArray[i]);
+ if ((szBuffer[1] == L';') &&
+ (szBuffer[2] == L'2'))
+ pGlobalData->nCurrGrouping = 2;
+ else
+ pGlobalData->nCurrGrouping = 1;
}
- HeapFree(GetProcessHeap(), 0, pGlobalData->pLocaleArray);
- pGlobalData->pLocaleArray = NULL;
+
+ GetLocaleInfo(lcid,
+ LOCALE_ICURRENCY | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nCurrPosFormat = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_INEGCURR | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nCurrNegFormat = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_ICURRDIGITS | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nCurrDigits = _wtoi(szBuffer);
+
+ /* Time */
+ GetLocaleInfo(lcid,
+ LOCALE_STIMEFORMAT | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szTimeFormat,
+ MAX_TIMEFORMAT * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_STIME | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szTimeSep,
+ MAX_TIMESEPARATOR * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_S1159 | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szTimeAM,
+ MAX_TIMEAMSYMBOL * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_S2359 | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szTimePM,
+ MAX_TIMEPMSYMBOL * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_ITIME | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nTime = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_ITIMEMARKPOSN | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nTimePrefix = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_ITLZERO | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nTimeLeadingZero = _wtoi(szBuffer);
+
+ /* Date */
+ GetLocaleInfo(lcid,
+ LOCALE_SLONGDATE | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szLongDateFormat,
+ MAX_LONGDATEFORMAT * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SSHORTDATE | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szShortDateFormat,
+ MAX_SHORTDATEFORMAT * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SDATE | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szDateSep,
+ MAX_DATESEPARATOR * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_IFIRSTDAYOFWEEK | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nFirstDayOfWeek = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_IFIRSTWEEKOFYEAR | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nFirstWeekOfYear = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_IDATE | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nDate = _wtoi(szBuffer);
+
+ GetLocaleInfo(lcid,
+ LOCALE_ICALENDARTYPE | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nCalendarType = _wtoi(szBuffer);
+
+ /* Misc */
+ GetLocaleInfo(lcid,
+ LOCALE_SCOUNTRY | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szMiscCountry,
+ MAX_MISCCOUNTRY * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_SLANGUAGE | LOCALE_NOUSEROVERRIDE,
+ pGlobalData->szMiscLanguage,
+ MAX_MISCLANGUAGE * sizeof(WCHAR));
+
+ GetLocaleInfo(lcid,
+ LOCALE_ICOUNTRY | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 16 * sizeof(WCHAR));
+ pGlobalData->nMiscCountry = _wtoi(szBuffer);
}
+static
VOID
-SetNewLocale(
+SaveUserLocale(
PGLOBALDATA pGlobalData,
- LCID lcid)
+ HKEY hLocaleKey)
{
- DWORD i, dwSize;
-
- pGlobalData->lcid = lcid;
-
- for (i = 0; i < pGlobalData->dwLocaleCount; i++)
- {
- if (pGlobalData->pLocaleArray[i])
- {
- HeapFree(GetProcessHeap(), 0, pGlobalData->pLocaleArray[i]);
- pGlobalData->pLocaleArray[i] = NULL;
- }
-
- dwSize = GetLocaleInfo(lcid,
- LocaleKeyData[i].lcType | LOCALE_NOUSEROVERRIDE,
- NULL,
- 0);
- if (dwSize > 0)
- {
- pGlobalData->pLocaleArray[i] = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(WCHAR));
- if (pGlobalData->pLocaleArray[i])
- {
- GetLocaleInfo(lcid,
- LocaleKeyData[i].lcType | LOCALE_NOUSEROVERRIDE,
- pGlobalData->pLocaleArray[i],
- dwSize);
- }
- }
- }
+ WCHAR szBuffer[16];
+
+ wsprintf(szBuffer, L"%08lx", (DWORD)pGlobalData->UserLCID);
+ RegSetValueExW(hLocaleKey,
+ L"Locale",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ /* Number */
+ RegSetValueExW(hLocaleKey,
+ L"sDecimal",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szNumDecimalSep,
+ (wcslen(pGlobalData->szNumDecimalSep) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sThousand",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szNumThousandSep,
+ (wcslen(pGlobalData->szNumThousandSep) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sNegativeSign",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szNumNegativeSign,
+ (wcslen(pGlobalData->szNumNegativeSign) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sPositiveSign",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szNumPositiveSign,
+ (wcslen(pGlobalData->szNumPositiveSign) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sGrouping",
+ 0,
+ REG_SZ,
+ (PBYTE)szCurrencyGrouping[pGlobalData->nNumGrouping],
+ (wcslen(szCurrencyGrouping[pGlobalData->nNumGrouping]) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sList",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szNumListSep,
+ (wcslen(pGlobalData->szNumListSep) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sNativeDigits",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szNumNativeDigits,
+ (wcslen(pGlobalData->szNumNativeDigits) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nNumNegFormat,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iNegNumber",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nNumDigits,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iDigits",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nNumLeadingZero,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iLZero",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nNumMeasure,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iMeasure",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nNumShape,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"NumShape",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ /* Currency */
+ RegSetValueExW(hLocaleKey,
+ L"sCurrency",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szCurrSymbol,
+ (wcslen(pGlobalData->szCurrSymbol) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sMonDecimalSep",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szCurrDecimalSep,
+ (wcslen(pGlobalData->szCurrDecimalSep) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sMonThousandSep",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szCurrThousandSep,
+ (wcslen(pGlobalData->szCurrThousandSep) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sMonGrouping",
+ 0,
+ REG_SZ,
+ (PBYTE)szCurrencyGrouping[pGlobalData->nCurrGrouping],
+ (wcslen(szCurrencyGrouping[pGlobalData->nCurrGrouping]) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nCurrPosFormat,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iCurrency",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nCurrNegFormat,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iNegCurr",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nCurrDigits,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iCurrDigits",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ /* Time */
+ RegSetValueExW(hLocaleKey,
+ L"sTimeFormat",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szTimeFormat,
+ (wcslen(pGlobalData->szTimeFormat) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sTime",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szTimeSep,
+ (wcslen(pGlobalData->szTimeSep) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"s1159",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szTimeAM,
+ (wcslen(pGlobalData->szTimeAM) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"s2359",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szTimePM,
+ (wcslen(pGlobalData->szTimePM) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nTime,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iTime",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nTimePrefix,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iTimePrefix",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nTimeLeadingZero,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iTLZero",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ /* Date */
+ RegSetValueExW(hLocaleKey,
+ L"sLongDate",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szLongDateFormat,
+ (wcslen(pGlobalData->szLongDateFormat) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sShortDate",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szShortDateFormat,
+ (wcslen(pGlobalData->szShortDateFormat) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sDate",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szDateSep,
+ (wcslen(pGlobalData->szDateSep) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nFirstDayOfWeek,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iFirstDayOfWeek",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nFirstWeekOfYear,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iFirstWeekOfYear",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nDate,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iDate",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nCalendarType,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iCalendarType",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+
+ /* Misc */
+ RegSetValueExW(hLocaleKey,
+ L"sCountry",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szMiscCountry,
+ (wcslen(pGlobalData->szMiscCountry) + 1) * sizeof(WCHAR));
+
+ RegSetValueExW(hLocaleKey,
+ L"sLanguage",
+ 0,
+ REG_SZ,
+ (PBYTE)pGlobalData->szMiscLanguage,
+ (wcslen(pGlobalData->szMiscLanguage) + 1) * sizeof(WCHAR));
+
+ _itow(pGlobalData->nMiscCountry,
+ szBuffer, DECIMAL_RADIX);
+ RegSetValueExW(hLocaleKey,
+ L"iCountry",
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
}
SaveCurrentLocale(
PGLOBALDATA pGlobalData)
{
- HKEY localeKey;
+ HKEY hLocaleKey;
DWORD ret;
- WCHAR value[9];
- DWORD valuesize;
- DWORD i;
-
- wsprintf(value, L"%08x", (DWORD)pGlobalData->lcid);
- valuesize = (wcslen(value) + 1) * sizeof(WCHAR);
if (pGlobalData->bApplyToDefaultUser)
{
L".DEFAULT\\Control Panel\\International",
0,
KEY_WRITE,
- &localeKey);
+ &hLocaleKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_DEF_INT_KEY_REG);
return;
}
- ret = RegSetValueExW(localeKey, L"Locale", 0, REG_SZ, (PBYTE)value, valuesize);
- if (ret != ERROR_SUCCESS)
- {
- RegCloseKey(localeKey);
- PrintErrorMsgBox(IDS_ERROR_INT_KEY_REG);
- return;
- }
-
- for (i = 0; i < pGlobalData->dwLocaleCount; i++)
- {
- RegSetValueExW(localeKey,
- LocaleKeyData[i].pKeyName,
- 0,
- REG_SZ,
- (PBYTE)pGlobalData->pLocaleArray[i],
- (wcslen(pGlobalData->pLocaleArray[i]) + 1) * sizeof(WCHAR));
- }
+ SaveUserLocale(pGlobalData, hLocaleKey);
/* Flush and close the locale key */
- RegFlushKey(localeKey);
- RegCloseKey(localeKey);
- }
-
- ret = RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\International",
- 0, KEY_READ | KEY_WRITE, &localeKey);
- if (ret != ERROR_SUCCESS)
- {
- PrintErrorMsgBox(IDS_ERROR_INT_KEY_REG);
- return;
+ RegFlushKey(hLocaleKey);
+ RegCloseKey(hLocaleKey);
}
- ret = RegSetValueExW(localeKey, L"Locale", 0, REG_SZ, (PBYTE)value, valuesize);
+ ret = RegOpenKeyExW(HKEY_CURRENT_USER,
+ L"Control Panel\\International",
+ 0,
+ KEY_WRITE,
+ &hLocaleKey);
if (ret != ERROR_SUCCESS)
{
- RegCloseKey(localeKey);
PrintErrorMsgBox(IDS_ERROR_INT_KEY_REG);
return;
}
- for (i = 0; i < pGlobalData->dwLocaleCount; i++)
- {
- RegSetValueExW(localeKey,
- LocaleKeyData[i].pKeyName,
- 0,
- REG_SZ,
- (PBYTE)pGlobalData->pLocaleArray[i],
- (wcslen(pGlobalData->pLocaleArray[i]) + 1) * sizeof(WCHAR));
- }
+ SaveUserLocale(pGlobalData, hLocaleKey);
/* Flush and close the locale key */
- RegFlushKey(localeKey);
- RegCloseKey(localeKey);
+ RegFlushKey(hLocaleKey);
+ RegCloseKey(hLocaleKey);
/* Set the new locale for the current process */
- NtSetDefaultLocale(TRUE, pGlobalData->lcid);
-
+ NtSetDefaultLocale(TRUE, pGlobalData->UserLCID);
}
/* Location enumerate procedure */
}
+static
+VOID
+InitPropSheetPage(
+ PROPSHEETPAGEW *psp,
+ WORD idDlg,
+ DLGPROC DlgProc,
+ PGLOBALDATA pGlobalData)
+{
+ ZeroMemory(psp, sizeof(PROPSHEETPAGEW));
+ psp->dwSize = sizeof(PROPSHEETPAGEW);
+ psp->dwFlags = PSP_DEFAULT;
+ psp->hInstance = hApplet;
+ psp->pszTemplate = MAKEINTRESOURCE(idDlg);
+ psp->pfnDlgProc = DlgProc;
+ psp->lParam = (LPARAM)pGlobalData;
+}
+
+
+INT_PTR
+APIENTRY
+CustomizeLocalePropertySheet(
+ HWND hwndDlg,
+ PGLOBALDATA pGlobalData)
+{
+ PROPSHEETPAGEW PsPage[NUM_SHEETS + 1];
+ PROPSHEETHEADERW psh;
+ WCHAR Caption[MAX_STR_SIZE];
+
+ LoadStringW(hApplet, IDS_CUSTOMIZE_TITLE, Caption, sizeof(Caption) / sizeof(TCHAR));
+
+ ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
+ psh.dwSize = sizeof(PROPSHEETHEADER);
+ psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USECALLBACK;
+ psh.hwndParent = hwndDlg;
+ psh.hInstance = hApplet;
+ psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON));
+ psh.pszCaption = Caption;
+ psh.nPages = (sizeof(PsPage) / sizeof(PROPSHEETPAGE)) - 1;
+ psh.nStartPage = 0;
+ psh.ppsp = PsPage;
+
+ 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(pGlobalData->UserLCID))
+ {
+ psh.nPages++;
+ InitPropSheetPage(&PsPage[4], IDD_SORTPAGE, SortPageProc, pGlobalData);
+ }
+
+ return PropertySheetW(&psh);
+}
+
+
/* Property page dialog callback */
INT_PTR CALLBACK
GeneralPageProc(HWND hwndDlg,
break;
case IDC_SETUP_BUTTON:
- SetupApplet(GetParent(hwndDlg), pGlobalData);
+ if (CustomizeLocalePropertySheet(GetParent(hwndDlg), pGlobalData) > 0)
+ {
+ UpdateLocaleSample(hwndDlg, pGlobalData);
+ pGlobalData->fUserLocaleChanged = TRUE;
+ PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+ }
break;
}
break;
pGlobalData->fGeoIdChanged = FALSE;
}
- AddNewKbLayoutsByLcid(pGlobalData->lcid);
+ AddNewKbLayoutsByLcid(pGlobalData->UserLCID);
}
}
break;
-
- case WM_DESTROY:
- if (pGlobalData)
- {
- FreeCurrentLocale(pGlobalData);
- }
- break;
}
return FALSE;
#define MAX_STR_SIZE 128
#define MAX_SAMPLES_STR_SIZE 70
-#define MAX_NUMBERDSYMBOL 3
-#define MAX_NUMBERSDIGITGRSYM 3
-#define MAX_NUMBERSNSIGNSYM 4
-#define MAX_NUMBERSLSEP 3
-
-#define MAX_CURRENCYSYMBOL 5
-#define MAX_CURRENCYDECSEP 3
-#define MAX_CURRENCYGRPSEP 3
+#define MAX_NUMDECIMALSEP 4
+#define MAX_NUMTHOUSANDSEP 4
+#define MAX_NUMNEGATIVESIGN 5
+#define MAX_NUMPOSITIVESIGN 5
+#define MAX_NUMLISTSEP 4
+#define MAX_NUMNATIVEDIGITS 11
+
+#define MAX_CURRSYMBOL 13
+#define MAX_CURRDECIMALSEP 4
+#define MAX_CURRTHOUSANDSEP 4
+#define MAX_CURRGROUPING 10
#define MAX_TIMEFORMAT 80
-#define MAX_TIMESEPARATOR 3
-#define MAX_TIMEAMSYMBOL 12
-#define MAX_TIMEPMSYMBOL 12
+#define MAX_TIMESEPARATOR 4
+#define MAX_TIMEAMSYMBOL 15
+#define MAX_TIMEPMSYMBOL 15
-#define MAX_SHRTDATEFMT 80
-#define MAX_SHRTDATESEP 3
-#define MAX_LONGDATEFMT 80
+#define MAX_SHORTDATEFORMAT 80
+#define MAX_LONGDATEFORMAT 80
+#define MAX_DATESEPARATOR 4
#define MAX_YEAR_EDIT 4
+#define MAX_MISCCOUNTRY 80
+#define MAX_MISCLANGUAGE 80
+
+
typedef struct _APPLET
{
UINT idIcon;
typedef struct _GLOBALDATA
{
+ /* Number */
+ WCHAR szNumDecimalSep[MAX_NUMDECIMALSEP];
+ WCHAR szNumThousandSep[MAX_NUMTHOUSANDSEP];
+ WCHAR szNumNegativeSign[MAX_NUMNEGATIVESIGN];
+ WCHAR szNumPositiveSign[MAX_NUMPOSITIVESIGN];
+ WCHAR szNumListSep[MAX_NUMLISTSEP];
+ WCHAR szNumNativeDigits[MAX_NUMNATIVEDIGITS];
+ INT nNumNegFormat;
+ INT nNumDigits;
+ INT nNumLeadingZero;
+ INT nNumGrouping;
+ INT nNumMeasure;
+ INT nNumShape;
+
+ /* Currency */
+ WCHAR szCurrSymbol[MAX_CURRSYMBOL];
+ WCHAR szCurrDecimalSep[MAX_CURRDECIMALSEP];
+ WCHAR szCurrThousandSep[MAX_CURRTHOUSANDSEP];
+ INT nCurrPosFormat;
+ INT nCurrNegFormat;
+ INT nCurrDigits;
+ INT nCurrGrouping;
+
+ /* Time */
+ WCHAR szTimeFormat[MAX_TIMEFORMAT];
+ WCHAR szTimeSep[MAX_TIMESEPARATOR];
+ WCHAR szTimeAM[MAX_TIMEAMSYMBOL];
+ WCHAR szTimePM[MAX_TIMEPMSYMBOL];
+ INT nTime;
+ INT nTimePrefix;
+ INT nTimeLeadingZero;
+
+ /* Date */
+ WCHAR szLongDateFormat[MAX_LONGDATEFORMAT];
+ WCHAR szShortDateFormat[MAX_SHORTDATEFORMAT];
+ WCHAR szDateSep[MAX_DATESEPARATOR];
+ INT nFirstDayOfWeek;
+ INT nFirstWeekOfYear;
+ INT nDate;
+ INT nCalendarType;
+
+ /* Other */
+ WCHAR szMiscCountry[MAX_MISCCOUNTRY];
+ WCHAR szMiscLanguage[MAX_MISCLANGUAGE];
+ INT nMiscCountry;
+
+ LCID UserLCID;
+ BOOL fUserLocaleChanged;
BOOL bApplyToDefaultUser;
GEOID geoid;
BOOL fGeoIdChanged;
- LCID lcid;
- DWORD dwLocaleCount;
- PWSTR *pLocaleArray;
- BOOL fUserLocaleChanged;
} GLOBALDATA, *PGLOBALDATA;
extern HINSTANCE hApplet;
/* advanced.c */
INT_PTR CALLBACK
AdvancedPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-VOID
-SetNonUnicodeLang(HWND hwnd, LCID lcid);
/* currency.c */
INT_PTR CALLBACK
INT_PTR CALLBACK
GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+PWSTR
+GetLocaleString(
+ PWSTR *pLocaleArray,
+ LCTYPE lcType);
+
/* locale.c */
INT_PTR CALLBACK
InpLocalePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
PWSTR
ReplaceSubStr(PCWSTR szSourceStr, PCWSTR szStrToReplace, PCWSTR szTempl);
-LONG
-APIENTRY
-SetupApplet(HWND hwndDlg, PGLOBALDATA pGlobalData);
-
/* kblayouts.c */
VOID AddNewKbLayoutsByLcid(LCID Lcid);
#include "intl.h"
-#define NUM_SHEETS 4
-
/* Insert the space */
PWSTR
InsSpacePos(PCWSTR szInsStr, const int nPos)
return szDestStr;
}
-
-static VOID
-InitPropSheetPage(PROPSHEETPAGEW *psp, WORD idDlg, DLGPROC DlgProc, PGLOBALDATA pGlobalData)
-{
- ZeroMemory(psp, sizeof(PROPSHEETPAGEW));
- psp->dwSize = sizeof(PROPSHEETPAGEW);
- psp->dwFlags = PSP_DEFAULT;
- psp->hInstance = hApplet;
- psp->pszTemplate = MAKEINTRESOURCE(idDlg);
- psp->pfnDlgProc = DlgProc;
- psp->lParam = (LPARAM)pGlobalData;
-}
-
-
-/* Create applets */
-LONG
-APIENTRY
-SetupApplet(
- HWND hwndDlg,
- PGLOBALDATA pGlobalData)
-{
- PROPSHEETPAGEW PsPage[NUM_SHEETS + 1];
- PROPSHEETHEADERW psh;
- WCHAR Caption[MAX_STR_SIZE];
- INT_PTR ret;
-
- LoadStringW(hApplet, IDS_CUSTOMIZE_TITLE, Caption, sizeof(Caption) / sizeof(TCHAR));
-
- ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
- psh.dwSize = sizeof(PROPSHEETHEADER);
- psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USECALLBACK;
- psh.hwndParent = hwndDlg;
- psh.hInstance = hApplet;
- psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON));
- psh.pszCaption = Caption;
- psh.nPages = (sizeof(PsPage) / sizeof(PROPSHEETPAGE)) - 1;
- psh.nStartPage = 0;
- psh.ppsp = PsPage;
-
- 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(pGlobalData->lcid))
- {
- psh.nPages++;
- InitPropSheetPage(&PsPage[4], IDD_SORTPAGE, SortPageProc, pGlobalData);
- }
-
- ret = PropertySheetW(&psh);
-
- return (LONG)(ret != -1);
-}
-
/* EOF */
static VOID
InitNumDecimalSepCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szNumSep[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode;
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL,
CB_LIMITTEXT,
- MAX_NUMBERDSYMBOL,
+ MAX_NUMDECIMALSEP - 1,
0);
- /* Get current decimal separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SDECIMAL,
- szNumSep,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL,
CB_RESETCONTENT,
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL,
CB_SELECTSTRING,
-1,
- (LPARAM)(LPCSTR)szNumSep);
+ (LPARAM)pGlobalData->szNumDecimalSep);
/* If it is not successful, add new values to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL,
CB_ADDSTRING,
MAX_NUM_SEP_SAMPLES,
- (LPARAM)szNumSep);
+ (LPARAM)pGlobalData->szNumDecimalSep);
SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL,
CB_SELECTSTRING,
-1,
- (LPARAM)szNumSep);
+ (LPARAM)pGlobalData->szNumDecimalSep);
}
}
static VOID
InitNumOfFracSymbCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szFracNum[MAX_SAMPLES_STR_SIZE];
WCHAR szFracCount[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
- /* Get current number of fractional symbols */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_IDIGITS,
- szFracNum,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNDIGDEC,
CB_RESETCONTENT,
/* Set current item to value from registry */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNDIGDEC,
CB_SETCURSEL,
- (WPARAM)_wtoi(szFracNum),
+ (WPARAM)pGlobalData->nNumDigits,
(LPARAM)0);
}
static VOID
InitNumFieldSepCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szFieldSep[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode;
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM,
CB_LIMITTEXT,
- MAX_NUMBERSDIGITGRSYM,
+ MAX_NUMTHOUSANDSEP - 1,
0);
- /* Get current field separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_STHOUSAND,
- szFieldSep,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM,
CB_RESETCONTENT,
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM,
CB_SELECTSTRING,
-1,
- (LPARAM)szFieldSep);
+ (LPARAM)pGlobalData->szNumThousandSep);
/* If it is not success, add new values to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM,
CB_ADDSTRING,
0,
- (LPARAM)szFieldSep);
+ (LPARAM)pGlobalData->szNumThousandSep);
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM,
CB_SELECTSTRING,
-1,
- (LPARAM)szFieldSep);
+ (LPARAM)pGlobalData->szNumThousandSep);
}
}
static VOID
InitFieldDigNumCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szFieldDigNum[MAX_SAMPLES_STR_SIZE];
PWSTR pszFieldDigNumSmpl;
INT nCBIndex;
- INT nRetCode;
-
- /* Get current field digits num */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SGROUPING,
- szFieldDigNum,
- MAX_SAMPLES_STR_SIZE);
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
free(pszFieldDigNumSmpl);
}
- pszFieldDigNumSmpl = InsSpacesFmt(SAMPLE_NUMBER, szFieldDigNum);
- /* Set current item to value from registry */
- nRetCode = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
- CB_SELECTSTRING,
- -1,
- (LPARAM)pszFieldDigNumSmpl);
-
- /* If it is not successful, add new values to list and select them */
- if (nRetCode == CB_ERR)
- {
- SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
- CB_ADDSTRING,
- 0,
- (LPARAM)pszFieldDigNumSmpl);
- SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
- CB_SELECTSTRING,
- -1,
- (LPARAM)pszFieldDigNumSmpl);
- }
-
- free(pszFieldDigNumSmpl);
+ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
+ CB_SETCURSEL,
+ (WPARAM)pGlobalData->nNumGrouping,
+ (LPARAM)0);
}
/* Init negative sign control box */
static VOID
InitNegSignCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szNegSign[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode;
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM,
CB_LIMITTEXT,
- MAX_NUMBERSNSIGNSYM,
+ MAX_NUMNEGATIVESIGN - 1,
0);
- /* Get current negative sign */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SNEGATIVESIGN,
- szNegSign,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM,
CB_RESETCONTENT,
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM,
CB_SELECTSTRING,
-1,
- (LPARAM)szNegSign);
+ (LPARAM)pGlobalData->szNumNegativeSign);
/* If it is not successful, add new values to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM,
CB_ADDSTRING,
0,
- (LPARAM)szNegSign);
+ (LPARAM)pGlobalData->szNumNegativeSign);
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM,
CB_SELECTSTRING,
-1,
- (LPARAM)szNegSign);
+ (LPARAM)pGlobalData->szNumNegativeSign);
}
}
static VOID
InitNegNumFmtCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szNegNumFmt[MAX_SAMPLES_STR_SIZE];
- WCHAR szNumSep[MAX_SAMPLES_STR_SIZE];
- WCHAR szNegSign[MAX_SAMPLES_STR_SIZE];
WCHAR szNewSample[MAX_SAMPLES_STR_SIZE];
PWSTR pszResultStr;
INT nCBIndex;
- /* Get current negative numbers format */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_INEGNUMBER,
- szNegNumFmt,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNNUMFORMAT,
CB_RESETCONTENT,
(WPARAM)0,
(LPARAM)0);
- /* Get current decimal separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SDECIMAL,
- szNumSep,
- MAX_SAMPLES_STR_SIZE);
-
- /* Get current negative sign */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SNEGATIVESIGN,
- szNegSign,
- MAX_SAMPLES_STR_SIZE);
-
/* Create standard list of negative numbers formats */
for (nCBIndex = 0; nCBIndex < MAX_NEG_NUMBERS_SAMPLES; nCBIndex++)
{
/* Replace standard separator to setted */
pszResultStr = ReplaceSubStr(lpNegNumFmtSamples[nCBIndex],
- szNumSep,
+ pGlobalData->szNumDecimalSep,
L",");
wcscpy(szNewSample, pszResultStr);
free(pszResultStr);
/* Replace standard negative sign to setted */
pszResultStr = ReplaceSubStr(szNewSample,
- szNegSign,
+ pGlobalData->szNumNegativeSign,
L"-");
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNNUMFORMAT,
CB_ADDSTRING,
/* Set current item to value from registry */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNNUMFORMAT,
CB_SETCURSEL,
- (WPARAM)_wtoi(szNegNumFmt),
+ (WPARAM)pGlobalData->nNumNegFormat,
(LPARAM)0);
}
static VOID
InitLeadingZeroesCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- WCHAR szLeadNumFmt[MAX_SAMPLES_STR_SIZE];
- WCHAR szNumSep[MAX_SAMPLES_STR_SIZE];
PWSTR pszResultStr;
INT nCBIndex;
- /* Get current leading zeroes format */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_ILZERO,
- szLeadNumFmt,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDISPLEADZER,
CB_RESETCONTENT,
(WPARAM)0,
(LPARAM)0);
- /* Get current decimal separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SDECIMAL,
- szNumSep,
- MAX_SAMPLES_STR_SIZE);
-
/* Create list of standard leading zeroes formats */
for (nCBIndex = 0; nCBIndex < MAX_LEAD_ZEROES_SAMPLES; nCBIndex++)
{
pszResultStr = ReplaceSubStr(lpLeadNumFmtSamples[nCBIndex],
- szNumSep,
+ pGlobalData->szNumDecimalSep,
L",");
SendDlgItemMessage(hwndDlg, IDC_NUMBERSDISPLEADZER,
CB_ADDSTRING,
/* Set current item to value from registry */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDISPLEADZER,
CB_SETCURSEL,
- (WPARAM)_wtoi(szLeadNumFmt),
+ (WPARAM)pGlobalData->nNumLeadingZero,
(LPARAM)0);
}
InitListSepCB(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szListSep[MAX_SAMPLES_STR_SIZE];
INT nCBIndex;
INT nRetCode;
/* Limit text length */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP,
CB_LIMITTEXT,
- MAX_NUMBERSLSEP,
+ MAX_NUMLISTSEP - 1,
0);
- /* Get current list separator */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_SLIST,
- szListSep,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP,
CB_RESETCONTENT,
nRetCode = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP,
CB_SELECTSTRING,
-1,
- (LPARAM)szListSep);
+ (LPARAM)pGlobalData->szNumListSep);
/* If it is not successful, add new values to list and select them */
if (nRetCode == CB_ERR)
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP,
CB_ADDSTRING,
0,
- (LPARAM)szListSep);
+ (LPARAM)pGlobalData->szNumListSep);
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP,
CB_SELECTSTRING,
-1,
- (LPARAM)szListSep);
+ (LPARAM)pGlobalData->szNumListSep);
}
}
InitUnitsSysCB(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szUnitsSys[MAX_SAMPLES_STR_SIZE];
WCHAR szUnitName[128];
INT nCBIndex;
- /* Get current system of units */
- GetLocaleInfoW(pGlobalData->lcid,
- LOCALE_IMEASURE,
- szUnitsSys,
- MAX_SAMPLES_STR_SIZE);
-
/* Clear all box content */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSMEASSYS,
CB_RESETCONTENT,
/* Set current item to value from registry */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSMEASSYS,
CB_SETCURSEL,
- (WPARAM)_wtoi(szUnitsSys),
+ (WPARAM)pGlobalData->nNumMeasure,
(LPARAM)0);
}
WCHAR OutBuffer[MAX_FMT_SIZE];
/* Get positive number format sample */
- GetNumberFormatW(pGlobalData->lcid,
+ GetNumberFormatW(pGlobalData->UserLCID,
0,
SAMPLE_NUMBER,
NULL,
(LPARAM)OutBuffer);
/* Get positive number format sample */
- GetNumberFormatW(pGlobalData->lcid,
+ GetNumberFormatW(pGlobalData->UserLCID,
0,
SAMPLE_NEG_NUMBER,
NULL,
SetNumDecimalSep(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szDecimalSep[MAX_SAMPLES_STR_SIZE];
-
/* Get setted decimal separator */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL,
WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szDecimalSep);
-
- /* Save decimal separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SDECIMAL, szDecimalSep);
+ (WPARAM)MAX_NUMDECIMALSEP,
+ (LPARAM)pGlobalData->szNumDecimalSep);
return TRUE;
}
SetFracSymNum(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szFracSymNum[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted number of fractional symbols */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* Convert to wide char */
- _itow(nCurrSel, szFracSymNum, DECIMAL_RADIX);
-
- /* Save number of fractional symbols */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_IDIGITS, szFracSymNum);
+ pGlobalData->nNumDigits = nCurrSel;
return TRUE;
}
SetNumFieldSep(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szFieldSep[MAX_SAMPLES_STR_SIZE];
-
- /* Get setted field separator */
+ /* Get thousand separator */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM,
WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szFieldSep);
-
- /* Save field separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_STHOUSAND, szFieldSep);
+ (WPARAM)MAX_NUMTHOUSANDSEP,
+ (LPARAM)pGlobalData->szNumThousandSep);
return TRUE;
}
-/* Set number of digits in field */
+/* Set number of digits in field */
static BOOL
SetFieldDigNum(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szFieldDigNum[MAX_SAMPLES_STR_SIZE];
+ INT nCurrSel;
- /* Get setted number of digidts in field */
- SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
- WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szFieldDigNum);
+ /* Get setted negative sum format */
+ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING,
+ CB_GETCURSEL,
+ (WPARAM)0,
+ (LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* Save number of digits in field */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SGROUPING, szFieldDigNum);
+ pGlobalData->nNumGrouping = nCurrSel;
return TRUE;
}
SetNumNegSign(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szNegSign[MAX_SAMPLES_STR_SIZE];
-
/* Get setted negative sign */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM,
WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szNegSign);
-
- /* Save negative sign */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SNEGATIVESIGN, szNegSign);
+ (WPARAM)MAX_NUMNEGATIVESIGN,
+ (LPARAM)pGlobalData->szNumNegativeSign);
return TRUE;
}
SetNegSumFmt(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szNegSumFmt[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted negative sum format */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* convert to wide char */
- _itow(nCurrSel, szNegSumFmt,DECIMAL_RADIX);
-
- /* Save negative sum format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_INEGNUMBER, szNegSumFmt);
+ pGlobalData->nNumNegFormat = nCurrSel;
return TRUE;
}
SetNumLeadZero(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szLeadZero[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted leading zero format */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* Convert to wide char */
- _itow(nCurrSel, szLeadZero, DECIMAL_RADIX);
-
- /* Save leading zero format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_ILZERO, szLeadZero);
+ pGlobalData->nNumLeadingZero = nCurrSel;
return TRUE;
}
SetNumListSep(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szListSep[MAX_SAMPLES_STR_SIZE];
-
/* Get setted list separator */
SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP,
WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szListSep);
-
- /* Save list separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_SLIST, szListSep);
+ (WPARAM)MAX_NUMLISTSEP,
+ (LPARAM)pGlobalData->szNumListSep);
return TRUE;
}
SetNumUnitsSys(HWND hwndDlg,
PGLOBALDATA pGlobalData)
{
- WCHAR szUnitsSys[MAX_SAMPLES_STR_SIZE];
INT nCurrSel;
/* Get setted units system */
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
+ if (nCurrSel == CB_ERR)
+ return FALSE;
- /* convert to wide char */
- _itow(nCurrSel, szUnitsSys, DECIMAL_RADIX);
-
- /* Save units system */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_IMEASURE, szUnitsSys);
+ pGlobalData->nNumMeasure = nCurrSel;
return TRUE;
}
if (!SetNumUnitsSys(hwndDlg, pGlobalData))
break;
+ pGlobalData->fUserLocaleChanged = TRUE;
+
UpdateNumSamples(hwndDlg, pGlobalData);
}
break;
pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
- CreateSortList(GetDlgItem(hwndDlg, IDC_SORTLIST_COMBO), pGlobalData->lcid);
+ CreateSortList(GetDlgItem(hwndDlg, IDC_SORTLIST_COMBO), pGlobalData->UserLCID);
break;
case WM_COMMAND:
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;
case WM_NOTIFY:
if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
{
- /* FIXME: Set locale ID: pGlobalData->lcid */
+ 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->UserLCID = NewLcid;
+ pGlobalData->fUserLocaleChanged = TRUE;
}
break;
}
}
static VOID
-UpdateTimeSample(HWND hWnd, LCID lcid)
+UpdateTimeSample(HWND hWnd, PGLOBALDATA pGlobalData)
{
WCHAR szBuffer[80];
- GetTimeFormatW(lcid, 0, NULL, NULL, szBuffer, 80);
+ GetTimeFormatW(pGlobalData->UserLCID, 0, NULL, pGlobalData->szTimeFormat, szBuffer, 80);
SendDlgItemMessageW(hWnd, IDC_TIMESAMPLE, WM_SETTEXT, 0, (LPARAM)szBuffer);
}
}
}
+
+static
+VOID
+InitTimeFormatCB(
+ HWND hwndDlg,
+ PGLOBALDATA pGlobalData)
+{
+ /* Get the time format */
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEFORMAT,
+ CB_LIMITTEXT, MAX_TIMEFORMAT, 0);
+
+ /* Add available time formats to the list */
+ hwndEnum = GetDlgItem(hwndDlg, IDC_TIMEFORMAT);
+ EnumTimeFormatsW(TimeFormatEnumProc, pGlobalData->UserLCID, 0);
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEFORMAT,
+ CB_SELECTSTRING,
+ -1,
+ (LPARAM)pGlobalData->szTimeFormat);
+}
+
+static
+VOID
+InitTimeSeparatorCB(
+ HWND hwndDlg,
+ PGLOBALDATA pGlobalData)
+{
+ SendDlgItemMessageW(hwndDlg, IDC_TIMESEPARATOR,
+ CB_LIMITTEXT, MAX_TIMESEPARATOR, 0);
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMESEPARATOR,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)pGlobalData->szTimeSep);
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMESEPARATOR,
+ CB_SETCURSEL,
+ 0, /* Index */
+ 0);
+}
+
+
+static
+VOID
+InitAmSymbol(
+ HWND hwndDlg,
+ PGLOBALDATA pGlobalData)
+{
+ int nLen;
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
+ CB_LIMITTEXT, MAX_TIMEAMSYMBOL, 0);
+
+ nLen = wcslen(pGlobalData->szTimeAM);
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)pGlobalData->szTimeAM);
+ if (nLen != 0)
+ {
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)L"");
+ }
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
+ CB_SETCURSEL,
+ 0, /* Index */
+ 0);
+}
+
+
+static
+VOID
+InitPmSymbol(
+ HWND hwndDlg,
+ PGLOBALDATA pGlobalData)
+{
+ int nLen;
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
+ CB_LIMITTEXT, MAX_TIMEPMSYMBOL, 0);
+
+ nLen = wcslen(pGlobalData->szTimeAM);
+
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)pGlobalData->szTimePM);
+ if (nLen != 0)
+ {
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)L"");
+ }
+ SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
+ CB_SETCURSEL,
+ 0, /* Index */
+ 0);
+}
+
+
/* Property page dialog callback */
INT_PTR CALLBACK
TimePageProc(HWND hwndDlg,
switch (uMsg)
{
case WM_INITDIALOG:
- {
- WCHAR Buffer[80];
- int nLen;
-
pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
- /* Update the time format sample */
- UpdateTimeSample(hwndDlg, pGlobalData->lcid);
-
/* Get the time format */
- SendDlgItemMessageW(hwndDlg, IDC_TIMEFORMAT,
- CB_LIMITTEXT, MAX_TIMEFORMAT, 0);
-
- /* Add available time formats to the list */
- hwndEnum = GetDlgItem(hwndDlg, IDC_TIMEFORMAT);
- EnumTimeFormatsW(TimeFormatEnumProc, pGlobalData->lcid, 0);
-
- GetLocaleInfoW(pGlobalData->lcid, LOCALE_STIMEFORMAT, Buffer, sizeof(Buffer)/sizeof(WCHAR));
- SendDlgItemMessageW(hwndDlg, IDC_TIMEFORMAT,
- CB_SELECTSTRING,
- -1,
- (LPARAM)Buffer);
+ InitTimeFormatCB(hwndDlg, pGlobalData);
/* Get the time separator */
- SendDlgItemMessageW(hwndDlg, IDC_TIMESEPARATOR,
- CB_LIMITTEXT, MAX_TIMESEPARATOR, 0);
- GetLocaleInfoW(pGlobalData->lcid, LOCALE_STIME, Buffer, sizeof(Buffer)/sizeof(WCHAR));
- SendDlgItemMessageW(hwndDlg, IDC_TIMESEPARATOR,
- CB_ADDSTRING,
- 0,
- (LPARAM)Buffer);
- SendDlgItemMessageW(hwndDlg, IDC_TIMESEPARATOR,
- CB_SETCURSEL,
- 0, /* Index */
- 0);
+ InitTimeSeparatorCB(hwndDlg, pGlobalData);
/* Get the AM symbol */
- SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
- CB_LIMITTEXT, MAX_TIMEAMSYMBOL, 0);
- nLen = GetLocaleInfoW(pGlobalData->lcid, LOCALE_S1159, Buffer, sizeof(Buffer)/sizeof(WCHAR));
- SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
- CB_ADDSTRING,
- 0,
- (LPARAM)Buffer);
- if (nLen != 0)
- {
- SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
- CB_ADDSTRING,
- 0,
- (LPARAM)L"");
- }
- SendDlgItemMessageW(hwndDlg, IDC_TIMEAMSYMBOL,
- CB_SETCURSEL,
- 0, /* Index */
- 0);
+ InitAmSymbol(hwndDlg, pGlobalData);
/* Get the PM symbol */
- SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
- CB_LIMITTEXT, MAX_TIMEPMSYMBOL, 0);
- nLen = GetLocaleInfoW(pGlobalData->lcid, LOCALE_S2359, Buffer, sizeof(Buffer)/sizeof(WCHAR));
- SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
- CB_ADDSTRING,
- 0,
- (LPARAM)Buffer);
- if (nLen != 0)
- {
- SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
- CB_ADDSTRING,
- 0,
- (LPARAM)L"");
- }
- SendDlgItemMessageW(hwndDlg, IDC_TIMEPMSYMBOL,
- CB_SETCURSEL,
- 0, /* Index */
- 0);
- }
- break;
+ InitPmSymbol(hwndDlg, pGlobalData);
+
+ /* Update the time format sample */
+ UpdateTimeSample(hwndDlg, pGlobalData);
+ break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
- break;
+ break;
}
break;
case WM_NOTIFY:
- {
- LPNMHDR lpnm = (LPNMHDR)lParam;
-
- if (lpnm->code == (UINT)PSN_APPLY)
+ if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
{
- WCHAR Buffer[80];
-
/* Get selected/typed time format text */
- GetSelectedComboEntry(hwndDlg, IDC_TIMEFORMAT, Buffer, sizeof(Buffer)/sizeof(WCHAR));
-
- /* Set time format */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_STIMEFORMAT, Buffer);
+ GetSelectedComboEntry(hwndDlg, IDC_TIMEFORMAT,
+ pGlobalData->szTimeFormat,
+ MAX_TIMEFORMAT);
/* Get selected/typed time separator text */
- GetSelectedComboEntry(hwndDlg, IDC_TIMESEPARATOR, Buffer, sizeof(Buffer)/sizeof(WCHAR));
-
- /* Set time separator */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_STIME, Buffer);
+ GetSelectedComboEntry(hwndDlg, IDC_TIMESEPARATOR,
+ pGlobalData->szTimeSep,
+ MAX_TIMESEPARATOR);
/* Get selected/typed AM symbol text */
- GetSelectedComboEntry(hwndDlg, IDC_TIMEAMSYMBOL, Buffer, sizeof(Buffer)/sizeof(WCHAR));
-
- /* Set the AM symbol */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_S1159, Buffer);
+ GetSelectedComboEntry(hwndDlg, IDC_TIMEAMSYMBOL,
+ pGlobalData->szTimeAM,
+ MAX_TIMEAMSYMBOL);
/* Get selected/typed PM symbol text */
- GetSelectedComboEntry(hwndDlg, IDC_TIMEPMSYMBOL, Buffer, sizeof(Buffer)/sizeof(WCHAR));
+ GetSelectedComboEntry(hwndDlg, IDC_TIMEPMSYMBOL,
+ pGlobalData->szTimePM,
+ MAX_TIMEPMSYMBOL);
- /* Set the PM symbol */
- SetLocaleInfoW(pGlobalData->lcid, LOCALE_S2359, Buffer);
+ pGlobalData->fUserLocaleChanged = TRUE;
/* Update the time format sample */
- UpdateTimeSample(hwndDlg, pGlobalData->lcid);
+ UpdateTimeSample(hwndDlg, pGlobalData);
}
- }
- break;
+ break;
}
return FALSE;