[Libreoffice-commits] .: sc/source

Kohei Yoshida kohei at kemper.freedesktop.org
Fri Mar 18 19:03:13 PDT 2011


 sc/source/core/data/table5.cxx         |    6 ++++++
 sc/source/core/tool/reftokenhelper.cxx |   30 +++++++++++++++++++++---------
 sc/source/filter/excel/excform8.cxx    |    6 ++++++
 3 files changed, 33 insertions(+), 9 deletions(-)

New commits:
commit f8a398c3fff7b793142686208a008b69c593743b
Author: Kohei Yoshida <kyoshida at novell.com>
Date:   Fri Mar 18 21:58:30 2011 -0400

    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.

diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx
index 5c1aace..bda8db8 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 5675a09..e77f130 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 ddf3b09..6dc1834 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);
 


More information about the Libreoffice-commits mailing list