Rebased ref, commits from common ancestor: commit 4398cb1dccb7f024256dfad654e58164bbd5a7ce Author: Laurent Godard <lgodard.li...@laposte.net> Date: Fri Sep 20 19:18:55 2013 +0200
sync notes captions on sort Change-Id: Ib63ded7e1516a5a4ed8e7d17c3f0480e5ed5b50e diff --git a/sc/inc/postit.hxx b/sc/inc/postit.hxx index 8640ebf..c632817 100644 --- a/sc/inc/postit.hxx +++ b/sc/inc/postit.hxx @@ -160,8 +160,6 @@ private: class SC_DLLPUBLIC ScNoteUtil { public: - /** Tries to update the position of note caption objects in the specified range. */ - static void UpdateCaptionPositions( ScDocument& rDoc, const ScRange& rRange ); /** Creates and returns a caption object for a temporary caption. */ static SdrCaptionObj* CreateTempCaption( ScDocument& rDoc, const ScAddress& rPos, diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 9fede25..d34d2c9 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -3853,16 +3853,15 @@ void Test::testSort() aSortData.maKeyState[0].nField = 1; aSortData.maKeyState[0].bAscending = true; -/* TODO : notes crash - m_pDoc->Sort(0, aSortData, false, NULL); // TODO : notes crash + m_pDoc->Sort(0, aSortData, false, NULL); double nVal = m_pDoc->GetValue(1,0,0); ASSERT_DOUBLES_EQUAL(nVal, 1.0); // check that note is also moved after sorting - pNote = m_pDoc->GetNote(1, 0, 0); //TODO : notes GetNotes + pNote = m_pDoc->GetNote(1, 0, 0); CPPUNIT_ASSERT(pNote); -*/ + clearRange(m_pDoc, ScRange(0, 0, 0, 1, 9, 0)); // Clear A1:B10. { // 0 = empty cell diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index d7433a4..f38ce5a 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1722,6 +1722,8 @@ void ScColumn::SwapCellNotes( SCROW nRow1, SCROW nRow2 ) if (aPos2.first == maCellNotes.end()) return; + ScPostIt* aNote; + sc::CellNoteStoreType::iterator it1 = aPos1.first, it2 = aPos2.first; if (it1->type == it2->type) { @@ -1734,6 +1736,12 @@ void ScColumn::SwapCellNotes( SCROW nRow1, SCROW nRow2 ) sc::cellnote_block::at(*it1->data, aPos1.second), sc::cellnote_block::at(*it2->data, aPos2.second)); + //update captions + aNote = sc::cellnote_block::at(*it1->data, aPos1.second); + aNote->UpdateCaptionPos(ScAddress(nCol,nRow2,nTab)); + aNote = sc::cellnote_block::at(*it2->data, aPos2.second); + aNote->UpdateCaptionPos(ScAddress(nCol,nRow1,nTab)); + return; } @@ -1741,16 +1749,23 @@ void ScColumn::SwapCellNotes( SCROW nRow1, SCROW nRow2 ) if (it1->type == sc::element_type_empty) { // row 1 is empty while row 2 is non-empty. - const ScPostIt* rVal2 = sc::cellnote_block::at(*it2->data, aPos2.second); - it1 = maCellNotes.set(it1, nRow1, rVal2); + ScPostIt* pVal2 = sc::cellnote_block::at(*it2->data, aPos2.second); + it1 = maCellNotes.set(it1, nRow1, pVal2); maCellNotes.set_empty(it1, nRow2, nRow2); + + //update captions + pVal2->UpdateCaptionPos(ScAddress(nCol,nRow1,nTab)); + return; } // row 1 is non-empty while row 2 is empty. - ScPostIt* aVal1 = sc::cellnote_block::at(*it1->data, aPos1.second); // make a copy. + ScPostIt* pVal1 = sc::cellnote_block::at(*it1->data, aPos1.second); // make a copy. it1 = maCellNotes.set_empty(it1, nRow1, nRow1); - maCellNotes.set(it1, nRow2, aVal1); + maCellNotes.set(it1, nRow2, pVal1); + + //update captions + pVal1->UpdateCaptionPos(ScAddress(nCol,nRow1,nTab)); CellStorageModified(); } diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx index a39794c..9896034 100644 --- a/sc/source/core/data/postit.cxx +++ b/sc/source/core/data/postit.cxx @@ -794,16 +794,6 @@ void ScPostIt::RemoveCaption() // ============================================================================ -void ScNoteUtil::UpdateCaptionPositions( ScDocument& rDoc, const ScRange& rRange ) -{ - // do not use ScCellIterator, it skips filtered and subtotal cells - for( ScAddress aPos( rRange.aStart ); aPos.Tab() <= rRange.aEnd.Tab(); aPos.IncTab() ) - for( aPos.SetCol( rRange.aStart.Col() ); aPos.Col() <= rRange.aEnd.Col(); aPos.IncCol() ) - for( aPos.SetRow( rRange.aStart.Row() ); aPos.Row() <= rRange.aEnd.Row(); aPos.IncRow() ) - if( ScPostIt* pNote = rDoc.GetNote(aPos) ) - pNote->UpdateCaptionPos( aPos ); -} - SdrCaptionObj* ScNoteUtil::CreateTempCaption( ScDocument& rDoc, const ScAddress& rPos, SdrPage& rDrawPage, const OUString& rUserText, const Rectangle& rVisRect, bool bTailFront ) diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index 3e2b78f..a8877d9 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -666,8 +666,7 @@ void ScTable::Sort(const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* p QuickSort( pArray, nRow1, nLastRow ); SortReorder( pArray, pProgress ); delete pArray; - // #i59745# update position of caption objects of cell notes - ScNoteUtil::UpdateCaptionPositions( *pDocument, ScRange( aSortParam.nCol1, nRow1, nTab, aSortParam.nCol2, nLastRow, nTab ) ); + // #i59745# update position of caption objects of cell notes --> reported at (SortReorder) ScColumn::SwapCellNotes level } } else @@ -687,8 +686,7 @@ void ScTable::Sort(const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* p QuickSort( pArray, nCol1, nLastCol ); SortReorder( pArray, pProgress ); delete pArray; - // #i59745# update position of caption objects of cell notes - ScNoteUtil::UpdateCaptionPositions( *pDocument, ScRange( nCol1, aSortParam.nRow1, nTab, nLastCol, aSortParam.nRow2, nTab ) ); + // #i59745# update position of caption objects of cell notes --> reported at (SortReorder) ScColumn::SwapCellNotes level } } DestroySortCollator(); commit 8527feb67223778618b85610b45dadaeea36fbc3 Author: Laurent Godard <lgodard.li...@laposte.net> Date: Fri Sep 20 18:09:36 2013 +0200 a new unit test project for testing row/col swapping with notes - does not work as the methods are private Change-Id: I4d48167cee3e9dff9bc64d2a6f3c7d79f1e7cad4 diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 69f44c6..9fede25 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -513,6 +513,8 @@ void Test::testCopyToDocument() m_pDoc->SetString(0, 4, 0, "=4/2"); m_pDoc->CalcAll(); + //TODO : notes + // Copy statically to another document. ScDocument aDestDoc(SCDOCMODE_DOCUMENT); @@ -3975,6 +3977,93 @@ void Test::testNoteDeleteCol() pDoc->DeleteTab(0); } +/* TODO : notes - these are private methods :( + +void Test::testSwapCells() +{ + ScDocument* pDoc = getDocShell().GetDocument(); + OUString aSheet1("Sheet1"); + pDoc->InsertTab(0, aSheet1); + + OUString aString; + + OUString aStringA1("originally A1"); + OUString aStringA2("originally A2"); + OUString aStringA3("originally A3"); + OUString aStringB1("originally B1"); + OUString aStringB2("originally B2"); + OUString aStringB3("originally B3"); + + + m_pDoc->SetString(0, 0, 0, aStringA1); + m_pDoc->SetString(0, 1, 0, aStringA2); + m_pDoc->SetString(0, 2, 0, aStringA3); + + m_pDoc->SetString(1, 0, 0, aStringB1); + m_pDoc->SetString(1, 1, 0, aStringB2); + m_pDoc->SetString(1, 2, 0, aStringB3); + + ScTable* pTab = pDoc->GetTable[0]; + + // swap rows + pTab->SwapRow(0,1); + + aString = m_pDoc->GetString(0,0,0); + CPPUNIT_ASSERT_MESSAGE("A1 should contain aStringA2", aString == aStringA2); + aString = m_pDoc->GetString(0,1,0); + CPPUNIT_ASSERT_MESSAGE("A2 should contain aStringA1", aString == aStringA1); + aString = m_pDoc->GetString(1,0,0); + CPPUNIT_ASSERT_MESSAGE("B1 should contain aStringB2", aString == aStringB2); + aString = m_pDoc->GetString(1,1,0); + CPPUNIT_ASSERT_MESSAGE("B2 should contain aStringB1", aString == aStringB1); + aString = m_pDoc->GetString(0,2,0); + CPPUNIT_ASSERT_MESSAGE("A3 should contain aStringA3", aString == aStringA3); + + // back to orginal state + pTab->SwapRow(1,0); + + aString = m_pDoc->GetString(0,0,0); + CPPUNIT_ASSERT_MESSAGE("A1 should contain aStringA1", aString == aStringA1); + aString = m_pDoc->GetString(0,1,0); + CPPUNIT_ASSERT_MESSAGE("A2 should contain aStringA1", aString == aStringA2); + aString = m_pDoc->GetString(1,0,0); + CPPUNIT_ASSERT_MESSAGE("B1 should contain aStringB1", aString == aStringB1); + aString = m_pDoc->GetString(1,1,0); + CPPUNIT_ASSERT_MESSAGE("B2 should contain aStringB2", aString == aStringB2); + aString = m_pDoc->GetString(0,2,0); + CPPUNIT_ASSERT_MESSAGE("A3 should contain aStringA3", aString == aStringA3); + + // swap cols + pTab->SwapCol(0,1); + + aString = m_pDoc->GetString(0,0,0); + CPPUNIT_ASSERT_MESSAGE("A1 should contain aStringB1", aString == aStringB1); + aString = m_pDoc->GetString(1,0,0); + CPPUNIT_ASSERT_MESSAGE("B1 should contain aStringA1", aString == aStringA1); + aString = m_pDoc->GetString(0,1,0); + CPPUNIT_ASSERT_MESSAGE("A2 should contain aStringB2", aString == aStringB2); + aString = m_pDoc->GetString(1,1,0); + CPPUNIT_ASSERT_MESSAGE("B2 should contain aStringA2", aString == aStringA2); + aString = m_pDoc->GetString(0,2,0); + CPPUNIT_ASSERT_MESSAGE("A3 should contain aStringA3", aString == aStringA3); + + // back to orginal state + pTab->SwapRow(1,0); + + aString = m_pDoc->GetString(0,0,0); + CPPUNIT_ASSERT_MESSAGE("A1 should contain aStringA1", aString == aStringA1); + aString = m_pDoc->GetString(0,1,0); + CPPUNIT_ASSERT_MESSAGE("A2 should contain aStringA1", aString == aStringA2); + aString = m_pDoc->GetString(1,0,0); + CPPUNIT_ASSERT_MESSAGE("B1 should contain aStringB1", aString == aStringB1); + aString = m_pDoc->GetString(1,1,0); + CPPUNIT_ASSERT_MESSAGE("B2 should contain aStringB2", aString == aStringB2); + aString = m_pDoc->GetString(0,2,0); + CPPUNIT_ASSERT_MESSAGE("A3 should contain aStringA3", aString == aStringA3); + +} +*/ + void Test::testAnchoredRotatedShape() { OUString aTabName("TestTab"); diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx index 31e1ddc..1273241 100644 --- a/sc/qa/unit/ucalc.hxx +++ b/sc/qa/unit/ucalc.hxx @@ -268,6 +268,7 @@ public: void testShiftCells(); void testNoteDeleteRow(); void testNoteDeleteCol(); +// void testSwapCells(); void testAnchoredRotatedShape(); void testCellTextWidth(); void testEditTextIterator(); @@ -369,6 +370,7 @@ public: CPPUNIT_TEST(testShiftCells); CPPUNIT_TEST(testNoteDeleteRow); CPPUNIT_TEST(testNoteDeleteCol); +// CPPUNIT_TEST(testSwapCells); CPPUNIT_TEST(testAnchoredRotatedShape); CPPUNIT_TEST(testCellTextWidth); CPPUNIT_TEST(testEditTextIterator); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits