sc/inc/tokenarray.hxx | 4 ++++ sc/source/core/tool/compiler.cxx | 13 +++++++++++++ sc/source/core/tool/token.cxx | 9 +++++++-- 3 files changed, 24 insertions(+), 2 deletions(-)
New commits: commit d0255f30e34442a70665a91fa7e4b6c92f3dab1b Author: Eike Rathke <er...@redhat.com> Date: Mon Jun 22 15:03:33 2015 +0200 TableRef: inherit RelName in generated reference if named expression Change-Id: I67621e59c6e20e7f3b5101772b5d274d8c745ce9 diff --git a/sc/inc/tokenarray.hxx b/sc/inc/tokenarray.hxx index 0d3fa02..b36936a 100644 --- a/sc/inc/tokenarray.hxx +++ b/sc/inc/tokenarray.hxx @@ -52,6 +52,7 @@ class SC_DLLPUBLIC ScTokenArray : public formula::FormulaTokenArray size_t mnHashValue; ScFormulaVectorState meVectorState; + bool mbFromRangeName; public: ScTokenArray(); @@ -69,6 +70,9 @@ public: ScFormulaVectorState GetVectorState() const { return meVectorState;} + void SetFromRangeName( bool b ) { mbFromRangeName = b; } + bool IsFromRangeName() const { return mbFromRangeName; } + /** * If the array contains at least one relative row reference or named * expression, it's variant. Otherwise invariant. diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 4e1cee1..30bd1e2 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -4300,6 +4300,7 @@ bool ScCompiler::HandleRange() pNew->Reset(); } pNew = pRangeData->GetCode()->Clone(); + pNew->SetFromRangeName( true ); PushTokenArray( pNew, true ); if( pRangeData->HasReferences() ) { @@ -5085,6 +5086,8 @@ bool ScCompiler::HandleTableRef() bool bColumnRange = false; bool bCol1Rel = false; bool bCol2Rel = false; + bool bCol1RelName = false; + bool bCol2RelName = false; int nLevel = 0; if (bForwardToClose && GetTokenIfOpCode( ocTableRefOpen)) { @@ -5135,6 +5138,7 @@ bool ScCompiler::HandleTableRef() { bColumnRange = true; bCol1Rel = p->GetSingleRef()->IsColRel(); + bCol1RelName = p->GetSingleRef()->IsRelName(); eState = sLast; } else @@ -5183,6 +5187,7 @@ bool ScCompiler::HandleTableRef() aColRange.aEnd = mpToken->GetSingleRef()->toAbs( aPos); aColRange.Justify(); bCol2Rel = mpToken->GetSingleRef()->IsColRel(); + bCol2RelName = mpToken->GetSingleRef()->IsRelName(); } } } @@ -5208,7 +5213,10 @@ bool ScCompiler::HandleTableRef() if (eItem == ScTableRefToken::THIS_ROW) { aRefData.SetRowRel( true); + if (!bCol1RelName) + bCol1RelName = static_cast<ScTokenArray*>(pArr)->IsFromRangeName(); } + aRefData.SetRelName( bCol1RelName); aRefData.SetFlag3D( true); if (nError) { @@ -5228,11 +5236,16 @@ bool ScCompiler::HandleTableRef() aRefData.InitFlags(); aRefData.Ref1.SetColRel( bCol1Rel); aRefData.Ref2.SetColRel( bCol2Rel); + bool bRelName = bCol1RelName || bCol2RelName; if (eItem == ScTableRefToken::THIS_ROW) { aRefData.Ref1.SetRowRel( true); aRefData.Ref2.SetRowRel( true); + if (!bRelName) + bRelName = static_cast<ScTokenArray*>(pArr)->IsFromRangeName(); } + aRefData.Ref1.SetRelName( bRelName); + aRefData.Ref2.SetRelName( bRelName); aRefData.Ref1.SetFlag3D( true); if (nError) { diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 45dce46..c1d31b8 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -1743,14 +1743,16 @@ bool ScTokenArray::IsValidReference( ScRange& rRange, const ScAddress& rPos ) co ScTokenArray::ScTokenArray() : FormulaTokenArray(), mnHashValue(0), - meVectorState(FormulaVectorEnabled) + meVectorState(FormulaVectorEnabled), + mbFromRangeName(false) { } ScTokenArray::ScTokenArray( const ScTokenArray& rArr ) : FormulaTokenArray(rArr), mnHashValue(rArr.mnHashValue), - meVectorState(rArr.meVectorState) + meVectorState(rArr.meVectorState), + mbFromRangeName(rArr.mbFromRangeName) { } @@ -1762,6 +1764,7 @@ ScTokenArray& ScTokenArray::operator=( const ScTokenArray& rArr ) { Clear(); Assign( rArr ); + mbFromRangeName = rArr.mbFromRangeName; return *this; } @@ -1769,6 +1772,7 @@ void ScTokenArray::ClearScTokenArray() { Clear(); meVectorState = FormulaVectorEnabled; + mbFromRangeName = false; } ScTokenArray* ScTokenArray::Clone() const @@ -1781,6 +1785,7 @@ ScTokenArray* ScTokenArray::Clone() const p->bHyperLink = bHyperLink; p->mnHashValue = mnHashValue; p->meVectorState = meVectorState; + p->mbFromRangeName = mbFromRangeName; FormulaToken** pp; if( nLen ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits