kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #09716
Re: Locale fix in KiCAD is not working (breaks my build)
JP, it's a problem to pull a dependency on wxwidgets 2.9.x? and use the CDouble methods from
wxString? ,
It seems to work here, and LOCALE_IO seems dangerous regarding threading.
This is the FromCDouble implementation, they used a Replace, as my original solution :-)
wxString wxString::FromCDouble(double val, int precision)
{
wxCHECK_MSG( precision >= -1, wxString(), "Invalid negative precision" );
#if wxUSE_STD_IOSTREAM && wxUSE_STD_STRING
// We assume that we can use the ostream and not wstream for numbers.
wxSTD ostringstream os;
if ( precision != -1 )
{
os.precision(precision);
os.setf(std::ios::fixed, std::ios::floatfield);
}
os << val;
return os.str();
#else // !wxUSE_STD_IOSTREAM
// Can't use iostream locale support, fall back to the manual method
// instead.
wxString s = FromDouble(val, precision);
#if wxUSE_INTL
wxString sep = wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT,
wxLOCALE_CAT_NUMBER);
#else // !wxUSE_INTL
// As above, this is the most common alternative value. Notice that here it
// doesn't matter if we guess wrongly and the current separator is already
// ".": we'll just waste a call to Replace() in this case.
wxString sep(",");
#endif // wxUSE_INTL/!wxUSE_INTL
s.Replace(sep, ".");
return s;
#endif // wxUSE_STD_IOSTREAM/!wxUSE_STD_IOSTREAM
}
Miguel Angel Ajo
http://www.nbee.es
+34911407752
skype: ajoajoajo
On 15/03/2013, at 12:57, Miguel Angel Ajo Pelayo <miguelangel@xxxxxxx> wrote:
> Jean Pierre,
> It sounds like what I need, without adding dependencies on 2.9 or 3.0 (as Edwin was pointing me privately).
>
> Anyway, that cannot be a problem with threading? or it just sets locale "locally" and not App wide?
>
> Thanks a lot for the help,
>
> Miguel Angel Ajo
> http://www.nbee.es
> +34911407752
> skype: ajoajoajo
>
> On 15/03/2013, at 12:49, jp charras <jp.charras@xxxxxxxxxx> wrote:
>
>> We have this kind of issue for all I/O file functions.
>>
>> In KiCad there is a class named LOCALE_IO to fix it
>> thee ctor switches on the "C" fp notation, and the dtor restores the current locale.
>> See for instance the line:
>> LOCALE_IO toggle; // toggles on, then off, the C locale.
>> in pcb_parser.cpp, line 333
>>
>> --
>> Jean-Pierre CHARRAS
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~kicad-developers
>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~kicad-developers
>> More help : https://help.launchpad.net/ListHelp
>
References