Index: reactos/dll/cpl/intl/advanced.c =================================================================== --- reactos/dll/cpl/intl/advanced.c (revision 72204) +++ reactos/dll/cpl/intl/advanced.c (working copy) @@ -424,7 +424,7 @@ { LPNMHDR lpnm = (LPNMHDR)lParam; - if (lpnm->code == (UINT)PSN_APPLY) + if (lpnm->code == PSN_APPLY) { PropSheet_UnChanged(GetParent(hwndDlg), hwndDlg); Index: reactos/dll/cpl/intl/currency.c =================================================================== --- reactos/dll/cpl/intl/currency.c (revision 72204) +++ reactos/dll/cpl/intl/currency.c (working copy) @@ -20,7 +20,8 @@ * PROJECT: ReactOS International Control Panel * FILE: dll/cpl/intl/currency.c * PURPOSE: Currency property page - * PROGRAMMER: Eric Kohl + * PROGRAMMERS: Eric Kohl + * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ #include "intl.h" @@ -252,37 +253,44 @@ -1, (LPARAM)szBuffer); } + + SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM, CB_SETCURSEL, + pGlobalData->nCurrGrouping, 0); } - /* Set number of digits in field */ static BOOL -SetCurrencyDigNum(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetCurrencyDigNum(HWND hwndDlg, int *pnCurrGrouping, BOOL bShowError) { INT nCurrSel; /* Get setted number of digits in field */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); + if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } + return FALSE; + } + /* Save number of digits in field */ - if (nCurrSel != CB_ERR) - pGlobalData->nCurrGrouping = nCurrSel; - + *pnCurrGrouping = nCurrSel; return TRUE; } /* Set currency field separator */ static BOOL -SetCurrencyFieldSep(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetCurrencyFieldSep(HWND hwndDlg, WCHAR *pszCurrThousandSep, BOOL bShowError) { /* Get setted currency field separator */ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP, WM_GETTEXT, (WPARAM)MAX_SAMPLES_STR_SIZE, - (LPARAM)pGlobalData->szCurrThousandSep); + (LPARAM)pszCurrThousandSep); return TRUE; } @@ -289,19 +297,23 @@ /* Set number of fractional symbols */ static BOOL -SetCurrencyFracSymNum(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetCurrencyFracSymNum(HWND hwndDlg, int *pnCurrDigits, BOOL bShowError) { INT nCurrSel; /* Get setted number of fractional symbols */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECNUM, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nCurrDigits = nCurrSel; + *pnCurrDigits = nCurrSel; return TRUE; } @@ -308,13 +320,13 @@ /* Set currency separator */ static BOOL -SetCurrencySep(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetCurrencySep(HWND hwndDlg, WCHAR *pszCurrDecimalSep, BOOL bShowError) { /* Get setted currency decimal separator */ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP, WM_GETTEXT, (WPARAM)MAX_SAMPLES_STR_SIZE, - (LPARAM)pGlobalData->szCurrDecimalSep); + (LPARAM)pszCurrDecimalSep); return TRUE; } @@ -321,19 +333,23 @@ /* Set negative currency sum format */ static BOOL -SetNegCurrencySumFmt(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetNegCurrencySumFmt(HWND hwndDlg, int *pnCurrNegFormat, BOOL bShowError) { INT nCurrSel; /* Get setted currency unit */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_CURRENCYNEGVALUE, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nCurrNegFormat = nCurrSel; + *pnCurrNegFormat = nCurrSel; return TRUE; } @@ -340,36 +356,72 @@ /* Set positive currency sum format */ static BOOL -SetPosCurrencySumFmt(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetPosCurrencySumFmt(HWND hwndDlg, int *pnCurrPosFormat, BOOL bShowError) { INT nCurrSel; /* Get setted currency unit */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_CURRENCYPOSVALUE, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nCurrPosFormat = nCurrSel; - + *pnCurrPosFormat = nCurrSel; return TRUE; } /* Set currency symbol */ static BOOL -SetCurrencySymbol(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetCurrencySymbol(HWND hwndDlg, WCHAR *pszCurrSymbol, BOOL bShowError) { /* Get setted currency unit */ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL, WM_GETTEXT, (WPARAM)MAX_SAMPLES_STR_SIZE, - (LPARAM)(PCWSTR)pGlobalData->szCurrSymbol); + (LPARAM)pszCurrSymbol); return TRUE; } +static BOOL +SetCurrencySetting(HWND hwndDlg, PGLOBALDATA pGlobalData, BOOL bShowError) +{ + WCHAR szCurrSymbol[MAX_CURRSYMBOL]; + INT nCurrGrouping; + WCHAR szCurrDecimalSep[MAX_CURRDECIMALSEP]; + WCHAR szCurrThousandSep[MAX_CURRTHOUSANDSEP]; + INT nCurrPosFormat; + INT nCurrNegFormat; + INT nCurrDigits; + + if (!SetCurrencySymbol(hwndDlg, szCurrSymbol, bShowError) || + !SetCurrencyDigNum(hwndDlg, &nCurrGrouping, bShowError) || + !SetPosCurrencySumFmt(hwndDlg, &nCurrPosFormat, bShowError) || + !SetNegCurrencySumFmt(hwndDlg, &nCurrNegFormat, bShowError) || + !SetCurrencySep(hwndDlg, szCurrDecimalSep, bShowError) || + !SetCurrencyFracSymNum(hwndDlg, &nCurrDigits, bShowError) || + !SetCurrencyFieldSep(hwndDlg, szCurrThousandSep, bShowError)) + { + return FALSE; + } + + /* store to global data */ + lstrcpyW(pGlobalData->szCurrSymbol, szCurrSymbol); + pGlobalData->nCurrGrouping = nCurrGrouping; + lstrcpyW(pGlobalData->szCurrDecimalSep, szCurrDecimalSep); + lstrcpyW(pGlobalData->szCurrThousandSep, szCurrThousandSep); + pGlobalData->nCurrPosFormat = nCurrPosFormat; + pGlobalData->nCurrNegFormat = nCurrNegFormat; + pGlobalData->nCurrDigits = nCurrDigits; + return TRUE; +} + /* Property page dialog callback */ INT_PTR CALLBACK CurrencyPageProc(HWND hwndDlg, @@ -409,6 +461,10 @@ case IDC_CURRENCYGRPNUM: if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + SetCurrencySetting(hwndDlg, pGlobalData, FALSE); + + UpdateExamples(hwndDlg, pGlobalData); + /* Set "Apply" button enabled */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } @@ -416,32 +472,19 @@ break; case WM_NOTIFY: - if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) + if (((LPNMHDR)lParam)->code == PSN_APPLY) { - if (!SetCurrencySymbol(hwndDlg, pGlobalData)) - break; - - if (!SetCurrencyDigNum(hwndDlg, pGlobalData)) - break; - - if (!SetPosCurrencySumFmt(hwndDlg, pGlobalData)) - break; - - if (!SetNegCurrencySumFmt(hwndDlg, pGlobalData)) - break; - - if (!SetCurrencySep(hwndDlg, pGlobalData)) - break; - - if (!SetCurrencyFracSymNum(hwndDlg, pGlobalData)) - break; - - if (!SetCurrencyFieldSep(hwndDlg, pGlobalData)) - break; - - pGlobalData->fUserLocaleChanged = TRUE; - - UpdateExamples(hwndDlg, pGlobalData); + if (SetCurrencySetting(hwndDlg, pGlobalData, TRUE)) + { + pGlobalData->fUserLocaleChanged = TRUE; + SaveCurrentLocale(pGlobalData); + UpdateExamples(hwndDlg, pGlobalData); + } + else + { + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); + return PSNRET_INVALID_NOCHANGEPAGE; + } } break; } Index: reactos/dll/cpl/intl/date.c =================================================================== --- reactos/dll/cpl/intl/date.c (revision 72204) +++ reactos/dll/cpl/intl/date.c (working copy) @@ -20,7 +20,8 @@ * PROJECT: ReactOS International Control Panel * FILE: dll/cpl/intl/date.c * PURPOSE: Date property page - * PROGRAMMER: Eric Kohl + * PROGRAMMERS: Eric Kohl + * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ #include "intl.h" @@ -87,9 +88,8 @@ /* Setted up short date separator to registry */ static BOOL -SetShortDateSep(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetShortDateSep(HWND hwndDlg, WCHAR *pszShortDateSep, BOOL bShowError) { - WCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE]; INT nSepStrSize; INT nSepCount; @@ -97,23 +97,32 @@ SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO, WM_GETTEXT, (WPARAM)MAX_SAMPLES_STR_SIZE, - (LPARAM)szShortDateSep); + (LPARAM)pszShortDateSep); /* Get separator string size */ - nSepStrSize = wcslen(szShortDateSep); + nSepStrSize = wcslen(pszShortDateSep); /* Check date components */ for (nSepCount = 0; nSepCount < nSepStrSize; nSepCount++) { - if (iswalnum(szShortDateSep[nSepCount]) || (szShortDateSep[nSepCount] == L'\'')) + if (iswalnum(pszShortDateSep[nSepCount]) || (pszShortDateSep[nSepCount] == L'\'')) { - PrintErrorMsgBox(IDS_ERROR_SYMBOL_SEPARATE); + if (bShowError) + { + PrintErrorMsgBox(IDS_ERROR_SYMBOL_SEPARATE); + } return FALSE; } } - /* Save date separator */ - wcscpy(pGlobalData->szDateSep, szShortDateSep); + if (nSepStrSize == 0) + { + if (bShowError) + { + PrintErrorMsgBox(IDS_ERROR_SYMBOL_SEPARATE); + } + return FALSE; + } return TRUE; } @@ -120,9 +129,8 @@ /* Setted up short date format to registry */ static BOOL -SetShortDateFormat(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetShortDateFormat(HWND hwndDlg, WCHAR *pszShortDateFmt, BOOL bShowError) { - WCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE]; WCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE]; WCHAR szFoundDateSep[MAX_SAMPLES_STR_SIZE]; PWSTR pszResultStr; @@ -135,7 +143,7 @@ SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO, WM_GETTEXT, (WPARAM)MAX_SAMPLES_STR_SIZE, - (LPARAM)szShortDateFmt); + (LPARAM)pszShortDateFmt); /* Get separator */ SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO, @@ -144,54 +152,56 @@ (LPARAM)szShortDateSep); /* Get format-string size */ - nFmtStrSize = wcslen(szShortDateFmt); + nFmtStrSize = wcslen(pszShortDateFmt); /* Check date components */ for (nDateCompCount = 0; nDateCompCount < nFmtStrSize; nDateCompCount++) { - if (szShortDateFmt[nDateCompCount] == L'\'') + if (pszShortDateFmt[nDateCompCount] == L'\'') { OpenApostFlg = !OpenApostFlg; } - if (iswalnum(szShortDateFmt[nDateCompCount]) && - !isDateCompAl(szShortDateFmt[nDateCompCount]) && + if (iswalnum(pszShortDateFmt[nDateCompCount]) && + !isDateCompAl(pszShortDateFmt[nDateCompCount]) && !OpenApostFlg) { - PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_SHORT); + if (bShowError) + { + PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_SHORT); + } return FALSE; } } - if (OpenApostFlg) + if (OpenApostFlg || nFmtStrSize == 0) { - PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_SHORT); + if (bShowError) + { + PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_SHORT); + } return FALSE; } - pszFoundSep = FindDateSep(szShortDateFmt); + pszFoundSep = FindDateSep(pszShortDateFmt); /* Substring replacement of separator */ wcscpy(szFoundDateSep, pszFoundSep); - pszResultStr = ReplaceSubStr(szShortDateFmt, szShortDateSep, szFoundDateSep); - wcscpy(szShortDateFmt, pszResultStr); + pszResultStr = ReplaceSubStr(pszShortDateFmt, szShortDateSep, szFoundDateSep); + wcscpy(pszShortDateFmt, pszResultStr); free(pszResultStr); if (pszFoundSep) free(pszFoundSep); - /* Save short date format */ - wcscpy(pGlobalData->szShortDateFormat, szShortDateFmt); - return TRUE; } /* Setted up long date format to registry */ static BOOL -SetLongDateFormat(HWND hwndDlg, PGLOBALDATA pGlobalData) +SetLongDateFormat(HWND hwndDlg, WCHAR *pszLongDateFmt, BOOL bShowError) { - WCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE]; BOOL OpenApostFlg = FALSE; INT nFmtStrSize; INT nDateCompCount; @@ -200,38 +210,40 @@ SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO, WM_GETTEXT, (WPARAM)MAX_SAMPLES_STR_SIZE, - (LPARAM)szLongDateFmt); + (LPARAM)pszLongDateFmt); /* Get format string size */ - nFmtStrSize = wcslen(szLongDateFmt); + nFmtStrSize = wcslen(pszLongDateFmt); /* Check date components */ for (nDateCompCount = 0; nDateCompCount < nFmtStrSize; nDateCompCount++) { - if (szLongDateFmt[nDateCompCount] == L'\'') + if (pszLongDateFmt[nDateCompCount] == L'\'') { OpenApostFlg = !OpenApostFlg; } - if (iswalnum(szLongDateFmt[nDateCompCount]) && - !isDateCompAl(szLongDateFmt[nDateCompCount]) && + if (iswalnum(pszLongDateFmt[nDateCompCount]) && + !isDateCompAl(pszLongDateFmt[nDateCompCount]) && !OpenApostFlg) { - PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_LONG); + if (bShowError) + { + PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_LONG); + } return FALSE; } - } - if (OpenApostFlg) + if (OpenApostFlg || nFmtStrSize == 0) { - PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_LONG); + if (bShowError) + { + PrintErrorMsgBox(IDS_ERROR_SYMBOL_FORMAT_LONG); + } return FALSE; } - /* Save long date format */ - wcscpy(pGlobalData->szLongDateFormat, szLongDateFmt); - return TRUE; } @@ -250,9 +262,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_SHRTDATESEP_COMBO, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of separators */ for (nCBIndex = 0; nCBIndex < MAX_SHRT_DATE_SEPARATORS; nCBIndex++) @@ -312,9 +322,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_SHRTDATEFMT_COMBO, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Enumerate short date formats */ hwndEnum = GetDlgItem(hwndDlg, IDC_SHRTDATEFMT_COMBO); @@ -354,9 +362,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_LONGDATEFMT_COMBO, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Enumerate short long formats */ hwndEnum = GetDlgItem(hwndDlg, IDC_LONGDATEFMT_COMBO); @@ -517,6 +523,27 @@ WM_SETTEXT, 0, (LPARAM)OutBuffer); } +static BOOL +SetDateSetting(HWND hwndDlg, PGLOBALDATA pGlobalData, BOOL bShowError) +{ + WCHAR szLongDateFmt[MAX_SAMPLES_STR_SIZE]; + WCHAR szShortDateFmt[MAX_SAMPLES_STR_SIZE]; + WCHAR szShortDateSep[MAX_SAMPLES_STR_SIZE]; + + if (!SetLongDateFormat(hwndDlg, szLongDateFmt, bShowError) || + !SetShortDateFormat(hwndDlg, szShortDateFmt, bShowError) || + !SetShortDateSep(hwndDlg, szShortDateSep, bShowError)) + { + return FALSE; + } + + /* store to global data */ + lstrcpyW(pGlobalData->szLongDateFormat, szLongDateFmt); + lstrcpyW(pGlobalData->szShortDateFormat, szShortDateFmt); + lstrcpyW(pGlobalData->szDateSep, szShortDateSep); + return TRUE; +} + /* Property page dialog callback */ INT_PTR CALLBACK DatePageProc(HWND hwndDlg, @@ -565,6 +592,10 @@ case IDC_SHRTDATESEP_COMBO: if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + SetDateSetting(hwndDlg, pGlobalData, FALSE); + + UpdateDateLocaleSamples(hwndDlg, pGlobalData); + /* Set "Apply" button enabled */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } @@ -573,22 +604,20 @@ break; case WM_NOTIFY: - if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) + if (((LPNMHDR)lParam)->code == PSN_APPLY) { - 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); + if (SetDateSetting(hwndDlg, pGlobalData, TRUE)) + { + SetMaxDate(hwndDlg, pGlobalData->UserLCID); + pGlobalData->fUserLocaleChanged = TRUE; + SaveCurrentLocale(pGlobalData); + UpdateDateLocaleSamples(hwndDlg, pGlobalData); + } + else + { + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); + return PSNRET_INVALID_NOCHANGEPAGE; + } } break; } Index: reactos/dll/cpl/intl/generalp.c =================================================================== --- reactos/dll/cpl/intl/generalp.c (revision 72204) +++ reactos/dll/cpl/intl/generalp.c (working copy) @@ -1152,6 +1152,9 @@ /* Set the new locale for the current process */ NtSetDefaultLocale(TRUE, pGlobalData->UserLCID); + + /* Post WM_WININICHANGE messages to system */ + PostMessage(HWND_BROADCAST, WM_WININICHANGE, 0, (LPARAM)TEXT("intl")); } /* Location enumerate procedure */ @@ -1413,10 +1416,7 @@ LCID NewLcid; INT iCurSel; - iCurSel = SendMessage(hList, - CB_GETCURSEL, - 0, - 0); + iCurSel = SendMessage(hList, CB_GETCURSEL, 0, 0); if (iCurSel == CB_ERR) break; @@ -1442,9 +1442,7 @@ INT iCurSel; iCurSel = SendMessage(GetDlgItem(hwndDlg, IDC_LOCATION_COMBO), - CB_GETCURSEL, - 0, - 0); + CB_GETCURSEL, 0, 0); if (iCurSel == CB_ERR) break; @@ -1477,13 +1475,13 @@ { LPNMHDR lpnm = (LPNMHDR)lParam; - if (lpnm->code == (UINT)PSN_APPLY) + if (lpnm->code == PSN_APPLY) { /* Apply changes */ PropSheet_UnChanged(GetParent(hwndDlg), hwndDlg); /* Set new locale */ - if (pGlobalData->fUserLocaleChanged == TRUE) + if (pGlobalData->fUserLocaleChanged) { SaveCurrentLocale(pGlobalData); pGlobalData->fUserLocaleChanged = FALSE; Index: reactos/dll/cpl/intl/intl.h =================================================================== --- reactos/dll/cpl/intl/intl.h (revision 72204) +++ reactos/dll/cpl/intl/intl.h (working copy) @@ -166,6 +166,10 @@ PWSTR *pLocaleArray, LCTYPE lcType); +VOID +SaveCurrentLocale( + PGLOBALDATA pGlobalData); + /* locale.c */ INT_PTR CALLBACK InpLocalePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); Index: reactos/dll/cpl/intl/numbers.c =================================================================== --- reactos/dll/cpl/intl/numbers.c (revision 72204) +++ reactos/dll/cpl/intl/numbers.c (working copy) @@ -20,7 +20,8 @@ * PROJECT: ReactOS International Control Panel * FILE: dll/cpl/intl/numbers.c * PURPOSE: Numbers property page - * PROGRAMMER: Eric Kohl + * PROGRAMMERS: Eric Kohl + * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ #include "intl.h" @@ -68,9 +69,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of decimal separators */ for (nCBIndex = 0; nCBIndex < MAX_NUM_SEP_SAMPLES; nCBIndex++) @@ -110,9 +109,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNDIGDEC, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of fractional symbols */ for (nCBIndex = 0; nCBIndex < MAX_FRAC_NUM_SAMPLES; nCBIndex++) @@ -148,9 +145,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of field separators */ for (nCBIndex = 0; nCBIndex < MAX_FIELD_SEP_SAMPLES; nCBIndex++) @@ -190,9 +185,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of field digits num */ for (nCBIndex = 0; nCBIndex < MAX_FIELD_DIG_SAMPLES; nCBIndex++) @@ -226,9 +219,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of signs */ for (nCBIndex = 0; nCBIndex < MAX_NEG_SIGN_SAMPLES; nCBIndex++) @@ -269,9 +260,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNNUMFORMAT, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of negative numbers formats */ for (nCBIndex = 0; nCBIndex < MAX_NEG_NUMBERS_SAMPLES; nCBIndex++) @@ -310,9 +299,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDISPLEADZER, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create list of standard leading zeroes formats */ for (nCBIndex = 0; nCBIndex < MAX_LEAD_ZEROES_SAMPLES; nCBIndex++) @@ -349,9 +336,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create standard list of signs */ for (nCBIndex = 0; nCBIndex < MAX_LIST_SEP_SAMPLES; nCBIndex++) @@ -392,9 +377,7 @@ /* Clear all box content */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSMEASSYS, - CB_RESETCONTENT, - (WPARAM)0, - (LPARAM)0); + CB_RESETCONTENT, 0, 0); /* Create list of standard system of units */ for (nCBIndex = 0; nCBIndex < MAX_UNITS_SYS_SAMPLES; nCBIndex++) @@ -458,14 +441,13 @@ /* Set num decimal separator */ static BOOL -SetNumDecimalSep(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNumDecimalSep(HWND hwndDlg, WCHAR *pszNumDecimalSep, BOOL bShowError) { /* Get setted decimal separator */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERDSYMBOL, WM_GETTEXT, (WPARAM)MAX_NUMDECIMALSEP, - (LPARAM)pGlobalData->szNumDecimalSep); + (LPARAM)pszNumDecimalSep); return TRUE; } @@ -472,20 +454,23 @@ /* Set number of fractional symbols */ static BOOL -SetFracSymNum(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetFracSymNum(HWND hwndDlg, int *pnNumDigits, BOOL bShowError) { INT nCurrSel; /* Get setted number of fractional symbols */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNDIGDEC, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nNumDigits = nCurrSel; + *pnNumDigits = nCurrSel; return TRUE; } @@ -492,14 +477,13 @@ /* Set field separator */ static BOOL -SetNumFieldSep(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNumFieldSep(HWND hwndDlg, WCHAR *pszNumThousandSep, BOOL bShowError) { /* Get thousand separator */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDIGITGRSYM, WM_GETTEXT, (WPARAM)MAX_NUMTHOUSANDSEP, - (LPARAM)pGlobalData->szNumThousandSep); + (LPARAM)pszNumThousandSep); return TRUE; } @@ -506,20 +490,23 @@ /* Set number of digits in field */ static BOOL -SetFieldDigNum(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetFieldDigNum(HWND hwndDlg, int *pnNumGrouping, BOOL bShowError) { INT nCurrSel; /* Get setted negative sum format */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDGROUPING, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nNumGrouping = nCurrSel; + *pnNumGrouping = nCurrSel; return TRUE; } @@ -526,14 +513,13 @@ /* Set negative sign */ static BOOL -SetNumNegSign(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNumNegSign(HWND hwndDlg, WCHAR *pszNumNegativeSign, BOOL bShowError) { /* Get setted negative sign */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNSIGNSYM, WM_GETTEXT, (WPARAM)MAX_NUMNEGATIVESIGN, - (LPARAM)pGlobalData->szNumNegativeSign); + (LPARAM)pszNumNegativeSign); return TRUE; } @@ -540,20 +526,23 @@ /* Set negative sum format */ static BOOL -SetNegSumFmt(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNegSumFmt(HWND hwndDlg, int *pnNumNegFormat, BOOL bShowError) { INT nCurrSel; /* Get setted negative sum format */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSNNUMFORMAT, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nNumNegFormat = nCurrSel; + *pnNumNegFormat = nCurrSel; return TRUE; } @@ -560,20 +549,23 @@ /* Set leading zero */ static BOOL -SetNumLeadZero(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNumLeadZero(HWND hwndDlg, int *pnNumLeadingZero, BOOL bShowError) { INT nCurrSel; /* Get setted leading zero format */ nCurrSel = SendDlgItemMessageW(hwndDlg, IDC_NUMBERSDISPLEADZER, - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); + CB_GETCURSEL, 0, 0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nNumLeadingZero = nCurrSel; + *pnNumLeadingZero = nCurrSel; return TRUE; } @@ -580,14 +572,13 @@ /* Set elements list separator */ static BOOL -SetNumListSep(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNumListSep(HWND hwndDlg, WCHAR *pszNumListSep, BOOL bShowError) { /* Get setted list separator */ SendDlgItemMessageW(hwndDlg, IDC_NUMBERSLSEP, WM_GETTEXT, (WPARAM)MAX_NUMLISTSEP, - (LPARAM)pGlobalData->szNumListSep); + (LPARAM)pszNumListSep); return TRUE; } @@ -594,8 +585,7 @@ /* Set units system */ static BOOL -SetNumUnitsSys(HWND hwndDlg, - PGLOBALDATA pGlobalData) +SetNumUnitsSys(HWND hwndDlg, int *pnNumMeasure, BOOL bShowError) { INT nCurrSel; @@ -605,13 +595,61 @@ (WPARAM)0, (LPARAM)0); if (nCurrSel == CB_ERR) + { + if (bShowError) + { + /* TODO: show error message */ + } return FALSE; + } - pGlobalData->nNumMeasure = nCurrSel; + *pnNumMeasure = nCurrSel; return TRUE; } +static BOOL +SetNumberSetting(HWND hwndDlg, PGLOBALDATA pGlobalData, BOOL bShowError) +{ + WCHAR szNumDecimalSep[MAX_NUMDECIMALSEP]; + WCHAR szNumThousandSep[MAX_NUMTHOUSANDSEP]; + WCHAR szNumNegativeSign[MAX_NUMNEGATIVESIGN]; + WCHAR szNumListSep[MAX_NUMLISTSEP]; + WCHAR szNumNativeDigits[MAX_NUMNATIVEDIGITS]; + int nNumGrouping; + int nNumDigits; + int nNumNegFormat; + int nNumLeadingZero; + int nNumMeasure; + + if (!SetNumDecimalSep(hwndDlg, szNumDecimalSep, bShowError) || + !SetNumFieldSep(hwndDlg, szNumThousandSep, bShowError) || + !SetNumNegSign(hwndDlg, szNumNegativeSign, bShowError) || + !SetNumListSep(hwndDlg, szNumListSep, bShowError) || + !SetFieldDigNum(hwndDlg, &nNumGrouping, bShowError) || + !SetFracSymNum(hwndDlg, &nNumDigits, bShowError) || + !SetNegSumFmt(hwndDlg, &nNumNegFormat, bShowError) || + !SetNumLeadZero(hwndDlg, &nNumLeadingZero, bShowError) || + !SetNumUnitsSys(hwndDlg, &nNumMeasure, bShowError)) + { + return FALSE; + } + + /* store to global data */ + lstrcpyW(pGlobalData->szNumDecimalSep, szNumDecimalSep); + lstrcpyW(pGlobalData->szNumThousandSep, szNumThousandSep); + lstrcpyW(pGlobalData->szNumNegativeSign, szNumNegativeSign); + lstrcpyW(pGlobalData->szNumListSep, szNumListSep); + lstrcpyW(pGlobalData->szNumNativeDigits, szNumNativeDigits); + pGlobalData->nNumGrouping = nNumGrouping; + pGlobalData->nNumDigits = nNumDigits; + pGlobalData->nNumNegFormat = nNumNegFormat; + pGlobalData->nNumLeadingZero = nNumLeadingZero; + pGlobalData->nNumMeasure = nNumMeasure; + + return TRUE; +} + /* Property page dialog callback */ INT_PTR CALLBACK NumbersPageProc(HWND hwndDlg, @@ -655,6 +693,9 @@ case IDC_NUMBERSMEASSYS: if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + SetNumberSetting(hwndDlg, pGlobalData, FALSE); + UpdateNumSamples(hwndDlg, pGlobalData); + /* Set "Apply" button enabled */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } @@ -663,38 +704,19 @@ case WM_NOTIFY: /* If push apply button */ - if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) + if (((LPNMHDR)lParam)->code == PSN_APPLY) { - if (!SetNumDecimalSep(hwndDlg, pGlobalData)) - break; - - if (!SetFracSymNum(hwndDlg, pGlobalData)) - break; - - if (!SetNumFieldSep(hwndDlg, pGlobalData)) - break; - - if (!SetFieldDigNum(hwndDlg, pGlobalData)) - break; - - if (!SetNumNegSign(hwndDlg, pGlobalData)) - break; - - if (!SetNegSumFmt(hwndDlg, pGlobalData)) - break; - - if (!SetNumLeadZero(hwndDlg, pGlobalData)) - break; - - if (!SetNumListSep(hwndDlg, pGlobalData)) - break; - - if (!SetNumUnitsSys(hwndDlg, pGlobalData)) - break; - - pGlobalData->fUserLocaleChanged = TRUE; - - UpdateNumSamples(hwndDlg, pGlobalData); + if (SetNumberSetting(hwndDlg, pGlobalData, TRUE)) + { + pGlobalData->fUserLocaleChanged = TRUE; + SaveCurrentLocale(pGlobalData); + UpdateNumSamples(hwndDlg, pGlobalData); + } + else + { + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); + return PSNRET_INVALID_NOCHANGEPAGE; + } } break; } Index: reactos/dll/cpl/intl/sort.c =================================================================== --- reactos/dll/cpl/intl/sort.c (revision 72204) +++ reactos/dll/cpl/intl/sort.c (working copy) @@ -175,7 +175,7 @@ break; case WM_NOTIFY: - if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) + if (((LPNMHDR)lParam)->code == PSN_APPLY) { LCID NewLcid; INT iCurSel; Index: reactos/dll/cpl/intl/time.c =================================================================== --- reactos/dll/cpl/intl/time.c (revision 72204) +++ reactos/dll/cpl/intl/time.c (working copy) @@ -20,7 +20,8 @@ * PROJECT: ReactOS International Control Panel * FILE: dll/cpl/intl/time.c * PURPOSE: Time property page - * PROGRAMMER: Eric Kohl + * PROGRAMMERS: Eric Kohl + * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ #include "intl.h" @@ -184,7 +185,46 @@ 0); } +static BOOL +SetTimeSetting(HWND hwndDlg, PGLOBALDATA pGlobalData, BOOL bShowError) +{ + WCHAR TimeFormat[MAX_TIMEFORMAT]; + WCHAR TimeSep[MAX_TIMEFORMAT]; + WCHAR TimeAM[MAX_TIMEFORMAT]; + WCHAR TimePM[MAX_TIMEFORMAT]; + /* Get selected/typed time format text */ + GetSelectedComboEntry(hwndDlg, IDC_TIMEFORMAT, TimeFormat, MAX_TIMEFORMAT); + + /* Get selected/typed time separator text */ + GetSelectedComboEntry(hwndDlg, IDC_TIMESEPARATOR, TimeSep, MAX_TIMESEPARATOR); + + /* Get selected/typed AM symbol text */ + GetSelectedComboEntry(hwndDlg, IDC_TIMEAMSYMBOL, TimeAM, MAX_TIMEAMSYMBOL); + + /* Get selected/typed PM symbol text */ + GetSelectedComboEntry(hwndDlg, IDC_TIMEPMSYMBOL, TimePM, MAX_TIMEPMSYMBOL); + + /* verify values */ + if (TimeFormat[0] == L'\0' || TimeSep[0] == L'\0' || + TimeAM[0] == L'\0' || TimePM[0] == L'\0') + { + if (bShowError) + { + /* TODO: show error message */ + } + return FALSE; + } + + /* store to global data */ + lstrcpyW(pGlobalData->szTimeFormat, TimeFormat); + lstrcpyW(pGlobalData->szTimeSep, TimeSep); + lstrcpyW(pGlobalData->szTimeAM, TimeAM); + lstrcpyW(pGlobalData->szTimePM, TimePM); + + return TRUE; +} + /* Property page dialog callback */ INT_PTR CALLBACK TimePageProc(HWND hwndDlg, @@ -228,6 +268,11 @@ if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + SetTimeSetting(hwndDlg, pGlobalData, FALSE); + + UpdateTimeSample(hwndDlg, pGlobalData); + + /* Set "Apply" button enabled */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } break; @@ -235,32 +280,19 @@ break; case WM_NOTIFY: - if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) + if (((LPNMHDR)lParam)->code == PSN_APPLY) { - /* Get selected/typed time format text */ - GetSelectedComboEntry(hwndDlg, IDC_TIMEFORMAT, - pGlobalData->szTimeFormat, - MAX_TIMEFORMAT); - - /* Get selected/typed time separator text */ - GetSelectedComboEntry(hwndDlg, IDC_TIMESEPARATOR, - pGlobalData->szTimeSep, - MAX_TIMESEPARATOR); - - /* Get selected/typed AM symbol text */ - GetSelectedComboEntry(hwndDlg, IDC_TIMEAMSYMBOL, - pGlobalData->szTimeAM, - MAX_TIMEAMSYMBOL); - - /* Get selected/typed PM symbol text */ - GetSelectedComboEntry(hwndDlg, IDC_TIMEPMSYMBOL, - pGlobalData->szTimePM, - MAX_TIMEPMSYMBOL); - - pGlobalData->fUserLocaleChanged = TRUE; - - /* Update the time format sample */ - UpdateTimeSample(hwndDlg, pGlobalData); + if (SetTimeSetting(hwndDlg, pGlobalData, TRUE)) + { + pGlobalData->fUserLocaleChanged = TRUE; + SaveCurrentLocale(pGlobalData); + UpdateTimeSample(hwndDlg, pGlobalData); + } + else + { + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); + return PSNRET_INVALID_NOCHANGEPAGE; + } } break; }