diff options
Diffstat (limited to 'sc/source/ui/view/output2.cxx')
-rw-r--r-- | sc/source/ui/view/output2.cxx | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx index 2df47d16e195..0b9a1c4084e4 100644 --- a/sc/source/ui/view/output2.cxx +++ b/sc/source/ui/view/output2.cxx @@ -75,8 +75,6 @@ #include "scmod.hxx" #include "fillinfo.hxx" -#include <boost/ptr_container/ptr_vector.hpp> - #include <math.h> //! Autofilter-Breite mit column.cxx zusammenfassen @@ -154,6 +152,8 @@ public: const Size& GetTextSize() const { return aTextSize; } long GetOriginalWidth() const { return nOriginalWidth; } + sal_uLong GetResultValueFormat( const ScBaseCell* pCell ) const; + sal_uLong GetValueFormat() const { return nValueFormat; } sal_Bool GetLineBreak() const { return bLineBreak; } sal_Bool IsRepeat() const { return bRepeat; } @@ -542,7 +542,7 @@ void ScDrawStringsVars::SetTextToWidthOrHash( ScBaseCell* pCell, long nWidth ) return; } - sal_uLong nFormat = GetValueFormat(); + sal_uLong nFormat = GetResultValueFormat(pCell); if ((nFormat % SV_COUNTRY_LANGUAGE_OFFSET) != 0) { // Not 'General' number format. Set hash text and bail out. @@ -719,6 +719,17 @@ sal_Bool ScDrawStringsVars::HasEditCharacters() const return aString.SearchChar( pChars ) != STRING_NOTFOUND; } +sal_uLong ScDrawStringsVars::GetResultValueFormat( const ScBaseCell* pCell ) const +{ + // Get the effective number format, including formula result types. + // This assumes that a formula cell has already been calculated. + + if ( (nValueFormat % SV_COUNTRY_LANGUAGE_OFFSET) == 0 && pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) + return static_cast<const ScFormulaCell*>(pCell)->GetStandardFormat(*pOutput->pDoc->GetFormatTable(), nValueFormat); + else + return nValueFormat; +} + //================================================================== double ScOutputData::GetStretch() @@ -1361,10 +1372,6 @@ void ScOutputData::DrawStrings( sal_Bool bPixelToLogic ) const SfxItemSet* pOldCondSet = NULL; sal_uInt8 nOldScript = 0; - // alternative pattern instances in case we need to modify the pattern - // before processing the cell value. - ::boost::ptr_vector<ScPatternAttr> aAltPatterns; - long nPosY = nScrY; for (SCSIZE nArrY=1; nArrY+1<nArrCount; nArrY++) { @@ -1501,18 +1508,6 @@ void ScOutputData::DrawStrings( sal_Bool bPixelToLogic ) pCondSet = pDoc->GetCondResult( nCellX, nCellY, nTab ); } - if (pCell->HasValueData() && - static_cast<const SfxBoolItem&>( - pPattern->GetItem(ATTR_LINEBREAK, pCondSet)).GetValue()) - { - // Disable line break when the cell content is numeric. - aAltPatterns.push_back(new ScPatternAttr(*pPattern)); - ScPatternAttr* pAltPattern = &aAltPatterns.back(); - SfxBoolItem aLineBreak(ATTR_LINEBREAK, false); - pAltPattern->GetItemSet().Put(aLineBreak); - pPattern = pAltPattern; - } - sal_uInt8 nScript = GetScriptType( pDoc, pCell, pPattern, pCondSet ); if (nScript == 0) nScript = ScGlobal::GetDefaultScriptType(); if ( pPattern != pOldPattern || pCondSet != pOldCondSet || @@ -1562,6 +1557,11 @@ void ScOutputData::DrawStrings( sal_Bool bPixelToLogic ) eOutHorJust = SVX_HOR_JUSTIFY_LEFT; // repeat is not yet implemented sal_Bool bBreak = ( aVars.GetLineBreak() || aVars.GetHorJust() == SVX_HOR_JUSTIFY_BLOCK ); + + // #i111387# #o11817313# disable automatic line breaks only for "General" number format + if ( bBreak && bCellIsValue && ( aVars.GetResultValueFormat(pCell) % SV_COUNTRY_LANGUAGE_OFFSET ) == 0 ) + bBreak = sal_False; + sal_Bool bRepeat = aVars.IsRepeat() && !bBreak; sal_Bool bShrink = aVars.IsShrink() && !bBreak && !bRepeat; |