sc/inc/column.hxx | 1 + sc/qa/unit/ucalc.cxx | 14 ++++++++++++++ sc/source/core/data/column.cxx | 39 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 2 deletions(-)
New commits: commit 6fb61764dd4ac6c46e93628ae067c9e319314ee2 Author: Laurent Godard <lgodard.li...@laposte.net> Date: Thu Oct 3 18:11:02 2013 +0200 ScColumn::UpdateNoteCaption() helper for moved cells Change-Id: Iab5828ce5294e46a28303ac0fbd06f085c3e6a6b diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 00e6058..8969bedd 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -498,6 +498,7 @@ public: void CopyCellNotesToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol, SCROW nRowOffsetDest=0) const; void DuplicateNotes(SCROW nStartRow, size_t nDataSize, ScColumn& rDestCol, sc::ColumnBlockPosition& maDestBlockPos, SCROW nRowOffsetDest=0 ) const; + void UpdateNoteCaptions(); void InterpretDirtyCells( SCROW nRow1, SCROW nRow2 ); diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 7dec2ac..24b47fd 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -3993,18 +3993,32 @@ void Test::testShiftCells() // Text into cell E5. m_pDoc->SetString(4, 3, 0, aTestVal); + // put a Note in cell E5 + OUString aHello("Hello"); + ScAddress rAddr(4, 3, 0); + ScPostIt* pNote = m_pDoc->GetOrCreateNote(rAddr); + pNote->SetText(rAddr, aHello); + + CPPUNIT_ASSERT_MESSAGE("there should be a note", m_pDoc->HasNote(4, 3, 0)); + // Insert cell at D5. This should shift the string cell to right. m_pDoc->InsertCol(3, 0, 3, 0, 3, 1); OUString aStr = m_pDoc->GetString(5, 3, 0); CPPUNIT_ASSERT_MESSAGE("We should have a string cell here.", aStr == aTestVal); CPPUNIT_ASSERT_MESSAGE("D5 is supposed to be blank.", m_pDoc->IsBlockEmpty(0, 3, 4, 3, 4)); + CPPUNIT_ASSERT_MESSAGE("there should be NO note", !m_pDoc->HasNote(4, 3, 0)); + CPPUNIT_ASSERT_MESSAGE("there should be a note", m_pDoc->HasNote(5, 3, 0)); + // Delete cell D5, to shift the text cell back into D5. m_pDoc->DeleteCol(3, 0, 3, 0, 3, 1); aStr = m_pDoc->GetString(4, 3, 0); CPPUNIT_ASSERT_MESSAGE("We should have a string cell here.", aStr == aTestVal); CPPUNIT_ASSERT_MESSAGE("E5 is supposed to be blank.", m_pDoc->IsBlockEmpty(0, 4, 4, 4, 4)); + CPPUNIT_ASSERT_MESSAGE("there should be NO note", !m_pDoc->HasNote(5, 3, 0)); + CPPUNIT_ASSERT_MESSAGE("there should be a note", m_pDoc->HasNote(4, 3, 0)); + m_pDoc->DeleteTab(0); } diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index 3de3fdb..dc75b99 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -2183,12 +2183,44 @@ void resetColumnPosition(sc::CellStoreType& rCells, SCCOL nCol) } +void ScColumn::UpdateNoteCaptions() +{ + sc::CellNoteStoreType::const_iterator itBlk = maCellNotes.begin(), itBlkEnd = maCellNotes.end(); + sc::cellnote_block::const_iterator itData, itDataEnd; + + SCROW curRow = 0; + for (;itBlk==itBlkEnd;++itBlk) + { + if (itBlk->data) + { + // non empty block + itData = sc::cellnote_block::begin(*itBlk->data); + itDataEnd = sc::cellnote_block::end(*itBlk->data); + for(;itData==itDataEnd; ++itData) + { + ScPostIt* pNote = *itData; + pNote->UpdateCaptionPos(ScAddress(nCol, curRow, nTab)); + curRow +=1; + } + } + else + { + // empty block + curRow += itBlk->size; + } + } +} + void ScColumn::SwapCol(ScColumn& rCol) { maBroadcasters.swap(rCol.maBroadcasters); maCells.swap(rCol.maCells); maCellTextAttrs.swap(rCol.maCellTextAttrs); - maCellNotes.swap(rCol.maCellNotes); // TODO : notes update caption ? + maCellNotes.swap(rCol.maCellNotes); + + // notes update caption + UpdateNoteCaptions(); + rCol.UpdateNoteCaptions(); ScAttrArray* pTempAttr = rCol.pAttrArray; rCol.pAttrArray = pAttrArray; @@ -2232,10 +2264,13 @@ void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol) // Move the broadcasters to the destination column. maBroadcasters.transfer(nStartRow, nEndRow, rCol.maBroadcasters, nStartRow); - maCellNotes.transfer(nStartRow, nEndRow, rCol.maCellNotes, nStartRow); // TODO : notes - update caption ? maCells.transfer(nStartRow, nEndRow, rCol.maCells, nStartRow); maCellTextAttrs.transfer(nStartRow, nEndRow, rCol.maCellTextAttrs, nStartRow); + // move the notes to the destination column + maCellNotes.transfer(nStartRow, nEndRow, rCol.maCellNotes, nStartRow); + UpdateNoteCaptions(); + // Re-group transferred formula cells. aPos = rCol.maCells.position(nStartRow); sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits