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: ...@@ -111,6 +111,7 @@ public:
SCCOLROW GetMarkRowRanges( SCCOLROW* pRanges ); SCCOLROW GetMarkRowRanges( SCCOLROW* pRanges );
std::vector<sc::ColRowSpan> GetMarkedRowSpans( SCTAB nTab ) const; std::vector<sc::ColRowSpan> GetMarkedRowSpans( SCTAB nTab ) const;
std::vector<sc::ColRowSpan> GetMarkedColSpans( SCTAB nTab ) const;
bool IsColumnMarked( SCCOL nCol ) const; bool IsColumnMarked( SCCOL nCol ) const;
bool IsRowMarked( SCROW nRow ) const; bool IsRowMarked( SCROW nRow ) const;
......
...@@ -616,6 +616,8 @@ void Test::testMarkData() ...@@ -616,6 +616,8 @@ void Test::testMarkData()
// Empty mark. Nothing is selected. // Empty mark. Nothing is selected.
std::vector<sc::ColRowSpan> aSpans = aMarkData.GetMarkedRowSpans(0); std::vector<sc::ColRowSpan> aSpans = aMarkData.GetMarkedRowSpans(0);
CPPUNIT_ASSERT_MESSAGE("Span should be empty.", aSpans.empty()); 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. // Select B3:F7.
aMarkData.SetMarkArea(ScRange(1,2,0,5,6,0)); aMarkData.SetMarkArea(ScRange(1,2,0,5,6,0));
...@@ -624,6 +626,11 @@ void Test::testMarkData() ...@@ -624,6 +626,11 @@ void Test::testMarkData()
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(2), aSpans[0].mnStart); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(2), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(6), aSpans[0].mnEnd); 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. // Select A11:B13.
aMarkData.SetMultiMarkArea(ScRange(0,10,0,1,12,0)); aMarkData.SetMultiMarkArea(ScRange(0,10,0,1,12,0));
aSpans = aMarkData.GetMarkedRowSpans(0); aSpans = aMarkData.GetMarkedRowSpans(0);
...@@ -633,12 +640,22 @@ void Test::testMarkData() ...@@ -633,12 +640,22 @@ void Test::testMarkData()
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(10), aSpans[1].mnStart); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(10), aSpans[1].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(12), aSpans[1].mnEnd); 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. // Select C8:C10.
aMarkData.SetMultiMarkArea(ScRange(2,7,0,2,9,0)); aMarkData.SetMultiMarkArea(ScRange(2,7,0,2,9,0));
aSpans = aMarkData.GetMarkedRowSpans(0); aSpans = aMarkData.GetMarkedRowSpans(0);
CPPUNIT_ASSERT_MESSAGE("There should be one selected row span.", aSpans.size() == 1); 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>(2), aSpans[0].mnStart);
CPPUNIT_ASSERT_EQUAL(static_cast<SCCOLROW>(12), aSpans[0].mnEnd); 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() void Test::testInput()
......
...@@ -571,6 +571,26 @@ std::vector<sc::ColRowSpan> ScMarkData::GetMarkedRowSpans( SCTAB nTab ) const ...@@ -571,6 +571,26 @@ std::vector<sc::ColRowSpan> ScMarkData::GetMarkedRowSpans( SCTAB nTab ) const
return sc::toSpanArray<SCCOLROW,sc::ColRowSpan>(aSpans); 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 bool ScMarkData::IsAllMarked( const ScRange& rRange ) const
{ {
if ( !bMultiMarked ) 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