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:
/** 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
......
......@@ -1022,7 +1022,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) {}
......@@ -1030,10 +1033,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();
}
ScMatrixFormulaCellToken::~ScMatrixFormulaCellToken() {}
......@@ -1045,9 +1045,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 )
......@@ -1069,6 +1077,7 @@ void ScMatrixFormulaCellToken::Assign( const formula::FormulaToken& r )
{
xUpperLeft = &r;
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