don't change locale in XRC GetFloat() method, change the strings to use the current locale decimal point separator instead (patch 1783849)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48620 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -960,20 +960,20 @@ long wxXmlResourceHandler::GetLong(const wxString& param, long defaultv)
|
|||||||
|
|
||||||
float wxXmlResourceHandler::GetFloat(const wxString& param, float defaultv)
|
float wxXmlResourceHandler::GetFloat(const wxString& param, float defaultv)
|
||||||
{
|
{
|
||||||
|
wxString str = GetParamValue(param);
|
||||||
|
|
||||||
|
// strings in XRC always use C locale but wxString::ToDouble() uses the
|
||||||
|
// current one, so transform the string to it supposing that the only
|
||||||
|
// difference between them is the decimal separator
|
||||||
|
//
|
||||||
|
// TODO: use wxString::ToCDouble() when we have it
|
||||||
|
str.Replace(wxT("."), wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT,
|
||||||
|
wxLOCALE_CAT_NUMBER));
|
||||||
|
|
||||||
double value;
|
double value;
|
||||||
wxString str1 = GetParamValue(param);
|
if (!str.ToDouble(&value))
|
||||||
|
|
||||||
#ifndef __WXWINCE__
|
|
||||||
const char *prevlocale = setlocale(LC_NUMERIC, "C");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!str1.ToDouble(&value))
|
|
||||||
value = defaultv;
|
value = defaultv;
|
||||||
|
|
||||||
#ifndef __WXWINCE__
|
|
||||||
setlocale(LC_NUMERIC, prevlocale);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return wx_truncate_cast(float, value);
|
return wx_truncate_cast(float, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user