[Libreoffice-commits] core.git: Branch 'feature/sc-notes-storage' - sc/qa sc/source
Laurent Godard
lgodard.libre at laposte.net
Mon Sep 23 09:09:50 PDT 2013
sc/qa/unit/ucalc.cxx | 53 ++++++++++++++++++++++++++++++++++++++
sc/qa/unit/ucalc.hxx | 2 +
sc/source/core/data/column.cxx | 9 ++++--
sc/source/ui/docshell/docfunc.cxx | 18 +++++-------
4 files changed, 68 insertions(+), 14 deletions(-)
New commits:
commit 6ce4e50fe452ded99dac075eeaacc7ac03daf383
Author: Laurent Godard <lgodard.libre at laposte.net>
Date: Mon Sep 23 18:08:42 2013 +0200
transport attached notes when moving a block of cell
Change-Id: I608be1197cf4177aa67870ff34b61cf1fd67204c
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index fb0d07f..de928da 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -3067,6 +3067,59 @@ void Test::testCopyPasteTranspose()
m_pDoc->DeleteTab(0);
}
+void Test::testMoveBlock()
+{
+ m_pDoc->InsertTab(0, "Sheet1");
+
+ m_pDoc->SetValue(0, 0, 0, 1);
+ m_pDoc->SetString(1, 0, 0, OUString("=A1+1"));
+ m_pDoc->SetString(2, 0, 0, OUString("test"));
+
+ // add notes to A1:C1
+ ScAddress aAdrA1 (0, 0, 0); // numerical cell content
+ OUString aHelloA1("Hello world in A1");
+ ScPostIt *pNoteA1 = m_pDoc->GetOrCreateNote(aAdrA1);
+ pNoteA1->SetText(aAdrA1, aHelloA1);
+ ScAddress aAdrB1 (1, 0, 0); // formula cell content
+ OUString aHelloB1("Hello world in B1");
+ ScPostIt *pNoteB1 = m_pDoc->GetOrCreateNote(aAdrB1);
+ pNoteB1->SetText(aAdrB1, aHelloB1);
+ ScAddress aAdrC1 (2, 0, 0); // string cell content
+ OUString aHelloC1("Hello world in C1");
+ ScPostIt *pNoteC1 = m_pDoc->GetOrCreateNote(aAdrC1);
+ pNoteC1->SetText(aAdrC1, aHelloC1);
+
+ // move notes to B1:D1
+ bool bCut = true;
+ ScDocFunc& rDocFunc = getDocShell().GetDocFunc();
+ bool bMoveDone = rDocFunc.MoveBlock(ScRange(0,0,0,2,0,0), ScAddress( 1, 0, 0), bCut, false, false, false);
+
+ CPPUNIT_ASSERT_MESSAGE("Cells not moved", bMoveDone);
+
+ //check cell content
+ OUString aString = m_pDoc->GetString(3, 0, 0);
+ CPPUNIT_ASSERT_MESSAGE("Cell D1 should contain: test", aString.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("test")));
+ m_pDoc->GetFormula(2, 0, 0, aString);
+ CPPUNIT_ASSERT_MESSAGE("Cell C1 should contain an updated formula", aString.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("=B1+1")));
+ double fValue = m_pDoc->GetValue(ScAddress(1, 0, 0));
+ ASSERT_DOUBLES_EQUAL_MESSAGE("Cell B1 should contain 1", fValue, 1);
+
+ // cell notes has been moved 1 cell right (event when overlapping)
+ CPPUNIT_ASSERT_MESSAGE("There should be NO note on A1", !m_pDoc->HasNote(ScAddress(0, 0, 0)));
+ CPPUNIT_ASSERT_MESSAGE("There should be a note on B1", m_pDoc->HasNote(ScAddress(1, 0, 0)));
+ CPPUNIT_ASSERT_MESSAGE("There should be a note on C1", m_pDoc->HasNote(ScAddress(2, 0, 0)));
+ CPPUNIT_ASSERT_MESSAGE("There should be a note on D1", m_pDoc->HasNote(ScAddress(3, 0, 0)));
+/* still failing, wrong content ???
+ OUString sNoteText;
+ sNoteText = m_pDoc->GetNote(ScAddress(1, 0, 0))->GetText();
+ CPPUNIT_ASSERT_MESSAGE("Note content in B1", sNoteText == aHelloA1);
+ sNoteText = m_pDoc->GetNote(ScAddress(2, 0, 0))->GetText();
+ CPPUNIT_ASSERT_MESSAGE("Note content in C1", sNoteText == aHelloB1);
+ sNoteText = m_pDoc->GetNote(ScAddress(3, 0, 0))->GetText();
+ CPPUNIT_ASSERT_MESSAGE("Note content in D1", sNoteText == aHelloC1);
+*/
+ m_pDoc->DeleteTab(0);
+}
void Test::testCopyPasteRelativeFormula()
{
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 1273241..0a141a3 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -215,6 +215,7 @@ public:
void testAutofilter();
void testCopyPaste();
void testCopyPasteTranspose();
+ void testMoveBlock();
void testCopyPasteRelativeFormula();
void testMergedCells();
void testUpdateReference();
@@ -348,6 +349,7 @@ public:
CPPUNIT_TEST(testAutofilter);
CPPUNIT_TEST(testCopyPaste);
CPPUNIT_TEST(testCopyPasteTranspose);
+ CPPUNIT_TEST(testMoveBlock);
CPPUNIT_TEST(testCopyPasteRelativeFormula);
CPPUNIT_TEST(testMergedCells);
CPPUNIT_TEST(testUpdateReference);
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 193c8d3..70df4d0 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1670,7 +1670,7 @@ class CopyAsLinkHandler
void duplicateNotes(SCROW nStartRow, size_t nDataSize ) // TODO : notes suboptimal
{
- // the link status is only for cell content as it is not possible to un-link a note
+ // the link status is only for cell content as it is not possible to un-link a note --> the note is copied
sc::CellNoteStoreType maSrcCellNotes = mrSrcCol.GetCellNoteStore();
SCROW nRowMax = nStartRow + nDataSize;
@@ -1885,6 +1885,7 @@ class CopyByCloneHandler
aDestPos, true );
mrDestCol.GetDoc().ReleaseNote(aDestPos);
mrDestCol.GetDoc().SetNote(aDestPos, pClonedNote);
+ pClonedNote->UpdateCaptionPos(aDestPos);
}
}
}
@@ -2232,9 +2233,9 @@ void resetColumnPosition(sc::CellStoreType& rCells, SCCOL nCol)
void ScColumn::SwapCol(ScColumn& rCol)
{
maBroadcasters.swap(rCol.maBroadcasters);
- maCellNotes.swap(rCol.maCellNotes);
maCells.swap(rCol.maCells);
maCellTextAttrs.swap(rCol.maCellTextAttrs);
+ maCellNotes.swap(rCol.maCellNotes); // TODO : notes update caption ?
ScAttrArray* pTempAttr = rCol.pAttrArray;
rCol.pAttrArray = pAttrArray;
@@ -2278,7 +2279,7 @@ 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);
+ 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);
@@ -2383,6 +2384,8 @@ public:
{
ScAddress aUndoPos(mnCol, nRow, mnTab);
mbUpdated |= pCell->UpdateReference(mrCxt, mpUndoDoc, &aUndoPos);
+
+
}
bool isUpdated() const { return mbUpdated; }
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 6241a0e..81c1966 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -2717,14 +2717,14 @@ sal_Bool ScDocFunc::MoveBlock( const ScRange& rSource, const ScAddress& rDestPos
aDestMark.SelectTable( nTab, sal_True ); // Destination selektieren
aDestMark.SetMarkArea( aPasteDest );
- /* Do not copy cell notes and drawing objects here. While pasting, the
+ /* Do not drawing objects here. While pasting, the
function ScDocument::UpdateReference() is called which calls
ScDrawLayer::MoveCells() which may move away inserted objects to wrong
- positions (e.g. if source and destination range overlaps). Cell notes
- and drawing objects are pasted below after doing all adjusting. */
- pDoc->CopyFromClip( aPasteDest, aDestMark, IDF_ALL & ~(IDF_NOTE | IDF_OBJECTS),
+ positions (e.g. if source and destination range overlaps).*/
+ pDoc->CopyFromClip( aPasteDest, aDestMark, IDF_ALL & ~(IDF_OBJECTS),
pRefUndoDoc, pClipDoc, sal_True, false, bIncludeFiltered );
+
// skipped rows and merged cells don't mix
if ( !bIncludeFiltered && pClipDoc->HasClipFilteredRows() )
UnmergeCells( aPasteDest, false );
@@ -2734,15 +2734,11 @@ sal_Bool ScDocFunc::MoveBlock( const ScRange& rSource, const ScAddress& rDestPos
ScRange( 0,nDestRow,nDestTab, MAXCOL,nDestEndRow,nDestEndTab ),
false );
- /* Paste cell notes and drawing objects after adjusting formula references
+ /* Paste drawing objects after adjusting formula references
and row heights. There are no cell notes or drawing objects, if the
- clipdoc does not contain a drawing layer.
- #i102056# Passing IDF_NOTE only would overwrite cell contents with
- empty note cells, therefore the special modifier IDF_ADDNOTES is passed
- here too which changes the behaviour of ScColumn::CopyFromClip() to not
- touch existing cells. */
+ clipdoc does not contain a drawing layer.*/
if ( pClipDoc->GetDrawLayer() )
- pDoc->CopyFromClip( aPasteDest, aDestMark, IDF_NOTE | IDF_ADDNOTES | IDF_OBJECTS,
+ pDoc->CopyFromClip( aPasteDest, aDestMark, IDF_OBJECTS,
pRefUndoDoc, pClipDoc, sal_True, false, bIncludeFiltered );
if (bRecord)
More information about the Libreoffice-commits
mailing list