diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2013-12-12 10:24:10 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2013-12-12 10:27:14 +0100 |
commit | 2440d0ba34d6cbc9eae6d2cb196a964840f084e4 (patch) | |
tree | 220e0a7a05d35416eaa5a2e0a3f8cb77ebc12fe4 /oox | |
parent | 8e825e8fc9373f89c777092643c162226a2687e2 (diff) |
oox: allow a callback to be registered for shape text DML export
Change-Id: Ice4dea8da117f61d947ad14ebbfccae0d2ed94df
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/export/drawingml.cxx | 31 | ||||
-rw-r--r-- | oox/source/export/shapes.cxx | 4 | ||||
-rw-r--r-- | oox/source/export/vmlexport.cxx | 2 |
3 files changed, 35 insertions, 2 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 510930987946..e542df87deae 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -66,6 +66,7 @@ #include <svl/languageoptions.hxx> #include <filter/msfilter/escherex.hxx> #include <filter/msfilter/util.hxx> +#include <editeng/outlobj.hxx> #include <editeng/svxenum.hxx> #include <svx/unoapi.hxx> #include <svx/svdoashp.hxx> @@ -1345,6 +1346,36 @@ void DrawingML::WriteText( Reference< XInterface > rXIface, bool bBodyPr, bool b if( !enumeration.is() ) return; + SdrObject* pSdrObject = GetSdrObjectFromXShape(uno::Reference<drawing::XShape>(rXIface, uno::UNO_QUERY_THROW)); + const SdrTextObj* pTxtObj = PTR_CAST(SdrTextObj, pSdrObject); + if (pTxtObj && mpTextExport) + { + const OutlinerParaObject* pParaObj = 0; + bool bOwnParaObj = false; + + /* + #i13885# + When the object is actively being edited, that text is not set into + the objects normal text object, but lives in a separate object. + */ + if (pTxtObj->IsTextEditActive()) + { + pParaObj = pTxtObj->GetEditOutlinerParaObject(); + bOwnParaObj = true; + } + else + pParaObj = pTxtObj->GetOutlinerParaObject(); + + if (pParaObj) + { + // this is reached only in case some text is attached to the shape + mpTextExport->WriteOutliner(*pParaObj); + if (bOwnParaObj) + delete pParaObj; + } + return; + } + while( enumeration->hasMoreElements() ) { Reference< XTextContent > paragraph; Any any ( enumeration->nextElement() ); diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx index 2c6981080b50..5689215e4fd1 100644 --- a/oox/source/export/shapes.cxx +++ b/oox/source/export/shapes.cxx @@ -123,8 +123,8 @@ namespace oox { namespace drawingml { // not thread safe int ShapeExport::mnSpreadsheetCounter = 1; -ShapeExport::ShapeExport( sal_Int32 nXmlNamespace, FSHelperPtr pFS, ShapeHashMap* pShapeMap, XmlFilterBase* pFB, DocumentType eDocumentType ) - : DrawingML( pFS, pFB, eDocumentType ) +ShapeExport::ShapeExport( sal_Int32 nXmlNamespace, FSHelperPtr pFS, ShapeHashMap* pShapeMap, XmlFilterBase* pFB, DocumentType eDocumentType, DMLTextExport* pTextExport ) + : DrawingML( pFS, pFB, eDocumentType, pTextExport ) , mnShapeIdMax( 1 ) , mnPictureIdMax( 1 ) , mnXmlNamespace( nXmlNamespace ) diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index f65ce8af2e2d..842ad27e3d80 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -1030,7 +1030,9 @@ sal_Int32 VMLExport::StartShape() if( pParaObj ) { // this is reached only in case some text is attached to the shape + m_pSerializer->startElementNS(XML_v, XML_textbox, FSEND); m_pTextExport->WriteOutliner(*pParaObj); + m_pSerializer->endElementNS(XML_v, XML_textbox); if( bOwnParaObj ) delete pParaObj; } |