Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 : #ifndef _OOX_EXPORT_VMLEXPORT_HXX_
21 : #define _OOX_EXPORT_VMLEXPORT_HXX_
22 :
23 : #include <oox/dllapi.h>
24 : #include <oox/export/drawingml.hxx>
25 : #include <sax/fshelper.hxx>
26 : #include <filter/msfilter/escherex.hxx>
27 : #include <editeng/outlobj.hxx>
28 :
29 : namespace rtl {
30 : class OString;
31 : class OStringBuffer;
32 : }
33 :
34 : namespace oox {
35 :
36 : namespace vml {
37 :
38 : /// Interface to be implemented by the parent exporter that knows how to handle shape text.
39 : class OOX_DLLPUBLIC VMLTextExport
40 : {
41 : public:
42 : virtual void WriteOutliner(const OutlinerParaObject& rParaObj) = 0;
43 : virtual oox::drawingml::DrawingML& GetDrawingML() = 0;
44 : protected:
45 24 : VMLTextExport() {}
46 24 : virtual ~VMLTextExport() {}
47 : };
48 :
49 : class OOX_DLLPUBLIC VMLExport : public EscherEx
50 : {
51 : /// Fast serializer to output the data
52 : ::sax_fastparser::FSHelperPtr m_pSerializer;
53 :
54 : /// Parent exporter, used for text callback.
55 : VMLTextExport* m_pTextExport;
56 :
57 : /// The object we're exporting.
58 : const SdrObject* m_pSdrObject;
59 :
60 : /// Fill the shape attributes as they come.
61 : ::sax_fastparser::FastAttributeList *m_pShapeAttrList;
62 :
63 : /// Remember the shape type.
64 : sal_uInt32 m_nShapeType;
65 :
66 : /// Remember the shape flags.
67 : sal_uInt32 m_nShapeFlags;
68 :
69 : /// Remember style, the most important shape attribute ;-)
70 : rtl::OStringBuffer *m_pShapeStyle;
71 :
72 : /// Remember which shape types we had already written.
73 : bool *m_pShapeTypeWritten;
74 :
75 : public:
76 : VMLExport( ::sax_fastparser::FSHelperPtr pSerializer, VMLTextExport* pTextExport = 0 );
77 : virtual ~VMLExport();
78 :
79 : ::sax_fastparser::FSHelperPtr
80 0 : GetFS() { return m_pSerializer; }
81 :
82 : /// Export the sdr object as VML.
83 : ///
84 : /// Call this when you need to export the object as VML.
85 : sal_uInt32 AddSdrObject( const SdrObject& rObj );
86 :
87 : protected:
88 : /// Add an attribute to the generated <v:shape/> element.
89 : ///
90 : /// This should be called from within StartShape() to ensure that the
91 : /// added attribute is preserved.
92 : void AddShapeAttribute( sal_Int32 nAttribute, const rtl::OString& sValue );
93 :
94 : using EscherEx::StartShape;
95 : using EscherEx::EndShape;
96 :
97 : /// Start the shape for which we just collected the information.
98 : ///
99 : /// Returns the element's tag number, -1 means we wrote nothing.
100 : virtual sal_Int32 StartShape();
101 :
102 : /// End the shape.
103 : ///
104 : /// The parameter is just what we got from StartShape().
105 : virtual void EndShape( sal_Int32 nShapeElement );
106 :
107 : virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect );
108 :
109 : private:
110 :
111 : virtual void OpenContainer( sal_uInt16 nEscherContainer, int nRecInstance = 0 );
112 : virtual void CloseContainer();
113 :
114 : virtual sal_uInt32 EnterGroup( const String& rShapeName, const Rectangle* pBoundRect = 0 );
115 : virtual void LeaveGroup();
116 :
117 : virtual void AddShape( sal_uInt32 nShapeType, sal_uInt32 nShapeFlags, sal_uInt32 nShapeId = 0 );
118 :
119 : private:
120 : /// Create an OString representing the id from a numerical id.
121 : static rtl::OString ShapeIdString( sal_uInt32 nId );
122 :
123 : /// Add starting and ending point of a line to the m_pShapeAttrList.
124 : void AddLineDimensions( const Rectangle& rRectangle );
125 :
126 : /// Add position and size to the OStringBuffer.
127 : void AddRectangleDimensions( rtl::OStringBuffer& rBuffer, const Rectangle& rRectangle );
128 : };
129 :
130 : } // namespace vml
131 :
132 : } // namespace oox
133 :
134 : #endif
135 :
136 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|