* 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"
-#define POSITIVE_EXAMPLE _T("123456789.00")
-#define NEGATIVE_EXAMPLE _T("-123456789.00")
-#define MAX_FIELD_DIG_SAMPLES 3
+#define POSITIVE_EXAMPLE L"123456789.00"
+#define NEGATIVE_EXAMPLE L"-123456789.00"
static VOID
UpdateExamples(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szBuffer[MAX_FMT_SIZE];
+ WCHAR szBuffer[MAX_FMT_SIZE];
+ CURRENCYFMTW CurrencyFormat;
+
+ CurrencyFormat.NumDigits = pGlobalData->nCurrDigits;
+ CurrencyFormat.LeadingZero = pGlobalData->nNumLeadingZero;
+ CurrencyFormat.Grouping = GroupingFormats[pGlobalData->nCurrGrouping].nInteger;
+ CurrencyFormat.lpDecimalSep = pGlobalData->szCurrDecimalSep;
+ CurrencyFormat.lpThousandSep = pGlobalData->szCurrThousandSep;
+ CurrencyFormat.NegativeOrder = pGlobalData->nCurrNegFormat;
+ CurrencyFormat.PositiveOrder = pGlobalData->nCurrPosFormat;
+ CurrencyFormat.lpCurrencySymbol = pGlobalData->szCurrSymbol;
/* Positive example */
- GetCurrencyFormat(pGlobalData->lcid, 0,
- POSITIVE_EXAMPLE,
- NULL, szBuffer, MAX_FMT_SIZE);
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
+ POSITIVE_EXAMPLE,
+ &CurrencyFormat, szBuffer, MAX_FMT_SIZE);
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSSAMPLE), WM_SETTEXT, 0, (LPARAM)szBuffer);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYPOSSAMPLE, WM_SETTEXT, 0, (LPARAM)szBuffer);
/* Negative example */
- GetCurrencyFormat(pGlobalData->lcid, 0,
- NEGATIVE_EXAMPLE,
- NULL, szBuffer, MAX_FMT_SIZE);
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
+ NEGATIVE_EXAMPLE,
+ &CurrencyFormat, szBuffer, MAX_FMT_SIZE);
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGSAMPLE), WM_SETTEXT, 0, (LPARAM)szBuffer);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYNEGSAMPLE, WM_SETTEXT, 0, (LPARAM)szBuffer);
}
static VOID
InitCurrencySymbols(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szBuffer[MAX_FMT_SIZE];
-
/* Limit text length */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL),
- CB_LIMITTEXT,
- MAX_CURRENCYSYMBOL,
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
+ CB_LIMITTEXT,
+ MAX_CURRSYMBOL - 1,
+ 0);
/* Set currency symbols */
- GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SCURRENCY,
- szBuffer, MAX_FMT_SIZE);
-
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL),
- CB_ADDSTRING,
- 0,
- (LPARAM)szBuffer);
-
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL),
- CB_SETCURSEL,
- 0, /* Index */
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)pGlobalData->szCurrSymbol);
+
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYSYMBOL,
+ CB_SETCURSEL,
+ 0, /* Index */
+ 0);
}
static VOID
InitCurrencyPositiveFormats(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szDecimalSep[MAX_FMT_SIZE];
- TCHAR szThousandSep[MAX_FMT_SIZE];
- TCHAR szCurrencySymbol[MAX_FMT_SIZE];
- TCHAR szBuffer[MAX_FMT_SIZE];
- CURRENCYFMT cyFmt;
- INT nPositiveOrder = 0;
- INT ret;
+ WCHAR szBuffer[MAX_FMT_SIZE];
+ CURRENCYFMTW cyFmt;
INT i;
-
- /* Get positive format */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_ICURRENCY,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- nPositiveOrder = _ttoi(szBuffer);
- }
-
- /* Get number of fractional digits */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_ICURRDIGITS,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- cyFmt.NumDigits = _ttoi(szBuffer);
- }
- else
- {
- cyFmt.NumDigits = 0;
- }
-
- /* Get decimal separator */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONDECIMALSEP,
- szDecimalSep, MAX_FMT_SIZE);
-
- /* Get group separator */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szThousandSep, MAX_FMT_SIZE);
-
- /* Get currency symbol */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SCURRENCY,
- szCurrencySymbol, MAX_FMT_SIZE);
-
/* positive currency values */
+ cyFmt.NumDigits = pGlobalData->nCurrDigits;
cyFmt.LeadingZero = 0;
cyFmt.Grouping = 3;
- cyFmt.lpDecimalSep = szDecimalSep;
- cyFmt.lpThousandSep = szThousandSep;
- cyFmt.lpCurrencySymbol = szCurrencySymbol;
+ cyFmt.lpDecimalSep = pGlobalData->szCurrDecimalSep;
+ cyFmt.lpThousandSep = pGlobalData->szCurrThousandSep;
+ cyFmt.lpCurrencySymbol = pGlobalData->szCurrSymbol;
cyFmt.NegativeOrder = 0;
for (i = 0; i < 4; i++)
{
cyFmt.PositiveOrder = i;
- GetCurrencyFormat(pGlobalData->lcid, 0,
- _T("1.1"),
- &cyFmt, szBuffer, MAX_FMT_SIZE);
-
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE),
- CB_INSERTSTRING,
- -1,
- (LPARAM)szBuffer);
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
+ L"1.1",
+ &cyFmt, szBuffer, MAX_FMT_SIZE);
+
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYPOSVALUE,
+ CB_INSERTSTRING,
+ -1,
+ (LPARAM)szBuffer);
}
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE),
- CB_SETCURSEL,
- nPositiveOrder,
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYPOSVALUE,
+ CB_SETCURSEL,
+ pGlobalData->nCurrPosFormat,
+ 0);
}
static VOID
InitCurrencyNegativeFormats(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szDecimalSep[MAX_FMT_SIZE];
- TCHAR szThousandSep[MAX_FMT_SIZE];
- TCHAR szCurrencySymbol[MAX_FMT_SIZE];
- TCHAR szBuffer[MAX_FMT_SIZE];
- CURRENCYFMT cyFmt;
- INT nNegativeOrder = 0;
- INT ret;
+ WCHAR szBuffer[MAX_FMT_SIZE];
+ CURRENCYFMTW cyFmt;
int i;
- /* Get negative format */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_INEGCURR,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- nNegativeOrder = _ttoi(szBuffer);
- }
-
- /* Get number of fractional digits */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_ICURRDIGITS,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- cyFmt.NumDigits = _ttoi(szBuffer);
- }
- else
- {
- cyFmt.NumDigits = 0;
- }
-
- /* Get decimal separator */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONDECIMALSEP,
- szDecimalSep, MAX_FMT_SIZE);
-
- /* Get group separator */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szThousandSep, MAX_FMT_SIZE);
-
- /* Get currency symbol */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SCURRENCY,
- szCurrencySymbol, MAX_FMT_SIZE);
-
/* negative currency values */
+ cyFmt.NumDigits = pGlobalData->nCurrDigits;
cyFmt.LeadingZero = 0;
cyFmt.Grouping = 3;
- cyFmt.lpDecimalSep = szDecimalSep;
- cyFmt.lpThousandSep = szThousandSep;
- cyFmt.lpCurrencySymbol = szCurrencySymbol;
+ cyFmt.lpDecimalSep = pGlobalData->szCurrDecimalSep;
+ cyFmt.lpThousandSep = pGlobalData->szCurrThousandSep;
+ cyFmt.lpCurrencySymbol = pGlobalData->szCurrSymbol;
cyFmt.PositiveOrder = 0;
for (i = 0; i < 16; i++)
{
cyFmt.NegativeOrder = i;
- GetCurrencyFormat(pGlobalData->lcid, 0,
- _T("-1.1"),
- &cyFmt, szBuffer, MAX_FMT_SIZE);
-
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE),
- CB_INSERTSTRING,
- -1,
- (LPARAM)szBuffer);
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
+ L"-1.1",
+ &cyFmt, szBuffer, MAX_FMT_SIZE);
+
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYNEGVALUE,
+ CB_INSERTSTRING,
+ -1,
+ (LPARAM)szBuffer);
}
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE),
- CB_SETCURSEL,
- nNegativeOrder,
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYNEGVALUE,
+ CB_SETCURSEL,
+ pGlobalData->nCurrNegFormat,
+ 0);
}
static VOID
InitCurrencyDecimalSeparators(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szBuffer[MAX_FMT_SIZE];
-
/* Limit text length */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP),
- CB_LIMITTEXT,
- MAX_CURRENCYDECSEP,
- 0);
-
- /* Get decimal separator */
- GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONDECIMALSEP,
- szBuffer, MAX_FMT_SIZE);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
+ CB_LIMITTEXT,
+ MAX_CURRDECIMALSEP - 1,
+ 0);
/* Decimal separator */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP),
- CB_ADDSTRING,
- 0,
- (LPARAM)szBuffer);
-
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP),
- CB_SETCURSEL,
- 0, /* Index */
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)pGlobalData->szCurrDecimalSep);
+
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECSEP,
+ CB_SETCURSEL,
+ 0, /* Index */
+ 0);
}
static VOID
InitCurrencyNumFracDigits(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szBuffer[MAX_FMT_SIZE];
- int ret;
+ WCHAR szBuffer[MAX_FMT_SIZE];
int i;
/* Create standard list of fractional symbols */
for (i = 0; i < 10; i++)
{
- szBuffer[0] = _T('0') + i;
+ szBuffer[0] = L'0' + i;
szBuffer[1] = 0;
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM),
- CB_ADDSTRING,
- 0,
- (LPARAM)szBuffer);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECNUM,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)szBuffer);
}
- /* Get number of fractional digits */
- ret = GetLocaleInfo(pGlobalData->lcid,
- LOCALE_ICURRDIGITS,
- szBuffer, MAX_FMT_SIZE);
- if (ret != 0)
- {
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM),
- CB_SETCURSEL,
- _ttoi(szBuffer),
- 0);
- }
- else
- {
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM),
- CB_SETCURSEL,
- 0,
- 0);
- }
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYDECNUM,
+ CB_SETCURSEL,
+ pGlobalData->nCurrDigits,
+ 0);
}
static VOID
InitCurrencyGroupSeparators(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szBuffer[MAX_FMT_SIZE];
-
/* Limit text length */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP),
- CB_LIMITTEXT,
- MAX_CURRENCYGRPSEP,
- 0);
-
- /* Get group separator */
- GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szBuffer, MAX_FMT_SIZE);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
+ CB_LIMITTEXT,
+ MAX_CURRTHOUSANDSEP - 1,
+ 0);
/* Digit group separator */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP),
- CB_ADDSTRING,
- 0,
- (LPARAM)szBuffer);
-
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP),
- CB_SETCURSEL,
- 0, /* Index */
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
+ CB_ADDSTRING,
+ 0,
+ (LPARAM)pGlobalData->szCurrThousandSep);
+
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPSEP,
+ CB_SETCURSEL,
+ 0, /* Index */
+ 0);
}
static VOID
InitDigitGroupCB(HWND hwndDlg, PGLOBALDATA pGlobalData)
{
- TCHAR szThousandSep[MAX_FMT_SIZE];
- TCHAR szGrouping[MAX_FMT_SIZE];
- TCHAR szBuffer[MAX_FMT_SIZE];
- CURRENCYFMT cyFmt;
+ WCHAR szBuffer[MAX_FMT_SIZE];
+ CURRENCYFMTW cyFmt;
INT i;
- /* Get group separator */
- GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONTHOUSANDSEP,
- szThousandSep, MAX_FMT_SIZE);
-
- /* Get grouping */
- GetLocaleInfo(pGlobalData->lcid,
- LOCALE_SMONGROUPING,
- szGrouping, MAX_FMT_SIZE);
-
/* Digit grouping */
cyFmt.NumDigits = 0;
cyFmt.LeadingZero = 0;
- cyFmt.lpDecimalSep = _T("");
- cyFmt.lpThousandSep = szThousandSep;
+ cyFmt.lpDecimalSep = L"";
+ cyFmt.lpThousandSep = pGlobalData->szCurrThousandSep;
cyFmt.PositiveOrder = 0;
cyFmt.NegativeOrder = 0;
- cyFmt.lpCurrencySymbol = _T("");
- cyFmt.Grouping = 0;
- GetCurrencyFormat(pGlobalData->lcid, 0,
- _T("123456789"),
- &cyFmt, szBuffer, MAX_FMT_SIZE);
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM),
- CB_INSERTSTRING,
- -1,
- (LPARAM)szBuffer);
+ cyFmt.lpCurrencySymbol = L"";
- cyFmt.Grouping = 3;
- GetCurrencyFormat(pGlobalData->lcid, 0,
- _T("123456789"),
- &cyFmt, szBuffer, MAX_FMT_SIZE);
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM),
- CB_INSERTSTRING,
- -1,
- (LPARAM)szBuffer);
-
- cyFmt.Grouping = 32;
- GetCurrencyFormat(pGlobalData->lcid, 0,
- _T("123456789"),
- &cyFmt, szBuffer, MAX_FMT_SIZE);
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM),
- CB_INSERTSTRING,
- -1,
- (LPARAM)szBuffer);
-
- i = 0;
- if (szGrouping[0] == _T('3'))
+ for (i = 0 ; i < MAX_GROUPINGFORMATS ; i++)
{
- if ((szGrouping[1] == _T(';')) &&
- (szGrouping[2] == _T('2')))
- i = 2;
- else
- i = 1;
+ cyFmt.Grouping = GroupingFormats[i].nInteger;
+
+ GetCurrencyFormatW(pGlobalData->UserLCID, 0,
+ L"123456789",
+ &cyFmt, szBuffer, MAX_FMT_SIZE);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
+ CB_INSERTSTRING,
+ -1,
+ (LPARAM)szBuffer);
}
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM),
- CB_SETCURSEL,
- i, /* Index */
- 0);
+ SendDlgItemMessageW(hwndDlg, IDC_CURRENCYGRPNUM,
+ CB_SETCURSEL,
+ pGlobalData->nCurrGrouping,
+ 0);
}
-/* Set number of digits in field */
-static BOOL
-SetCurrencyDigNum(HWND hwndDlg, LCID lcid)
+static
+BOOL
+GetCurrencySetting(
+ HWND hwndDlg,
+ PGLOBALDATA pGlobalData)
{
- LPTSTR szFieldDigNumSamples[MAX_FIELD_DIG_SAMPLES]=
+ WCHAR szCurrSymbol[MAX_CURRSYMBOL];
+ WCHAR szCurrDecimalSep[MAX_CURRDECIMALSEP];
+ WCHAR szCurrThousandSep[MAX_CURRTHOUSANDSEP];
+ INT nCurrPosFormat;
+ INT nCurrNegFormat;
+ INT nCurrDigits;
+ INT nCurrGrouping;
+
+ /* Currency symbol */
+ GetSelectedComboBoxText(hwndDlg,
+ IDC_CURRENCYSYMBOL,
+ szCurrSymbol,
+ MAX_CURRSYMBOL);
+
+ if (szCurrSymbol[0] == L'\0')
{
- _T("0;0"),
- _T("3;0"),
- _T("3;2;0")
- };
-
- int nCurrSel;
-
- /* Get setted number of digits in field */
- nCurrSel = SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM),
- CB_GETCURSEL,
- (WPARAM)0,
- (LPARAM)0);
-
- /* Save number of digits in field */
- if (nCurrSel != CB_ERR)
- SetLocaleInfo(lcid, LOCALE_SMONGROUPING, szFieldDigNumSamples[nCurrSel]);
-
- return TRUE;
-}
+ /* TODO: Show error message */
-/* Set currency field separator */
-static BOOL
-SetCurrencyFieldSep(HWND hwndDlg, LCID lcid)
-{
- TCHAR szCurrencyFieldSep[MAX_SAMPLES_STR_SIZE];
-
- /* Get setted currency field separator */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPSEP),
- WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szCurrencyFieldSep);
-
- /* Save currency field separator */
- SetLocaleInfo(lcid, LOCALE_SMONTHOUSANDSEP, szCurrencyFieldSep);
-
- return TRUE;
-}
-
-/* Set number of fractional symbols */
-static BOOL
-SetCurrencyFracSymNum(HWND hwndDlg, LCID lcid)
-{
- TCHAR szCurrencyFracSymNum[MAX_SAMPLES_STR_SIZE];
- INT nCurrSel;
-
- /* Get setted number of fractional symbols */
- nCurrSel = SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECNUM),
- CB_GETCURSEL,
- (WPARAM)0,
- (LPARAM)0);
-
- /* Convert to wide char */
- _itot(nCurrSel, szCurrencyFracSymNum, DECIMAL_RADIX);
-
- /* Save number of fractional symbols */
- SetLocaleInfo(lcid, LOCALE_ICURRDIGITS, szCurrencyFracSymNum);
-
- return TRUE;
-}
-
-/* Set currency separator */
-static BOOL
-SetCurrencySep(HWND hwndDlg, LCID lcid)
-{
- TCHAR szCurrencySep[MAX_SAMPLES_STR_SIZE];
-
- /* Get setted currency decimal separator */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYDECSEP),
- WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)szCurrencySep);
-
- /* TODO: Add check for correctly input */
-
- /* Save currency separator */
- SetLocaleInfo(lcid, LOCALE_SMONDECIMALSEP, szCurrencySep);
-
- return TRUE;
-}
-
-/* Set negative currency sum format */
-static BOOL
-SetNegCurrencySumFmt(HWND hwndDlg, LCID lcid)
-{
- TCHAR szNegCurrencySumFmt[MAX_SAMPLES_STR_SIZE];
- INT nCurrSel;
-
- /* Get setted currency unit */
- nCurrSel = SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGVALUE),
- CB_GETCURSEL,
- (WPARAM)0,
- (LPARAM)0);
-
- /* Convert to wide char */
- _itot(nCurrSel, szNegCurrencySumFmt, DECIMAL_RADIX);
+ return FALSE;
+ }
- /* Save currency sum format */
- SetLocaleInfo(lcid, LOCALE_INEGCURR, szNegCurrencySumFmt);
+ /* Positive Amount */
+ GetSelectedComboBoxIndex(hwndDlg,
+ IDC_CURRENCYPOSVALUE,
+ &nCurrPosFormat);
- return TRUE;
-}
+ /* Negative Amount */
+ GetSelectedComboBoxIndex(hwndDlg,
+ IDC_CURRENCYNEGVALUE,
+ &nCurrNegFormat);
-/* Set positive currency sum format */
-static BOOL
-SetPosCurrencySumFmt(HWND hwndDlg, LCID lcid)
-{
- TCHAR szPosCurrencySumFmt[MAX_SAMPLES_STR_SIZE];
- INT nCurrSel;
+ /* Decimal separator */
+ GetSelectedComboBoxText(hwndDlg,
+ IDC_CURRENCYDECSEP,
+ szCurrDecimalSep,
+ MAX_CURRDECIMALSEP);
- /* Get setted currency unit */
- nCurrSel = SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE),
- CB_GETCURSEL,
- (WPARAM)0,
- (LPARAM)0);
+ if (szCurrDecimalSep[0] == L'\0')
+ {
+ /* TODO: Show error message */
- /* Convert to wide char */
- _itot(nCurrSel, szPosCurrencySumFmt, DECIMAL_RADIX);
+ return FALSE;
+ }
- /* Save currency sum format */
- SetLocaleInfo(lcid, LOCALE_ICURRENCY, szPosCurrencySumFmt);
+ /* Number of fractional digits */
+ GetSelectedComboBoxIndex(hwndDlg,
+ IDC_CURRENCYDECNUM,
+ &nCurrDigits);
- return TRUE;
-}
+ /* Grouping symbol */
+ GetSelectedComboBoxText(hwndDlg,
+ IDC_CURRENCYGRPSEP,
+ szCurrThousandSep,
+ MAX_CURRTHOUSANDSEP);
-/* Set currency unit */
-static BOOL
-SetCurrencyUnit(HWND hwndDlg, LCID lcid)
-{
- TCHAR szCurrencyUnit[MAX_SAMPLES_STR_SIZE];
+ if (szCurrThousandSep[0] == L'\0')
+ {
+ /* TODO: Show error message */
- /* Get setted currency unit */
- SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYSYMBOL),
- WM_GETTEXT,
- (WPARAM)MAX_SAMPLES_STR_SIZE,
- (LPARAM)(LPCSTR)szCurrencyUnit);
+ return FALSE;
+ }
- /* Save currency unit */
- SetLocaleInfo(lcid, LOCALE_SCURRENCY, szCurrencyUnit);
+ /* Digit grouping */
+ GetSelectedComboBoxIndex(hwndDlg,
+ IDC_CURRENCYGRPNUM,
+ &nCurrGrouping);
+
+ /* Store settings in global data */
+ wcscpy(pGlobalData->szCurrSymbol, szCurrSymbol);
+ pGlobalData->nCurrGrouping = nCurrGrouping;
+ wcscpy(pGlobalData->szCurrDecimalSep, szCurrDecimalSep);
+ wcscpy(pGlobalData->szCurrThousandSep, szCurrThousandSep);
+ pGlobalData->nCurrPosFormat = nCurrPosFormat;
+ pGlobalData->nCurrNegFormat = nCurrNegFormat;
+ pGlobalData->nCurrDigits = nCurrDigits;
return TRUE;
}
case IDC_CURRENCYDECNUM:
case IDC_CURRENCYGRPSEP:
case IDC_CURRENCYGRPNUM:
- if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE)
+ if (HIWORD(wParam) == CBN_SELCHANGE ||
+ HIWORD(wParam) == CBN_EDITCHANGE)
{
- /* Set "Apply" button enabled */
+ /* Enable the Apply button */
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
}
break;
case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
{
- LPNMHDR lpnm = (LPNMHDR)lParam;
- /* If push apply button */
- if (lpnm->code == (UINT)PSN_APPLY)
+ if (GetCurrencySetting(hwndDlg, pGlobalData))
{
- if (!SetCurrencyDigNum(hwndDlg, pGlobalData->lcid))
- break;
-
- if (!SetCurrencyUnit(hwndDlg, pGlobalData->lcid))
- break;
-
- if (!SetPosCurrencySumFmt(hwndDlg, pGlobalData->lcid))
- break;
-
- if (!SetNegCurrencySumFmt(hwndDlg, pGlobalData->lcid))
- break;
-
- if (!SetCurrencySep(hwndDlg, pGlobalData->lcid))
- break;
-
- if (!SetCurrencyFracSymNum(hwndDlg, pGlobalData->lcid))
- break;
-
- if (!SetCurrencyFieldSep(hwndDlg, pGlobalData->lcid))
- break;
-
+ pGlobalData->bUserLocaleChanged = TRUE;
UpdateExamples(hwndDlg, pGlobalData);
}
}