[Libreoffice-commits] core.git: sc/source
Markus Mohrhard
markus.mohrhard at googlemail.com
Sat Mar 9 16:32:40 PST 2013
sc/source/filter/xml/XMLExportIterator.cxx | 40 ++++++++++-------------------
sc/source/filter/xml/xmlexprt.cxx | 15 ++++++----
2 files changed, 23 insertions(+), 32 deletions(-)
New commits:
commit c7937e2a38501266ed658553c19db5b4a2237864
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun Mar 10 00:25:29 2013 +0100
handle note export correctly, fdo#61165
This code was horribly over-optimized and that actually with an error.
There is a nasty corner cases that has been left out in the code. Note
captions are actually normally not deleted from the document even if the
note is deleted. So we had now wrong note captions in the list that we
should not process but they were screwing up the export code that only
exports captions for existing notes.
When we only add the caption data for existing notes the code becomes so
much cleaner and the bug is immediately gone.
Change-Id: I51f1e9042f88f3f1b2d7aae75942629771d39012
diff --git a/sc/source/filter/xml/XMLExportIterator.cxx b/sc/source/filter/xml/XMLExportIterator.cxx
index cfbbe54..1662db7 100644
--- a/sc/source/filter/xml/XMLExportIterator.cxx
+++ b/sc/source/filter/xml/XMLExportIterator.cxx
@@ -861,33 +861,21 @@ bool ScMyNotEmptyCellsIterator::GetNext(ScMyCell& aCell, ScFormatRangeStyles* pC
table::CellAddress aAddress( nCurrentTable, MAXCOL + 1, MAXROW + 1 );
UpdateAddress( aAddress );
- if( (maNoteExportListItr != maNoteExportList.end()) && IsNoteBeforeNextCell(maNoteExportListItr->nCol, maNoteExportListItr->nRow, aAddress) )
- {
- //we have a note before the new cell
- aAddress.Column = maNoteExportListItr->nCol;
- aAddress.Row = maNoteExportListItr->nRow;
- ++maNoteExportListItr;
- }
- else
- {
- if(maNoteExportListItr != maNoteExportList.end() && maNoteExportListItr->nCol == aAddress.Column && maNoteExportListItr->nRow == aAddress.Row)
- ++maNoteExportListItr;
- if( pShapes )
- pShapes->UpdateAddress( aAddress );
- if( pNoteShapes )
- pNoteShapes->UpdateAddress( aAddress );
- if( pEmptyDatabaseRanges )
- pEmptyDatabaseRanges->UpdateAddress( aAddress );
- if( pMergedRanges )
- pMergedRanges->UpdateAddress( aAddress );
- if( pAreaLinks )
- pAreaLinks->UpdateAddress( aAddress );
- if( pDetectiveObj )
- pDetectiveObj->UpdateAddress( aAddress );
- if( pDetectiveOp )
- pDetectiveOp->UpdateAddress( aAddress );
- }
+ if( pShapes )
+ pShapes->UpdateAddress( aAddress );
+ if( pNoteShapes )
+ pNoteShapes->UpdateAddress( aAddress );
+ if( pEmptyDatabaseRanges )
+ pEmptyDatabaseRanges->UpdateAddress( aAddress );
+ if( pMergedRanges )
+ pMergedRanges->UpdateAddress( aAddress );
+ if( pAreaLinks )
+ pAreaLinks->UpdateAddress( aAddress );
+ if( pDetectiveObj )
+ pDetectiveObj->UpdateAddress( aAddress );
+ if( pDetectiveOp )
+ pDetectiveOp->UpdateAddress( aAddress );
bool bFoundCell((aAddress.Column <= MAXCOL) && (aAddress.Row <= MAXROW));
if( bFoundCell )
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index b373338..0e6e3f2 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -2533,13 +2533,16 @@ void ScXMLExport::CollectInternalShape( uno::Reference< drawing::XShape > xShape
// collect note caption objects from all layers (internal or hidden)
if( ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObject, static_cast< SCTAB >( nCurrentTable ) ) )
{
- pSharedData->AddNoteObj( xShape, pCaptData->maStart );
+ if(pDoc->GetNotes(nCurrentTable)->findByAddress(pCaptData->maStart))
+ {
+ pSharedData->AddNoteObj( xShape, pCaptData->maStart );
- // #i60851# When the file is saved while editing a new note,
- // the cell is still empty -> last column/row must be updated
- OSL_ENSURE( pCaptData->maStart.Tab() == nCurrentTable, "invalid table in object data" );
- pSharedData->SetLastColumn( nCurrentTable, pCaptData->maStart.Col() );
- pSharedData->SetLastRow( nCurrentTable, pCaptData->maStart.Row() );
+ // #i60851# When the file is saved while editing a new note,
+ // the cell is still empty -> last column/row must be updated
+ OSL_ENSURE( pCaptData->maStart.Tab() == nCurrentTable, "invalid table in object data" );
+ pSharedData->SetLastColumn( nCurrentTable, pCaptData->maStart.Col() );
+ pSharedData->SetLastRow( nCurrentTable, pCaptData->maStart.Row() );
+ }
}
// other objects from internal layer only (detective)
else if( pObject->GetLayer() == SC_LAYER_INTERN )
More information about the Libreoffice-commits
mailing list