Use C locale for numbers in wx(File)Config.
Using the current locale decimal point in config files results in problems when moving the files to another machine or even using a different locale on the same one, so don't do it. Always write the numbers using C locale and try to read them in C locale too first, but also try the current locale if we failed for backwards compatibility and to be tolerant with users who edit their config files by hand. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64450 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
951201d81c
commit
7e22c2bd02
@ -450,6 +450,7 @@ All:
|
|||||||
resources.
|
resources.
|
||||||
- Added wxMessageQueue::Clear().
|
- Added wxMessageQueue::Clear().
|
||||||
- Added wxConfig::Read(float *) overload (Terry Farnham).
|
- Added wxConfig::Read(float *) overload (Terry Farnham).
|
||||||
|
- Always use decimal point (and not the current locale separator) in wxConfig.
|
||||||
|
|
||||||
Unix:
|
Unix:
|
||||||
|
|
||||||
|
@ -689,6 +689,14 @@ public:
|
|||||||
/**
|
/**
|
||||||
Writes the double value to the config file and returns @true on
|
Writes the double value to the config file and returns @true on
|
||||||
success.
|
success.
|
||||||
|
|
||||||
|
Notice that if floating point numbers are saved as strings (as is the
|
||||||
|
case with the configuration files used by wxFileConfig), this function
|
||||||
|
uses the C locale for writing out the number, i.e. it will always use a
|
||||||
|
period as the decimal separator, irrespectively of the current locale.
|
||||||
|
This behaviour is new since wxWidgets 2.9.1 as the current locale was
|
||||||
|
used before, but the change should be transparent because both C and
|
||||||
|
current locales are tried when reading the numbers back.
|
||||||
*/
|
*/
|
||||||
bool Write(const wxString& key, double value);
|
bool Write(const wxString& key, double value);
|
||||||
/**
|
/**
|
||||||
|
@ -233,7 +233,14 @@ bool wxConfigBase::DoReadDouble(const wxString& key, double* val) const
|
|||||||
wxString str;
|
wxString str;
|
||||||
if ( Read(key, &str) )
|
if ( Read(key, &str) )
|
||||||
{
|
{
|
||||||
return str.ToDouble(val);
|
if ( str.ToCDouble(val) )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Previous versions of wxFileConfig wrote the numbers out using the
|
||||||
|
// current locale and not the C one as now, so attempt to parse the
|
||||||
|
// string as a number in the current locale too, for compatibility.
|
||||||
|
if ( str.ToDouble(val) )
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -256,7 +263,10 @@ wxString wxConfigBase::ExpandEnvVars(const wxString& str) const
|
|||||||
|
|
||||||
bool wxConfigBase::DoWriteDouble(const wxString& key, double val)
|
bool wxConfigBase::DoWriteDouble(const wxString& key, double val)
|
||||||
{
|
{
|
||||||
return DoWriteString(key, wxString::Format(wxT("%g"), val));
|
// Notice that we always write out the numbers in C locale and not the
|
||||||
|
// current one. This makes the config files portable between machines using
|
||||||
|
// different locales.
|
||||||
|
return DoWriteString(key, wxString::FromCDouble(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxConfigBase::DoWriteBool(const wxString& key, bool value)
|
bool wxConfigBase::DoWriteBool(const wxString& key, bool value)
|
||||||
|
Loading…
Reference in New Issue
Block a user