xref: /AOO41X/main/oox/inc/oox/drawingml/customshapeproperties.hxx (revision d742e3ecb95e5eaf7ad7d7fb5fd2d734bf0a66a6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef OOX_DRAWINGML_CUSTOMSHAPEPROPERTIES_HXX
25 #define OOX_DRAWINGML_CUSTOMSHAPEPROPERTIES_HXX
26 
27 #include <boost/shared_ptr.hpp>
28 #include <vector>
29 #include <map>
30 #include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
31 #include <com/sun/star/drawing/EnhancedCustomShapeParameterType.hpp>
32 #include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp>
33 #include <com/sun/star/drawing/EnhancedCustomShapeGluePointType.hpp>
34 #include <com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.hpp>
35 #include <com/sun/star/drawing/EnhancedCustomShapeTextFrame.hpp>
36 #include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
37 #include <com/sun/star/drawing/EnhancedCustomShapeTextPathMode.hpp>
38 #include <com/sun/star/beans/PropertyValues.hpp>
39 #include <com/sun/star/drawing/ProjectionMode.hpp>
40 #include <com/sun/star/drawing/XShape.hpp>
41 #include <com/sun/star/graphic/XGraphic.hpp>
42 #include "oox/core/xmlfilterbase.hxx"
43 #include "oox/drawingml/color.hxx"
44 #include "oox/helper/helper.hxx"
45 #include "oox/helper/propertymap.hxx"
46 #include "oox/token/tokens.hxx"
47 
48 namespace oox { namespace drawingml {
49 
50 class CustomShapeProperties;
51 
52 typedef boost::shared_ptr< CustomShapeProperties > CustomShapePropertiesPtr;
53 
54 struct CustomShapeGuide
55 {
56     rtl::OUString   maName;
57     rtl::OUString   maFormula;
58 };
59 
60 struct AdjustHandle
61 {
62     sal_Bool                                polar;
63     com::sun::star::drawing::EnhancedCustomShapeParameterPair
64                                             pos;
65 
66     // depending to the type (polar or not):
67     OptValue< rtl::OUString >               gdRef1; // gdRefX   or gdRefR
68     OptValue< com::sun::star::drawing::EnhancedCustomShapeParameter >
69                                             min1;   // minX     or minR
70     OptValue< com::sun::star::drawing::EnhancedCustomShapeParameter >
71                                             max1;   // maxX     or maxR
72     OptValue< rtl::OUString >               gdRef2; // gdRefY   or gdRefAng
73     OptValue< com::sun::star::drawing::EnhancedCustomShapeParameter >
74                                             min2;   // minX     or minAng
75     OptValue< com::sun::star::drawing::EnhancedCustomShapeParameter >
76                                             max2;   // maxY     or maxAng
77 
AdjustHandleoox::drawingml::AdjustHandle78     AdjustHandle( sal_Bool bPolar ) : polar( bPolar ) {};
79 };
80 
81 struct ConnectionSite
82 {
83     com::sun::star::drawing::EnhancedCustomShapeParameterPair
84                                 pos;
85     com::sun::star::drawing::EnhancedCustomShapeParameter
86                                 ang;
87 };
88 
89 struct GeomRect
90 {
91     com::sun::star::drawing::EnhancedCustomShapeParameter   l;
92     com::sun::star::drawing::EnhancedCustomShapeParameter   t;
93     com::sun::star::drawing::EnhancedCustomShapeParameter   r;
94     com::sun::star::drawing::EnhancedCustomShapeParameter   b;
95 };
96 
97 struct Path2D
98 {
99     sal_Int64   w;
100     sal_Int64   h;
101     sal_Int32   fill;
102     sal_Bool    stroke;
103     sal_Bool    extrusionOk;
104     std::vector< com::sun::star::drawing::EnhancedCustomShapeParameterPair > parameter;
105 
Path2Doox::drawingml::Path2D106     Path2D() : w( 0 ), h( 0 ), fill( XML_norm ), stroke( sal_True ), extrusionOk( sal_True ) {};
107 };
108 
109 class CustomShapeProperties
110 {
111 public:
112 
113     CustomShapeProperties();
114     virtual ~CustomShapeProperties();
115 
116     void apply( const CustomShapePropertiesPtr& );
117     void pushToPropSet( const ::oox::core::FilterBase& rFilterBase,
118             const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > & xPropSet,
119                         const ::com::sun::star::uno::Reference < ::com::sun::star::drawing::XShape > & xShape) const;
120 
setShapePresetType(const rtl::OUString & rShapePresetType)121     void setShapePresetType( const rtl::OUString& rShapePresetType ){ maShapePresetType = rShapePresetType; };
122 
getAdjustmentGuideList()123     std::vector< CustomShapeGuide >&    getAdjustmentGuideList(){ return maAdjustmentGuideList; };
getGuideList()124     std::vector< CustomShapeGuide >&    getGuideList(){ return maGuideList; };
getAdjustHandleList()125     std::vector< AdjustHandle >&        getAdjustHandleList(){ return maAdjustHandleList; };
getConnectionSiteList()126     std::vector< ConnectionSite >&      getConnectionSiteList(){ return maConnectionSiteList; };
getTextRect()127     OptValue< GeomRect >&               getTextRect(){ return maTextRect; };
getPath2DList()128     std::vector< Path2D >&              getPath2DList(){ return maPath2DList; };
getSegments()129     std::vector< com::sun::star::drawing::EnhancedCustomShapeSegment >& getSegments(){ return maSegments; };
setMirroredX(sal_Bool bMirroredX)130     void                                setMirroredX( sal_Bool bMirroredX ) { mbMirroredX = bMirroredX; };
setMirroredY(sal_Bool bMirroredY)131     void                                setMirroredY( sal_Bool bMirroredY ) { mbMirroredY = bMirroredY; };
132 
133     // #119920# Add missing extra text rotation
setTextRotation(sal_Int32 nTextRotation)134     void setTextRotation(sal_Int32 nTextRotation) { mnTextRotation = nTextRotation; }
135 
136     double getValue( const std::vector< CustomShapeGuide >&, sal_uInt32 nIndex ) const;
137     static sal_Int32 SetCustomShapeGuideValue( std::vector< CustomShapeGuide >& rGuideList, const CustomShapeGuide& rGuide );
138     static sal_Int32 GetCustomShapeGuideValue( const std::vector< CustomShapeGuide >& rGuideList, const rtl::OUString& rFormulaName );
139 
140 private:
141 
142     rtl::OUString                   maShapePresetType;
143     std::vector< CustomShapeGuide > maAdjustmentGuideList;
144     std::vector< CustomShapeGuide > maGuideList;
145     std::vector< AdjustHandle >     maAdjustHandleList;
146     std::vector< ConnectionSite >   maConnectionSiteList;
147     OptValue< GeomRect >            maTextRect;
148     std::vector< Path2D >           maPath2DList;
149 
150     std::vector< com::sun::star::drawing::EnhancedCustomShapeSegment >
151                                     maSegments;
152     sal_Bool                        mbMirroredX;
153     sal_Bool                        mbMirroredY;
154 
155     // #119920# Add missing extra text rotation
156     sal_Int32                       mnTextRotation;
157 };
158 
159 } }
160 
161 #endif  //  OOX_DRAWINGML_CUSTOMSHAPEPROPERTIES_HXX
162