forms/source/xforms/convert.cxx | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
New commits: commit 5e1a11b674a26c4e2ff765738bd6c415e15786f5 Author: Julien Nabet <serval2...@yahoo.fr> AuthorDate: Mon Apr 10 09:51:07 2023 +0200 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Thu Apr 13 10:42:18 2023 +0200 tdf#154658: XML Form Document: Fields doesnt calculate any more Regression from 73334560b2dd2d60ac58d2cc2b1a5295490b03e1 author Julien Nabet <serval2...@yahoo.fr> 2021-11-07 15:40:37 +0100 committer Julien Nabet <serval2...@yahoo.fr> 2021-11-07 21:58:53 +0100 commit 73334560b2dd2d60ac58d2cc2b1a5295490b03e1 (patch) tree b5bc4f69dd8ed455c78ea05ab1c5e2f3c25b909e parent 6be03ac71e0d4927612b4a57ead3d0b245c29c77 (diff) Replace some macros in forms part 16 A big thank you to Raal for having spotted this! Change-Id: Ib6f1878897b16b43df287702f82835824c1f766d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150174 Reviewed-by: Julien Nabet <serval2...@yahoo.fr> Tested-by: Jenkins (cherry picked from commit d02b05ba872bf877a62e62ebb48835d618eb1b28) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150151 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/forms/source/xforms/convert.cxx b/forms/source/xforms/convert.cxx index d3fbb0718db6..28d30885fc7d 100644 --- a/forms/source/xforms/convert.cxx +++ b/forms/source/xforms/convert.cxx @@ -21,6 +21,7 @@ #include "convert.hxx" #include <sstream> +#include <rtl/math.hxx> #include <rtl/ustrbuf.hxx> #include <osl/diagnose.h> #include <tools/date.hxx> @@ -50,6 +51,36 @@ namespace Any lcl_toAny_OUString( const OUString& rStr ) { return Any(rStr); } + OUString lcl_toXSD_bool( const Any& rAny ) + { bool b = false; rAny >>= b; return b ? OUString("true") : OUString("false"); } + + Any lcl_toAny_bool( const OUString& rStr ) + { + bool b = ( rStr == "true" || rStr == "1" ); + return Any( b ); + } + + OUString lcl_toXSD_double( const Any& rAny ) + { + double f = 0.0; + rAny >>= f; + + return std::isfinite( f ) + ? rtl::math::doubleToUString( f, rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', + true ) + : OUString(); + } + + + Any lcl_toAny_double( const OUString& rString ) + { + rtl_math_ConversionStatus eStatus; + double f = rtl::math::stringToDouble( + rString, '.', ',', &eStatus ); + return ( eStatus == rtl_math_ConversionStatus_Ok ) ? Any( f ) : Any(); + } + void lcl_appendInt32ToBuffer( const sal_Int32 _nValue, OUStringBuffer& _rBuffer, sal_Int16 _nMinDigits ) { if ( ( _nMinDigits >= 4 ) && ( _nValue < 1000 ) ) @@ -231,6 +262,8 @@ namespace void Convert::init() { maMap[ cppu::UnoType<OUString>::get() ] = Convert_t(&lcl_toXSD_OUString, &lcl_toAny_OUString); + maMap[ cppu::UnoType<bool>::get() ] = Convert_t(&lcl_toXSD_bool, &lcl_toAny_bool); + maMap[ cppu::UnoType<double>::get() ] = Convert_t(&lcl_toXSD_double, &lcl_toAny_double); maMap[ cppu::UnoType<css::util::Date>::get() ] = Convert_t( &lcl_toXSD_UNODate, &lcl_toAny_UNODate ); maMap[ cppu::UnoType<css::util::Time>::get() ] = Convert_t( &lcl_toXSD_UNOTime, &lcl_toAny_UNOTime ); maMap[ cppu::UnoType<css::util::DateTime>::get() ] = Convert_t( &lcl_toXSD_UNODateTime, &lcl_toAny_UNODateTime );