diff options
-rw-r--r-- | sd/source/filter/eppt/epptooxml.hxx | 10 | ||||
-rw-r--r-- | sd/source/filter/eppt/pptx-epptooxml.cxx | 83 |
2 files changed, 59 insertions, 34 deletions
diff --git a/sd/source/filter/eppt/epptooxml.hxx b/sd/source/filter/eppt/epptooxml.hxx index d4f2b618f25d..0b9f5f5fd812 100644 --- a/sd/source/filter/eppt/epptooxml.hxx +++ b/sd/source/filter/eppt/epptooxml.hxx @@ -119,6 +119,12 @@ private: static void WriteDiagram(const FSHelperPtr& pFS, PowerPointShapeExport& rDML, const css::uno::Reference<css::drawing::XShape>& rXShape, int nDiagramId); + /** Create a new placeholder index for a master placeholder shape + + @param rXShape Master placeholder shape + @returns Placeholder index + */ + unsigned CreateNewPlaceholderIndex(const css::uno::Reference<css::drawing::XShape>& rXShape); /// Should we export as .pptm, ie. do we contain macros? bool mbPptm; @@ -141,6 +147,10 @@ private: ::oox::drawingml::ShapeExport::ShapeHashMap maShapeMap; + unsigned mnPlaceholderIndexMax; ///< Last used placeholder index + /// Map of placeholder indexes for Master placeholders + std::unordered_map< css::uno::Reference<css::drawing::XShape>, unsigned > maPlaceholderShapeToIndexMap; + struct AuthorComments { sal_Int32 nId; sal_Int32 nLastIndex; diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx index 8a7db7302ff0..2c7a0dc2fb94 100644 --- a/sd/source/filter/eppt/pptx-epptooxml.cxx +++ b/sd/source/filter/eppt/pptx-epptooxml.cxx @@ -128,8 +128,35 @@ void WriteSndAc(const FSHelperPtr& pFS, const OUString& sSoundRelId, const OUStr pFS->endElement(FSNS(XML_p, XML_stSnd)); pFS->endElement(FSNS(XML_p, XML_sndAc)); } -} +const char* getPlaceholderTypeName(PlaceholderType ePlaceholder) +{ + switch (ePlaceholder) + { + case SlideImage: + return "sldImg"; + case Notes: + return "body"; + case Header: + return "hdr"; + case Footer: + return "ftr"; + case SlideNumber: + return "sldNum"; + case DateAndTime: + return "dt"; + case Outliner: + return "body"; + case Title: + return "title"; + case Subtitle: + return "subTitle"; + default: + SAL_INFO("sd.eppt", "warning: unhandled placeholder type: " << ePlaceholder); + return ""; + } +} +} } } @@ -335,6 +362,7 @@ PowerPointExport::PowerPointExport(const Reference< XComponentContext >& rContex , mnAnimationNodeIdMax(1) , mnDiagramId(1) , mbCreateNotes(false) + , mnPlaceholderIndexMax(1) { comphelper::SequenceAsHashMap aArgumentsMap(rArguments); mbPptm = aArgumentsMap.getUnpackedValueOrDefault("IsPPTM", false); @@ -1449,41 +1477,22 @@ ShapeExport& PowerPointShapeExport::WritePlaceholderShape(const Reference< XShap mpFS->endElementNS(XML_p, XML_cNvSpPr); mpFS->startElementNS(XML_p, XML_nvPr); - const char* pType = nullptr; - switch (ePlaceholder) + bool bUsePlaceholderIndex + = ePlaceholder == Footer || ePlaceholder == DateAndTime || ePlaceholder == SlideNumber; + const char* pType = getPlaceholderTypeName(ePlaceholder); + + SAL_INFO("sd.eppt", "write placeholder " << pType); + if (bUsePlaceholderIndex) { - case SlideImage: - pType = "sldImg"; - break; - case Notes: - pType = "body"; - break; - case Header: - pType = "hdr"; - break; - case Footer: - pType = "ftr"; - break; - case SlideNumber: - pType = "sldNum"; - break; - case DateAndTime: - pType = "dt"; - break; - case Outliner: - pType = "body"; - break; - case Title: - pType = "title"; - break; - case Subtitle: - pType = "subTitle"; - break; - default: - SAL_INFO("sd.eppt", "warning: unhandled placeholder type: " << ePlaceholder); + mpFS->singleElementNS( + XML_p, XML_ph, XML_type, pType, XML_idx, + OString::number( + static_cast<PowerPointExport*>(GetFB())->CreateNewPlaceholderIndex(xShape))); + } + else + { + mpFS->singleElementNS(XML_p, XML_ph, XML_type, pType); } - SAL_INFO("sd.eppt", "write placeholder " << pType); - mpFS->singleElementNS(XML_p, XML_ph, XML_type, pType); mpFS->endElementNS(XML_p, XML_nvPr); mpFS->endElementNS(XML_p, XML_nvSpPr); @@ -2011,6 +2020,12 @@ void PowerPointExport::WriteDiagram(const FSHelperPtr& pFS, PowerPointShapeExpor pFS->endElementNS(XML_p, XML_graphicFrame); } +unsigned PowerPointExport::CreateNewPlaceholderIndex(const css::uno::Reference<XShape> &rXShape) +{ + maPlaceholderShapeToIndexMap.insert({rXShape, mnPlaceholderIndexMax}); + return mnPlaceholderIndexMax++; +} + // UNO component extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface* css_comp_Impress_oox_PowerPointExport(uno::XComponentContext* rxCtxt, |