summaryrefslogtreecommitdiff
path: root/sc/source/ui/view/output2.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/view/output2.cxx')
-rw-r--r--sc/source/ui/view/output2.cxx38
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;