sc/inc/token.hxx | 6 ++++++ sc/source/core/tool/token.cxx | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-)
New commits: commit c14d9f721554937577496b448fd685b8b68580c0 Author: Eike Rathke <er...@redhat.com> Date: Wed Jun 17 00:04:30 2015 +0200 Resolves: tdf#86305 clone upper left of matrix result if double token Change-Id: I541577e0b99b0144a755e5755adc890c0ca8d204 (cherry picked from commit ffc1ffed11dc63a69fc2db04f12b3ea266b580fe) Reviewed-on: https://gerrit.libreoffice.org/16326 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sc/inc/token.hxx b/sc/inc/token.hxx index da4f9e9..31a598a 100644 --- a/sc/inc/token.hxx +++ b/sc/inc/token.hxx @@ -337,6 +337,12 @@ public: /** Reset matrix and upper left, keep matrix formula dimension. */ void ResetResult(); + +private: + + /** xUpperLeft is modifiable through SetUpperLeftDouble(), so clone it + whenever an svDouble token is assigned to. */ + void CloneUpperLeftIfNecessary(); }; class SC_DLLPUBLIC ScHybridCellToken : public formula::FormulaToken diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 1e5c7d2..b4d1dd0 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -918,7 +918,10 @@ void ScMatrixCellResultToken::Assign( const ScMatrixCellResultToken & r ) ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR, const ScConstMatrixRef& pMat, formula::FormulaToken* pUL ) : - ScMatrixCellResultToken(pMat, pUL), nRows(nR), nCols(nC) {} + ScMatrixCellResultToken(pMat, pUL), nRows(nR), nCols(nC) +{ + CloneUpperLeftIfNecessary(); +} ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ) : ScMatrixCellResultToken(NULL, NULL), nRows(nR), nCols(nC) {} @@ -926,10 +929,7 @@ ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ) : ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( const ScMatrixFormulaCellToken& r ) : ScMatrixCellResultToken(r), nRows(r.nRows), nCols(r.nCols) { - // xUpperLeft is modifiable through - // SetUpperLeftDouble(), so clone it. - if (xUpperLeft) - xUpperLeft = xUpperLeft->Clone(); + CloneUpperLeftIfNecessary(); } bool ScMatrixFormulaCellToken::operator==( const FormulaToken& r ) const @@ -939,9 +939,17 @@ bool ScMatrixFormulaCellToken::operator==( const FormulaToken& r ) const nCols == p->nCols && nRows == p->nRows; } +void ScMatrixFormulaCellToken::CloneUpperLeftIfNecessary() +{ + if (xUpperLeft && xUpperLeft->GetType() == svDouble) + xUpperLeft = xUpperLeft->Clone(); +} + void ScMatrixFormulaCellToken::Assign( const ScMatrixCellResultToken & r ) { ScMatrixCellResultToken::Assign( r); + + CloneUpperLeftIfNecessary(); } void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r ) @@ -963,6 +971,7 @@ void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r ) { xUpperLeft = &r; xMatrix = NULL; + CloneUpperLeftIfNecessary(); } } }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits