diff --git a/reactos/dll/cpl/intl/advanced.c b/reactos/dll/cpl/intl/advanced.c new file mode 100644 index 00000000000..75a8e45ecac --- /dev/null +++ b/reactos/dll/cpl/intl/advanced.c @@ -0,0 +1,23 @@ +#include +#include +#include + +#include "intl.h" +#include "resource.h" + +/* Property page dialog callback */ +INT_PTR CALLBACK +AdvancedPageProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch(uMsg) + { + case WM_INITDIALOG: + break; + } + return FALSE; +} + +/* EOF */ diff --git a/reactos/dll/cpl/intl/currency.c b/reactos/dll/cpl/intl/currency.c index 5fea83f7123..a7a7850982e 100644 --- a/reactos/dll/cpl/intl/currency.c +++ b/reactos/dll/cpl/intl/currency.c @@ -32,6 +32,10 @@ #include "intl.h" #include "resource.h" +#define POSITIVE_EXAMPLE L"123456789.00" +#define NEGATIVE_EXAMPLE L"-123456789.00" +#define MAX_FIELD_DIG_SAMPLES 3 + typedef struct _GLOBAL_DATA { @@ -50,7 +54,7 @@ typedef struct _GLOBAL_DATA static VOID GetInitialCurrencyValues(PGLOBAL_DATA pGlobalData) { - TCHAR szBuffer[256]; + TCHAR szBuffer[MAX_FMT_SIZE]; int ret; /* Get currency symbol */ @@ -61,7 +65,7 @@ GetInitialCurrencyValues(PGLOBAL_DATA pGlobalData) /* Get positive format */ ret = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICURRENCY, - szBuffer, 256); + szBuffer, MAX_FMT_SIZE); if (ret != 0) { pGlobalData->PositiveOrder = _ttoi(szBuffer); @@ -70,7 +74,7 @@ GetInitialCurrencyValues(PGLOBAL_DATA pGlobalData) /* Get negative format */ ret = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_INEGCURR, - szBuffer, 256); + szBuffer, MAX_FMT_SIZE); if (ret != 0) { pGlobalData->NegativeOrder = _ttoi(szBuffer); @@ -79,7 +83,7 @@ GetInitialCurrencyValues(PGLOBAL_DATA pGlobalData) /* Get number of fractional digits */ ret = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICURRDIGITS, - szBuffer, 256); + szBuffer, MAX_FMT_SIZE); if (ret != 0) { pGlobalData->NumDigits = _ttoi(szBuffer); @@ -106,7 +110,7 @@ GetInitialCurrencyValues(PGLOBAL_DATA pGlobalData) static VOID UpdateExamples(HWND hwndDlg, PGLOBAL_DATA pGlobalData) { - TCHAR szBuffer[256]; + TCHAR szBuffer[MAX_FMT_SIZE]; CURRENCYFMT cyFmt; cyFmt.NumDigits = pGlobalData->NumDigits; @@ -117,43 +121,39 @@ UpdateExamples(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cyFmt.PositiveOrder = pGlobalData->PositiveOrder; cyFmt.NegativeOrder = pGlobalData->NegativeOrder; cyFmt.lpCurrencySymbol = pGlobalData->szCurrencySymbol; - + /* positive example */ - GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, - _T("123456789.00"), - &cyFmt, szBuffer, 256); + GetCurrencyFormatW(LOCALE_USER_DEFAULT, 0, + POSITIVE_EXAMPLE, + &cyFmt, szBuffer, MAX_FMT_SIZE); - SetDlgItemText(hwndDlg, - IDC_CURRENCYPOSSAMPLE, - szBuffer); + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYPOSSAMPLE), WM_SETTEXT, 0, (LPARAM)szBuffer); /* negative example */ - GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, - _T("-123456789.00"), - &cyFmt, szBuffer, 256); - - SetDlgItemText(hwndDlg, - IDC_CURRENCYNEGSAMPLE, - szBuffer); + GetCurrencyFormatW(LOCALE_USER_DEFAULT, 0, + NEGATIVE_EXAMPLE, + &cyFmt, szBuffer, MAX_FMT_SIZE); + + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYNEGSAMPLE), WM_SETTEXT, 0, (LPARAM)szBuffer); } static VOID OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) { - TCHAR szBuffer[256]; + TCHAR szBuffer[MAX_FMT_SIZE]; CURRENCYFMT cyFmt; int i; GetInitialCurrencyValues(pGlobalData); /* Set currency symbol */ - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL), CB_ADDSTRING, 0, (LPARAM)pGlobalData->szCurrencySymbol); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL), CB_SETCURSEL, 0, /* index */ 0); @@ -173,15 +173,15 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cyFmt.PositiveOrder = i; GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, _T("1.1"), - &cyFmt, szBuffer, 256); + &cyFmt, szBuffer, MAX_FMT_SIZE); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), CB_INSERTSTRING, -1, (LPARAM)szBuffer); } - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), CB_SETCURSEL, pGlobalData->PositiveOrder, 0); @@ -193,26 +193,26 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cyFmt.NegativeOrder = i; GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, _T("-1.1"), - &cyFmt, szBuffer, 256); + &cyFmt, szBuffer, MAX_FMT_SIZE); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE), CB_INSERTSTRING, -1, (LPARAM)szBuffer); } - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE), CB_SETCURSEL, pGlobalData->NegativeOrder, /* index */ 0); /* decimal separator */ - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP), CB_ADDSTRING, 0, (LPARAM)pGlobalData->szDecimalSep); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP), CB_SETCURSEL, 0, /* index */ 0); @@ -223,25 +223,25 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) { szBuffer[0] = _T('0') + i; szBuffer[1] = 0; - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM), CB_ADDSTRING, 0, (LPARAM)szBuffer); } - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM), CB_SETCURSEL, pGlobalData->NumDigits, /* index */ 0); /* digit group separator */ - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP), CB_ADDSTRING, 0, (LPARAM)pGlobalData->szThousandSep); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP), CB_SETCURSEL, 0, /* index */ 0); @@ -256,8 +256,8 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cyFmt.Grouping = 0; GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, _T("123456789"), - &cyFmt, szBuffer, 256); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), + &cyFmt, szBuffer, MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_INSERTSTRING, -1, (LPARAM)szBuffer); @@ -265,8 +265,8 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cyFmt.Grouping = 3; GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, _T("123456789"), - &cyFmt, szBuffer, 256); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), + &cyFmt, szBuffer, MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_INSERTSTRING, -1, (LPARAM)szBuffer); @@ -274,8 +274,8 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cyFmt.Grouping = 32; GetCurrencyFormat(LOCALE_USER_DEFAULT, 0, _T("123456789"), - &cyFmt, szBuffer, 256); - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), + &cyFmt, szBuffer, MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_INSERTSTRING, -1, (LPARAM)szBuffer); @@ -290,7 +290,7 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) i = 1; } - SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_SETCURSEL, i, /* index */ 0); @@ -299,6 +299,153 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) UpdateExamples(hwndDlg, pGlobalData); } +/* Set number of digidts in field */ +BOOL +SetCurrencyDigNum(HWND hwndDlg) +{ + WCHAR wszFieldDigNumSamples[MAX_FIELD_DIG_SAMPLES][MAX_SAMPLES_STR_SIZE]= + { + L"0;0", + L"3;0", + L"3;2;0" + }; + + int nCurrSel; + + /* Get setted number of digidts in field */ + nCurrSel=SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), + CB_GETCURSEL, + (WPARAM)0, + (LPARAM)0); + + /* Save number of digidts in field */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONGROUPING, wszFieldDigNumSamples[nCurrSel]); + + + return TRUE; +} + +/* Set currency field separator */ +BOOL +SetCurrencyFieldSep(HWND hwndDlg) +{ + WCHAR wszCurrencyFieldSep[MAX_SAMPLES_STR_SIZE]; + + /* Get setted currency field separator */ + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP), + WM_GETTEXT, + (WPARAM)MAX_SAMPLES_STR_SIZE, + (LPARAM)(LPCSTR)wszCurrencyFieldSep); + + /* Save currency field separator */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONTHOUSANDSEP, wszCurrencyFieldSep); + + return TRUE; +} + +/* Set number of fractional symbols */ +BOOL +SetCurrencyFracSymNum(HWND hwndDlg) +{ + WCHAR wszCurrencyFracSymNum[MAX_SAMPLES_STR_SIZE]; + INT nCurrSel; + + /* Get setted number of fractional symbols */ + nCurrSel=SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM), + CB_GETCURSEL, + (WPARAM)0, + (LPARAM)0); + + /* convert to wide char */ + _itow(nCurrSel,wszCurrencyFracSymNum,DECIMAL_RADIX); + + /* Save number of fractional symbols */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_ICURRDIGITS, wszCurrencyFracSymNum); + + return TRUE; +} + +/* Set currency separator */ +BOOL +SetCurrencySep(HWND hwndDlg) +{ + WCHAR wszCurrencySep[MAX_SAMPLES_STR_SIZE]; + + /* Get setted currency decimal separator */ + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP), + WM_GETTEXT, + (WPARAM)MAX_SAMPLES_STR_SIZE, + (LPARAM)(LPCSTR)wszCurrencySep); + + /* TODO: Add check for correctly input */ + + /* Save currency separator */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONDECIMALSEP, wszCurrencySep); + + return TRUE; +} + +/* Set negative currency sum format */ +BOOL +SetNegCurrencySumFmt(HWND hwndDlg) +{ + WCHAR wszNegCurrencySumFmt[MAX_SAMPLES_STR_SIZE]; + INT nCurrSel; + + /* Get setted currency unit */ + nCurrSel=SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE), + CB_GETCURSEL, + (WPARAM)0, + (LPARAM)0); + + /* convert to wide char */ + _itow(nCurrSel,wszNegCurrencySumFmt,DECIMAL_RADIX); + + /* Save currency sum format */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_INEGCURR, wszNegCurrencySumFmt); + + return TRUE; +} + +/* Set positive currency sum format */ +BOOL +SetPosCurrencySumFmt(HWND hwndDlg) +{ + WCHAR wszPosCurrencySumFmt[MAX_SAMPLES_STR_SIZE]; + INT nCurrSel; + + /* Get setted currency unit */ + nCurrSel=SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), + CB_GETCURSEL, + (WPARAM)0, + (LPARAM)0); + + /* convert to wide char */ + _itow(nCurrSel,wszPosCurrencySumFmt,DECIMAL_RADIX); + + /* Save currency sum format */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_ICURRENCY, wszPosCurrencySumFmt); + + return TRUE; +} + +/* Set currency unit */ +BOOL +SetCurrencyUnit(HWND hwndDlg) +{ + WCHAR wszCurrencyUnit[MAX_SAMPLES_STR_SIZE]; + + /* Get setted currency unit */ + SendMessageW(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL), + WM_GETTEXT, + (WPARAM)MAX_SAMPLES_STR_SIZE, + (LPARAM)(LPCSTR)wszCurrencyUnit); + + /* Save currency unit */ + SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SCURRENCY, wszCurrencyUnit); + + return TRUE; +} /* Property page dialog callback */ INT_PTR CALLBACK @@ -314,12 +461,48 @@ CurrencyPageProc(HWND hwndDlg, switch (uMsg) { case WM_INITDIALOG: + { pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA)); SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); OnInitDialog(hwndDlg, pGlobalData); - break; - - + } + break; + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDC_CURRENCYSYMBOL: + case IDC_CURRENCYPOSVALUE: + case IDC_CURRENCYNEGVALUE: + case IDC_CURRENCYDECSEP: + case IDC_CURRENCYDECNUM: + case IDC_CURRENCYGRPSEP: + case IDC_CURRENCYGRPNUM: + if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) + { + /* Set "Apply" button enabled */ + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + } + } + break; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + /* If push apply button */ + if (lpnm->code == (UINT)PSN_APPLY) + { + if(!SetCurrencyDigNum(hwndDlg)) break; + if(!SetCurrencyUnit(hwndDlg)) break; + if(!SetPosCurrencySumFmt(hwndDlg)) break; + if(!SetNegCurrencySumFmt(hwndDlg)) break; + if(!SetCurrencySep(hwndDlg)) break; + if(!SetCurrencyFracSymNum(hwndDlg)) break; + if(!SetCurrencyFieldSep(hwndDlg)) break; + UpdateExamples(hwndDlg, pGlobalData); + } + } + break; case WM_DESTROY: HeapFree(GetProcessHeap(), 0, pGlobalData); break; diff --git a/reactos/dll/cpl/intl/date.c b/reactos/dll/cpl/intl/date.c index 92b6aaf87a6..57160b33844 100644 --- a/reactos/dll/cpl/intl/date.c +++ b/reactos/dll/cpl/intl/date.c @@ -24,6 +24,8 @@ * PROGRAMMER: Eric Kohl */ +#define WINVER 0x0500 + #include #include #include @@ -31,6 +33,510 @@ #include "intl.h" #include "resource.h" +/* GLOBALS ******************************************************************/ + +const INT YEAR_STR_MAX_SIZE=4; +const INT EOLN_SIZE=sizeof(WCHAR); /* size of EOLN char */ +#define MAX_SHORT_FMT_SAMPLES 5 +#define MAX_LONG_FMT_SAMPLES 2 +#define MAX_SHRT_DATE_SEPARATORS 3 +#define STD_DATE_SEP L"." +#define YEAR_DIFF (99) +#define MAX_YEAR (9999) + +/* FUNCTIONS ****************************************************************/ + +/* if char is 'y' or 'M' or 'd' return TRUE, else FALSE */ +BOOL +isDateCompAl(WCHAR walpha) +{ + + if((walpha == L'y') || (walpha == L'M') || (walpha == L'd') || (walpha == L' ')) return TRUE; + else return FALSE; +} + +/* Find first date separator in string */ +WCHAR* +FindDateSep(const WCHAR *wszSourceStr) +{ + int nDateCompCount=0; + int nDateSepCount=0; + + WCHAR* wszFindedSep; + wszFindedSep=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)); + + wcscpy(wszFindedSep,STD_DATE_SEP); + + while(nDateCompCountcode == (UINT)PSN_APPLY) + { + SetMaxDate(hwndDlg); + if(!SetShortDateSep(hwndDlg)) break; + if(!SetShortDateFormat(hwndDlg)) break; + if(!SetLongDateFormat(hwndDlg)) break; + InitShortDateCB(hwndDlg); + /* FIXME: */ + //Sleep(15); + UpdateDateLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT); + } + } + break; } return FALSE; } diff --git a/reactos/dll/cpl/intl/generalp.c b/reactos/dll/cpl/intl/generalp.c index a2203bc7b3f..65ab9030899 100644 --- a/reactos/dll/cpl/intl/generalp.c +++ b/reactos/dll/cpl/intl/generalp.c @@ -27,6 +27,8 @@ */ #define WINVER 0x0501 +#define SAMPLE_NUMBER L"123456789" +#define NO_FLAG 0 #include #include @@ -38,6 +40,7 @@ #include "resource.h" HWND hList; +HWND hLocaleList, hGeoList; BOOL CALLBACK LocalesEnumProc( LPTSTR lpLocale // locale id @@ -65,6 +68,44 @@ BOOL CALLBACK LocalesEnumProc( return TRUE; } +/* Update all locale samples */ +static +VOID +UpdateLocaleSample(HWND hwndDlg, LCID lcidLocale) +{ + WCHAR OutBuffer[MAX_FMT_SIZE]; + + /* Get number format sample */ + GetNumberFormatW(lcidLocale, NO_FLAG, SAMPLE_NUMBER, NULL, OutBuffer, + MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_NUMSAMPLE_EDIT), + WM_SETTEXT, 0, (LPARAM)OutBuffer); + + /* Get monetary format sample */ + GetCurrencyFormatW(lcidLocale, LOCALE_USE_CP_ACP, SAMPLE_NUMBER, NULL, + OutBuffer, MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_MONEYSAMPLE_EDIT), + WM_SETTEXT, 0, (LPARAM)OutBuffer); + + /* Get time format sample */ + GetTimeFormatW(lcidLocale, NO_FLAG, NULL, NULL, OutBuffer, MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESAMPLE_EDIT), + WM_SETTEXT, + 0, + (LPARAM)OutBuffer); + + /* Get short date format sample */ + GetDateFormatW(lcidLocale, DATE_SHORTDATE, NULL, NULL, OutBuffer, + MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_SHORTTIMESAMPLE_EDIT), WM_SETTEXT, + 0, (LPARAM)OutBuffer); + + /* Get long date sample */ + GetDateFormatW(lcidLocale, DATE_LONGDATE, NULL, NULL, OutBuffer, + MAX_FMT_SIZE); + SendMessageW(GetDlgItem(hwndDlg, IDC_FULLTIMESAMPLE_EDIT), + WM_SETTEXT, 0, (LPARAM)OutBuffer); +} static VOID CreateLanguagesList(HWND hwnd) @@ -173,6 +214,55 @@ void SetNewLocale(LCID lcid) RegCloseKey(langKey); } + +/* Location enumerate procedure */ +BOOL +CALLBACK +LocationsEnumProc(GEOID gId) +{ + TCHAR loc[MAX_STR_SIZE]; + int index; + + GetGeoInfo(gId, GEO_FRIENDLYNAME, loc, MAX_FMT_SIZE, LANG_SYSTEM_DEFAULT); + index = (int) SendMessageW(hGeoList, + CB_ADDSTRING, + 0, + (LPARAM)loc); + + SendMessageW(hGeoList, + CB_SETITEMDATA, + index, + (LPARAM)gId); + + return TRUE; +} + +/* Enumerate all system locations identifiers */ +static +VOID +CreateLocationsList(HWND hWnd) +{ + GEOID userGeoID; + TCHAR loc[MAX_STR_SIZE]; + + hGeoList = hWnd; + + EnumSystemGeoID(GEOCLASS_NATION, 0, LocationsEnumProc); + + /* Select current location */ + userGeoID = GetUserGeoID(GEOCLASS_NATION); + GetGeoInfo(userGeoID, + GEO_FRIENDLYNAME, + loc, + MAX_FMT_SIZE, + LANG_SYSTEM_DEFAULT); + + SendMessageW(hGeoList, + CB_SELECTSTRING, + (WPARAM) -1, + (LPARAM)loc); +} + DWORD VerifyUnattendLCID(HWND hwndDlg) { @@ -213,6 +303,8 @@ GeneralPageProc(HWND hwndDlg, { case WM_INITDIALOG: CreateLanguagesList(GetDlgItem(hwndDlg, IDC_LANGUAGELIST)); + UpdateLocaleSample(hwndDlg, LOCALE_USER_DEFAULT); + CreateLocationsList(GetDlgItem(hwndDlg, IDC_LOCATION_COMBO)); if (IsUnattendedSetupEnabled) { if (VerifyUnattendLCID(hwndDlg)) @@ -232,6 +324,9 @@ GeneralPageProc(HWND hwndDlg, PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } break; + case IDC_SETUP_BUTTON: + SetupApplet(hwndDlg, uMsg, wParam, lParam); + break; } break; diff --git a/reactos/dll/cpl/intl/intl.c b/reactos/dll/cpl/intl/intl.c index eb5265f21a2..f7f6a9f62e0 100644 --- a/reactos/dll/cpl/intl/intl.c +++ b/reactos/dll/cpl/intl/intl.c @@ -133,7 +133,7 @@ ParseSetupInf() static LONG APIENTRY Applet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam) { - PROPSHEETPAGE psp[6]; + PROPSHEETPAGE psp[3]; PROPSHEETHEADER psh; TCHAR Caption[256]; @@ -156,11 +156,8 @@ Applet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam) psh.ppsp = psp; InitPropSheetPage(&psp[0], IDD_GENERALPAGE, GeneralPageProc); - InitPropSheetPage(&psp[1], IDD_NUMBERSPAGE, NumbersPageProc); - InitPropSheetPage(&psp[2], IDD_CURRENCYPAGE, CurrencyPageProc); - InitPropSheetPage(&psp[3], IDD_TIMEPAGE, TimePageProc); - InitPropSheetPage(&psp[4], IDD_DATEPAGE, DatePageProc); - InitPropSheetPage(&psp[5], IDD_LOCALEPAGE, InpLocalePageProc); + InitPropSheetPage(&psp[1], IDD_LANGUAGESPAGE, LanguagesPageProc); + InitPropSheetPage(&psp[2], IDD_ADVANCEDPAGE, AdvancedPageProc); return (LONG)(PropertySheet(&psh) != -1); } diff --git a/reactos/dll/cpl/intl/intl.h b/reactos/dll/cpl/intl/intl.h index 153de3272a9..5949c4ecfff 100644 --- a/reactos/dll/cpl/intl/intl.h +++ b/reactos/dll/cpl/intl/intl.h @@ -1,6 +1,10 @@ #ifndef __CPL_INTL_H #define __CPL_INTL_H +#define MAX_FMT_SIZE 30 +#define MAX_STR_SIZE 128 +#define MAX_SAMPLES_STR_SIZE 70 +#define DECIMAL_RADIX 10 typedef struct _APPLET { @@ -14,6 +18,24 @@ extern HINSTANCE hApplet; extern DWORD IsUnattendedSetupEnabled; extern DWORD UnattendLCID; +/* intl.c */ +VOID +InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc); + +/* languages.c */ +INT_PTR CALLBACK +LanguagesPageProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam); + +/* advanced.c */ +INT_PTR CALLBACK +AdvancedPageProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam); + /* currency.c */ INT_PTR CALLBACK CurrencyPageProc(HWND hwndDlg, @@ -59,6 +81,17 @@ TimePageProc(HWND hwndDlg, void SetNewLocale(LCID lcid); +/* misc.c */ +WCHAR* +InsSpacesFmt(const WCHAR *wszSourceStr, const WCHAR *wszFmtStr); + +WCHAR* +ReplaceSubStr(const WCHAR *wszSourceStr, const WCHAR *wszStrToReplace, const WCHAR *wszTempl); + +LONG +APIENTRY +SetupApplet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam); + #endif /* __CPL_INTL_H */ /* EOF */ diff --git a/reactos/dll/cpl/intl/intl.rbuild b/reactos/dll/cpl/intl/intl.rbuild index a296001d969..41d4ee6f6a6 100644 --- a/reactos/dll/cpl/intl/intl.rbuild +++ b/reactos/dll/cpl/intl/intl.rbuild @@ -13,6 +13,7 @@ advapi32 setupapi msvcrt + shell32 currency.c date.c generalp.c @@ -20,5 +21,8 @@ inplocale.c numbers.c time.c + misc.c + languages.c + advanced.c intl.rc diff --git a/reactos/dll/cpl/intl/intl.rc b/reactos/dll/cpl/intl/intl.rc index 93c2c26a0fc..b56610f34f6 100644 --- a/reactos/dll/cpl/intl/intl.rc +++ b/reactos/dll/cpl/intl/intl.rc @@ -11,7 +11,6 @@ IDC_CPLICON ICON "resources/applet.ico" -IDC_FLAGS ICON "resources/flags.ico" @@ -21,17 +20,17 @@ IDC_FLAGS ICON "resources/flags.ico" * a neutral version. This is to get localized bitmaps for example. */ -#include "lang/cs-CZ.rc" -#include "lang/de-DE.rc" -#include "lang/el-GR.rc" +//#include "lang/cs-CZ.rc" +//#include "lang/de-DE.rc" +//#include "lang/el-GR.rc" #include "lang/en-US.rc" -#include "lang/es-ES.rc" -#include "lang/fr-FR.rc" -#include "lang/hu-HU.rc" -#include "lang/id-ID.rc" -#include "lang/it-IT.rc" -#include "lang/ja-JP.rc" -#include "lang/nl-NL.rc" -#include "lang/ru-RU.rc" -#include "lang/sv-SE.rc" -#include "lang/uk-UA.rc" +//#include "lang/es-ES.rc" +//#include "lang/fr-FR.rc" +//#include "lang/hu-HU.rc" +//#include "lang/id-ID.rc" +//#include "lang/it-IT.rc" +//#include "lang/ja-JP.rc" +//#include "lang/nl-NL.rc" +//#include "lang/ru-RU.rc" +//#include "lang/sv-SE.rc" +//#include "lang/uk-UA.rc" diff --git a/reactos/dll/cpl/intl/lang/en-US.rc b/reactos/dll/cpl/intl/lang/en-US.rc index a5df0845ee8..61a3ab17745 100644 --- a/reactos/dll/cpl/intl/lang/en-US.rc +++ b/reactos/dll/cpl/intl/lang/en-US.rc @@ -2,35 +2,101 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_GENERALPAGE DIALOGEX 0, 0, 246, 188 +IDD_GENERALPAGE DIALOGEX 0, 0, 246, 230 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" +CAPTION "Regional Options" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Primary language", -1, 8, 11, 228, 74 - ICON IDC_FLAGS, IDC_ICON1, 12, 26, 21, 20, SS_ICON - LTEXT "Select the primary language and region you want to use:", -1, 38, 25, 193, 22 - COMBOBOX IDC_LANGUAGELIST, 39, 49, 191, 83, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + GROUPBOX "Standarts and formats", -1, 5, 5, 234, 162 + LTEXT "This option affects how some programs format numbers, currencies, dates, and time.", -1, 14, 17, 220, 25 + LTEXT "Select an item to match its proferences, or click Customize to choose your own formats:", -1, 14, 37, 220, 22 + COMBOBOX IDC_LANGUAGELIST, 14, 56, 160, 83, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + PUSHBUTTON "Customi&ze...", IDC_SETUP_BUTTON, 178, 56, 52, 13 + LTEXT "Samples", -1, 14, 73, 70, 10 + LTEXT "Number:", -1, 16, 86, 48, 10 + LTEXT "Monetary:", -1, 16, 101, 48, 10 + LTEXT "Time:", -1, 16, 116, 48, 10 + LTEXT "Short date:", -1, 16, 131, 48, 10 + LTEXT "Long date:", -1, 16, 146, 48, 10 + EDITTEXT IDC_NUMSAMPLE_EDIT, 89, 86, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_MONEYSAMPLE_EDIT, 89, 101, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_TIMESAMPLE_EDIT, 89, 116, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 89, 131, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 89, 146, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Geographic location", -1, 5, 172, 234, 55 + LTEXT "Set up your location that services could supply you with the local information, for example, news and reports of weather", -1, 14, 184, 210, 24 + COMBOBOX IDC_LOCATION_COMBO, 14, 207, 217, 40, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SORT END +IDD_LANGUAGESPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Languages" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Text input languages and services", IDC_GROUPBOX, 5, 5, 234, 52 + LTEXT "To view or change language or text input methods press ""Details...""", -1, 12, 15, 220, 18 + PUSHBUTTON "De&tails...", IDC_DETAIL_BUTTON, 177, 34, 54, 14 + GROUPBOX "Additional language support", IDC_GROUPBOX, 5, 62, 234, 82 + LTEXT "Most languages are installed by default. To install additional languages, select the appropriate check box below.", -1, 12, 72, 220, 18 + CHECKBOX "I&nstall files for complex script and right-to-left languages", IDC_INST_FILES_FOR_RTOL_LANG, 12, 92, 215, 22 + CHECKBOX "In&stall files for East Asian languages", IDC_INST_FILES_FOR_ASIAN, 12, 114, 180, 22 +END -IDD_NUMBERSPAGE DIALOGEX 0, 0, 246, 188 +IDD_ADVANCEDPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Advanced" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Language for non-Unicode programs", IDC_GROUPBOX, 5, 5, 234, 90 + COMBOBOX IDC_LANGUAGE_COMBO, 14, 75, 217, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT + LTEXT "This system setting enables non-Unicode programs to display menus and dialogs in their native language. It does not affect Unicode programs, but it does apply to all users of this computer.", -1, 14, 18, 223, 33 + LTEXT "Select a language to match the language version of the non-Unicode programs you want to use:", -1, 14, 55, 223, 18 + GROUPBOX "Code page conversion tables", -1, 5, 101, 234, 88 + LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + GROUPBOX "Default user account settings", -1, 5, 193, 234, 30 + CHECKBOX "Apply all settings to the current user account and to the default", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22 +END + +IDD_NUMBERSPAGE DIALOGEX 0, 0, 246, 234 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Numbers" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Property Page 2",-1,73,74,90,8 + GROUPBOX "Appearance sample", -1, 7, 7, 230, 53, WS_CHILD | WS_VISIBLE + LTEXT "Positive:", -1, 13, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_NUMBERSPOSSAMPLE, 43, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negative:", -1, 120, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_NUMBERSNEGSAMPLE, 154, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Decimal symbol:", -1, 8, 67, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERDSYMBOL, 137, 65, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "No. of digits a&fter decimal:", -1, 8, 83, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNDIGDEC, 137, 81, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Digit &grouping symbol:", -1, 8, 100, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDIGITGRSYM, 137, 97, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Di&git grouping:", -1, 8, 117, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDGROUPING, 137, 113, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "N&egative sign symbol:", -1, 8, 134, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNSIGNSYM, 137, 129, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Negative number &format:", -1, 8, 149, 100, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNNUMFORMAT, 137, 145, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Display leading &zeros:", -1, 8, 166, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDISPLEADZER, 137, 161, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&List separator:", -1, 8, 181, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSLSEP, 137, 177, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Measurement system:", -1, 8, 197, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSMEASSYS, 137, 193, 100, 83, CBS_DROPDOWN | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL END -IDD_CURRENCYPAGE DIALOGEX 0, 0, 246, 188 +IDD_CURRENCYPAGE DIALOGEX 0, 0, 246, 234 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Currency" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Appearance sample", -1, 7, 7, 228, 33, WS_CHILD | WS_VISIBLE + GROUPBOX "Appearance sample", -1, 7, 7, 230, 33, WS_CHILD | WS_VISIBLE LTEXT "Positive:", -1, 13, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP - EDITTEXT IDC_CURRENCYPOSSAMPLE, 42, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_CURRENCYPOSSAMPLE, 43, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "Negative:", -1, 120, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP EDITTEXT IDC_CURRENCYNEGSAMPLE, 154, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "&Currency symbol:", -1, 20, 51, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP @@ -50,49 +116,71 @@ BEGIN END -IDD_TIMEPAGE DIALOGEX 0, 0, 246, 188 +IDD_TIMEPAGE DIALOGEX 0, 0, 246, 234 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Time" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Appearance sample", -1, 7, 7, 228, 33, WS_CHILD | WS_VISIBLE + GROUPBOX "Appearance sample", -1, 7, 7, 230, 33, WS_CHILD | WS_VISIBLE LTEXT "Time sample:", -1, 13, 21, 54, 10, WS_CHILD |WS_VISIBLE | WS_GROUP EDITTEXT IDC_TIMESAMPLE, 68, 19, 84, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "&Time format:", -1, 13, 52, 54, 10, WS_CHILD |WS_VISIBLE | WS_GROUP - COMBOBOX IDC_TIMEFORMAT, 68, 50, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + COMBOBOX IDC_TIMEFORMAT, 88, 50, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP LTEXT "Time &separator:", -1, 13, 70, 54, 10, WS_VISIBLE | WS_GROUP - COMBOBOX IDC_TIMESEPARATOR, 68, 68, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + COMBOBOX IDC_TIMESEPARATOR, 88, 68, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP LTEXT "A&M symbol:", -1, 13, 88, 54, 10, WS_VISIBLE | WS_GROUP - COMBOBOX IDC_TIMEAMSYMBOL, 68, 86, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + COMBOBOX IDC_TIMEAMSYMBOL, 88, 86, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP LTEXT "&PM symbol:", -1, 13, 106, 54, 10, WS_VISIBLE | WS_GROUP - COMBOBOX IDC_TIMEPMSYMBOL, 68, 104, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP - GROUPBOX "", -1, 7, 124, 228, 60, WS_VISIBLE + COMBOBOX IDC_TIMEPMSYMBOL, 88, 104, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "", -1, 7, 140, 230, 80, WS_VISIBLE LTEXT "Time format notation\n\n\ h = hour m = minute s = second t = am or pm\n\n\ h = 12 hour H = 24 hour\n\ hh, mm, ss = leading zero h, m, s = no leading zero", - -1, 13, 133, 214, 47, WS_CHILD |WS_VISIBLE | WS_GROUP + -1, 13, 150, 214, 50, WS_CHILD |WS_VISIBLE | WS_GROUP END -IDD_DATEPAGE DIALOGEX 0, 0, 246, 188 +IDD_DATEPAGE DIALOGEX 0, 0, 246, 234 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Date" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Property Page 5",-1,73,74,90,8 + GROUPBOX "Calendar", IDC_GROUPBOX, 7, 7, 230, 74 + LTEXT "If year typed as two digits, then show it as year between:", -1, 13, 18, 215, 8 + EDITTEXT IDC_FIRSTYEAR_EDIT, 13, 30, 36, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "and", -1, 55, 32, 17, 8 + EDITTEXT IDC_SECONDYEAR_EDIT, 77, 30, 36, 12, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "",IDC_SCR_MAX_YEAR, "msctls_updown32", UDS_NOTHOUSANDS | UDS_WRAP | UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_CHILD | WS_VISIBLE, 113, 30, 10, 12 + LTEXT "Calendar type:", -1, 13, 48, 56, 10 + COMBOBOX IDC_CALTYPE_COMBO, 77, 46, 153, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SORT | WS_DISABLED + LTEXT "Muslim Calendar:", -1, 13, 65, 60, 12 + COMBOBOX IDC_HIJCHRON_COMBO, 77, 64, 153, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SORT | WS_DISABLED + GROUPBOX "Short date format", IDC_GROUPBOX, 7, 83, 230, 81 + LTEXT "Sample:", -1, 13, 95, 63, 10 + EDITTEXT IDC_SHRTDATESAMPLE_EDIT, 77, 93, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Sample - right to left read:", -1, 13, 109, 60, 16 + EDITTEXT IDC_SHRTDATERTOL_EDIT, 77, 111, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "Short format:", -1, 13, 131, 60, 10 + COMBOBOX IDC_SHRTDATEFMT_COMBO, 77, 129, 153, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Date components separator:", -1, 13, 148, 113, 10 + COMBOBOX IDC_SHRTDATESEP_COMBO, 180, 146, 51, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + GROUPBOX "Long date format", IDC_GROUPBOX, 7, 167, 230, 64 + LTEXT "Sample:", -1, 13, 179, 61, 10 + EDITTEXT IDC_LONGDATESAMPLE_EDIT, 77, 177, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Sample - right to left read:", -1, 13, 193, 61, 16 + EDITTEXT IDC_LONGDATERTOL_EDIT, 77, 195, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "Long format:", -1, 13, 215, 60, 10 + COMBOBOX IDC_LONGDATEFMT_COMBO, 77, 213, 153, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE END - -IDD_LOCALEPAGE DIALOGEX 0, 0, 246, 188 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Input Locale" -FONT 8, "MS Shell Dlg" +STRINGTABLE BEGIN - LTEXT "Input Locale Page",-1,73,74,90,8 + IDS_CUSTOMIZE_TITLE "Customize Regional Options" END - STRINGTABLE BEGIN IDS_CPLNAME "Regional Options" diff --git a/reactos/dll/cpl/intl/languages.c b/reactos/dll/cpl/intl/languages.c new file mode 100644 index 00000000000..c8fbd245deb --- /dev/null +++ b/reactos/dll/cpl/intl/languages.c @@ -0,0 +1,48 @@ +#include +#include +#include + +#include "intl.h" +#include "resource.h" + +/* Property page dialog callback */ +INT_PTR CALLBACK +LanguagesPageProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + SHELLEXECUTEINFOW shInputDll; + switch(uMsg) + { + case WM_INITDIALOG: + break; + case WM_COMMAND: + switch (LOWORD(wParam)) + { + /* If "detail" button pressed */ + case IDC_DETAIL_BUTTON: + if(HIWORD(wParam)==BN_CLICKED) + { + memset(&shInputDll, 0x0, sizeof(SHELLEXECUTEINFOW)); + shInputDll.cbSize = sizeof(shInputDll); + shInputDll.hwnd = hwndDlg; + shInputDll.lpVerb = L"open"; + shInputDll.lpFile = L"RunDll32.exe"; + shInputDll.lpParameters = L"shell32.dll,Control_RunDLL input.dll"; + if(ShellExecuteExW(&shInputDll)==0) + { + MessageBox(NULL, L"Can't start input.dll", L"Error", MB_OK | MB_ICONERROR); + } + } + + break; + } + + + break; + } + return FALSE; +} + +/* EOF */ diff --git a/reactos/dll/cpl/intl/misc.c b/reactos/dll/cpl/intl/misc.c new file mode 100644 index 00000000000..53854249664 --- /dev/null +++ b/reactos/dll/cpl/intl/misc.c @@ -0,0 +1,206 @@ +#include +#include +#include + +#include "intl.h" +#include "resource.h" + +#define NUM_SHEETS 4 + +/* Insert the space */ +WCHAR* +InsSpacePos(const WCHAR *wszInsStr, const int nPos) +{ + WCHAR* pwszDestStr; + pwszDestStr=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE); + + int nDestStrCnt=0; + int nStrCnt; + int nStrSize; + + wcscpy(pwszDestStr,wszInsStr); + + nStrSize = wcslen(wszInsStr); + + for(nStrCnt=0; nStrCntcode == (UINT)PSN_APPLY) + { + if(!SetNumDecimalSep(hwndDlg)) break; + if(!SetFracSymNum(hwndDlg)) break; + if(!SetNumFieldSep(hwndDlg)) break; + if(!SetFieldDigNum(hwndDlg)) break; + if(!SetNumNegSign(hwndDlg)) break; + if(!SetNegSumFmt(hwndDlg)) break; + if(!SetNumLeadZero(hwndDlg)) break; + if(!SetNumListSep(hwndDlg)) break; + if(!SetNumUnitsSys(hwndDlg)) break; + + UpdateNumSamples(hwndDlg, LOCALE_USER_DEFAULT); + } + } + break; } return FALSE; } diff --git a/reactos/dll/cpl/intl/resource.h b/reactos/dll/cpl/intl/resource.h index ffd0718c4df..ed61348dda3 100644 --- a/reactos/dll/cpl/intl/resource.h +++ b/reactos/dll/cpl/intl/resource.h @@ -4,15 +4,21 @@ #define IDC_CPLICON 200 #define IDC_FLAGS 2 -#define IDC_ICON1 3 #define IDD_GENERALPAGE 100 #define IDD_NUMBERSPAGE 101 +#define IDC_NUMSAMPLE_EDIT 300 +#define IDC_MONEYSAMPLE_EDIT 301 +#define IDC_TIMESAMPLE_EDIT 302 +#define IDC_SHORTTIMESAMPLE_EDIT 303 +#define IDC_FULLTIMESAMPLE_EDIT 304 +#define IDC_SETUP_BUTTON 305 + #define IDD_CURRENCYPAGE 140 #define IDC_CURRENCYPOSSAMPLE 141 #define IDC_CURRENCYNEGSAMPLE 142 -#define IDC_CURRENCYSYMBOL 143 +#define IDC_CURRENCYSYMBOL 143 #define IDC_CURRENCYPOSVALUE 144 #define IDC_CURRENCYNEGVALUE 145 #define IDC_CURRENCYDECSEP 146 @@ -20,6 +26,18 @@ #define IDC_CURRENCYGRPSEP 149 #define IDC_CURRENCYGRPNUM 150 +#define IDC_NUMBERSPOSSAMPLE 250 +#define IDC_NUMBERSNEGSAMPLE 251 +#define IDC_NUMBERDSYMBOL 252 +#define IDC_NUMBERSNDIGDEC 253 +#define IDC_NUMBERSDIGITGRSYM 254 +#define IDC_NUMBERSDGROUPING 255 +#define IDC_NUMBERSNSIGNSYM 256 +#define IDC_NUMBERSNNUMFORMAT 257 +#define IDC_NUMBERSDISPLEADZER 258 +#define IDC_NUMBERSLSEP 259 +#define IDC_NUMBERSMEASSYS 260 + #define IDD_TIMEPAGE 103 #define IDC_TIMESAMPLE 107 #define IDC_TIMEFORMAT 108 @@ -28,11 +46,34 @@ #define IDC_TIMEPMSYMBOL 111 #define IDD_DATEPAGE 104 -#define IDD_LOCALEPAGE 105 #define IDC_LANGUAGELIST 106 +#define IDD_LANGUAGESPAGE 112 +#define IDD_ADVANCEDPAGE 113 +#define IDC_LOCATION_COMBO 114 +#define IDC_DETAIL_BUTTON 115 +#define IDC_LANGUAGE_COMBO 116 -#define IDS_CPLNAME 1000 +#define IDC_GROUPBOX 350 +#define IDC_FIRSTYEAR_EDIT 351 +#define IDC_SECONDYEAR_EDIT 352 +#define IDC_SCR_MAX_YEAR 353 +#define IDC_CALTYPE_COMBO 354 +#define IDC_HIJCHRON_COMBO 355 +#define IDC_SHRTDATESAMPLE_EDIT 356 +#define IDC_SHRTDATERTOL_EDIT 357 +#define IDC_SHRTDATEFMT_COMBO 358 +#define IDC_SHRTDATESEP_COMBO 359 +#define IDC_LONGDATESAMPLE_EDIT 361 +#define IDC_LONGDATERTOL_EDIT 362 +#define IDC_LONGDATEFMT_COMBO 363 +#define IDC_INST_FILES_FOR_RTOL_LANG 364 +#define IDC_INST_FILES_FOR_ASIAN 365 +#define IDC_APPLY_CUR_USER_DEF_PROFILE 366 +#define IDC_CONV_TABLES 367 + +#define IDS_CPLNAME 1000 #define IDS_CPLDESCRIPTION 1001 +#define IDS_CUSTOMIZE_TITLE 1002 #endif /* __CPL_RESOURCE_H */ diff --git a/reactos/dll/cpl/intl/setupreg.c b/reactos/dll/cpl/intl/setupreg.c new file mode 100644 index 00000000000..4ec564ffd19 --- /dev/null +++ b/reactos/dll/cpl/intl/setupreg.c @@ -0,0 +1,233 @@ +/* + * PROJECT: ReactOS International Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/intl/setupreg.c + * PURPOSE: ReactOS International Control Panel + * PROGRAMMERS: Alexey Zavyalov (gen_x@mail.ru) +*/ + +/* INCLUDES *****************************************************************/ + +#include +#include +#include + +#include "intl.h" +#include "resource.h" + +/* GLOBALS ******************************************************************/ + +#define NUM_SHEETS 4 + +/* FUNCTIONS ****************************************************************/ + +/* Insert the space */ +WCHAR* +InsSpacePos(const WCHAR *wszInsStr, const int nPos) +{ + WCHAR* pwszDestStr; + pwszDestStr=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE); + + int nDestStrCnt=0; + int nStrCnt; + int nStrSize; + + wcscpy(pwszDestStr,wszInsStr); + + nStrSize = wcslen(wszInsStr); + + for(nStrCnt=0; nStrCntdwSize = sizeof(PROPSHEETPAGE); + PsPage->dwFlags = PSP_DEFAULT; + PsPage->hInstance = hApplet; + PsPage->pszTemplate = MAKEINTRESOURCE(IdDlg); + PsPage->pfnDlgProc = DlgProc; +} + +/* Create applets */ +LONG +APIENTRY +SetupApplet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam) +{ + + PROPSHEETPAGE PsPage[NUM_SHEETS]; + PROPSHEETHEADER psh; + TCHAR Caption[MAX_STR_SIZE]; + + UNREFERENCED_PARAMETER(lParam); + UNREFERENCED_PARAMETER(wParam); + UNREFERENCED_PARAMETER(uMsg); + UNREFERENCED_PARAMETER(hwnd); + + LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR)); + + ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); + psh.dwSize = sizeof(PROPSHEETHEADER); + psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USECALLBACK | PSH_PROPTITLE; + psh.hwndParent = NULL; + psh.hInstance = hApplet; + psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON)); + psh.pszCaption = Caption; + psh.nPages = sizeof(PsPage) / sizeof(PROPSHEETPAGE); + psh.nStartPage = 0; + psh.ppsp = PsPage; + + InitPropSheetPage(&PsPage[0], IDD_NUMSOPTSSETUP, NumsOptsSetProc); + InitPropSheetPage(&PsPage[1], IDD_CURRENCYOPTSSETUP, CurrencyOptsSetProc); + InitPropSheetPage(&PsPage[2], IDD_TIMEOPTSSETUP, TimeOptsSetProc); + InitPropSheetPage(&PsPage[3], IDD_DATEOPTSSETUP, DateOptsSetProc); + + return (LONG)(PropertySheet(&psh) != -1); +} + +/* EOF */ diff --git a/reactos/dll/cpl/intl/time.c b/reactos/dll/cpl/intl/time.c index 42729e97baa..4b1d2be5dc1 100644 --- a/reactos/dll/cpl/intl/time.c +++ b/reactos/dll/cpl/intl/time.c @@ -67,7 +67,7 @@ TimePageProc(HWND hwndDlg, UpdateTimeSample(GetDlgItem(hwndDlg, IDC_TIMESAMPLE)); /* Get the time format (max. 80 characters) */ - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), CB_LIMITTEXT, 80, 0); /* FIXME: add available time formats to the list */ @@ -77,26 +77,26 @@ TimePageProc(HWND hwndDlg, CB_ADDSTRING, 0, (LPARAM)Buffer); - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), CB_SETCURSEL, 0, /* index */ 0); /* Get the time separator (max. 4 characters) */ - SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), CB_LIMITTEXT, 4, 0); GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STIME, Buffer, 80); SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), CB_ADDSTRING, 0, (LPARAM)Buffer); - SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), CB_SETCURSEL, 0, /* index */ 0); /* Get the AM symbol (max. 9 characters) */ - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), CB_LIMITTEXT, 9, 0); nLen = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_S1159, Buffer, 80); SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), @@ -110,13 +110,13 @@ TimePageProc(HWND hwndDlg, 0, (LPARAM)L""); } - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), CB_SETCURSEL, 0, /* index */ 0); /* Get the PM symbol (max. 9 characters) */ - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), CB_LIMITTEXT, 9, 0); nLen = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_S2359, Buffer, 80); SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), @@ -130,7 +130,7 @@ TimePageProc(HWND hwndDlg, 0, (LPARAM)L""); } - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), CB_SETCURSEL, 0, /* index */ 0); @@ -163,25 +163,25 @@ TimePageProc(HWND hwndDlg, int nIndex; /* Set time format */ - nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), + nIndex = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), CB_GETCURSEL, 0, 0); - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFORMAT), CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer); SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, Buffer); /* Set time separator */ - nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), + nIndex = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), CB_GETCURSEL, 0, 0); - SendMessage(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEPARATOR), CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer); SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STIME, Buffer); /* Set the AM symbol */ - nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), + nIndex = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), CB_GETCURSEL, 0, 0); if (nIndex != CB_ERR) { - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAMSYMBOL), CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer); SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_S1159, Buffer); } @@ -191,11 +191,11 @@ TimePageProc(HWND hwndDlg, } /* Set the PM symbol */ - nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), + nIndex = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), CB_GETCURSEL, 0, 0); if (nIndex != CB_ERR) { - SendMessage(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), + SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPMSYMBOL), CB_GETLBTEXT, (WPARAM)nIndex, (LPARAM)Buffer); SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_S2359, Buffer); }