sw/source/core/docnode/ndtbl.cxx | 57 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 28 deletions(-)
New commits: commit f8be3d02573c4d6d753b5e0c1a449e932f94bd81 Author: Jan Holesovsky <ke...@suse.cz> Date: Wed Apr 3 11:49:38 2013 +0200 fdo#32082: Do not reset number format in table cells on edit. When we changed the default to _not_ to recognize the number formats in table cells (commit 334c34e4ec803c65e43abf20edbc6faf7fa95e76), it caused that any edit of a number formatted cell had reset it to text on edit. This was quite unexpected, because when eg. there was a number that contributed to a sum, and it changed to text, the sum changed as if there was a '0' there. To solve this, try hard to retain the number format regardless of the 'Recognize Number Formats' setting when there was a number formatting assigned to the cell. Change-Id: Ib43e0877420d90cdac7a0357d1ef3a549c866fb7 diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 4fd72a8..398dd6a 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -4028,31 +4028,35 @@ void SwDoc::ChkBoxNumFmt( SwTableBox& rBox, sal_Bool bCallUpdate ) SwTableBoxFmt* pBoxFmt = (SwTableBoxFmt*)rBox.GetFrmFmt(); SfxItemSet aBoxSet( GetAttrPool(), RES_BOXATR_FORMAT, RES_BOXATR_VALUE ); - sal_Bool bSetNumFmt = IsInsTblFormatNum(); sal_Bool bLockModify = sal_True; + sal_Bool bSetNumFmt = sal_False; + const bool bForceNumberFormat = IsInsTblFormatNum() && IsInsTblChangeNumFormat(); - if( bSetNumFmt && !IsInsTblChangeNumFormat() ) + // if the user forced a number format in this cell previously, + // keep it, unless the user set that she wants the full number + // format recognition + if( pNumFmtItem && !bForceNumberFormat ) { - if( !pNumFmtItem ) - bSetNumFmt = sal_False; + sal_uLong nOldNumFmt = ((SwTblBoxNumFormat*)pNumFmtItem)->GetValue(); + SvNumberFormatter* pNumFmtr = GetNumberFormatter(); + + short nFmtType = pNumFmtr->GetType( nFmtIdx ); + if( nFmtType == pNumFmtr->GetType( nOldNumFmt ) || NUMBERFORMAT_NUMBER == nFmtType ) + { + // Current and specified NumFormat match + // -> keep old Format + nFmtIdx = nOldNumFmt; + bSetNumFmt = sal_True; + } else { - sal_uLong nOldNumFmt = ((SwTblBoxNumFormat*)pNumFmtItem)->GetValue(); - SvNumberFormatter* pNumFmtr = GetNumberFormatter(); - - short nFmtType = pNumFmtr->GetType( nFmtIdx ); - if( nFmtType == pNumFmtr->GetType( nOldNumFmt ) || NUMBERFORMAT_NUMBER == nFmtType ) - // Current and specified NumFormat match - // -> keep old Format - nFmtIdx = nOldNumFmt; - else - // Current and specified NumFormat do not match - // -> insert as Text - bLockModify = bSetNumFmt = sal_False; + // Current and specified NumFormat do not match + // -> insert as Text + bLockModify = bSetNumFmt = sal_False; } } - if( bSetNumFmt ) + if( bSetNumFmt || bForceNumberFormat ) { pBoxFmt = (SwTableBoxFmt*)rBox.ClaimFrmFmt(); commit c44a06a122d916a18bbede0126bb1e4614f244dc Author: Jan Holesovsky <ke...@suse.cz> Date: Wed Apr 3 11:44:28 2013 +0200 Keep semantics, but improve readibility. Change-Id: I32c18cb7b080f4847118a2d7e8d77dcd2bbce308 diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 882ff1b..4fd72a8 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -4028,39 +4028,36 @@ void SwDoc::ChkBoxNumFmt( SwTableBox& rBox, sal_Bool bCallUpdate ) SwTableBoxFmt* pBoxFmt = (SwTableBoxFmt*)rBox.GetFrmFmt(); SfxItemSet aBoxSet( GetAttrPool(), RES_BOXATR_FORMAT, RES_BOXATR_VALUE ); - sal_Bool bSetNumFmt = IsInsTblFormatNum(), bLockModify = sal_True; - if( bSetNumFmt ) + sal_Bool bSetNumFmt = IsInsTblFormatNum(); + sal_Bool bLockModify = sal_True; + + if( bSetNumFmt && !IsInsTblChangeNumFormat() ) { - if( !IsInsTblChangeNumFormat() ) + if( !pNumFmtItem ) + bSetNumFmt = sal_False; + else { - if( !pNumFmtItem ) - bSetNumFmt = sal_False; + sal_uLong nOldNumFmt = ((SwTblBoxNumFormat*)pNumFmtItem)->GetValue(); + SvNumberFormatter* pNumFmtr = GetNumberFormatter(); + + short nFmtType = pNumFmtr->GetType( nFmtIdx ); + if( nFmtType == pNumFmtr->GetType( nOldNumFmt ) || NUMBERFORMAT_NUMBER == nFmtType ) + // Current and specified NumFormat match + // -> keep old Format + nFmtIdx = nOldNumFmt; else - { - sal_uLong nOldNumFmt = ((SwTblBoxNumFormat*)pNumFmtItem)-> - GetValue(); - SvNumberFormatter* pNumFmtr = GetNumberFormatter(); - - short nFmtType = pNumFmtr->GetType( nFmtIdx ); - if( nFmtType == pNumFmtr->GetType( nOldNumFmt ) || - NUMBERFORMAT_NUMBER == nFmtType ) - // Current and specified NumFormat match - // -> keep old Format - nFmtIdx = nOldNumFmt; - else - // Current and specified NumFormat do not match - // -> insert as Text - bLockModify = bSetNumFmt = sal_False; - } + // Current and specified NumFormat do not match + // -> insert as Text + bLockModify = bSetNumFmt = sal_False; } + } - if( bSetNumFmt ) - { - pBoxFmt = (SwTableBoxFmt*)rBox.ClaimFrmFmt(); + if( bSetNumFmt ) + { + pBoxFmt = (SwTableBoxFmt*)rBox.ClaimFrmFmt(); - aBoxSet.Put( SwTblBoxValue( fNumber )); - aBoxSet.Put( SwTblBoxNumFormat( nFmtIdx )); - } + aBoxSet.Put( SwTblBoxValue( fNumber )); + aBoxSet.Put( SwTblBoxNumFormat( nFmtIdx )); } // It's not enough to only reset the Formula. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits