sc/qa/unit/ucalc.cxx | 2 - sc/source/core/data/column2.cxx | 41 +++++++++++++++++++++++++++++++++++----- sc/source/core/data/column3.cxx | 11 ---------- 3 files changed, 37 insertions(+), 17 deletions(-)
New commits: commit 863c34d033d1e43aebe32445afdc4f0619cea292 Author: Laurent Godard <lgodard.li...@laposte.net> Date: Thu Oct 3 12:55:24 2013 +0200 clone notes in CopyCellNotesToDocument Change-Id: I804746be0ed74ff36fce5897fcb5d49ada0dfd1b diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index de49739..7dec2ac 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -3103,7 +3103,7 @@ void Test::testMoveBlock() ScDocFunc& rDocFunc = getDocShell().GetDocFunc(); bool bMoveDone = rDocFunc.MoveBlock(ScRange(0, 0 ,0 ,2 ,0 ,0), ScAddress(1, 0, 0), bCut, false, false, false); - std::cout << "B1 note after moveblock: " << m_pDoc->GetNote(aAddrB1)->GetText() << std::endl; + // std::cout << "B1 note after moveblock: " << m_pDoc->GetNote(aAddrB1)->GetText() << std::endl; CPPUNIT_ASSERT_MESSAGE("Cells not moved", bMoveDone); diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index 7c2c565..93887c7 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1616,9 +1616,12 @@ void ScColumn::CopyCellTextAttrsToDocument(SCROW nRow1, SCROW nRow2, ScColumn& r } } -//void ScColumn::CopyCellNotesToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol) const void ScColumn::CopyCellNotesToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol, SCROW nRowOffsetDest) const // TODO : notes promising factorisation { + + SCCOL nDestCol = rDestCol.GetCol(); + SCTAB nDestTab = rDestCol.GetTab(); + rDestCol.maCellNotes.set_empty(nRow1, nRow2); // Empty the destination range first. sc::CellNoteStoreType::const_iterator itBlk = maCellNotes.begin(), itBlkEnd = maCellNotes.end(); @@ -1671,12 +1674,39 @@ void ScColumn::CopyCellNotesToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDest size_t nOffset = nRowPos - nBlockStart + 1; itDataEnd = sc::cellnote_block::begin(*itBlk->data); std::advance(itDataEnd, nOffset); - // TODO : notes need to duplicate notes - rDestCol.maCellNotes.set(nBlockStart + nOffsetInBlock + nRowOffsetDest, itData, itDataEnd); + // need to clone notes + std::vector<ScPostIt*> vCloned; + vCloned.reserve(nOffset); + SCROW curRow = nBlockStart; + for (; itData != itDataEnd; ++itData, ++curRow) + { + ScPostIt* pSrcNote = *itData; + ScAddress aDestAddress = ScAddress(nDestCol, curRow + nRowOffsetDest, nDestTab); + ScAddress aSrcAddress = ScAddress(nCol, curRow, nTab ); + ScPostIt* pClonedNote = pSrcNote->Clone(aSrcAddress, rDestCol.GetDoc(), aDestAddress, true ); + vCloned.push_back(pClonedNote); + } + + rDestCol.maCellNotes.set(nBlockStart + nOffsetInBlock + nRowOffsetDest, vCloned.begin(), vCloned.end()); + // sc::CellNoteStoreType maDestCellNotes = rDestCol.GetCellNoteStore(); + // maDestCellNotes.set(nBlockStart + nOffsetInBlock + nRowOffsetDest, vCloned.begin(), vCloned.end()); break; } - // TODO : notes need to duplicate notes - rDestCol.maCellNotes.set(nBlockStart + nOffsetInBlock + nRowOffsetDest, itData, itDataEnd); + // need to clone notes + std::vector<ScPostIt*> vCloned; + vCloned.reserve(itBlk->size); + SCROW curRow = nBlockStart; + for (; itData != itDataEnd; ++itData, ++curRow) + { + ScPostIt* pSrcNote = *itData; + ScAddress aDestAddress = ScAddress(nDestCol, curRow + nRowOffsetDest, nDestTab); + ScAddress aSrcAddress = ScAddress(nCol, curRow, nTab ); + ScPostIt* pClonedNote = pSrcNote->Clone(aSrcAddress, rDestCol.GetDoc(), aDestAddress, true ); + vCloned.push_back(pClonedNote); + } + rDestCol.maCellNotes.set(nBlockStart + nOffsetInBlock + nRowOffsetDest, vCloned.begin(), vCloned.end()); +// sc::CellNoteStoreType maDestCellNotes = rDestCol.GetCellNoteStore(); +// maDestCellNotes.set(nBlockStart + nOffsetInBlock + nRowOffsetDest, vCloned.begin(), vCloned.end()); } /* @@ -1700,6 +1730,7 @@ void ScColumn::CopyCellNotesToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDest void ScColumn::DuplicateNotes(SCROW nStartRow, size_t nDataSize, ScColumn& rDestCol, sc::ColumnBlockPosition& maDestBlockPos, SCROW nRowOffsetDest ) const { + SCCOL nDestCol = rDestCol.GetCol(); // no more needed SCTAB nDestTab = rDestCol.GetTab(); diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 5c46c9b..a7dee56 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -1633,8 +1633,6 @@ void ScColumn::SetEditText( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, Edit rBlockPos.miCellPos = maCells.set(rBlockPos.miCellPos, nRow, pEditText); rBlockPos.miCellTextAttrPos = maCellTextAttrs.set( rBlockPos.miCellTextAttrPos, nRow, sc::CellTextAttr()); -// ScPostIt* pPostIt; -// rBlockPos.miCellNotePos = maCellNotes.set(rBlockPos.miCellNotePos, nRow, pPostIt); CellStorageModified(); @@ -1769,9 +1767,6 @@ ScFormulaCell* ScColumn::SetFormulaCell( sc::ColumnBlockPosition& rBlockPos, SCR rBlockPos.miCellPos = maCells.set(rBlockPos.miCellPos, nRow, pCell); rBlockPos.miCellTextAttrPos = maCellTextAttrs.set( rBlockPos.miCellTextAttrPos, nRow, sc::CellTextAttr()); -// ScPostIt* pPostIt; -// rBlockPos.miCellNotePos = maCellNotes.set( -// rBlockPos.miCellNotePos, nRow, pPostIt); CellStorageModified(); @@ -2219,9 +2214,6 @@ void ScColumn::SetRawString( rBlockPos.miCellPos = maCells.set(rBlockPos.miCellPos, nRow, rStr); rBlockPos.miCellTextAttrPos = maCellTextAttrs.set( rBlockPos.miCellTextAttrPos, nRow, sc::CellTextAttr()); -// ScPostIt* pPostIt; -// rBlockPos.miCellNotePos = maCellNotes.set( -// rBlockPos.miCellNotePos, nRow, pPostIt); CellStorageModified(); @@ -2255,9 +2247,6 @@ void ScColumn::SetValue( rBlockPos.miCellPos = maCells.set(rBlockPos.miCellPos, nRow, fVal); rBlockPos.miCellTextAttrPos = maCellTextAttrs.set( rBlockPos.miCellTextAttrPos, nRow, sc::CellTextAttr()); -// ScPostIt* pPostIt; -// rBlockPos.miCellNotePos = maCellNotes.set( -// rBlockPos.miCellNotePos, nRow, pPostIt); CellStorageModified(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits