summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2011-03-18 21:58:30 -0400
committerKohei Yoshida <kyoshida@novell.com>2011-03-18 21:58:30 -0400
commit083f8a897c6cda74d4a5d30bd9cf5ea4518b2512 (patch)
tree0927122de041f512c4739519631e6b9495e10351
parentd8420530bc7002ab871ab5d0a3c98674510ab82f (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.cxx6
-rw-r--r--sc/source/core/tool/reftokenhelper.cxx30
-rw-r--r--sc/source/filter/excel/excform8.cxx6
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);