[Libreoffice-commits] core.git: Branch 'feature/notes-refactoring' - sc/source
Laurent Godard
lgodard.libre at laposte.net
Thu Nov 21 09:25:38 PST 2013
sc/source/filter/xml/xmlexprt.cxx | 243 ++++++++++++++++++--------------------
sc/source/filter/xml/xmlexprt.hxx | 3
2 files changed, 122 insertions(+), 124 deletions(-)
New commits:
commit dcfff93555491ccdbf622897e639d027810f109d
Author: Laurent Godard <lgodard.libre at laposte.net>
Date: Thu Nov 21 18:24:14 2013 +0100
refactor Notes AutoStyles export
Change-Id: I986bbf3cc21d724c486bbed4ad11c853fa498548
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 7831a38..1cdbaba 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -1366,42 +1366,6 @@ void ScXMLExport::ExportCellTextAutoStyles(sal_Int32 nTable)
GetProgressBarHelper()->ChangeReference(GetProgressBarHelper()->GetReference() + nCellCount);
}
-void ScXMLExport::ExportAnnotationsTextAutoStyles()
-{
- UniReference<XMLPropertySetMapper> xMapper = GetTextParagraphExport()->GetTextPropMapper()->getPropertySetMapper();
- UniReference<SvXMLAutoStylePoolP> xStylePool = GetAutoStylePool();
- const ScXMLEditAttributeMap& rAttrMap = GetEditAttributeMap();
-
- std::vector<sc::NoteEntry> aEntries;
- pDoc->GetAllNoteEntries(aEntries);
- std::vector<sc::NoteEntry>::const_iterator it = aEntries.begin(), itEnd = aEntries.end();
-
- for (; it != itEnd; ++it)
- {
- const ScPostIt& pNote = *it->mpNote;
- const EditTextObject* pEdit = pNote.GetEditTextObject();
-
- std::vector<editeng::Section> aAttrs;
- pEdit->GetAllSections(aAttrs);
- if (aAttrs.empty())
- continue;
-
- std::vector<editeng::Section>::const_iterator itSec = aAttrs.begin(), itSecEnd = aAttrs.end();
- for (; itSec != itSecEnd; ++itSec)
- {
- const std::vector<const SfxPoolItem*>& rSecAttrs = itSec->maAttributes;
- if (rSecAttrs.empty())
- // No formats applied to this section. Skip it.
- continue;
-
- std::vector<XMLPropertyState> aPropStates;
- toXMLPropertyStates(aPropStates, rSecAttrs, xMapper, rAttrMap);
- if (!aPropStates.empty())
- xStylePool->Add(XML_STYLE_FAMILY_TEXT_TEXT, OUString(), aPropStates, false);
- }
- }
-}
-
void ScXMLExport::WriteRowContent()
{
ScMyRowFormatRange aRange;
@@ -1997,6 +1961,7 @@ void ScXMLExport::_ExportContent()
sal_Int32 nStartOffset = -1;
sal_Int32 nEndOffset = -1;
if (pSheetData && pDoc && pDoc->IsStreamValid((SCTAB)nTable) && !pDoc->GetChangeTrack())
+// LG if (pSheetData && pDoc && !pDoc->GetChangeTrack())
pSheetData->GetStreamPos( nTable, nStartOffset, nEndOffset );
if ( nStartOffset >= 0 && nEndOffset >= 0 && xSourceStream.is() )
@@ -2439,93 +2404,10 @@ void ScXMLExport::_ExportAutoStyles()
++aTableIter;
}
- // stored styles for notes
-
- UniReference<SvXMLExportPropertyMapper> xShapeMapper = XMLShapeExport::CreateShapePropMapper( *this );
- GetShapeExport(); // make sure the graphics styles family is added
-
- const std::vector<ScNoteStyleEntry>& rNoteEntries = pSheetData->GetNoteStyles();
- std::vector<ScNoteStyleEntry>::const_iterator aNoteIter = rNoteEntries.begin();
- std::vector<ScNoteStyleEntry>::const_iterator aNoteEnd = rNoteEntries.end();
- while (aNoteIter != aNoteEnd)
- {
- ScAddress aPos = aNoteIter->maCellPos;
- SCTAB nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( nTable );
- if (bCopySheet)
- {
- //! separate method AddStyleFromNote needed?
-
- ScPostIt* pNote = pDoc->GetNote(aPos);
- OSL_ENSURE( pNote, "note not found" );
- if (pNote)
- {
- SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
- // all uno shapes are created anyway in CollectSharedData
- Reference<beans::XPropertySet> xShapeProperties( pDrawObj->getUnoShape(), uno::UNO_QUERY );
- if (xShapeProperties.is())
- {
- if ( !aNoteIter->maStyleName.isEmpty() )
- {
- std::vector<XMLPropertyState> xPropStates(xShapeMapper->Filter(xShapeProperties));
- OUString sParent;
- OUString sName( aNoteIter->maStyleName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_SD_GRAPHICS_ID, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_SD_GRAPHICS_ID, sName);
- }
- if ( !aNoteIter->maTextStyle.isEmpty() )
- {
- std::vector<XMLPropertyState> xPropStates(
- GetTextParagraphExport()->GetParagraphPropertyMapper()->Filter(xShapeProperties));
- OUString sParent;
- OUString sName( aNoteIter->maTextStyle );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
- }
- }
- }
- }
- ++aNoteIter;
- }
-
- // note paragraph styles
+ // stored notes styles
+ ExportAutoStylesFromNotes(pSheetData);
- UniReference<SvXMLExportPropertyMapper> xParaPropMapper = GetTextParagraphExport()->GetParagraphPropertyMapper();
-
- const std::vector<ScTextStyleEntry>& rNoteParaEntries = pSheetData->GetNoteParaStyles();
- std::vector<ScTextStyleEntry>::const_iterator aNoteParaIter = rNoteParaEntries.begin();
- std::vector<ScTextStyleEntry>::const_iterator aNoteParaEnd = rNoteParaEntries.end();
- while (aNoteParaIter != aNoteParaEnd)
- {
- ScAddress aPos = aNoteParaIter->maCellPos;
- SCTAB nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( nTable );
- if (bCopySheet)
- {
- ScPostIt* pNote = pDoc->GetNote( aPos );
- OSL_ENSURE( pNote, "note not found" );
- if (pNote)
- {
- SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
- Reference<container::XEnumerationAccess> xCellText(pDrawObj->getUnoShape(), uno::UNO_QUERY);
- Reference<beans::XPropertySet> xParaProp(
- lcl_GetEnumerated( xCellText, aNoteParaIter->maSelection.nStartPara ), uno::UNO_QUERY );
- if ( xParaProp.is() )
- {
- std::vector<XMLPropertyState> xPropStates(xParaPropMapper->Filter(xParaProp));
- OUString sParent;
- OUString sName( aNoteParaIter->maName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
- }
- }
- }
- ++aNoteParaIter;
- }
-
- // text notes styles
UniReference<SvXMLExportPropertyMapper> xTextPropMapper = XMLTextParagraphExport::CreateCharExtPropMapper( *this );
- ExportAnnotationsTextAutoStyles();
// stored text styles
@@ -2571,7 +2453,9 @@ void ScXMLExport::_ExportAutoStyles()
}
sal_Int32 nTableCount(xIndex->getCount());
pCellStyles->AddNewTable(nTableCount - 1);
+
CollectShapesAutoStyles(nTableCount);
+
for (sal_Int32 nTable = 0; nTable < nTableCount; ++nTable, IncrementProgressBar(false))
{
bool bUseStream = pSheetData && pDoc && pDoc->IsStreamValid((SCTAB)nTable) &&
@@ -2695,8 +2579,6 @@ void ScXMLExport::_ExportAutoStyles()
ExportCellTextAutoStyles(nTable);
}
-// ExportAnnotationsTextAutoStyles();
-
pChangeTrackingExportHelper->CollectAutoStyles();
GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_COLUMN,
@@ -2741,6 +2623,121 @@ void ScXMLExport::_ExportAutoStyles()
GetTextParagraphExport()->exportTextAutoStyles();
}
+void ScXMLExport::ExportAutoStylesFromNotes(ScSheetSaveData* pSheetData)
+{
+
+//ScSheetSaveData* pSheetData = ScModelObj::getImplementation(xSpreadDoc)->GetSheetSaveData();
+
+ // stored shape styles
+
+ UniReference<SvXMLExportPropertyMapper> xShapeMapper = XMLShapeExport::CreateShapePropMapper( *this );
+ GetShapeExport(); // make sure the graphics styles family is added
+
+ const std::vector<ScNoteStyleEntry>& rNoteEntries = pSheetData->GetNoteStyles();
+ std::vector<ScNoteStyleEntry>::const_iterator aNoteIter = rNoteEntries.begin();
+ std::vector<ScNoteStyleEntry>::const_iterator aNoteEnd = rNoteEntries.end();
+ while (aNoteIter != aNoteEnd)
+ {
+ ScAddress aPos = aNoteIter->maCellPos;
+ ScPostIt* pNote = pDoc->GetNote(aPos);
+ OSL_ENSURE( pNote, "note not found" );
+ if (pNote)
+ {
+ SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
+ // all uno shapes are created anyway in CollectSharedData
+ Reference<beans::XPropertySet> xShapeProperties( pDrawObj->getUnoShape(), uno::UNO_QUERY );
+ if (xShapeProperties.is())
+ {
+ if ( !aNoteIter->maStyleName.isEmpty() )
+ {
+ std::vector<XMLPropertyState> xPropStates(xShapeMapper->Filter(xShapeProperties));
+ OUString sParent;
+ OUString sName( aNoteIter->maStyleName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_SD_GRAPHICS_ID, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_SD_GRAPHICS_ID, sName);
+ }
+ if ( !aNoteIter->maTextStyle.isEmpty() )
+ {
+ std::vector<XMLPropertyState> xPropStates(
+ GetTextParagraphExport()->GetParagraphPropertyMapper()->Filter(xShapeProperties));
+ OUString sParent;
+ OUString sName( aNoteIter->maTextStyle );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
+ }
+ }
+ }
+ ++aNoteIter;
+ }
+
+ // stored para styles
+
+ UniReference<SvXMLExportPropertyMapper> xParaPropMapper = GetTextParagraphExport()->GetParagraphPropertyMapper();
+
+ const std::vector<ScTextStyleEntry>& rNoteParaEntries = pSheetData->GetNoteParaStyles();
+ std::vector<ScTextStyleEntry>::const_iterator aNoteParaIter = rNoteParaEntries.begin();
+ std::vector<ScTextStyleEntry>::const_iterator aNoteParaEnd = rNoteParaEntries.end();
+ while (aNoteParaIter != aNoteParaEnd)
+ {
+ ScAddress aPos = aNoteParaIter->maCellPos;
+ ScPostIt* pNote = pDoc->GetNote( aPos );
+ OSL_ENSURE( pNote, "note not found" );
+ if (pNote)
+ {
+ SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
+ Reference<container::XEnumerationAccess> xCellText(pDrawObj->getUnoShape(), uno::UNO_QUERY);
+ Reference<beans::XPropertySet> xParaProp(
+ lcl_GetEnumerated( xCellText, aNoteParaIter->maSelection.nStartPara ), uno::UNO_QUERY );
+ if ( xParaProp.is() )
+ {
+ std::vector<XMLPropertyState> xPropStates(xParaPropMapper->Filter(xParaProp));
+ OUString sParent;
+ OUString sName( aNoteParaIter->maName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
+ }
+ }
+ ++aNoteParaIter;
+ }
+
+ // stored text style
+
+ UniReference<XMLPropertySetMapper> xMapper = GetTextParagraphExport()->GetTextPropMapper()->getPropertySetMapper();
+ UniReference<SvXMLAutoStylePoolP> xStylePool = GetAutoStylePool();
+ const ScXMLEditAttributeMap& rAttrMap = GetEditAttributeMap();
+
+ std::vector<sc::NoteEntry> aEntries;
+ pDoc->GetAllNoteEntries(aEntries);
+ std::vector<sc::NoteEntry>::const_iterator it = aEntries.begin(), itEnd = aEntries.end();
+
+ for (; it != itEnd; ++it)
+ {
+ const ScPostIt& pNote = *it->mpNote;
+ const EditTextObject* pEdit = pNote.GetEditTextObject();
+
+ std::vector<editeng::Section> aAttrs;
+ pEdit->GetAllSections(aAttrs);
+ if (aAttrs.empty())
+ continue;
+
+ std::vector<editeng::Section>::const_iterator itSec = aAttrs.begin(), itSecEnd = aAttrs.end();
+ for (; itSec != itSecEnd; ++itSec)
+ {
+ const std::vector<const SfxPoolItem*>& rSecAttrs = itSec->maAttributes;
+ if (rSecAttrs.empty())
+ // No formats applied to this section. Skip it.
+ continue;
+
+ std::vector<XMLPropertyState> aPropStates;
+ toXMLPropertyStates(aPropStates, rSecAttrs, xMapper, rAttrMap);
+ if (!aPropStates.empty())
+ xStylePool->Add(XML_STYLE_FAMILY_TEXT_TEXT, OUString(), aPropStates, false);
+ }
+ }
+}
+
+
+
void ScXMLExport::_ExportMasterStyles()
{
GetPageExport()->exportMasterStyles( true );
diff --git a/sc/source/filter/xml/xmlexprt.hxx b/sc/source/filter/xml/xmlexprt.hxx
index 87c68d1f..1fec736 100644
--- a/sc/source/filter/xml/xmlexprt.hxx
+++ b/sc/source/filter/xml/xmlexprt.hxx
@@ -62,6 +62,7 @@ class ScRangeName;
class ScXMLEditAttributeMap;
class EditTextObject;
class ScFormulaCell;
+class ScSheetSaveData;
typedef std::vector< com::sun::star::uno::Reference < com::sun::star::drawing::XShapes > > ScMyXShapesVec;
@@ -155,7 +156,7 @@ class ScXMLExport : public SvXMLExport
void ExportColumns(const sal_Int32 nTable, const com::sun::star::table::CellRangeAddress& aColumnHeaderRange, const bool bHasColumnHeader);
void ExportExternalRefCacheStyles();
void ExportCellTextAutoStyles(sal_Int32 nTable);
- void ExportAnnotationsTextAutoStyles();
+ void ExportAutoStylesFromNotes(ScSheetSaveData* pSheetData);
void ExportFormatRanges(const sal_Int32 nStartCol, const sal_Int32 nStartRow,
const sal_Int32 nEndCol, const sal_Int32 nEndRow, const sal_Int32 nSheet);
void WriteRowContent();
More information about the Libreoffice-commits
mailing list