diff options
author | Eike Rathke <erack@redhat.com> | 2015-01-29 17:14:51 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-01-29 22:33:53 +0100 |
commit | 1884c0bbd40f0ded41d7a1656cb64fb1f6368c36 (patch) | |
tree | 3a9108a25ac9f761003151e42efa152ebbf30464 | |
parent | 3ba5ac834780fc2565aff99e42dd8c3b2202fba3 (diff) |
parse with locale decimal separator, tdf#88740 related
And use a proper string to double conversion and early bail out
conditions.
Change-Id: I6c89dd850405ad74ebd175800131cdcac19a8c86
-rw-r--r-- | sc/source/ui/sidebar/AlignmentPropertyPanel.cxx | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx b/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx index 80b103e277f3..4d03553a060c 100644 --- a/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx +++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx @@ -113,16 +113,35 @@ void AlignmentPropertyPanel::Initialize() IMPL_LINK( AlignmentPropertyPanel, AngleModifiedHdl, void *, EMPTYARG ) { OUString sTmp = mpMtrAngle->GetText(); + if (sTmp.isEmpty()) + return 0; + sal_Unicode nChar = sTmp[0]; + if( nChar == '-' ) + { + if (sTmp.getLength() < 2) + return 0; + nChar = sTmp[1]; + } + + if( (nChar < '0') || (nChar > '9') ) + return 0; - sal_Unicode nChar = sTmp.isEmpty() ? 0 : sTmp[0]; - if((sTmp.getLength()== 1 && nChar == '-') || - (nChar != '-' && ((nChar < '0') || (nChar > '9') ) )) ////modify + const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() ); + const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0]; + + // Do not check that the entire string was parsed up to its end, there may + // be a degree symbol following the number. Note that this also means that + // the number recognized just stops at any non-matching character. + /* TODO: we could check for the degree symbol stop if there are no other + * cases with different symbol characters in any language? */ + rtl_math_ConversionStatus eStatus; + double fTmp = rtl::math::stringToDouble( sTmp, cSep, 0, &eStatus); + if (eStatus != rtl_math_ConversionStatus_Ok) return 0; - double dTmp = sTmp.toDouble(); - FormatDegrees(dTmp); + FormatDegrees(fTmp); - sal_Int64 nTmp = (sal_Int64)dTmp*100; + sal_Int64 nTmp = (sal_Int64)fTmp*100; SfxInt32Item aAngleItem( SID_ATTR_ALIGN_DEGREES,(sal_uInt32) nTmp); GetBindings()->GetDispatcher()->Execute( |