From 12e90157e6dcdb79e062e0724e485669c04d89ad Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 23 Jan 2007 17:59:36 +0000 Subject: [PATCH] Alexey Zavyalov: Add functionally Numbers, Currency, Time, Date tabs. Fix some bugs. See issue #1988 for more details. svn path=/trunk/; revision=25603 --- reactos/dll/cpl/intl_new/En.rc | 133 +++++ reactos/dll/cpl/intl_new/currency.c | 727 +++++++++++++++++++++++ reactos/dll/cpl/intl_new/date.c | 609 +++++++++++++++++++ reactos/dll/cpl/intl_new/extra.c | 7 +- reactos/dll/cpl/intl_new/intl.c | 3 +- reactos/dll/cpl/intl_new/intl.h | 46 +- reactos/dll/cpl/intl_new/intl.rbuild | 7 + reactos/dll/cpl/intl_new/langs.c | 78 +++ reactos/dll/cpl/intl_new/locale.c | 9 +- reactos/dll/cpl/intl_new/nums.c | 851 +++++++++++++++++++++++++++ reactos/dll/cpl/intl_new/resource.h | 67 ++- reactos/dll/cpl/intl_new/setupreg.c | 233 ++++++++ reactos/dll/cpl/intl_new/time.c | 536 +++++++++++++++++ 13 files changed, 3296 insertions(+), 10 deletions(-) create mode 100644 reactos/dll/cpl/intl_new/currency.c create mode 100644 reactos/dll/cpl/intl_new/date.c create mode 100644 reactos/dll/cpl/intl_new/langs.c create mode 100644 reactos/dll/cpl/intl_new/nums.c create mode 100644 reactos/dll/cpl/intl_new/setupreg.c create mode 100644 reactos/dll/cpl/intl_new/time.c diff --git a/reactos/dll/cpl/intl_new/En.rc b/reactos/dll/cpl/intl_new/En.rc index bbde0bbacec..f423c139698 100644 --- a/reactos/dll/cpl/intl_new/En.rc +++ b/reactos/dll/cpl/intl_new/En.rc @@ -39,6 +39,139 @@ BEGIN LTEXT "This option...", -1, 14, 18, 223, 33 LTEXT "Select language...", -1, 14, 55, 223, 18 GROUPBOX "Transformation tables codepages", -1, 5, 101, 242, 88 + /* TODO: add other components*/ +END + +IDD_LANGSOPTSPAGE DIALOGEX 0, 0, 252, 236 +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, 3, 242, 52 + LTEXT "To view or change language or text input methods press ""Detail...""", -1, 12, 13, 230, 18 + PUSHBUTTON "De&tail...", IDC_DETAIL_BUTTON, 186, 34, 54, 14 + GROUPBOX "Additionary language support", IDC_GROUPBOX, 5, 60, 242, 82 + /* TODO: add other components*/ +END + +IDD_NUMSOPTSSETUP DIALOGEX 0, 0, 252, 236 +STYLE DS_FIXEDSYS | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Numbers" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Samples", IDC_GROUPBOX, 5, 7, 242, 48 + LTEXT "Positive:", -1, 11, 20, 28, 10 + EDITTEXT IDC_NUM_EDIT, 42, 18, 80, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negative:", -1, 128, 20, 31, 10 + EDITTEXT IDC_NEGNUM_EDIT, 162, 18, 80, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Positive:", -1, 11, 38, 28, 10 + EDITTEXT IDC_NUM1_EDIT, 42, 36, 80, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negative:", -1, 128, 38, 31, 10 + EDITTEXT IDC_NEGNUM1_EDIT, 162, 36, 80, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Whole and fractional part separator:", -1, 18, 61, 126, 9 + COMBOBOX IDC_NUMDECIMALSEP_COMBO, 147, 59, 100, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Number of fractional symbols:", -1, 18, 77, 126, 9 + COMBOBOX IDC_NUMFRACSYBMS_COMBO, 147, 75, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Field separator:", -1, 18, 93, 126, 9 + COMBOBOX IDC_NUMFIELDSEP_COMBO, 147, 91, 100, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Number of digidts in field:", -1, 18, 109, 126, 9 + COMBOBOX IDC_NUMDIGFIELD_COMBO, 147, 107, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Negative number sign:", -1, 18, 125, 126, 9 + COMBOBOX IDC_NUMNEGSIGN_COMBO, 147, 123, 100, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Negative numbers format:", -1, 18, 141, 126, 9 + COMBOBOX IDC_NUMNEGFMT_COMBO, 147, 139, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Leading zeroes:", -1, 18, 157, 126, 9 + COMBOBOX IDC_NUMLEADZERO_COMBO, 147, 155, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Elements list separator:", -1, 18, 173, 126, 9 + COMBOBOX IDC_NUMELEMLISTSEP_COMBO, 147, 171, 100, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "System of units:", -1, 18, 189, 126, 9 + COMBOBOX IDC_NUMUNITSSYS_COMBO, 147, 187, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Region corresponding digits:", -1, 18, 205, 126, 9 + COMBOBOX IDC_NUMREGDIG_COMBO, 147, 203, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Digit replacement:", -1, 18, 221, 126, 9 + COMBOBOX IDC_NUMDIGREPL_COMBO, 147, 219, 100, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE +END + +IDD_CURRENCYOPTSSETUP DIALOGEX 0, 0, 252, 236 +STYLE DS_FIXEDSYS | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Currency" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Samples", IDC_GROUPBOX, 5, 7, 242, 40 + LTEXT "Positive:", -1, 10, 25, 30, 10 + EDITTEXT IDC_CURRENCY_EDIT, 42, 23, 80, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negative:", -1, 128, 25, 31, 10 + EDITTEXT IDC_NEGCURRENCY_EDIT, 162, 23, 80, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Monetary unit:", -1, 20, 61, 126, 9 + COMBOBOX IDC_CURRENCYUNIT_COMBO, 148, 59, 90, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE | CBS_SORT + LTEXT "Positive sum of money format:", -1, 20, 78, 126, 9 + COMBOBOX IDC_POSCURRENCYSUM_COMBO, 148, 76, 90, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Negative sum of money format:", -1, 20, 95, 126, 9 + COMBOBOX IDC_NEGCURRENCYSUM_COMBO, 148, 93, 90, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Whole and fractional part separator:", -1, 20, 121, 126, 9 + COMBOBOX IDC_WHOLEFRACTSEP_COMBO, 148, 119, 90, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE | CBS_SORT + LTEXT "Number of fractional symbols:", -1, 20, 137, 126, 9 + COMBOBOX IDC_FRACSYMBSNUM_COMBO, 148, 136, 90, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE | CBS_SORT + LTEXT "Field separator:", -1, 20, 166, 126, 9 + COMBOBOX IDC_FIELDSEP_COMBO, 148, 164, 90, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE | CBS_SORT + LTEXT "Number of digidts in field:", -1, 20, 183, 126, 9 + COMBOBOX IDC_DIGINFIELDNUM_COMBO, 148, 181, 90, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE +END + +IDD_TIMEOPTSSETUP DIALOGEX 0, 0, 252, 236 +STYLE DS_FIXEDSYS | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Time" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Samples", IDC_GROUPBOX, 5, 7, 242, 33 + LTEXT "Sample:", -1, 13, 21, 52, 10 + EDITTEXT IDC_TIME_EDIT, 68, 19, 84, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_UNKNOWN_EDIT, 156, 19, 84, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Time format:", -1, 10, 52, 147, 10 + COMBOBOX IDC_TIMEFMT_COMBO, 161, 50, 84, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Time components separator:", -1, 10, 69, 147, 10 + COMBOBOX IDC_TIMESEP_COMBO, 161, 67, 84, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Time about midday notation (AM):", -1, 10, 86, 147, 10 + COMBOBOX IDC_TIMEAM_COMBO, 161, 84, 84, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Time afternoon notation (PM):", -1, 10, 104, 147, 10 + COMBOBOX IDC_TIMEPM_COMBO, 161, 102, 84, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + GROUPBOX "", IDC_GROUPBOX, 7, 132, 238, 80 + LTEXT "The designation of the time format\nh = hour m = minute s = second t = €Œ or Œ\n\nh = 12-hour day format\nH = 24-hour day format\n\nhh, mm, ss = with zeroes in beginning\nh, m, s = without zeroes", -1, 13, 141, 226, 65 +END + +IDD_DATEOPTSSETUP DIALOGEX 0, 0, 252, 236 +STYLE DS_FIXEDSYS | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Date" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Calendar", IDC_GROUPBOX, 5, 7, 242, 74 + LTEXT "If year typed as two digits, then show it as year between:", -1, 13, 18, 225, 8 + EDITTEXT IDC_FIRSTYEAR_EDIT, 13, 30, 36, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + 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, 161, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SORT | WS_DISABLED + LTEXT "Chronology by Hijra:", -1, 13, 59, 60, 16 + COMBOBOX IDC_HIJCHRON_COMBO, 77, 64, 161, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SORT | WS_DISABLED + GROUPBOX "Short date format", IDC_GROUPBOX, 7, 83, 238, 81 + LTEXT "Sample:", -1, 13, 95, 63, 10 + EDITTEXT IDC_SHRTDATESAMPLE_EDIT, 77, 93, 161, 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, 161, 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, 161, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Date components separator:", -1, 13, 148, 113, 10 + COMBOBOX IDC_SHRTDATESEP_COMBO, 187, 146, 51, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + GROUPBOX "Long date format", IDC_GROUPBOX, 7, 167, 238, 64 + LTEXT "Sample:", -1, 13, 179, 61, 10 + EDITTEXT IDC_LONGDATESAMPLE_EDIT, 77, 177, 161, 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, 161, 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, 161, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE END STRINGTABLE diff --git a/reactos/dll/cpl/intl_new/currency.c b/reactos/dll/cpl/intl_new/currency.c new file mode 100644 index 00000000000..ab3e68017c6 --- /dev/null +++ b/reactos/dll/cpl/intl_new/currency.c @@ -0,0 +1,727 @@ +/* + * PROJECT: ReactOS International Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/intl/monetary.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 SAMPLE_NUMBER L"123456789" +#define SAMPLE_NEG_NUMBER L"-123456789" +#define MAX_CURRENCY_UNIT_SAMPLES 2 +#define MAX_POS_CURRENCY_SAMPLES 4 +#define MAX_NEG_CURRENCY_SAMPLES 16 +#define MAX_CURRENCY_SEP_SAMPLES 2 +#define MAX_CURRENCY_FRAC_SAMPLES 10 +#define MAX_FIELD_SEP_SAMPLES 1 +#define MAX_FIELD_DIG_SAMPLES 3 +#define EOLN_SIZE sizeof(WCHAR) + +/* FUNCTIONS ****************************************************************/ + +/* Init number of digidts in field control box */ +VOID +InitCurrencyDigNumCB(HWND hwndDlg) +{ + WCHAR wszFieldDigNumSamples[MAX_FIELD_DIG_SAMPLES][MAX_SAMPLES_STR_SIZE]= + { + L"0;0", + L"3;0", + L"3;2;0" + }; + + int nCBIndex; + int nRetCode; + + DWORD dwValueSize=MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)+EOLN_SIZE; + WCHAR wszFieldDigNum[MAX_SAMPLES_STR_SIZE]; + WCHAR* pwszFieldDigNumSmpl; + + /* Get current field digits num */ + GetLocaleInfoW(LOCALE_USER_DEFAULT, + LOCALE_SMONGROUPING, + wszFieldDigNum, + dwValueSize); + + /* Clear all box content */ + SendMessageW(GetDlgItem(hwndDlg, IDC_DIGINFIELDNUM_COMBO), + CB_RESETCONTENT, + (WPARAM)0, + (LPARAM)0); + + /* Create standart list of field digits num */ + for(nCBIndex=0;nCBIndexcode == (UINT)PSN_APPLY) + { + if(!SetCurrencyUnit(hwndDlg)) break; + if(!SetPosCurrencySumFmt(hwndDlg)) break; + if(!SetNegCurrencySumFmt(hwndDlg)) break; + if(!SetCurrencySep(hwndDlg)) break; + if(!SetCurrencyFracSymNum(hwndDlg)) break; + if(!SetCurrencyFieldSep(hwndDlg)) break; + if(!SetCurrencyDigNum(hwndDlg)) break; + + /* Update sum format samples */ + InitPosCurrencySumCB(hwndDlg); + InitNegCurrencySumCB(hwndDlg); + + /* FIXME: */ + _sleep(15); + UpdateCurrencyLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT); + } + } + break; + } + return FALSE; +} + +/* EOF */ diff --git a/reactos/dll/cpl/intl_new/date.c b/reactos/dll/cpl/intl_new/date.c new file mode 100644 index 00000000000..83e7eb50506 --- /dev/null +++ b/reactos/dll/cpl/intl_new/date.c @@ -0,0 +1,609 @@ +/* + * PROJECT: ReactOS International Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/intl/date.c + * PURPOSE: ReactOS International Control Panel + * PROGRAMMERS: Alexey Zavyalov (gen_x@mail.ru) +*/ + +/* INCLUDES *****************************************************************/ + +#define WINVER 0x0500 + +#include +#include +#include + +#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; +} + +/* EOF */ diff --git a/reactos/dll/cpl/intl_new/extra.c b/reactos/dll/cpl/intl_new/extra.c index 73a6031fbb2..8ba20429f23 100644 --- a/reactos/dll/cpl/intl_new/extra.c +++ b/reactos/dll/cpl/intl_new/extra.c @@ -1,7 +1,7 @@ /* * PROJECT: ReactOS International Control Panel * LICENSE: GPL - See COPYING in the top level directory - * FILE: lib/cpl/intl/extra.c + * FILE: dll/cpl/intl/extra.c * PURPOSE: Extra parameters page * PROGRAMMERS: Alexey Zavyalov (gen_x@mail.ru) */ @@ -73,7 +73,10 @@ CreateLanguagesList(HWND hWnd) /* Extra Parameters page dialog callback */ INT_PTR CALLBACK -ExtraOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +ExtraOptsProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); switch(uMsg) diff --git a/reactos/dll/cpl/intl_new/intl.c b/reactos/dll/cpl/intl_new/intl.c index 2f30236e48b..483d15a23a0 100644 --- a/reactos/dll/cpl/intl_new/intl.c +++ b/reactos/dll/cpl/intl_new/intl.c @@ -19,7 +19,7 @@ /* GLOBALS ******************************************************************/ #define NUM_APPLETS (1) -#define NUM_SHEETS 2 +#define NUM_SHEETS 3 LONG APIENTRY Applet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam); @@ -74,6 +74,7 @@ Applet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam) InitPropSheetPage(&PsPage[0], IDD_REGOPTSPAGE, RegOptsProc); InitPropSheetPage(&PsPage[1], IDD_EXTRAOPTSPAGE, ExtraOptsProc); + InitPropSheetPage(&PsPage[2], IDD_LANGSOPTSPAGE, LangsOptsProc); return (LONG)(PropertySheet(&psh) != -1); } diff --git a/reactos/dll/cpl/intl_new/intl.h b/reactos/dll/cpl/intl_new/intl.h index be9f486aebe..efb32a6613b 100644 --- a/reactos/dll/cpl/intl_new/intl.h +++ b/reactos/dll/cpl/intl_new/intl.h @@ -3,8 +3,10 @@ /* GLOBALS ******************************************************************/ -#define MAX_STR_SIZE 128 -#define MAX_FMT_SIZE 30 +#define MAX_STR_SIZE 128 +#define MAX_FMT_SIZE 30 +#define MAX_SAMPLES_STR_SIZE 70 +#define DECIMAL_RADIX 10 typedef struct { @@ -26,6 +28,46 @@ INT_PTR CALLBACK ExtraOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +/* langs.c */ +INT_PTR +CALLBACK +LangsOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +/* date.c */ +INT_PTR +CALLBACK +DateOptsSetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +/* nums.c */ +INT_PTR +CALLBACK +NumsOptsSetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +/* monetary.c */ +INT_PTR +CALLBACK +CurrencyOptsSetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +/* time.c */ +INT_PTR +CALLBACK +TimeOptsSetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +/* setupreg.c */ +INT_PTR +CALLBACK +RegOptsSetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +WCHAR* +ReplaceSubStr(const WCHAR *wszSourceStr, const WCHAR *wszStrToReplace, const WCHAR *wszTempl); + +WCHAR* +InsSpacesFmt(const WCHAR *wszSourceStr, const WCHAR *wszFmtStr); + +LONG +APIENTRY +SetupApplet(HWND hwnd, UINT uMsg, LONG wParam, LONG lParam); + #endif /* __INTL_H */ /* EOF */ diff --git a/reactos/dll/cpl/intl_new/intl.rbuild b/reactos/dll/cpl/intl_new/intl.rbuild index d3ee94d4d10..65055acc2ca 100644 --- a/reactos/dll/cpl/intl_new/intl.rbuild +++ b/reactos/dll/cpl/intl_new/intl.rbuild @@ -11,9 +11,16 @@ user32 comctl32 advapi32 + shell32 msvcrt intl.c locale.c extra.c + setupreg.c + langs.c + date.c + time.c + nums.c + currency.c intl.rc diff --git a/reactos/dll/cpl/intl_new/langs.c b/reactos/dll/cpl/intl_new/langs.c new file mode 100644 index 00000000000..3c11fd1f807 --- /dev/null +++ b/reactos/dll/cpl/intl_new/langs.c @@ -0,0 +1,78 @@ +/* + * PROJECT: ReactOS International Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/intl/langs.c + * PURPOSE: Extra parameters page + * PROGRAMMERS: Alexey Zavyalov (gen_x@mail.ru) +*/ + +/* INCLUDES *****************************************************************/ + +#include +#include +#include +#include + +#include "intl.h" +#include "resource.h" + +/* FUNCTIONS ****************************************************************/ + +/* Languages Parameters page dialog callback */ +INT_PTR +CALLBACK +LangsOptsProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + SHELLEXECUTEINFOW shInputDll; + + UNREFERENCED_PARAMETER(wParam); + 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; + + case WM_NOTIFY: + { + LPNMHDR Lpnm = (LPNMHDR)lParam; + /* If push apply button */ + if (Lpnm->code == (UINT)PSN_APPLY) + { + // TODO: Implement + } + } + break; + } + return FALSE; +} + +/* EOF */ diff --git a/reactos/dll/cpl/intl_new/locale.c b/reactos/dll/cpl/intl_new/locale.c index bbbca257f05..68f9d138145 100644 --- a/reactos/dll/cpl/intl_new/locale.c +++ b/reactos/dll/cpl/intl_new/locale.c @@ -1,7 +1,7 @@ /* * PROJECT: ReactOS International Control Panel * LICENSE: GPL - See COPYING in the top level directory - * FILE: lib/cpl/intl/locale.h + * FILE: dll/cpl/intl/locale.h * PURPOSE: Regional parameters page * PROGRAMMERS: Eric Kohl * Alexey Zavyalov (gen_x@mail.ru) @@ -235,10 +235,9 @@ RegOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_COMMAND: switch (LOWORD(wParam)) { + /* If setup button pressed */ case IDC_SETUP_BUTTON: - // setup button code... - MessageBox(NULL, L"Not implemented yet", L"Info", - MB_OK | MB_ICONINFORMATION); + SetupApplet(hwndDlg, uMsg, wParam, lParam); break; /* If selected other locale */ @@ -256,10 +255,12 @@ RegOptsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) } break; + /* If changed location */ case IDC_LOCATION_COMBO: if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + /* Set "Apply" button enabled */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } break; diff --git a/reactos/dll/cpl/intl_new/nums.c b/reactos/dll/cpl/intl_new/nums.c new file mode 100644 index 00000000000..94516979ad2 --- /dev/null +++ b/reactos/dll/cpl/intl_new/nums.c @@ -0,0 +1,851 @@ +/* + * PROJECT: ReactOS International Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/intl/nums.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 SAMPLE_NUMBER L"123456789" +#define SAMPLE_NEG_NUMBER L"-123456789" +#define MAX_NUM_SEP_SAMPLES 2 +#define MAX_FRAC_NUM_SAMPLES 9 +#define MAX_FIELD_SEP_SAMPLES 1 +#define MAX_FIELD_DIG_SAMPLES 3 +#define MAX_NEG_SIGN_SAMPLES 1 +#define MAX_NEG_NUMBERS_SAMPLES 5 +#define MAX_LEAD_ZEROES_SAMPLES 2 +#define MAX_LIST_SEP_SAMPLES 1 +#define MAX_UNITS_SYS_SAMPLES 2 +#define EOLN_SIZE sizeof(WCHAR) + +/* FUNCTIONS ****************************************************************/ + +/* Init system of units control box */ +VOID +InitUnitsSysCB(HWND hwndDlg) +{ + WCHAR wszUnitsSysSamples[MAX_UNITS_SYS_SAMPLES][MAX_SAMPLES_STR_SIZE]= + { + L"Metrics", + L"Americans" + }; + + int nCBIndex; + int nRetCode; + + DWORD dwValueSize=MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)+EOLN_SIZE; + WCHAR wszUnitsSys[MAX_SAMPLES_STR_SIZE]; + + /* Get current system of units */ + GetLocaleInfoW(LOCALE_USER_DEFAULT, + LOCALE_IMEASURE, + wszUnitsSys, + dwValueSize); + + /* Clear all box content */ + SendMessageW(GetDlgItem(hwndDlg, IDC_NUMUNITSSYS_COMBO), + CB_RESETCONTENT, + (WPARAM)0, + (LPARAM)0); + + /* Create list of standart system of units */ + for(nCBIndex=0;nCBIndexcode == (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; + + /* Update sum format combo boxes */ + InitLeadingZeroesCB(hwndDlg); + InitNegNumFmtCB(hwndDlg); + + /* FIXME: */ + _sleep(15); + /* Update sum format samples */ + UpdateNumSamples(hwndDlg, LOCALE_USER_DEFAULT); + } + } + break; + } + return FALSE; +} + + +/* EOF */ diff --git a/reactos/dll/cpl/intl_new/resource.h b/reactos/dll/cpl/intl_new/resource.h index 699f11758ed..5eae2bb90e1 100644 --- a/reactos/dll/cpl/intl_new/resource.h +++ b/reactos/dll/cpl/intl_new/resource.h @@ -27,7 +27,72 @@ #define IDD_EXTRAOPTSPAGE 200 -#define IDC_LANGUAGE_COMBO 103 +#define IDC_LANGUAGE_COMBO 201 + +/* Language page options */ + +#define IDD_LANGSOPTSPAGE 300 + +#define IDC_DETAIL_BUTTON 301 + +/* Date options setup page */ + +#define IDD_DATEOPTSSETUP 400 +#define IDC_FIRSTYEAR_EDIT 401 +#define IDC_SECONDYEAR_EDIT 402 +#define IDC_SCR_MAX_YEAR 403 +#define IDC_CALTYPE_COMBO 404 +#define IDC_HIJCHRON_COMBO 405 +#define IDC_SHRTDATESAMPLE_EDIT 406 +#define IDC_SHRTDATERTOL_EDIT 407 +#define IDC_SHRTDATEFMT_COMBO 408 +#define IDC_SHRTDATESEP_COMBO 409 +#define IDC_LONGDATESAMPLE_EDIT 410 +#define IDC_LONGDATERTOL_EDIT 411 +#define IDC_LONGDATEFMT_COMBO 412 + +/* Numbers options setup page */ + +#define IDD_NUMSOPTSSETUP 500 +#define IDC_NUM_EDIT 501 +#define IDC_NEGNUM_EDIT 502 +#define IDC_NUM1_EDIT 503 +#define IDC_NEGNUM1_EDIT 504 +#define IDC_NUMDECIMALSEP_COMBO 505 +#define IDC_NUMFRACSYBMS_COMBO 506 +#define IDC_NUMFIELDSEP_COMBO 507 +#define IDC_NUMDIGFIELD_COMBO 508 +#define IDC_NUMNEGSIGN_COMBO 509 +#define IDC_NUMNEGFMT_COMBO 510 +#define IDC_NUMLEADZERO_COMBO 511 +#define IDC_NUMELEMLISTSEP_COMBO 512 +#define IDC_NUMUNITSSYS_COMBO 513 +#define IDC_NUMREGDIG_COMBO 514 +#define IDC_NUMDIGREPL_COMBO 515 + +/* Monetary options setup page */ + +#define IDD_CURRENCYOPTSSETUP 600 +#define IDC_CURRENCY_EDIT 601 +#define IDC_NEGCURRENCY_EDIT 602 +#define IDC_CURRENCYUNIT_COMBO 603 +#define IDC_POSCURRENCYSUM_COMBO 604 +#define IDC_NEGCURRENCYSUM_COMBO 605 +#define IDC_WHOLEFRACTSEP_COMBO 606 +#define IDC_FRACSYMBSNUM_COMBO 607 +#define IDC_FIELDSEP_COMBO 608 +#define IDC_DIGINFIELDNUM_COMBO 609 + +/* Time options setup page */ + +#define IDD_TIMEOPTSSETUP 700 +#define IDC_TIME_EDIT 701 +#define IDC_UNKNOWN_EDIT 702 +#define IDC_TIMEFMT_COMBO 703 +#define IDC_TIMESEP_COMBO 704 +#define IDC_TIMEAM_COMBO 705 +#define IDC_TIMEPM_COMBO 706 + /* Other page options */ diff --git a/reactos/dll/cpl/intl_new/setupreg.c b/reactos/dll/cpl/intl_new/setupreg.c new file mode 100644 index 00000000000..fe619fd9b14 --- /dev/null +++ b/reactos/dll/cpl/intl_new/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_new/time.c b/reactos/dll/cpl/intl_new/time.c new file mode 100644 index 00000000000..c07505d339d --- /dev/null +++ b/reactos/dll/cpl/intl_new/time.c @@ -0,0 +1,536 @@ +/* + * PROJECT: ReactOS International Control Panel + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/intl/time.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 NO_FLAG 0 +#define MAX_TIME_FMT_SAMPLES 3 +#define MAX_TIME_SEP_SAMPLES 1 +#define MAX_TIME_AM_SAMPLES 2 +#define MAX_TIME_PM_SAMPLES 2 +#define EOLN_SIZE sizeof(WCHAR) +#define STD_TIME_SEP L":" + +/* FUNCTIONS ****************************************************************/ + +/* if char is 'h' or 'H' or 'm' or 's' or 't' or ' ' return TRUE, else FALSE */ +BOOL +isTimeComp(WCHAR walpha) +{ + + if((walpha == L'h') || + (walpha == L'H') || + (walpha == L'm') || + (walpha == L's') || + (walpha == L't') || + (walpha == L' ')) return TRUE; + else return FALSE; +} + +/* Find first time separator in string */ +WCHAR* +FindTimeSep(const WCHAR *wszSourceStr) +{ + int nDateCompCount=0; + int nDateSepCount=0; + + WCHAR* wszFindedSep; + wszFindedSep=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)); + + wcscpy(wszFindedSep,STD_TIME_SEP); + + while(nDateCompCountcode == (UINT)PSN_APPLY) + { + if(!SetTimeFormat(hwndDlg)) break; + if(!SetTimeSep(hwndDlg)) break; + if(!SetTimeAM(hwndDlg)) break; + if(!SetTimePM(hwndDlg)) break; + + InitTimeFormatCB(hwndDlg); + + + /* FIXME: */ + _sleep(15); + UpdateTimeLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT); + } + } + break; + } + return FALSE; +} + + +/* EOF */ -- 2.17.1