Kaydet (Commit) ab6be8b2 authored tarafından Eike Rathke's avatar Eike Rathke

Resolves: tdf#86305 clone upper left of matrix result if double token

Change-Id: I541577e0b99b0144a755e5755adc890c0ca8d204
(cherry picked from commit ffc1ffed)
üst 5fbf5b10
...@@ -381,6 +381,12 @@ public: ...@@ -381,6 +381,12 @@ public:
/** Reset matrix and upper left, keep matrix /** Reset matrix and upper left, keep matrix
formula dimension. */ formula dimension. */
void ResetResult(); 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 class SC_DLLPUBLIC ScHybridCellToken : public formula::FormulaToken
......
...@@ -1022,7 +1022,10 @@ void ScMatrixCellResultToken::Assign( const ScMatrixCellResultToken & r ) ...@@ -1022,7 +1022,10 @@ void ScMatrixCellResultToken::Assign( const ScMatrixCellResultToken & r )
ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( ScMatrixFormulaCellToken::ScMatrixFormulaCellToken(
SCCOL nC, SCROW nR, const ScConstMatrixRef& pMat, formula::FormulaToken* pUL ) : 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 ) : ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ) :
ScMatrixCellResultToken(NULL, NULL), nRows(nR), nCols(nC) {} ScMatrixCellResultToken(NULL, NULL), nRows(nR), nCols(nC) {}
...@@ -1030,10 +1033,7 @@ ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ) : ...@@ -1030,10 +1033,7 @@ ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ) :
ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( const ScMatrixFormulaCellToken& r ) : ScMatrixFormulaCellToken::ScMatrixFormulaCellToken( const ScMatrixFormulaCellToken& r ) :
ScMatrixCellResultToken(r), nRows(r.nRows), nCols(r.nCols) ScMatrixCellResultToken(r), nRows(r.nRows), nCols(r.nCols)
{ {
// xUpperLeft is modifiable through CloneUpperLeftIfNecessary();
// SetUpperLeftDouble(), so clone it.
if (xUpperLeft)
xUpperLeft = xUpperLeft->Clone();
} }
ScMatrixFormulaCellToken::~ScMatrixFormulaCellToken() {} ScMatrixFormulaCellToken::~ScMatrixFormulaCellToken() {}
...@@ -1045,9 +1045,17 @@ bool ScMatrixFormulaCellToken::operator==( const FormulaToken& r ) const ...@@ -1045,9 +1045,17 @@ bool ScMatrixFormulaCellToken::operator==( const FormulaToken& r ) const
nCols == p->nCols && nRows == p->nRows; nCols == p->nCols && nRows == p->nRows;
} }
void ScMatrixFormulaCellToken::CloneUpperLeftIfNecessary()
{
if (xUpperLeft && xUpperLeft->GetType() == svDouble)
xUpperLeft = xUpperLeft->Clone();
}
void ScMatrixFormulaCellToken::Assign( const ScMatrixCellResultToken & r ) void ScMatrixFormulaCellToken::Assign( const ScMatrixCellResultToken & r )
{ {
ScMatrixCellResultToken::Assign( r); ScMatrixCellResultToken::Assign( r);
CloneUpperLeftIfNecessary();
} }
void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r ) void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r )
...@@ -1069,6 +1077,7 @@ void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r ) ...@@ -1069,6 +1077,7 @@ void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r )
{ {
xUpperLeft = &r; xUpperLeft = &r;
xMatrix = NULL; xMatrix = NULL;
CloneUpperLeftIfNecessary();
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment