kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #09712
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