← Back to team overview

kicad-developers team mailing list archive

Re: Locale fix in KiCAD is not working (breaks my build)

 

Sorry, this is wxString to double… grr :)  I meant, "wxString::FromCDouble" :)

Miguel Angel Ajo
http://www.nbee.es
+34911407752
skype: ajoajoajo

On 15/03/2013, at 12:26, Miguel Angel Ajo Pelayo <miguelangel@xxxxxxx> wrote:

> From wxString methods, this one looks like our friend. Edwin, is it available in wx2.8 ? 
> 
> Conversion to numbers
> 
> The string provides functions for conversion to signed and unsigned integer and floating point numbers.
> 
> All functions take a pointer to the variable to put the numeric value in and return true if the entire string could be converted to a number. Notice if there is a valid number in the beginning of the string, it is returned in the output parameter even if the function returns false because there is more text following it.
> 
> bool 	ToDouble (double *val) const
>  	Attempts to convert the string to a floating point number. 
>  
> bool 	ToCDouble (double *val) const                                         <-----------
>  	Variant of ToDouble() always working in "C" locale. 
> 
> Miguel Angel Ajo
> http://www.nbee.es
> +34911407752
> skype: ajoajoajo
> 
> On 15/03/2013, at 12:22, Miguel Angel Ajo Pelayo <miguelangel@xxxxxxx> wrote:
> 
>> sprintf and others will render also using the LC_NUMERIC, or locale set in program, yet looking
>> how to workaround this...
>> 
>> http://www.stroustrup.com/3rd_loc.pdf
>> 
>> Miguel Angel Ajo
>> http://www.nbee.es
>> +34911407752
>> skype: ajoajoajo
>> 
>> On 15/03/2013, at 11:30, Miguel Angel Ajo Pelayo <miguelangel@xxxxxxx> wrote:
>> 
>>> Thanks edwin, I will try to fix it this night with a 2.8 compatible solution,
>>> 
>>> Also thanks a lot for the suggestion,
>>> 
>>> Anyway, I don't like changing the locale back and forth, I know the risk
>>> is minimal, but in a multithreading UI environment It could break anything
>>> running/displaying/printing elsewhere.
>>> 
>>> So, for the moment I will stay with a replace solution, or use a system printf
>>> ignoring the locale settings. I will check for that other option on the change.
>>> 
>>> My solution could break if we go into a locale that sets numbers like 1.000.000,1111
>>> 
>>> 
>>> I'll change that in a few minutes and re-commit.
>>> 
>>> 
>>> 
>>> Miguel Angel Ajo
>>> http://www.nbee.es
>>> +34911407752
>>> skype: ajoajoajo
>>> 
>>> On 15/03/2013, at 11:25, Edwin van den Oetelaar <oetelaar.automatisering@xxxxxxxxx> wrote:
>>> 
>>>> Hello Miguel,
>>>> 
>>>> My WX is 2.8
>>>> 
>>>> Your WX is 2.9 I guess
>>>> http://wiki.wxwidgets.org/Converting_everything_to_and_from_wxString
>>>> 
>>>> I think there should be a cleaner way to handle this kind of thing.
>>>> (comma/dot in floating point)
>>>> Would it be possible to set LC_NUMERIC someway?
>>>> 
>>>> char prvlocale[255];
>>>> strcpy( prvlocale, wxSetlocale(LC_NUMERIC, NULL) );
>>>> const char *oldLocale = wxSetlocale(LC_NUMERIC, "C");
>>>> 
>>>> /* DO STUFF HERE */
>>>> 
>>>> if ( !oldLocale )
>>>> {
>>>> /* the current locale was not changed; no need to */
>>>> /* restore the previous one... */
>>>> } else {
>>>> /* restore the original locale */
>>>> wxSetlocale(LC_NUMERIC, prvlocale);
>>>> }
>>>> 
>>>> /home/oetelaar/kicad_dev/kicad/pcbnew/footprint_wizard.cpp: In member
>>>> function ‘void FOOTPRINT_WIZARD_FRAME::ParametersUpdated(wxGridEvent&)’:
>>>> /home/oetelaar/kicad_dev/kicad/pcbnew/footprint_wizard.cpp:190: error:
>>>> no matching function for call to ‘wxString::Replace(const char [2],
>>>> const char [2])’
>>>> /usr/include/wx-2.8/wx/string.h:1173: note: candidates are: size_t
>>>> wxString::Replace(const wxChar*, const wxChar*, bool)
>>>> make[2]: *** [pcbnew/CMakeFiles/_pcbnew.dir/footprint_wizard.cpp.o] Error 1
>>>> make[1]: *** [pcbnew/CMakeFiles/_pcbnew.dir/all] Error 2
>>> 
>> 
> 


Follow ups

References