sc/source/core/data/validat.cxx | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-)
New commits: commit fdd9f2dbdf7c703cbc8519af932194ebdf95d77c Author: Eike Rathke <er...@redhat.com> Date: Fri Mar 22 23:39:54 2013 +0100 use input line string length for numeric data length, i#93128 3620920babb60177dc2b8e1f61c75cf08cc0f949 checked the raw input data length. Change-Id: Iebb6e9c4a532b73a64f41261ee8bd382adbe701d diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx index dd3ff74..4e1b1f5 100644 --- a/sc/source/core/data/validat.cxx +++ b/sc/source/core/data/validat.cxx @@ -429,26 +429,39 @@ sal_Bool ScValidationData::IsDataValid( const String& rTest, const ScPatternAttr // get the value if any sal_uInt32 nFormat = rPattern.GetNumberFormat( pFormatter ); - double nVal; sal_Bool bIsVal = pFormatter->IsNumberFormat( rTest, nFormat, nVal ); - ScBaseCell* pCell; - if (bIsVal) - pCell = new ScValueCell( nVal ); - else - pCell = new ScStringCell( rTest ); sal_Bool bRet; if (SC_VALID_TEXTLEN == eDataMode) { - const double nLenVal = static_cast<double>( rTest.Len() ); + double nLenVal; + if (!bIsVal) + nLenVal = static_cast<double>( rTest.Len() ); + else + { + // For numeric values use the resulting input line string to + // determine length, otherwise a once accepted value maybe could + // not be edited again, for example abbreviated dates or leading + // zeros or trailing zeros after decimal separator change length. + String aStr; + pFormatter->GetInputLineString( nVal, nFormat, aStr); + nLenVal = static_cast<double>( aStr.Len() ); + } ScValueCell aTmpCell( nLenVal ); bRet = IsCellValid( &aTmpCell, rPos ); } else + { + ScBaseCell* pCell; + if (bIsVal) + pCell = new ScValueCell( nVal ); + else + pCell = new ScStringCell( rTest ); bRet = IsDataValid( pCell, rPos ); + pCell->Delete(); + } - pCell->Delete(); return bRet; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits