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

New commits:
commit acf7e4c0a3dc0cca986bf4d4b7a65bafe7e70abc
Author: Eike Rathke <er...@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

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 )
                             {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to