[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - 2 commits - sc/inc sc/qa sc/source
Kohei Yoshida
kohei.yoshida at gmail.com
Fri Mar 15 12:15:00 PDT 2013
sc/inc/column.hxx | 7 +++++++
sc/qa/unit/ucalc.cxx | 16 ++++++++++++++++
sc/source/core/data/column.cxx | 1 +
sc/source/core/data/column2.cxx | 12 ++++++++----
4 files changed, 32 insertions(+), 4 deletions(-)
New commits:
commit f8bba58996e07b66d3fc6f31b181dc8d67a5654e
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Fri Mar 15 15:15:57 2013 -0400
Unit test to catch the out-of-sync text width bug I just fixed today.
Change-Id: I82d4199d7f8b7ba2dadb734a808dac53e845538f
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index f34dfb5..ec94652 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -6102,6 +6102,22 @@ void Test::testCellTextWidth()
CPPUNIT_ASSERT_MESSAGE("Iterator should have ended.", !pIter->hasCell());
}
+ // Delete row 2 which shifts all cells below row 2 upward. After this, we
+ // should only have cells at rows 0 and 17.
+ m_pDoc->DeleteRow(0, 0, MAXCOL, MAXTAB, 2, 1);
+ {
+ // Full range again.
+ pIter.reset(new ScColumnTextWidthIterator(*m_pDoc, aTopCell, MAXROW));
+ SCROW aRows[] = { 0, 17 };
+ size_t n = SAL_N_ELEMENTS(aRows);
+ for (size_t i = 0; i < n; ++i, pIter->next())
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cell expected, but not there.", pIter->hasCell());
+ CPPUNIT_ASSERT_EQUAL(aRows[i], pIter->getPos());
+ }
+ CPPUNIT_ASSERT_MESSAGE("Iterator should have ended.", !pIter->hasCell());
+ }
+
m_pDoc->DeleteTab(0);
}
commit 3ad7485967376871281116784900d26228482474
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Fri Mar 15 15:06:25 2013 -0400
Set up new container to store cell text's script type.
Change-Id: I0330dea1b2f85a8ba12cb232ab8b4263607ba225
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index dd14b6a..2469a6c 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -91,12 +91,19 @@ struct ColEntry
class ScColumn
{
typedef mdds::multi_type_vector<mdds::mtv::element_block_func> TextWidthType;
+ typedef mdds::multi_type_vector<mdds::mtv::element_block_func> ScriptType;
// Only stores empty or unsigned short values. Empty values correspond
// with empty cells. All non-empty cell positions must have unsigned short
// values; either the reall text widths or TEXTWIDTH_DIRTY.
TextWidthType maTextWidths;
+ // Empty elements represent unknown script types. For now, we store script
+ // type values as unsigned shorts. Once multi_type_vector supports char
+ // and unsigned char (due in 0.7.2), we can switch to that to save storage
+ // space.
+ ScriptType maScriptTypes;
+
SCCOL nCol;
SCTAB nTab;
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index a53c8a8..b472e9e 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -61,6 +61,7 @@ ScNeededSizeOptions::ScNeededSizeOptions() :
ScColumn::ScColumn() :
maTextWidths(MAXROWCOUNT),
+ maScriptTypes(MAXROWCOUNT),
nCol( 0 ),
pAttrArray( NULL ),
pDocument( NULL )
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 84cc89d..2715fb9 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1445,18 +1445,22 @@ void ScColumn::SetTextWidth(SCROW nRow, unsigned short nWidth)
sal_uInt8 ScColumn::GetScriptType( SCROW nRow ) const
{
- if (!ValidRow(nRow))
+ if (!ValidRow(nRow) || maScriptTypes.is_empty(nRow))
return SC_SCRIPTTYPE_UNKNOWN;
- return SC_SCRIPTTYPE_UNKNOWN;
+ return maScriptTypes.get<unsigned short>(nRow);
}
-void ScColumn::SetScriptType( SCROW nRow, sal_uInt8 /*nType*/ )
+void ScColumn::SetScriptType( SCROW nRow, sal_uInt8 nType )
{
if (!ValidRow(nRow))
return;
- // TODO: Implement this.
+ if (nType == SC_SCRIPTTYPE_UNKNOWN)
+ // empty element represents unknown script type.
+ maScriptTypes.set_empty(nRow, nRow);
+ else
+ maScriptTypes.set<unsigned short>(nRow, nType);
}
void ScColumn::FindDataAreaPos(SCROW& rRow, bool bDown) const
More information about the Libreoffice-commits
mailing list