diff options
-rw-r--r-- | sc/inc/cell.hxx | 4 | ||||
-rw-r--r-- | sc/inc/document.hxx | 6 | ||||
-rw-r--r-- | sc/source/core/data/cell.cxx | 11 | ||||
-rw-r--r-- | sc/source/core/data/documen4.cxx | 5 | ||||
-rw-r--r-- | sc/source/core/data/documen7.cxx | 5 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlsubti.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/docshell/docsh.cxx | 2 |
7 files changed, 20 insertions, 15 deletions
diff --git a/sc/inc/cell.hxx b/sc/inc/cell.hxx index f609a4642109..79e99dba8527 100644 --- a/sc/inc/cell.hxx +++ b/sc/inc/cell.hxx @@ -376,7 +376,7 @@ public: void GetFormula( rtl::OUStringBuffer& rBuffer, const formula::FormulaGrammar::Grammar = formula::FormulaGrammar::GRAM_DEFAULT ) const; - void SetDirty(); + void SetDirty( bool bDirtyFlag=true ); void SetDirtyVar(); // If setting entire document dirty after load, no broadcasts but still append to FormulaTree. void SetDirtyAfterLoad(); @@ -472,7 +472,7 @@ public: virtual void Notify( SvtBroadcaster& rBC, const SfxHint& rHint); void SetCompile( bool bVal ) { bCompile = bVal; } ScDocument* GetDocument() const { return pDocument; } - void SetMatColsRows( SCCOL nCols, SCROW nRows ); + void SetMatColsRows( SCCOL nCols, SCROW nRows, bool bDirtyFlag=true ); void GetMatColsRows( SCCOL& nCols, SCROW& nRows ) const; // cell belongs to ChangeTrack and not to the real document diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index ba23156effac..a2db35f8388c 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -770,7 +770,8 @@ public: const ScMarkData& rMark, const rtl::OUString& rFormula, const ScTokenArray* p = NULL, - const formula::FormulaGrammar::Grammar = formula::FormulaGrammar::GRAM_DEFAULT ); + const formula::FormulaGrammar::Grammar = formula::FormulaGrammar::GRAM_DEFAULT, + bool bDirtyFlag=true ); SC_DLLPUBLIC void InsertTableOp(const ScTabOpParam& rParam, // multi-operation SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const ScMarkData& rMark); @@ -1657,7 +1658,8 @@ public: void PutInFormulaTree( ScFormulaCell* pCell ); void RemoveFromFormulaTree( ScFormulaCell* pCell ); void CalcFormulaTree( bool bOnlyForced = false, - bool bNoProgressBar = false ); + bool bNoProgressBar = false, + bool bDirtyFlag=true ); void ClearFormulaTree(); void AppendToFormulaTrack( ScFormulaCell* pCell ); void RemoveFromFormulaTrack( ScFormulaCell* pCell ); diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx index 4676cc8a0e17..8f3a0a458728 100644 --- a/sc/source/core/data/cell.cxx +++ b/sc/source/core/data/cell.cxx @@ -1726,17 +1726,17 @@ void ScFormulaCell::InterpretTail( ScInterpretTailParameter eTailParam ) } -void ScFormulaCell::SetMatColsRows( SCCOL nCols, SCROW nRows ) +void ScFormulaCell::SetMatColsRows( SCCOL nCols, SCROW nRows, bool bDirtyFlag ) { ScMatrixFormulaCellToken* pMat = aResult.GetMatrixFormulaCellTokenNonConst(); if (pMat) - pMat->SetMatColsRows( nCols, nRows); + pMat->SetMatColsRows( nCols, nRows ); else if (nCols || nRows) { aResult.SetToken( new ScMatrixFormulaCellToken( nCols, nRows)); // Setting the new token actually forces an empty result at this top // left cell, so have that recalculated. - SetDirty(); + SetDirty( bDirtyFlag ); } } @@ -1805,7 +1805,7 @@ void ScFormulaCell::Notify( SvtBroadcaster&, const SfxHint& rHint) } } -void ScFormulaCell::SetDirty() +void ScFormulaCell::SetDirty( bool bDirtyFlag ) { if ( !IsInChangeTrack() ) { @@ -1819,7 +1819,8 @@ void ScFormulaCell::SetDirty() // setzen, z.B. in CompileTokenArray if ( !bDirty || !pDocument->IsInFormulaTree( this ) ) { - SetDirtyVar(); + if( bDirtyFlag ) + SetDirtyVar(); pDocument->AppendToFormulaTrack( this ); pDocument->TrackFormulas(); } diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index 7d993e94faa8..52fe982bcbf7 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -122,7 +122,8 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, const ScMarkData& rMark, const rtl::OUString& rFormula, const ScTokenArray* pArr, - const formula::FormulaGrammar::Grammar eGram ) + const formula::FormulaGrammar::Grammar eGram, + bool bDirtyFlag ) { PutInOrder(nCol1, nCol2); PutInOrder(nRow1, nRow2); @@ -155,7 +156,7 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, pCell = new ScFormulaCell( this, aPos, pArr, eGram, MM_FORMULA ); else pCell = new ScFormulaCell( this, aPos, rFormula, eGram, MM_FORMULA ); - pCell->SetMatColsRows( nCol2 - nCol1 + 1, nRow2 - nRow1 + 1 ); + pCell->SetMatColsRows( nCol2 - nCol1 + 1, nRow2 - nRow1 + 1, bDirtyFlag ); itr = rMark.begin(); for (; itr != itrEnd && *itr < nMax; ++itr) { diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx index 71bf25bf6b7d..e9af74683976 100644 --- a/sc/source/core/data/documen7.cxx +++ b/sc/source/core/data/documen7.cxx @@ -280,7 +280,7 @@ bool ScDocument::IsInFormulaTree( ScFormulaCell* pCell ) const } -void ScDocument::CalcFormulaTree( bool bOnlyForced, bool bNoProgress ) +void ScDocument::CalcFormulaTree( bool bOnlyForced, bool bNoProgress, bool bDirtyFlag ) { OSL_ENSURE( !IsCalculatingFormulaTree(), "CalcFormulaTree recursion" ); // never ever recurse into this, might end up lost in infinity @@ -317,7 +317,8 @@ void ScDocument::CalcFormulaTree( bool bOnlyForced, bool bNoProgress ) } else { // andere simpel berechnen - pCell->SetDirtyVar(); + if( bDirtyFlag ) + pCell->SetDirtyVar(); pCell = pCell->GetNext(); } } diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx index 87cd34e26e54..b1eeb9d3ef76 100644 --- a/sc/source/filter/xml/xmlsubti.cxx +++ b/sc/source/filter/xml/xmlsubti.cxx @@ -297,7 +297,7 @@ void ScMyTables::AddMatrixRange( pDoc->InsertMatrixFormula( aScRange.aStart.Col(), aScRange.aStart.Row(), aScRange.aEnd.Col(), aScRange.aEnd.Row(), - aMark, EMPTY_STRING, pCode, eGrammar ); + aMark, EMPTY_STRING, pCode, eGrammar, false ); delete pCode; pDoc->IncXMLImportedFormulaCount( rFormula.getLength() ); } diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index d59206a43e2f..2d06f8213a10 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -441,7 +441,7 @@ sal_Bool ScDocShell::LoadXML( SfxMedium* pLoadMedium, const ::com::sun::star::un if(sGenerator.indexOf(SC_LIBO_PROD_NAME) == -1) DoHardRecalc(false); else //still need to recalc volatile formula cells - DoRecalc(false); + aDocument.CalcFormulaTree(false, false, false); aDocument.EnableAdjustHeight(false); |