diff options
author | Eike Rathke <erack@redhat.com> | 2017-12-01 19:46:45 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-12-02 19:25:36 +0100 |
commit | fd2cdd325cd59eb1f967136170503145b1d75936 (patch) | |
tree | a972536114511d4d55d3e182f3375f0e6061e88a | |
parent | ac022ecc76337eb58c4a002775463c11bb0e8b86 (diff) |
Resolves: tdf#106322 keep original cell content when assigning number format
... and content can't be parsed as number. Instead of converting 0.
Change-Id: Ief0c0a0284762fc0e801d6cc598720a97d733e31
(cherry picked from commit acf7e4c0a3dc0cca986bf4d4b7a65bafe7e70abc)
Reviewed-on: https://gerrit.libreoffice.org/45695
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
-rw-r--r-- | sw/source/core/table/swtable.cxx | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx index 1312f5dce36a..dc3c749fd802 100644 --- a/sw/source/core/table/swtable.cxx +++ b/sw/source/core/table/swtable.cxx @@ -2268,6 +2268,8 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew if( (!bNewIsTextFormat && nOldFormat != nNewFormat) || pNewFormula ) { + bool bIsNumFormat = false; + OUString aOrigText; bool bChgText = true; double fVal = 0; if( !pNewVal && SfxItemState::SET != GetItemState( @@ -2280,6 +2282,7 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew sal_uInt32 nTmpFormatIdx = nNewFormat; OUString aText( GetDoc()->GetNodes()[ nNdPos ] ->GetTextNode()->GetRedlineText()); + aOrigText = aText; if( aText.isEmpty() ) bChgText = false; else @@ -2289,7 +2292,6 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew // JP 22.04.98: Bug 49659 - // Special casing for percent - bool bIsNumFormat = false; if( css::util::NumberFormat::PERCENT == pNumFormatr->GetType( nNewFormat )) { @@ -2322,7 +2324,10 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew } } else + { fVal = pNewVal->GetValue(); + bIsNumFormat = true; + } // format contents with the new value assigned and write to paragraph Color* pCol = nullptr; @@ -2333,7 +2338,25 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew } else { - pNumFormatr->GetOutputString( fVal, nNewFormat, sNewText, &pCol ); + if (bIsNumFormat) + pNumFormatr->GetOutputString( fVal, nNewFormat, sNewText, &pCol ); + else + { + // Original text could not be parsed as + // number/date/time/..., so keep the text. +#if 0 + // Actually the text should be formatted + // according to the format, which may include + // additional text from the format, for example + // in {0;-0;"BAD: "@}. But other places when + // entering a new value or changing text or + // changing to a different format of type Text + // don't do this (yet?). + pNumFormatr->GetOutputString( aOrigText, nNewFormat, sNewText, &pCol ); +#else + sNewText = aOrigText; +#endif + } if( !bChgText ) { |