1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_OOX_EXPORT_SHAPES_HXX
21 #define INCLUDED_OOX_EXPORT_SHAPES_HXX
25 #include <string_view>
26 #include <unordered_map>
28 #include <com/sun/star/awt/Size.hpp>
29 #include <com/sun/star/table/BorderLine2.hpp>
30 #include <com/sun/star/uno/Reference.hxx>
31 #include <oox/dllapi.h>
32 #include <oox/export/drawingml.hxx>
33 #include <oox/export/utils.hxx>
34 #include <rtl/ustring.hxx>
35 #include <sal/types.h>
36 #include <sax/fshelper.hxx>
37 #include <tools/fract.hxx>
38 #include <vcl/mapmod.hxx>
40 namespace com::sun::star
{
49 class XEmbeddedObject
;
55 class XComponentContext
;
68 OOX_DLLPUBLIC
css::uno::Reference
<css::io::XInputStream
> GetOLEObjectStream(
69 css::uno::Reference
<css::uno::XComponentContext
> const& xContext
,
70 css::uno::Reference
<css::embed::XEmbeddedObject
> const& xObj
,
71 std::u16string_view i_rProgID
,
72 OUString
& o_rMediaType
,
73 OUString
& o_rRelationType
,
75 const char *& o_rpProgID
);
79 namespace oox::drawingml
{
81 class OOX_DLLPUBLIC ShapeExport
: public DrawingML
{
84 int m_nEmbeddedObjects
;
87 typedef std::unordered_map
< css::uno::Reference
< css::drawing::XShape
>, sal_Int32
> ShapeHashMap
;
90 sal_Int32 mnShapeIdMax
;
91 bool mbUserShapes
; // for chart's embedded usershapes
93 void WriteGraphicObjectShapePart( const css::uno::Reference
< css::drawing::XShape
>& xShape
, const Graphic
*pGraphic
=nullptr );
95 OUString
GetShapeName(const css::uno::Reference
< css::drawing::XShape
>& xShape
);
98 sal_Int32 mnXmlNamespace
;
99 MapMode maMapModeSrc
, maMapModeDest
;
100 std::shared_ptr
<URLTransformer
> mpURLTransformer
;
102 css::awt::Size
MapSize( const css::awt::Size
& ) const;
104 ShapeHashMap maShapeMap
;
105 ShapeHashMap
* mpShapeMap
;
109 ShapeExport( sal_Int32 nXmlNamespace
, ::sax_fastparser::FSHelperPtr pFS
,
110 ShapeHashMap
* pShapeMap
, ::oox::core::XmlFilterBase
* pFB
,
111 DocumentType eDocumentType
= DOCUMENT_PPTX
,
112 DMLTextExport
* pTextExport
= nullptr,
113 bool bUserShapes
= false );
114 virtual ~ShapeExport() {}
116 void SetURLTranslator(const std::shared_ptr
<URLTransformer
>& pTransformer
);
118 static bool NonEmptyText( const css::uno::Reference
< css::uno::XInterface
>& xIface
);
121 WritePolyPolygonShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
, bool bClosed
);
123 WriteClosedPolyPolygonShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
125 WriteConnectorShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
127 WriteCustomShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
129 WriteEllipseShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
131 WriteGraphicObjectShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
133 WriteGroupShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
135 WriteLineShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
137 WriteNonVisualDrawingProperties( const css::uno::Reference
< css::drawing::XShape
>& xShape
, const char* sName
);
139 WriteNonVisualProperties( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
141 WriteOpenPolyPolygonShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
143 WriteRectangleShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
146 * Write the DrawingML for a particular shape.
148 * <p>This is the member function you want. It performs the type lookup and
149 * invokes the appropriate corresponding Write*() method for the specific
152 * <p>To write an XShape, XShape::getShapeType() is called to determine
153 * the shape type, and the corresponding method in this table is
157 * <tr><th>Shape Type</th><th>Method</th></tr>
158 * <tr><td><tt>com.sun.star.drawing.ClosedBezierShape</tt></td> <td>ShapeExport::WriteClosedPolyPolygonShape</td></tr>
159 * <tr><td><tt>com.sun.star.drawing.CustomShape</tt></td> <td>ShapeExport::WriteCustomShape</td></tr>
160 * <tr><td><tt>com.sun.star.drawing.EllipseShape</tt></td> <td>ShapeExport::WriteEllipseShape</td></tr>
161 * <tr><td><tt>com.sun.star.drawing.GraphicObjectShape</tt></td> <td>ShapeExport::WriteGraphicObjectShape</td></tr>
162 * <tr><td><tt>com.sun.star.drawing.LineShape</tt></td> <td>ShapeExport::WriteLineShape</td></tr>
163 * <tr><td><tt>com.sun.star.drawing.OpenBezierShape</tt></td> <td>ShapeExport::WriteOpenPolyPolygonShape</td></tr>
164 * <tr><td><tt>com.sun.star.drawing.PolyPolygonShape</tt></td> <td>ShapeExport::WriteClosedPolyPolygonShape</td></tr>
165 * <tr><td><tt>com.sun.star.drawing.PolyLineShape</tt></td> <td>ShapeExport::WriteOpenPolyPolygonShape</td></tr>
166 * <tr><td><tt>com.sun.star.drawing.RectangleShape</tt></td> <td>ShapeExport::WriteRectangleShape</td></tr>
167 * <tr><td><tt>com.sun.star.drawing.TableShape</tt></td> <td>ShapeExport::WriteTableShape</td></tr>
168 * <tr><td><tt>com.sun.star.drawing.TextShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
169 * <tr><td><tt>com.sun.star.presentation.DateTimeShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
170 * <tr><td><tt>com.sun.star.presentation.FooterShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
171 * <tr><td><tt>com.sun.star.presentation.HeaderShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
172 * <tr><td><tt>com.sun.star.presentation.NotesShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
173 * <tr><td><tt>com.sun.star.presentation.OutlinerShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
174 * <tr><td><tt>com.sun.star.presentation.SlideNumberShape</tt></td><td>ShapeExport::WriteTextShape</td></tr>
175 * <tr><td><tt>com.sun.star.presentation.TitleTextShape</tt></td> <td>ShapeExport::WriteTextShape</td></tr>
178 * <p>If the shape type is not recognized, then
179 * <tt>ShapeExport::WriteUnknownShape</tt> is called.</p>
181 * @param xShape The shape to export as DrawingML.
182 * @return <tt>*this</tt>
184 ShapeExport
& WriteShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
185 ShapeExport
& WriteTextBox( const css::uno::Reference
< css::uno::XInterface
>& xIface
, sal_Int32 nXmlNamespace
, bool bWritePropertiesAsLstStyles
= false );
187 WriteTextShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
189 WriteTableShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
190 void WriteMathShape(css::uno::Reference
<css::drawing::XShape
> const& xShape
);
192 WriteOLE2Shape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
194 WriteUnknownShape( const css::uno::Reference
< css::drawing::XShape
>& xShape
);
196 void WriteTable( const css::uno::Reference
< css::drawing::XShape
>& rXShape
);
198 void WriteTableCellProperties(const css::uno::Reference
< css::beans::XPropertySet
>& rXPropSet
);
200 void WriteBorderLine(const sal_Int32 XML_line
, const css::table::BorderLine2
& rBorderLine
);
201 void WriteTableCellBorders(const css::uno::Reference
< css::beans::XPropertySet
>& rXPropSet
);
203 sal_Int32
GetNewShapeID( const css::uno::Reference
< css::drawing::XShape
>& rShape
);
204 sal_Int32
GetNewShapeID( const css::uno::Reference
< css::drawing::XShape
>& rShape
, ::oox::core::XmlFilterBase
* pFB
);
205 sal_Int32
GetShapeID( const css::uno::Reference
< css::drawing::XShape
>& rShape
);
206 static sal_Int32
GetShapeID( const css::uno::Reference
< css::drawing::XShape
>& rShape
, ShapeHashMap
* pShapeMap
);
211 #endif // INCLUDED_OOX_EXPORT_SHAPES_HXX
213 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */