[Libreoffice-commits] core.git: Branch 'private/kohei/xlsx-import-speedup' - sc/inc sc/qa sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Fri Nov 1 18:28:12 CET 2013
sc/inc/rangenam.hxx | 5 +++++
sc/qa/unit/ucalc_formula.cxx | 13 +++++++++++--
sc/source/core/tool/rangenam.cxx | 20 ++++++++++++++++++++
3 files changed, 36 insertions(+), 2 deletions(-)
New commits:
commit b3fd5efef2ade574d33cc1ac39e832ccca14a569
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Nov 1 13:28:00 2013 -0400
We need to update sheet positions of range names when modifying sheets.
And add Dump() to ScRangeData for debugging convenience and re-enable
previously failed test cases.
Change-Id: I9d8f41a8be4c9c301254ef300c7b7f0c1ea7f393
diff --git a/sc/inc/rangenam.hxx b/sc/inc/rangenam.hxx
index 65fae47..6113709 100644
--- a/sc/inc/rangenam.hxx
+++ b/sc/inc/rangenam.hxx
@@ -24,6 +24,7 @@
#include "address.hxx"
#include "formula/grammar.hxx"
#include "scdllapi.h"
+#include "calcmacros.hxx"
#include <map>
#include <vector>
@@ -151,6 +152,10 @@ public:
SCCOL GetMaxCol() const;
void CompileUnresolvedXML();
+
+#if DEBUG_FORMULA_COMPILER
+ void Dump() const;
+#endif
};
inline bool ScRangeData::HasType( RangeType nType ) const
diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index ce9ce2e..361c015 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -1262,20 +1262,29 @@ void Test::testFormulaRefUpdateNamedExpression()
m_pDoc->SetValue(ScAddress(3,9,0), 20);
CPPUNIT_ASSERT_EQUAL(43.0, m_pDoc->GetValue(ScAddress(2,7,0)));
-#if 0
// Insert a new sheet before the current.
m_pDoc->InsertTab(0, "New");
OUString aName;
m_pDoc->GetName(1, aName);
CPPUNIT_ASSERT_EQUAL(OUString("Formula"), aName);
+
+ pName = pGlobalNames->findByUpperName("MYRANGE");
+ CPPUNIT_ASSERT_MESSAGE("Failed to find named expression 'MyRange' in the global scope.", pName);
+
m_pDoc->SetValue(ScAddress(3,9,1), 10);
CPPUNIT_ASSERT_EQUAL(33.0, m_pDoc->GetValue(ScAddress(2,7,1)));
m_pDoc->DeleteTab(0);
+ aName = OUString();
+ m_pDoc->GetName(0, aName);
+ CPPUNIT_ASSERT_EQUAL(OUString("Formula"), aName);
+
+ pName = pGlobalNames->findByUpperName("MYRANGE");
+ CPPUNIT_ASSERT_MESSAGE("Failed to find named expression 'MyRange' in the global scope.", pName);
+
m_pDoc->SetValue(ScAddress(3,9,0), 11);
CPPUNIT_ASSERT_EQUAL(34.0, m_pDoc->GetValue(ScAddress(2,7,0)));
-#endif
// Clear all and start over.
clearRange(m_pDoc, ScRange(0,0,0,100,100,0));
diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx
index b963eab..4389a4b 100644
--- a/sc/source/core/tool/rangenam.cxx
+++ b/sc/source/core/tool/rangenam.cxx
@@ -196,6 +196,18 @@ void ScRangeData::CompileUnresolvedXML()
}
}
+#if DEBUG_FORMULA_COMPILER
+void ScRangeData::Dump() const
+{
+ cout << "-- ScRangeData" << endl;
+ cout << " name: " << aName << endl;
+ cout << " ref position: (col=" << aPos.Col() << ", row=" << aPos.Row() << ", sheet=" << aPos.Tab() << ")" << endl;
+
+ if (pCode)
+ pCode->Dump();
+}
+#endif
+
void ScRangeData::GuessPosition()
{
// set a position that allows "absoluting" of all relative references
@@ -392,6 +404,9 @@ void ScRangeData::UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt, SCTAB nL
sc::RefUpdateResult aRes = pCode->AdjustReferenceOnInsertedTab(rCxt, aPos);
if (aRes.mbReferenceModified)
rCxt.maUpdatedNames.setUpdatedName(nLocalTab, nIndex);
+
+ if (rCxt.mnInsertPos <= aPos.Tab())
+ aPos.IncTab(rCxt.mnSheets);
}
void ScRangeData::UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt, SCTAB nLocalTab )
@@ -399,6 +414,9 @@ void ScRangeData::UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt, SCTAB nL
sc::RefUpdateResult aRes = pCode->AdjustReferenceOnDeletedTab(rCxt, aPos);
if (aRes.mbReferenceModified)
rCxt.maUpdatedNames.setUpdatedName(nLocalTab, nIndex);
+
+ if (rCxt.mnDeletePos <= aPos.Tab())
+ aPos.IncTab(-rCxt.mnSheets);
}
void ScRangeData::UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt, SCTAB nLocalTab )
@@ -406,6 +424,8 @@ void ScRangeData::UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt, SCTAB nLocal
sc::RefUpdateResult aRes = pCode->AdjustReferenceOnMovedTab(rCxt, aPos);
if (aRes.mbReferenceModified)
rCxt.maUpdatedNames.setUpdatedName(nLocalTab, nIndex);
+
+ aPos.SetTab(rCxt.getNewTab(aPos.Tab()));
}
void ScRangeData::MakeValidName( OUString& rName )
More information about the Libreoffice-commits
mailing list