Kaydet (Commit) b55bd1f5 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Implement GetMarkedColSpans() counterpart.

Change-Id: Ia2f4828a91ad3c89f7867e0f2e0248f885d3fff7
üst fc16069d
......@@ -111,6 +111,7 @@ public:
SCCOLROW GetMarkRowRanges( SCCOLROW* pRanges );
std::vector<sc::ColRowSpan> GetMarkedRowSpans( SCTAB nTab ) const;
std::vector<sc::ColRowSpan> GetMarkedColSpans( SCTAB nTab ) const;
bool IsColumnMarked( SCCOL nCol ) const;
bool IsRowMarked( SCROW nRow ) const;
......
......@@ -616,6 +616,8 @@ void Test::testMarkData()
// Empty mark. Nothing is selected.
std::vector<sc::ColRowSpan> aSpans = aMarkData.GetMarkedRowSpans(0);
CPPUNIT_ASSERT_MESSAGE("Span should be empty.", aSpans.empty());
aSpans = aMarkData.GetMarkedColSpans(0);
CPPUNIT_ASSERT_MESSAGE("Span should be empty.", aSpans.empty());
// Select B3:F7.
aMarkData.SetMarkArea(ScRange(1,2,0,5,6,0));
......@@ -624,6 +626,11 @@ void Test::testMarkData()
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(2), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(6), aSpans[0].mnEnd);
aSpans = aMarkData.GetMarkedColSpans(0);
CPPUNIT_ASSERT_MESSAGE("There should be one selected column span.", aSpans.size() == 1);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(1), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(5), aSpans[0].mnEnd);
// Select A11:B13.
aMarkData.SetMultiMarkArea(ScRange(0,10,0,1,12,0));
aSpans = aMarkData.GetMarkedRowSpans(0);
......@@ -633,12 +640,22 @@ void Test::testMarkData()
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(10), aSpans[1].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(12), aSpans[1].mnEnd);
aSpans = aMarkData.GetMarkedColSpans(0);
CPPUNIT_ASSERT_MESSAGE("There should be one selected column span.", aSpans.size() == 1);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(0), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(5), aSpans[0].mnEnd);
// Select C8:C10.
aMarkData.SetMultiMarkArea(ScRange(2,7,0,2,9,0));
aSpans = aMarkData.GetMarkedRowSpans(0);
CPPUNIT_ASSERT_MESSAGE("There should be one selected row span.", aSpans.size() == 1);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(2), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(12), aSpans[0].mnEnd);
aSpans = aMarkData.GetMarkedColSpans(0);
CPPUNIT_ASSERT_MESSAGE("There should be one selected column span.", aSpans.size() == 1);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(0), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(5), aSpans[0].mnEnd);
}
void Test::testInput()
......
......@@ -571,6 +571,26 @@ std::vector<sc::ColRowSpan> ScMarkData::GetMarkedRowSpans( SCTAB nTab ) const
return sc::toSpanArray<SCCOLROW,sc::ColRowSpan>(aSpans);
}
std::vector<sc::ColRowSpan> ScMarkData::GetMarkedColSpans( SCTAB nTab ) const
{
typedef mdds::flat_segment_tree<SCCOLROW, bool> SpansType;
ScRangeList aRanges = GetMarkedRanges();
SpansType aSpans(0, MAXCOL+1, false);
SpansType::const_iterator itPos = aSpans.begin();
for (size_t i = 0, n = aRanges.size(); i < n; ++i)
{
const ScRange& r = *aRanges[i];
if (r.aStart.Tab() != nTab)
continue;
itPos = aSpans.insert(itPos, r.aStart.Col(), r.aEnd.Col()+1, true).first;
}
return sc::toSpanArray<SCCOLROW,sc::ColRowSpan>(aSpans);
}
bool ScMarkData::IsAllMarked( const ScRange& rRange ) const
{
if ( !bMultiMarked )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment