(svn r16144) -Fix (r16129): setting the custom digit grouping separator required to restart OpenTTD to take effect. Now also support non 1 ASCII character custom grouping separators.

This commit is contained in:
rubidium 2009-04-25 20:16:56 +00:00
parent 4ec6456feb
commit 802d31aab6
5 changed files with 36 additions and 42 deletions

View File

@ -15,35 +15,35 @@
* | | Euro year | | | name
* | | | | | | | */
static const CurrencySpec origin_currency_specs[NUM_CURRENCY] = {
{ 1, '\0', CF_NOEURO, "\xC2\xA3", "", 0, STR_CURR_GBP }, ///< british pounds
{ 2, '\0', CF_NOEURO, "$", "", 0, STR_CURR_USD }, ///< us dollars
{ 2, '\0', CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_CURR_EUR }, ///< Euro
{ 220, '\0', CF_NOEURO, "\xC2\xA5", "", 0, STR_CURR_YEN }, ///< yen
{ 20, '\0', 2002, "", " S.", 1, STR_CURR_ATS }, ///< austrian schilling
{ 59, '\0', 2002, "BEF ", "", 0, STR_CURR_BEF }, ///< belgian franc
{ 2, '\0', CF_NOEURO, "CHF ", "", 0, STR_CURR_CHF }, ///< swiss franc
{ 41, '\0', CF_NOEURO, "", " K\xC4\x8D", 1, STR_CURR_CZK }, ///< czech koruna
{ 3, '\0', 2002, "DM ", "", 0, STR_CURR_DEM }, ///< deutsche mark
{ 11, '\0', CF_NOEURO, "", " kr", 1, STR_CURR_DKK }, ///< danish krone
{ 245, '\0', 2002, "Pts ", "", 0, STR_CURR_ESP }, ///< spanish pesetas
{ 9, '\0', 2002, "", " mk", 1, STR_CURR_FIM }, ///< finnish markka
{ 10, '\0', 2002, "FF ", "", 0, STR_CURR_FRF }, ///< french francs
{ 500, '\0', 2002, "", "Dr.", 1, STR_CURR_GRD }, ///< greek drachma
{ 378, '\0', CF_NOEURO, "", " Ft", 1, STR_CURR_HUF }, ///< hungarian forint
{ 130, '\0', CF_NOEURO, "", " Kr", 1, STR_CURR_ISK }, ///< icelandic krona
{ 2850, '\0', 2002, "", " L.", 1, STR_CURR_ITL }, ///< italian lira
{ 3, '\0', 2002, "NLG ", "", 0, STR_CURR_NLG }, ///< dutch gulden
{ 12, '\0', CF_NOEURO, "", " Kr", 1, STR_CURR_NOK }, ///< norwegian krone
{ 6, '\0', CF_NOEURO, "", " zl", 1, STR_CURR_PLN }, ///< polish zloty
{ 5, '\0', CF_NOEURO, "", " Lei", 1, STR_CURR_RON }, ///< romanian Lei
{ 50, '\0', CF_NOEURO, "", " p", 1, STR_CURR_RUR }, ///< russian rouble
{ 352, '\0', 2007, "", " SIT", 1, STR_CURR_SIT }, ///< slovenian tolar
{ 13, '\0', CF_NOEURO, "", " Kr", 1, STR_CURR_SEK }, ///< swedish krona
{ 3, '\0', CF_NOEURO, "", " TL", 1, STR_CURR_TRY }, ///< turkish lira
{ 52, '\0', 2009, "", " Sk", 1, STR_CURR_SKK }, ///< slovak koruna
{ 4, '\0', CF_NOEURO, "R$ ", "", 0, STR_CURR_BRL }, ///< brazil real
{ 20, '\0', CF_NOEURO, "", " EEK", 1, STR_CURR_EEK }, ///< estonian krooni
{ 1, '\0', CF_NOEURO, "", "", 2, STR_CURR_CUSTOM }, ///< custom currency
{ 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_CURR_GBP }, ///< british pounds
{ 2, "", CF_NOEURO, "$", "", 0, STR_CURR_USD }, ///< us dollars
{ 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_CURR_EUR }, ///< Euro
{ 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_CURR_YEN }, ///< yen
{ 20, "", 2002, "", " S.", 1, STR_CURR_ATS }, ///< austrian schilling
{ 59, "", 2002, "BEF ", "", 0, STR_CURR_BEF }, ///< belgian franc
{ 2, "", CF_NOEURO, "CHF ", "", 0, STR_CURR_CHF }, ///< swiss franc
{ 41, "", CF_NOEURO, "", " K\xC4\x8D", 1, STR_CURR_CZK }, ///< czech koruna
{ 3, "", 2002, "DM ", "", 0, STR_CURR_DEM }, ///< deutsche mark
{ 11, "", CF_NOEURO, "", " kr", 1, STR_CURR_DKK }, ///< danish krone
{ 245, "", 2002, "Pts ", "", 0, STR_CURR_ESP }, ///< spanish pesetas
{ 9, "", 2002, "", " mk", 1, STR_CURR_FIM }, ///< finnish markka
{ 10, "", 2002, "FF ", "", 0, STR_CURR_FRF }, ///< french francs
{ 500, "", 2002, "", "Dr.", 1, STR_CURR_GRD }, ///< greek drachma
{ 378, "", CF_NOEURO, "", " Ft", 1, STR_CURR_HUF }, ///< hungarian forint
{ 130, "", CF_NOEURO, "", " Kr", 1, STR_CURR_ISK }, ///< icelandic krona
{ 2850, "", 2002, "", " L.", 1, STR_CURR_ITL }, ///< italian lira
{ 3, "", 2002, "NLG ", "", 0, STR_CURR_NLG }, ///< dutch gulden
{ 12, "", CF_NOEURO, "", " Kr", 1, STR_CURR_NOK }, ///< norwegian krone
{ 6, "", CF_NOEURO, "", " zl", 1, STR_CURR_PLN }, ///< polish zloty
{ 5, "", CF_NOEURO, "", " Lei", 1, STR_CURR_RON }, ///< romanian Lei
{ 50, "", CF_NOEURO, "", " p", 1, STR_CURR_RUR }, ///< russian rouble
{ 352, "", 2007, "", " SIT", 1, STR_CURR_SIT }, ///< slovenian tolar
{ 13, "", CF_NOEURO, "", " Kr", 1, STR_CURR_SEK }, ///< swedish krona
{ 3, "", CF_NOEURO, "", " TL", 1, STR_CURR_TRY }, ///< turkish lira
{ 52, "", 2009, "", " Sk", 1, STR_CURR_SKK }, ///< slovak koruna
{ 4, "", CF_NOEURO, "R$ ", "", 0, STR_CURR_BRL }, ///< brazil real
{ 20, "", CF_NOEURO, "", " EEK", 1, STR_CURR_EEK }, ///< estonian krooni
{ 1, "", CF_NOEURO, "", "", 2, STR_CURR_CUSTOM }, ///< custom currency
};
/* Array of currencies used by the system */

