[Libreoffice-commits] core.git: sc/inc sc/source
Dennis Francis
dennis.francis at collabora.co.uk
Tue May 8 15:28:24 UTC 2018
sc/inc/document.hxx | 2 +-
sc/source/core/data/documen4.cxx | 5 +++--
sc/source/core/data/formulacell.cxx | 14 +++++++-------
sc/source/core/tool/interpr4.cxx | 4 ++--
4 files changed, 13 insertions(+), 12 deletions(-)
New commits:
commit e0820c761f37169a0ab02e8b9bf64c328ffdc29e
Author: Dennis Francis <dennis.francis at collabora.co.uk>
Date: Tue May 8 14:57:15 2018 +0530
Let ScDocument::RoundValueAsShown accept optional...
interpreter context for getting format table from it rather than
accessing the format table from the document if possible.
Always use interpreter context to obtain number format via
ScDocument::GetNumberFormat() whenever possible.
Change-Id: Ib812cda25dc2e80bc79c81d26bc7c7b8a5c997e1
Reviewed-on: https://gerrit.libreoffice.org/53970
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index e62c2e47f7c2..77dfca451d2a 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1124,7 +1124,7 @@ public:
SC_DLLPUBLIC void GetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, double& rValue ) const;
SC_DLLPUBLIC const EditTextObject* GetEditText( const ScAddress& rPos ) const;
void RemoveEditTextCharAttribs( const ScAddress& rPos, const ScPatternAttr& rAttr );
- SC_DLLPUBLIC double RoundValueAsShown( double fVal, sal_uInt32 nFormat ) const;
+ SC_DLLPUBLIC double RoundValueAsShown( double fVal, sal_uInt32 nFormat, const ScInterpreterContext* pContext = nullptr ) const;
SC_DLLPUBLIC void GetNumberFormat( SCCOL nCol, SCROW nRow, SCTAB nTab,
sal_uInt32& rFormat ) const;
sal_uInt32 GetNumberFormat( const ScRange& rRange ) const;
diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx
index 0b387179e306..58f7c82aedc1 100644
--- a/sc/source/core/data/documen4.cxx
+++ b/sc/source/core/data/documen4.cxx
@@ -653,9 +653,10 @@ bool ScDocument::GetSelectionFunction( ScSubTotalFunc eFunc,
return !aData.bError;
}
-double ScDocument::RoundValueAsShown( double fVal, sal_uInt32 nFormat ) const
+double ScDocument::RoundValueAsShown( double fVal, sal_uInt32 nFormat, const ScInterpreterContext* pContext ) const
{
- const SvNumberformat* pFormat = GetFormatTable()->GetEntry( nFormat );
+ const SvNumberFormatter* pFormatter = pContext ? pContext->GetFormatTable() : GetFormatTable();
+ const SvNumberformat* pFormat = pFormatter->GetEntry( nFormat );
SvNumFormatType nType;
if (pFormat && (nType = pFormat->GetMaskedType()) != SvNumFormatType::DATE
&& nType != SvNumFormatType::TIME && nType != SvNumFormatType::DATETIME )
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 7d06d2961cde..d0833e1296f0 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -1904,8 +1904,8 @@ void ScFormulaCell::InterpretTail( ScInterpreterContext& rContext, ScInterpretTa
bForceNumberFormat = false;
else
{
- nOldFormatIndex = pDocument->GetNumberFormat( aPos);
- nFormatType = pDocument->GetFormatTable()->GetType( nOldFormatIndex);
+ nOldFormatIndex = pDocument->GetNumberFormat( rContext, aPos);
+ nFormatType = rContext.GetFormatTable()->GetType( nOldFormatIndex);
switch (nFormatType)
{
case SvNumFormatType::PERCENT:
@@ -1930,11 +1930,11 @@ void ScFormulaCell::InterpretTail( ScInterpreterContext& rContext, ScInterpretTa
{
if (nOldFormatIndex == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
- nOldFormatIndex = pDocument->GetNumberFormat( aPos);
- nFormatType = pDocument->GetFormatTable()->GetType( nOldFormatIndex);
+ nOldFormatIndex = pDocument->GetNumberFormat( rContext, aPos);
+ nFormatType = rContext.GetFormatTable()->GetType( nOldFormatIndex);
}
if (nOldFormatIndex !=
- ScGlobal::GetStandardFormat( *pDocument->GetFormatTable(), nOldFormatIndex, nFormatType))
+ ScGlobal::GetStandardFormat( *rContext.GetFormatTable(), nOldFormatIndex, nFormatType))
bForceNumberFormat = false;
}
}
@@ -2065,9 +2065,9 @@ void ScFormulaCell::InterpretTail( ScInterpreterContext& rContext, ScInterpretTa
&& nFormatType != SvNumFormatType::TIME
&& nFormatType != SvNumFormatType::DATETIME )
{
- sal_uInt32 nFormat = pDocument->GetNumberFormat( aPos );
+ sal_uInt32 nFormat = pDocument->GetNumberFormat( rContext, aPos );
aResult.SetDouble( pDocument->RoundValueAsShown(
- aResult.GetDouble(), nFormat));
+ aResult.GetDouble(), nFormat, &rContext));
}
if (eTailParam == SCITP_NORMAL)
{
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index d516a631c187..c600cdca34b1 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -151,7 +151,7 @@ double ScInterpreter::GetValueCellValue( const ScAddress& rPos, double fOrig )
if ( bCalcAsShown && fOrig != 0.0 )
{
sal_uInt32 nFormat = pDok->GetNumberFormat( mrContext, rPos );
- fOrig = pDok->RoundValueAsShown( fOrig, nFormat );
+ fOrig = pDok->RoundValueAsShown( fOrig, nFormat, &mrContext );
}
return fOrig;
}
@@ -223,7 +223,7 @@ double ScInterpreter::GetCellValueOrZero( const ScAddress& rPos, ScRefCellValue&
nCurFmtIndex = pDok->GetNumberFormat( mrContext, rPos );
nCurFmtType = pFormatter->GetType( nCurFmtIndex );
if ( bCalcAsShown && fValue != 0.0 )
- fValue = pDok->RoundValueAsShown( fValue, nCurFmtIndex );
+ fValue = pDok->RoundValueAsShown( fValue, nCurFmtIndex, &mrContext );
}
break;
case CELLTYPE_STRING:
More information about the Libreoffice-commits
mailing list