[Libreoffice-commits] core.git: Branch 'feature/sc-notes-storage' - 2 commits - sc/qa sc/source
Laurent Godard
lgodard.libre at laposte.net
Wed Sep 25 06:08:56 PDT 2013
sc/qa/unit/ucalc.hxx | 2
sc/source/core/data/column2.cxx | 1
sc/source/core/data/postit.cxx | 1
sc/source/filter/xml/XMLExportIterator.cxx | 107 ++---------------------------
sc/source/filter/xml/XMLExportIterator.hxx | 39 ----------
sc/source/filter/xml/xmlexprt.cxx | 37 +++++++---
6 files changed, 41 insertions(+), 146 deletions(-)
New commits:
commit e56b351f680ee97c34f95f08e16c8ecb87cbb5ba
Author: Laurent Godard <lgodard.libre at laposte.net>
Date: Wed Sep 25 13:52:50 2013 +0200
first working export of notes
- dirty, need to be cleaned
Change-Id: I3819a2717d7d24ca53254f2bc46db3ce7f9eed7f
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index eab3076..8f97e51 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1891,6 +1891,7 @@ const ScPostIt* ScColumn::GetCellNote(SCROW nRow) const
void ScColumn::SetCellNote(SCROW nRow, ScPostIt* pNote)
{
+ pNote->UpdateCaptionPos(ScAddress(nCol, nRow, nTab));
maCellNotes.set(nRow, pNote);
}
void ScColumn::DeleteCellNote(SCROW nRow)
diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx
index 9896034..4d3f175 100644
--- a/sc/source/core/data/postit.cxx
+++ b/sc/source/core/data/postit.cxx
@@ -906,6 +906,7 @@ ScPostIt* ScNoteUtil::CreateNoteFromObjectData(
pNote->AutoStamp();
rDoc.SetNote(rPos, pNote);
+
if(pNote)
return pNote;
else
diff --git a/sc/source/filter/xml/XMLExportIterator.cxx b/sc/source/filter/xml/XMLExportIterator.cxx
index 6ff000c..afc05fd 100644
--- a/sc/source/filter/xml/XMLExportIterator.cxx
+++ b/sc/source/filter/xml/XMLExportIterator.cxx
@@ -160,14 +160,12 @@ bool ScMyNoteShapesContainer::GetFirstAddress( table::CellAddress& rCellAddress
void ScMyNoteShapesContainer::SetCellData( ScMyCell& rMyCell )
{
- rMyCell.xNoteShape.clear();
ScAddress aAddress;
ScUnoConversion::FillScAddress( aAddress, rMyCell.aCellAddress );
ScMyNoteShapeList::iterator aItr = aNoteShapeList.begin();
while( (aItr != aNoteShapeList.end()) && (aItr->aPos == aAddress) )
{
- rMyCell.xNoteShape = aItr->xShape;
aItr = aNoteShapeList.erase(aItr);
}
}
@@ -618,15 +616,6 @@ ScMyCell::~ScMyCell()
//==============================================================================
-bool ScMyExportAnnotation::operator<(const ScMyExportAnnotation& rAnno) const
-{
- if( aCellAddress.Row != rAnno.aCellAddress.Row )
- return (aCellAddress.Row < rAnno.aCellAddress.Row);
- else
- return (aCellAddress.Column < rAnno.aCellAddress.Column);
-}
-
-
ScMyNotEmptyCellsIterator::ScMyNotEmptyCellsIterator(ScXMLExport& rTempXMLExport)
: pShapes(NULL),
pNoteShapes(NULL),
@@ -648,12 +637,6 @@ ScMyNotEmptyCellsIterator::~ScMyNotEmptyCellsIterator()
void ScMyNotEmptyCellsIterator::Clear()
{
- if (!aAnnotations.empty())
- {
- OSL_FAIL("not all Annotations saved");
- aAnnotations.clear();
- }
- maNoteExportList.clear();
mpCellItr.reset();
pShapes = NULL;
pNoteShapes = NULL;
@@ -720,39 +703,27 @@ void ScMyNotEmptyCellsIterator::SetCellData( ScMyCell& rMyCell, table::CellAddre
void ScMyNotEmptyCellsIterator::HasAnnotation(ScMyCell& aCell)
{
aCell.bHasAnnotation = false;
- if (!aAnnotations.empty())
+ ScAddress aAddress;
+ ScUnoConversion::FillScAddress( aAddress, aCell.aCellAddress );
+
+ ScPostIt* pNote = rExport.GetDocument()->GetNote(aAddress);
+
+ if(pNote)
{
- ScMyExportAnnotationList::iterator aItr(aAnnotations.begin());
- if ((aCell.aCellAddress.Column == aItr->aCellAddress.Column) &&
- (aCell.aCellAddress.Row == aItr->aCellAddress.Row))
- {
- aCell.xAnnotation.set(aItr->xAnnotation);
- uno::Reference<text::XSimpleText> xSimpleText(aCell.xAnnotation, uno::UNO_QUERY);
- if (aCell.xAnnotation.is() && xSimpleText.is())
- {
- if (!xSimpleText->getString().isEmpty())
- aCell.bHasAnnotation = true;
- }
- aAnnotations.erase(aItr);
- }
+ aCell.bHasAnnotation = true;
+ aCell.pNote = pNote;
}
-
- // test - bypass the API
- // if (xCellRange.is())
- // aCell.xCell.set(xCellRange->getCellByPosition(aCell.aCellAddress.Column, aCell.aCellAddress.Row));
}
void ScMyNotEmptyCellsIterator::SetCurrentTable(const SCTAB nTable,
uno::Reference<sheet::XSpreadsheet>& rxTable)
{
- OSL_ENSURE(aAnnotations.empty(), "not all Annotations saved");
aLastAddress.Row = 0;
aLastAddress.Column = 0;
aLastAddress.Sheet = nTable;
if (nCurrentTable != nTable)
{
- maNoteExportList.clear();
nCurrentTable = nTable;
mpCellItr.reset(
@@ -761,75 +732,15 @@ void ScMyNotEmptyCellsIterator::SetCurrentTable(const SCTAB nTable,
static_cast<SCCOL>(rExport.GetSharedData()->GetLastColumn(nCurrentTable)),
static_cast<SCROW>(rExport.GetSharedData()->GetLastRow(nCurrentTable))));
-/* TODO : notes
-
- ScTable* pTable = rExport.GetDocument()-> GetTable(nTable);
- for ( SCCOL c=0; c < MAXCOLCOUNT; c++)
- {
- if (pTable->GetColumn(c).HasCellNote())
- {
- sc::CellNoteStoreType& noteStore = pTable.GetColumn(c).GetCellNoteStore();
- sc::CellNoteStoreType::iterator it = noteStore.begin(), itEnd = noteStore.end();
- for (; it != itEnd; ++it)
- {
- ScNoteExportData aExportData;
- aExportData.nCol = c;
- aExportData.nRow = static_cast <SCROW>(it);
- aExportData.pNote = it->first;
- maNoteExportList.insert( aExportData );
- }
- }
- }
-
- ScNotes* pNotes = rExport.GetDocument()->GetNotes(nTable);
- if(pNotes)
- {
- for(ScNotes::iterator itr = pNotes->begin(), itrEnd = pNotes->end(); itr != itrEnd; ++itr)
- {
- ScNoteExportData aExportData;
- aExportData.nCol = itr->first.first;
- aExportData.nRow = itr->first.second;
- aExportData.pNote = itr->second;
- maNoteExportList.insert( aExportData );
- }
- }
-*/
- maNoteExportListItr = maNoteExportList.begin();
-
-
xTable.set(rxTable);
xCellRange.set(xTable, uno::UNO_QUERY);
- uno::Reference<sheet::XSheetAnnotationsSupplier> xSheetAnnotationsSupplier (xTable, uno::UNO_QUERY);
- if (xSheetAnnotationsSupplier.is())
- {
- uno::Reference<container::XEnumerationAccess> xAnnotationAccess ( xSheetAnnotationsSupplier->getAnnotations(), uno::UNO_QUERY);
- if (xAnnotationAccess.is())
- {
- uno::Reference<container::XEnumeration> xAnnotations(xAnnotationAccess->createEnumeration());
- if (xAnnotations.is())
- {
- while (xAnnotations->hasMoreElements())
- {
- ScMyExportAnnotation aAnnotation;
- aAnnotation.xAnnotation.set(xAnnotations->nextElement(), uno::UNO_QUERY);
- if (aAnnotation.xAnnotation.is())
- {
- aAnnotation.aCellAddress = aAnnotation.xAnnotation->getPosition();
- aAnnotations.push_back(aAnnotation);
- }
- }
- if (!aAnnotations.empty())
- aAnnotations.sort();
- }
- }
- }
}
}
void ScMyNotEmptyCellsIterator::SkipTable(SCTAB nSkip)
{
// Skip entries for a sheet that is copied instead of saving normally.
- // Cells (including aAnnotations) are handled separately in SetCurrentTable.
+ // Cells are handled separately in SetCurrentTable.
if( pShapes )
pShapes->SkipTable(nSkip);
diff --git a/sc/source/filter/xml/XMLExportIterator.hxx b/sc/source/filter/xml/XMLExportIterator.hxx
index 9fa520d..857f98c 100644
--- a/sc/source/filter/xml/XMLExportIterator.hxx
+++ b/sc/source/filter/xml/XMLExportIterator.hxx
@@ -294,8 +294,6 @@ public:
// contains data to export for the current cell position
struct ScMyCell
{
- com::sun::star::uno::Reference<com::sun::star::sheet::XSheetAnnotation> xAnnotation;
- com::sun::star::uno::Reference<com::sun::star::drawing::XShape> xNoteShape;
com::sun::star::table::CellAddress aCellAddress;
com::sun::star::table::CellRangeAddress aMergeRange;
com::sun::star::table::CellRangeAddress aMatrixRange;
@@ -305,6 +303,8 @@ struct ScMyCell
ScMyDetectiveObjVec aDetectiveObjVec;
ScMyDetectiveOpVec aDetectiveOpVec;
+ ScPostIt* pNote;
+
sal_Int32 nValidationIndex;
sal_Int32 nStyleIndex;
sal_Int32 nNumberFormat;
@@ -332,44 +332,11 @@ struct ScMyCell
//==============================================================================
-struct ScMyExportAnnotation
-{
- com::sun::star::uno::Reference<com::sun::star::sheet::XSheetAnnotation> xAnnotation;
- com::sun::star::table::CellAddress aCellAddress;
- bool operator<(const ScMyExportAnnotation& rAnno) const;
-};
-
-struct ScNoteExportData
-{
- SCROW nRow;
- SCCOL nCol;
- ScPostIt* pNote;
-
- bool operator<(const ScNoteExportData& r) const
- {
- if(nRow < r.nRow)
- return true;
- else if(nRow > r.nRow)
- return false;
- else
- {
- if(nCol < r.nCol)
- return true;
- else
- return false;
- }
- }
-};
-
-typedef ::std::list< ScMyExportAnnotation > ScMyExportAnnotationList;
-typedef ::std::set< ScNoteExportData > ScMyNoteExportDataList;
-
class ScMyNotEmptyCellsIterator : boost::noncopyable
{
com::sun::star::uno::Reference<com::sun::star::sheet::XSpreadsheet> xTable;
com::sun::star::uno::Reference<com::sun::star::table::XCellRange> xCellRange;
com::sun::star::table::CellAddress aLastAddress;
- ScMyExportAnnotationList aAnnotations;
ScMyShapesContainer* pShapes;
ScMyNoteShapesContainer* pNoteShapes;
@@ -378,8 +345,6 @@ class ScMyNotEmptyCellsIterator : boost::noncopyable
ScMyAreaLinksContainer* pAreaLinks;
ScMyDetectiveObjContainer* pDetectiveObj;
ScMyDetectiveOpContainer* pDetectiveOp;
- ScMyNoteExportDataList maNoteExportList;
- ScMyNoteExportDataList::iterator maNoteExportListItr;
ScXMLExport& rExport;
boost::scoped_ptr<ScHorizontalCellIterator> mpCellItr;
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index bd8b3e5..bab349e 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -655,7 +655,6 @@ void ScXMLExport::CollectSharedData(sal_Int32& nTableCount, sal_Int32& nShapesCo
for (SCTAB nTable = 0; nTable < nTableCount; ++nTable)
{
- // pDoc->GetNotes(nTable)->CreateAllNoteCaptions(nTable);
nCurrentTable = sal::static_int_cast<sal_uInt16>(nTable);
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xIndex->getByIndex(nTable), uno::UNO_QUERY);
if (!xDrawPageSupplier.is())
@@ -3643,9 +3642,22 @@ void ScXMLExport::WriteAreaLink( const ScMyCell& rMyCell )
void ScXMLExport::exportAnnotationMeta( const uno::Reference < drawing::XShape >& xShape)
{
- if (pCurrentCell && pCurrentCell->xNoteShape.is() && pCurrentCell->xNoteShape.get() == xShape.get() && pCurrentCell->xAnnotation.is())
+ ScAddress aCellPos;
+ ScUnoConversion::FillScAddress( aCellPos, pCurrentCell->aCellAddress );
+
+ ScPostIt* pNote = pCurrentCell->pNote;
+
+ if (pNote)
{
- OUString sAuthor(pCurrentCell->xAnnotation->getAuthor());
+ // TODO : notes
+ //is it still usefull, as this call back is only called from ScXMLExport::WriteAnnotation
+ // and should be in sync with pCurrentCell
+ SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(aCellPos);
+ Reference<drawing::XShape> xCurrentShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY );
+ if (xCurrentShape.get()!=xShape.get())
+ return;
+
+ OUString sAuthor(pNote->GetAuthor());
if (!sAuthor.isEmpty())
{
SvXMLElementExport aCreatorElem( *this, XML_NAMESPACE_DC,
@@ -3654,7 +3666,7 @@ void ScXMLExport::exportAnnotationMeta( const uno::Reference < drawing::XShape >
Characters(sAuthor);
}
- String aDate(pCurrentCell->xAnnotation->getDate());
+ String aDate(pNote->GetDate());
if (pDoc)
{
SvNumberFormatter* pNumForm = pDoc->GetFormatTable();
@@ -3689,20 +3701,25 @@ void ScXMLExport::exportAnnotationMeta( const uno::Reference < drawing::XShape >
void ScXMLExport::WriteAnnotation(ScMyCell& rMyCell)
{
- if( rMyCell.bHasAnnotation && rMyCell.xAnnotation.is())
- {
- if (rMyCell.xAnnotation->getIsVisible())
+ ScAddress aCellPos;
+ ScUnoConversion::FillScAddress( aCellPos, rMyCell.aCellAddress );
+
+ ScPostIt* pNote = pDoc->GetNote(aCellPos);
+ if (pNote)
+ {
+ if (pNote->IsCaptionShown())
AddAttribute(XML_NAMESPACE_OFFICE, XML_DISPLAY, XML_TRUE);
pCurrentCell = &rMyCell;
- if(rMyCell.xNoteShape.is())
- GetShapeExport()->exportShape(rMyCell.xNoteShape, SEF_DEFAULT|SEF_EXPORT_ANNOTATION, NULL);
+ SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(aCellPos);
+ Reference<drawing::XShape> xShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY );
+
+ GetShapeExport()->exportShape(xShape, SEF_DEFAULT|SEF_EXPORT_ANNOTATION, NULL);
pCurrentCell = NULL;
- rMyCell.xNoteShape.clear();
}
}
commit 2f6dd6a7df2190b61b696d50ae60f3411b48616a
Author: Laurent Godard <lgodard.libre at laposte.net>
Date: Wed Sep 25 13:52:34 2013 +0200
note unit test
Change-Id: I714576a3abec016ceacfe0e49b747e2bec603fca
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 0a141a3..ed2ae1f 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -348,8 +348,8 @@ public:
CPPUNIT_TEST(testToggleRefFlag);
CPPUNIT_TEST(testAutofilter);
CPPUNIT_TEST(testCopyPaste);
- CPPUNIT_TEST(testCopyPasteTranspose);
CPPUNIT_TEST(testMoveBlock);
+ CPPUNIT_TEST(testCopyPasteTranspose);
CPPUNIT_TEST(testCopyPasteRelativeFormula);
CPPUNIT_TEST(testMergedCells);
CPPUNIT_TEST(testUpdateReference);
More information about the Libreoffice-commits
mailing list