summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-11-18 22:00:23 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-11-19 16:00:53 +0100
commit21467c1c0fea676a33c7b7e75648947efea18fcb (patch)
tree39a24862726cb157fa0f894801913b67c9ba1044
parent3633414c485b39a1eb824bae0dd2002976a4dc6e (diff)
tdf#108022, don't overwrite chart export information
Change-Id: I47d8a817022829c8cada614469303e440f377299 Reviewed-on: https://gerrit.libreoffice.org/63536 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> (cherry picked from commit 9ccdf4d8abf6ec6612c88ab65be25eb6be89b455) Reviewed-on: https://gerrit.libreoffice.org/63540 Tested-by: Xisco Faulí <xiscofauli@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx131
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx3
2 files changed, 68 insertions, 66 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 689bbbf8c712..a73f90de5153 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4796,8 +4796,7 @@ bool DocxAttributeOutput::WriteOLEChart( const SdrObject* pSdrObj, const Size& r
if (!SotExchange::IsChart(aClassID))
return false;
- m_postponedChart = pSdrObj;
- m_postponedChartSize = rSize;
+ m_aPostponedCharts.push_back(std::pair<const SdrObject*, Size>(pSdrObj, rSize));
return true;
}
@@ -4806,81 +4805,86 @@ bool DocxAttributeOutput::WriteOLEChart( const SdrObject* pSdrObj, const Size& r
*/
void DocxAttributeOutput::WritePostponedChart()
{
- if(m_postponedChart == nullptr)
+ if (m_aPostponedCharts.empty())
return;
- uno::Reference< chart2::XChartDocument > xChartDoc;
- uno::Reference< drawing::XShape > xShape( const_cast<SdrObject*>(m_postponedChart)->getUnoShape(), uno::UNO_QUERY );
- if( xShape.is() )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY );
- if( xPropSet.is() )
- xChartDoc.set( xPropSet->getPropertyValue( "Model" ), uno::UNO_QUERY );
- }
- if( xChartDoc.is() )
+ for (const auto& itr : m_aPostponedCharts)
{
- SAL_INFO("sw.ww8", "DocxAttributeOutput::WriteOLE2Obj: export chart ");
- m_pSerializer->startElementNS( XML_w, XML_drawing,
- FSEND );
- m_pSerializer->startElementNS( XML_wp, XML_inline,
- XML_distT, "0", XML_distB, "0", XML_distL, "0", XML_distR, "0",
- FSEND );
+ uno::Reference< chart2::XChartDocument > xChartDoc;
+ uno::Reference< drawing::XShape > xShape( const_cast<SdrObject*>(itr.first)->getUnoShape(), uno::UNO_QUERY );
+ if( xShape.is() )
+ {
+ uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY );
+ if( xPropSet.is() )
+ xChartDoc.set( xPropSet->getPropertyValue( "Model" ), uno::UNO_QUERY );
+ }
- OString aWidth( OString::number( TwipsToEMU( m_postponedChartSize.Width() ) ) );
- OString aHeight( OString::number( TwipsToEMU( m_postponedChartSize.Height() ) ) );
- m_pSerializer->singleElementNS( XML_wp, XML_extent,
- XML_cx, aWidth.getStr(),
- XML_cy, aHeight.getStr(),
- FSEND );
- // TODO - the right effectExtent, extent including the effect
- m_pSerializer->singleElementNS( XML_wp, XML_effectExtent,
- XML_l, "0", XML_t, "0", XML_r, "0", XML_b, "0",
- FSEND );
+ if( xChartDoc.is() )
+ {
+ SAL_INFO("sw.ww8", "DocxAttributeOutput::WriteOLE2Obj: export chart ");
+ m_pSerializer->startElementNS( XML_w, XML_drawing,
+ FSEND );
+ m_pSerializer->startElementNS( XML_wp, XML_inline,
+ XML_distT, "0", XML_distB, "0", XML_distL, "0", XML_distR, "0",
+ FSEND );
- OUString sName("Object 1");
- uno::Reference< container::XNamed > xNamed( xShape, uno::UNO_QUERY );
- if( xNamed.is() )
- sName = xNamed->getName();
+ OString aWidth( OString::number( TwipsToEMU( itr.second.Width() ) ) );
+ OString aHeight( OString::number( TwipsToEMU( itr.second.Height() ) ) );
+ m_pSerializer->singleElementNS( XML_wp, XML_extent,
+ XML_cx, aWidth.getStr(),
+ XML_cy, aHeight.getStr(),
+ FSEND );
+ // TODO - the right effectExtent, extent including the effect
+ m_pSerializer->singleElementNS( XML_wp, XML_effectExtent,
+ XML_l, "0", XML_t, "0", XML_r, "0", XML_b, "0",
+ FSEND );
- /* If there is a scenario where a chart is followed by a shape
- which is being exported as an alternate content then, the
- docPr Id is being repeated, ECMA 20.4.2.5 says that the
- docPr Id should be unique, ensuring the same here.
- */
- m_pSerializer->singleElementNS( XML_wp, XML_docPr,
- XML_id, I32S( m_anchorId++ ),
- XML_name, USS( sName ),
- FSEND );
+ OUString sName("Object 1");
+ uno::Reference< container::XNamed > xNamed( xShape, uno::UNO_QUERY );
+ if( xNamed.is() )
+ sName = xNamed->getName();
+
+ /* If there is a scenario where a chart is followed by a shape
+ which is being exported as an alternate content then, the
+ docPr Id is being repeated, ECMA 20.4.2.5 says that the
+ docPr Id should be unique, ensuring the same here.
+ */
+ m_pSerializer->singleElementNS( XML_wp, XML_docPr,
+ XML_id, I32S( m_anchorId++ ),
+ XML_name, USS( sName ),
+ FSEND );
- m_pSerializer->singleElementNS( XML_wp, XML_cNvGraphicFramePr,
- FSEND );
+ m_pSerializer->singleElementNS( XML_wp, XML_cNvGraphicFramePr,
+ FSEND );
- m_pSerializer->startElementNS( XML_a, XML_graphic,
- FSNS( XML_xmlns, XML_a ), OUStringToOString(GetExport().GetFilter().getNamespaceURL(OOX_NS(dml)), RTL_TEXTENCODING_UTF8).getStr(),
- FSEND );
+ m_pSerializer->startElementNS( XML_a, XML_graphic,
+ FSNS( XML_xmlns, XML_a ), OUStringToOString(GetExport().GetFilter().getNamespaceURL(OOX_NS(dml)), RTL_TEXTENCODING_UTF8).getStr(),
+ FSEND );
- m_pSerializer->startElementNS( XML_a, XML_graphicData,
- XML_uri, "http://schemas.openxmlformats.org/drawingml/2006/chart",
- FSEND );
+ m_pSerializer->startElementNS( XML_a, XML_graphicData,
+ XML_uri, "http://schemas.openxmlformats.org/drawingml/2006/chart",
+ FSEND );
- OString aRelId;
- m_nChartCount++;
- uno::Reference< frame::XModel > xModel( xChartDoc, uno::UNO_QUERY );
- aRelId = m_rExport.OutputChart( xModel, m_nChartCount, m_pSerializer );
+ OString aRelId;
+ m_nChartCount++;
+ uno::Reference< frame::XModel > xModel( xChartDoc, uno::UNO_QUERY );
+ aRelId = m_rExport.OutputChart( xModel, m_nChartCount, m_pSerializer );
- m_pSerializer->singleElementNS( XML_c, XML_chart,
- FSNS( XML_xmlns, XML_c ), OUStringToOString(GetExport().GetFilter().getNamespaceURL(OOX_NS(dmlChart)), RTL_TEXTENCODING_UTF8).getStr(),
- FSNS( XML_xmlns, XML_r ), OUStringToOString(GetExport().GetFilter().getNamespaceURL(OOX_NS(officeRel)), RTL_TEXTENCODING_UTF8).getStr(),
- FSNS( XML_r, XML_id ), aRelId.getStr(),
- FSEND );
+ m_pSerializer->singleElementNS( XML_c, XML_chart,
+ FSNS( XML_xmlns, XML_c ), OUStringToOString(GetExport().GetFilter().getNamespaceURL(OOX_NS(dmlChart)), RTL_TEXTENCODING_UTF8).getStr(),
+ FSNS( XML_xmlns, XML_r ), OUStringToOString(GetExport().GetFilter().getNamespaceURL(OOX_NS(officeRel)), RTL_TEXTENCODING_UTF8).getStr(),
+ FSNS( XML_r, XML_id ), aRelId.getStr(),
+ FSEND );
- m_pSerializer->endElementNS( XML_a, XML_graphicData );
- m_pSerializer->endElementNS( XML_a, XML_graphic );
- m_pSerializer->endElementNS( XML_wp, XML_inline );
- m_pSerializer->endElementNS( XML_w, XML_drawing );
+ m_pSerializer->endElementNS( XML_a, XML_graphicData );
+ m_pSerializer->endElementNS( XML_a, XML_graphic );
+ m_pSerializer->endElementNS( XML_wp, XML_inline );
+ m_pSerializer->endElementNS( XML_w, XML_drawing );
+ }
}
- m_postponedChart = nullptr;
+
+ m_aPostponedCharts.clear();
}
bool DocxAttributeOutput::WriteOLEMath( const SwOLENode& rOLENode )
@@ -9107,7 +9111,6 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, const FSHelperPtr
m_nFieldsInHyperlink( 0 ),
m_bExportingOutline(false),
m_nChartCount(0),
- m_postponedChart( nullptr ),
pendingPlaceholder( nullptr ),
m_postitFieldsMaxId( 0 ),
m_anchorId( 1 ),
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 4d380bf6e656..212ba962c3b0 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -880,8 +880,7 @@ private:
std::vector<const SwOLENode*> m_aPostponedMaths;
/// count charts consistently for unit tests
unsigned int m_nChartCount;
- const SdrObject* m_postponedChart;
- Size m_postponedChartSize;
+ std::vector<std::pair<const SdrObject*, Size>> m_aPostponedCharts;
std::vector<const SdrObject*> m_aPostponedFormControls;
std::vector<PostponedDrawing> m_aPostponedActiveXControls;
const SwField* pendingPlaceholder;