[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.3' - sw/source

Eike Rathke erack at redhat.com
Fri Jan 19 13:51:14 UTC 2018


 sw/source/core/table/swtable.cxx |   27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

New commits:
commit f7d3af010bb36f4a1fdf8a936d9d60af14feb38e
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Dec 1 19:46:45 2017 +0100

    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 at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>
    (cherry picked from commit fd2cdd325cd59eb1f967136170503145b1d75936)

diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index f77c8a14d305..f4f32acdef75 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -2251,6 +2251,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(
@@ -2263,6 +2265,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
@@ -2272,7 +2275,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 ))
                                     {
@@ -2305,7 +2307,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;
@@ -2316,7 +2321,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 )
                             {


More information about the Libreoffice-commits mailing list