summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2013-12-12 10:24:10 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-12-12 10:27:14 +0100
commit2440d0ba34d6cbc9eae6d2cb196a964840f084e4 (patch)
tree220e0a7a05d35416eaa5a2e0a3f8cb77ebc12fe4 /oox
parent8e825e8fc9373f89c777092643c162226a2687e2 (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.cxx31
-rw-r--r--oox/source/export/shapes.cxx4
-rw-r--r--oox/source/export/vmlexport.cxx2
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;
}