View File

@ -17,7 +17,7 @@ enum {
struct CurrencySpec {
uint16 rate;
char separator;
char separator[8];
Year to_euro;
char prefix[16];
char suffix[16];

View File

@ -1717,7 +1717,8 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, by
uint16 options = grf_load_word(&buf);
if (curidx < NUM_CURRENCY) {
_currency_specs[curidx].separator = GB(options, 0, 8);
_currency_specs[curidx].separator[0] = GB(options, 0, 8);
_currency_specs[curidx].separator[1] = '\0';
/* By specifying only one bit, we prevent errors,
* since newgrf specs said that only 0 and 1 can be set for symbol_pos */
_currency_specs[curidx].symbol_pos = GB(options, 8, 1);

View File

@ -1587,13 +1587,10 @@ enum CustomCurrencyWidgets {
};
struct CustomCurrencyWindow : Window {
char separator[2];
int query_widget;
CustomCurrencyWindow(const WindowDesc *desc) : Window(desc)
{
this->separator[0] = _custom_currency.separator;
this->separator[1] = '\0';
this->FindWindowPlacementAndResize(desc);
SetButtonState();
@ -1611,7 +1608,7 @@ struct CustomCurrencyWindow : Window {
{
SetDParam(0, 1);
SetDParam(1, 1);
SetDParamStr(2, this->separator);
SetDParamStr(2, _custom_currency.separator);
SetDParamStr(3, _custom_currency.prefix);
SetDParamStr(4, _custom_currency.suffix);
SetDParam(5, _custom_currency.to_euro);
@ -1650,7 +1647,7 @@ struct CustomCurrencyWindow : Window {
case CUSTCURR_SEPARATOR_EDIT:
case CUSTCURR_SEPARATOR:
SetDParamStr(0, this->separator);
SetDParamStr(0, _custom_currency.separator);
str = STR_JUST_RAW_STRING;
len = 1;
line = CUSTCURR_SEPARATOR;
@ -1712,8 +1709,7 @@ struct CustomCurrencyWindow : Window {
break;
case CUSTCURR_SEPARATOR: // Thousands seperator
_custom_currency.separator = StrEmpty(str) ? ' ' : str[0];
strecpy(this->separator, str, lastof(this->separator));
strecpy(_custom_currency.separator, str, lastof(_custom_currency.separator));
break;
case CUSTCURR_PREFIX:

View File

@ -336,10 +336,7 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money n
}
const char *separator = _settings_game.locale.digit_group_separator_currency;
if (separator == NULL && _currency->separator != '\0') {
static char sep[] = { _currency->separator, '\0' };
separator = sep;
}
if (separator == NULL && !StrEmpty(_currency->separator)) separator = _currency->separator;
if (separator == NULL) separator = _langpack->digit_group_separator_currency;
buff = FormatNumber(buff, number, last, separator);
buff = strecpy(buff, multiplier, last);