diff options
author | Kohei Yoshida <kyoshida@novell.com> | 2011-03-18 21:58:30 -0400 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2011-03-18 21:58:30 -0400 |
commit | 083f8a897c6cda74d4a5d30bd9cf5ea4518b2512 (patch) | |
tree | 0927122de041f512c4739519631e6b9495e10351 | |
parent | d8420530bc7002ab871ab5d0a3c98674510ab82f (diff) |
Charts' title reference is stored as relative reference. (fdo#35015)
For whatever reason, chart's title name references are stored as
relative references as opposed to absolute references. Store the
relative reference values to the absolute values since the ref token
helper methods only use the absolute values when joining.
-rw-r--r-- | sc/source/core/data/table5.cxx | 6 | ||||
-rw-r--r-- | sc/source/core/tool/reftokenhelper.cxx | 30 | ||||
-rw-r--r-- | sc/source/filter/excel/excform8.cxx | 6 |
3 files changed, 33 insertions, 9 deletions
diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx index d11e38cd2472..2ec076291c85 100644 --- a/sc/source/core/data/table5.cxx +++ b/sc/source/core/data/table5.cxx @@ -1093,11 +1093,17 @@ void ScTable::SetRepeatArea( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SC void ScTable::StartListening( const ScAddress& rAddress, SvtListener* pListener ) { + if (!ValidCol(rAddress.Col())) + return; + aCol[rAddress.Col()].StartListening( *pListener, rAddress.Row() ); } void ScTable::EndListening( const ScAddress& rAddress, SvtListener* pListener ) { + if (!ValidCol(rAddress.Col())) + return; + aCol[rAddress.Col()].EndListening( *pListener, rAddress.Row() ); } diff --git a/sc/source/core/tool/reftokenhelper.cxx b/sc/source/core/tool/reftokenhelper.cxx index 26167cdf8ba1..3e1a1f32f773 100644 --- a/sc/source/core/tool/reftokenhelper.cxx +++ b/sc/source/core/tool/reftokenhelper.cxx @@ -118,6 +118,24 @@ void ScRefTokenHelper::compileRangeRepresentation( rRefTokens.clear(); } +void singleRefToAddr(const ScSingleRefData& rRef, ScAddress& rAddr) +{ + if (rRef.IsColRel()) + rAddr.SetCol(rRef.nRelCol); + else + rAddr.SetCol(rRef.nCol); + + if (rRef.IsRowRel()) + rAddr.SetRow(rRef.nRelRow); + else + rAddr.SetRow(rRef.nRow); + + if (rRef.IsTabRel()) + rAddr.SetTab(rRef.nRelTab); + else + rAddr.SetTab(rRef.nTab); +} + bool ScRefTokenHelper::getRangeFromToken(ScRange& rRange, const ScTokenRef& pToken, bool bExternal) { StackVar eType = pToken->GetType(); @@ -131,9 +149,7 @@ bool ScRefTokenHelper::getRangeFromToken(ScRange& rRange, const ScTokenRef& pTok return false; const ScSingleRefData& rRefData = pToken->GetSingleRef(); - rRange.aStart.SetCol(rRefData.nCol); - rRange.aStart.SetRow(rRefData.nRow); - rRange.aStart.SetTab(rRefData.nTab); + singleRefToAddr(rRefData, rRange.aStart); rRange.aEnd = rRange.aStart; return true; } @@ -145,12 +161,8 @@ bool ScRefTokenHelper::getRangeFromToken(ScRange& rRange, const ScTokenRef& pTok return false; const ScComplexRefData& rRefData = pToken->GetDoubleRef(); - rRange.aStart.SetCol(rRefData.Ref1.nCol); - rRange.aStart.SetRow(rRefData.Ref1.nRow); - rRange.aStart.SetTab(rRefData.Ref1.nTab); - rRange.aEnd.SetCol(rRefData.Ref2.nCol); - rRange.aEnd.SetRow(rRefData.Ref2.nRow); - rRange.aEnd.SetTab(rRefData.Ref2.nTab); + singleRefToAddr(rRefData.Ref1, rRange.aStart); + singleRefToAddr(rRefData.Ref2, rRange.aEnd); return true; } default: diff --git a/sc/source/filter/excel/excform8.cxx b/sc/source/filter/excel/excform8.cxx index cd4ff8c41279..aebb75418f36 100644 --- a/sc/source/filter/excel/excform8.cxx +++ b/sc/source/filter/excel/excform8.cxx @@ -1400,13 +1400,19 @@ void ExcelToSc8::ExcRelToScRel8( sal_uInt16 nRow, sal_uInt16 nC, ScSingleRefData { // C O L if ( bColRel ) + { rSRD.nRelCol = static_cast<SCsCOL>(nCol) - aEingPos.Col(); + rSRD.nCol = rSRD.nRelCol; + } else rSRD.nCol = static_cast<SCCOL>(nCol); // R O W if ( bRowRel ) + { rSRD.nRelRow = static_cast<SCsROW>(nRow) - aEingPos.Row(); + rSRD.nRow = rSRD.nRelRow; + } else rSRD.nRow = static_cast<SCROW>(nRow); |