Version 6.4.0.0.beta1, tag libreoffice-6.4.0.0.beta1
[LibreOffice.git] / chart2 / source / view / inc / ShapeFactory.hxx
blob50f4b39b8532f888b7650100e085116348270dcd
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 .
19 #ifndef INCLUDED_CHART2_SOURCE_VIEW_INC_SHAPEFACTORY_HXX
20 #define INCLUDED_CHART2_SOURCE_VIEW_INC_SHAPEFACTORY_HXX
22 #include "PropertyMapper.hxx"
23 #include <basegfx/range/b2irectangle.hxx>
24 #include <com/sun/star/awt/Size.hpp>
25 #include <com/sun/star/awt/Point.hpp>
26 #include <com/sun/star/drawing/PointSequenceSequence.hpp>
28 #include <rtl/ustring.hxx>
30 namespace chart { struct VLineProperties; }
31 namespace com { namespace sun { namespace star { namespace beans { class XPropertySet; } } } }
32 namespace com { namespace sun { namespace star { namespace chart2 { class XFormattedString; } } } }
33 namespace com { namespace sun { namespace star { namespace drawing { class XDrawPage; } } } }
34 namespace com { namespace sun { namespace star { namespace drawing { class XShape; } } } }
35 namespace com { namespace sun { namespace star { namespace drawing { class XShapes; } } } }
36 namespace com { namespace sun { namespace star { namespace drawing { struct HomogenMatrix; } } } }
37 namespace com { namespace sun { namespace star { namespace drawing { struct PolyPolygonShape3D; } } } }
38 namespace com { namespace sun { namespace star { namespace drawing { struct Position3D; } } } }
39 namespace com { namespace sun { namespace star { namespace graphic { class XGraphic; } } } }
40 namespace com { namespace sun { namespace star { namespace lang { class XMultiServiceFactory; } } } }
41 namespace com { namespace sun { namespace star { namespace drawing { struct Direction3D; } } } }
44 namespace chart
46 class Stripe;
48 // Be careful here not to clash with the SYMBOL_FOO #defines in
49 // <vcl/vclenum.hxx>
50 enum SymbolEnum { Symbol_Square=0
51 , Symbol_Diamond
52 , Symbol_DownArrow
53 , Symbol_UpArrow
54 , Symbol_RightArrow
55 , Symbol_LeftArrow
56 , Symbol_Bowtie
57 , Symbol_Sandglass
58 , Symbol_Circle
59 , Symbol_Star
60 , Symbol_X
61 , Symbol_Plus
62 , Symbol_Asterisk
63 , Symbol_HorizontalBar
64 , Symbol_VerticalBar
65 , Symbol_COUNT
69 class ShapeFactory
71 css::uno::Reference< css::lang::XMultiServiceFactory> m_xShapeFactory;
73 ShapeFactory(css::uno::Reference< css::lang::XMultiServiceFactory> const & xFactory)
74 {m_xShapeFactory = xFactory;}
76 public:
77 enum class StackPosition { Top, Bottom };
79 static ShapeFactory* getOrCreateShapeFactory(const css::uno::Reference< css::lang::XMultiServiceFactory>& xFactory);
81 ShapeFactory() = delete;
82 css::uno::Reference< css::drawing::XShapes >
83 createGroup2D(
84 const css::uno::Reference< css::drawing::XShapes >& xTarget
85 , const OUString& aName = OUString() );
87 css::uno::Reference< css::drawing::XShapes >
88 createGroup3D(
89 const css::uno::Reference< css::drawing::XShapes >& xTarget
90 , const OUString& aName = OUString() );
92 css::uno::Reference< css::drawing::XShape >
93 createCube( const css::uno::Reference< css::drawing::XShapes >& xTarget
94 , const css::drawing::Position3D& rPosition
95 , const css::drawing::Direction3D& rSize
96 , sal_Int32 nRotateZAngleHundredthDegree
97 , const css::uno::Reference< css::beans::XPropertySet >& xSourceProp
98 , const tPropertyNameMap& rPropertyNameMap
99 , bool bRounded = false);
101 css::uno::Reference< css::drawing::XShape >
102 createCylinder( const css::uno::Reference< css::drawing::XShapes >& xTarget
103 , const css::drawing::Position3D& rPosition
104 , const css::drawing::Direction3D& rSize
105 , sal_Int32 nRotateZAngleHundredthDegree );
107 css::uno::Reference< css::drawing::XShape >
108 createPyramid( const css::uno::Reference< css::drawing::XShapes >& xTarget
109 , const css::drawing::Position3D& rPosition
110 , const css::drawing::Direction3D& rSize
111 , double fTopHeight
112 , bool bRotateZ
113 , const css::uno::Reference< css::beans::XPropertySet >& xSourceProp
114 , const tPropertyNameMap& rPropertyNameMap);
116 css::uno::Reference< css::drawing::XShape >
117 createCone( const css::uno::Reference< css::drawing::XShapes >& xTarget
118 , const css::drawing::Position3D& rPosition
119 , const css::drawing::Direction3D& rSize
120 , double fTopHeight, sal_Int32 nRotateZAngleHundredthDegree );
122 css::uno::Reference< css::drawing::XShape >
123 createPieSegment2D( const css::uno::Reference< css::drawing::XShapes >& xTarget
124 , double fUnitCircleStartAngleDegree, double fUnitCircleWidthAngleDegree
125 , double fUnitCircleInnerRadius, double fUnitCircleOuterRadius
126 , const css::drawing::Direction3D& rOffset
127 , const css::drawing::HomogenMatrix& rUnitCircleToScene );
129 css::uno::Reference< css::drawing::XShape >
130 createPieSegment( const css::uno::Reference< css::drawing::XShapes >& xTarget
131 , double fUnitCircleStartAngleDegree, double fUnitCircleWidthAngleDegree
132 , double fUnitCircleInnerRadius, double fUnitCircleOuterRadius
133 , const css::drawing::Direction3D& rOffset
134 , const css::drawing::HomogenMatrix& rUnitCircleToScene
135 , double fDepth );
137 css::uno::Reference< css::drawing::XShape >
138 createStripe( const css::uno::Reference< css::drawing::XShapes >& xTarget
139 , const Stripe& rStripe
140 , const css::uno::Reference< css::beans::XPropertySet >& xSourceProp
141 , const tPropertyNameMap& rPropertyNameMap
142 , bool bDoubleSided
143 , short nRotatedTexture = 0 //0 to 7 are the different possibilities
144 , bool bFlatNormals=true );
146 css::uno::Reference< css::drawing::XShape >
147 createArea3D( const css::uno::Reference< css::drawing::XShapes >& xTarget
148 , const css::drawing::PolyPolygonShape3D& rPolyPolygon
149 , double fDepth);
151 css::uno::Reference< css::drawing::XShape >
152 createArea2D( const css::uno::Reference< css::drawing::XShapes >& xTarget
153 , const css::drawing::PolyPolygonShape3D& rPolyPolygon);
155 css::uno::Reference< css::drawing::XShape >
156 createSymbol2D( const css::uno::Reference< css::drawing::XShapes >& xTarget
157 , const css::drawing::Position3D& rPos
158 , const css::drawing::Direction3D& rSize
159 , sal_Int32 nStandardSymbol
160 , sal_Int32 nBorderColor
161 , sal_Int32 nFillColor );
163 css::uno::Reference< css::drawing::XShape >
164 createGraphic2D( const css::uno::Reference< css::drawing::XShapes >& xTarget
165 , const css::drawing::Position3D& rPos
166 , const css::drawing::Direction3D& rSize
167 , const css::uno::Reference< css::graphic::XGraphic >& xGraphic );
169 css::uno::Reference< css::drawing::XShape >
170 createLine2D( const css::uno::Reference< css::drawing::XShapes >& xTarget
171 , const css::drawing::PointSequenceSequence& rPoints
172 , const VLineProperties* pLineProperties = nullptr );
174 css::uno::Reference< css::drawing::XShape >
175 createLine ( const css::uno::Reference< css::drawing::XShapes >& xTarget,
176 const css::awt::Size& rSize, const css::awt::Point& rPosition );
178 css::uno::Reference< css::drawing::XShape >
179 createLine3D( const css::uno::Reference< css::drawing::XShapes >& xTarget
180 , const css::drawing::PolyPolygonShape3D& rPoints
181 , const VLineProperties& rLineProperties );
183 css::uno::Reference< css::drawing::XShape >
184 createCircle2D( const css::uno::Reference< css::drawing::XShapes >& xTarget
185 , const css::drawing::Position3D& rPos
186 , const css::drawing::Direction3D& rSize );
188 css::uno::Reference< css::drawing::XShape >
189 createCircle( const css::uno::Reference< css::drawing::XShapes >& xTarget
190 , const css::awt::Size& rSize
191 , const css::awt::Point& rPosition );
193 css::uno::Reference< css::drawing::XShape >
194 createText( const css::uno::Reference< css::drawing::XShapes >& xTarget2D
195 , const OUString& rText
196 , const tNameSequence& rPropNames
197 , const tAnySequence& rPropValues
198 , const css::uno::Any& rATransformation
201 /** This method creates a text shape made up by a set of paragraphs.
202 * For each paragraph the related text style is passed to the method.
204 * @param xTarget
205 * where to append the new created text shape.
207 * @param rTextParagraphs
208 * the set of paragraphs which made up the text shape.
210 * @param rParaPropNames
211 * a collection of lists of text property names:
212 * there must be a list of text property names for each paragraph.
214 * @param rParaPropValues
215 * a collection of lists of text property values:
216 * there must be a list of text property values for each paragraph.
218 * @param rPropNames
219 * a list of text property names to be applied to the whole text shape.
221 * @param rPropValues
222 * a list of text property values to be applied to the whole text shape.
224 * @param rATransformation
225 * a transformation to be applied to the text shape as final step.
228 css::uno::Reference< css::drawing::XShape >
229 createText( const css::uno::Reference< css::drawing::XShapes >& xTarget
230 , const css::uno::Sequence< OUString >& rTextParagraphs
231 , const css::uno::Sequence< tNameSequence >& rParaPropNames
232 , const css::uno::Sequence< tAnySequence >& rParaPropValues
233 , const tNameSequence& rPropNames
234 , const tAnySequence& rPropValues
235 , const css::uno::Any& rATransformation );
237 css::uno::Reference< css::drawing::XShape >
238 createText(const css::uno::Reference< css::drawing::XShapes >& xTarget
239 , css::uno::Sequence< css::uno::Reference< css::chart2::XFormattedString > >& xFormattedString
240 , const tNameSequence& rPropNames
241 , const tAnySequence& rPropValues
242 , const css::uno::Any& rATransformation);
244 css::uno::Reference< css::drawing::XShape >
245 createText( const css::uno::Reference< css::drawing::XShapes >& xTarget2D,
246 const css::awt::Size& rSize,
247 const css::awt::Point& rPosition,
248 css::uno::Sequence< css::uno::Reference< css::chart2::XFormattedString > >& xFormattedString,
249 const css::uno::Reference< css::beans::XPropertySet > & xTextProperties,
250 double nRotation, const OUString& aName );
252 css::uno::Reference< css::drawing::XShape >
253 createInvisibleRectangle(
254 const css::uno::Reference< css::drawing::XShapes >& xTarget
255 , const css::awt::Size& rSize );
257 css::uno::Reference< css::drawing::XShape >
258 createRectangle(
259 const css::uno::Reference< css::drawing::XShapes >& xTarget,
260 const css::awt::Size& rSize,
261 const css::awt::Point& rPosition,
262 const tNameSequence& rPropNames,
263 const tAnySequence& rPropValues,
264 StackPosition ePos = StackPosition::Top );
266 css::uno::Reference< css::drawing::XShape >
267 createRectangle(
268 const css::uno::Reference< css::drawing::XShapes >& xTarget );
270 css::uno::Reference< css::drawing::XShapes >
271 getOrCreateChartRootShape( const css::uno::Reference<
272 css::drawing::XDrawPage>& xPage );
274 static void setPageSize(const css::uno::Reference<css::drawing::XShapes>& xChartShapes,
275 const css::awt::Size& rSize);
277 static css::uno::Reference< css::drawing::XShapes >
278 getChartRootShape( const css::uno::Reference< css::drawing::XDrawPage>& xPage );
280 static void makeShapeInvisible( const css::uno::Reference< css::drawing::XShape >& xShape );
282 static void setShapeName( const css::uno::Reference< css::drawing::XShape >& xShape
283 , const OUString& rName );
285 static OUString getShapeName( const css::uno::Reference< css::drawing::XShape >& xShape );
287 static css::uno::Any makeTransformation( const css::awt::Point& rScreenPosition2D, double fRotationAnglePi=0.0 );
289 static OUString getStackedString( const OUString& rString, bool bStacked );
291 static bool hasPolygonAnyLines( css::drawing::PolyPolygonShape3D& rPoly );
292 static bool isPolygonEmptyOrSinglePoint( css::drawing::PolyPolygonShape3D& rPoly );
293 static void closePolygon( css::drawing::PolyPolygonShape3D& rPoly );
295 static css::awt::Size calculateNewSizeRespectingAspectRatio(
296 const css::awt::Size& rTargetSize
297 , const css::awt::Size& rSourceSizeWithCorrectAspectRatio );
299 static css::awt::Point calculateTopLeftPositionToCenterObject(
300 const css::awt::Point& rTargetAreaPosition
301 , const css::awt::Size& rTargetAreaSize
302 , const css::awt::Size& rObjectSize );
304 static ::basegfx::B2IRectangle getRectangleOfShape(
305 const css::uno::Reference< css::drawing::XShape >& xShape );
307 static css::awt::Size getSizeAfterRotation(
308 const css::uno::Reference< css::drawing::XShape >& xShape, double fRotationAngleDegree );
310 static void removeSubShapes( const css::uno::Reference< css::drawing::XShapes >& xShapes );
312 static sal_Int32 getSymbolCount() { return Symbol_COUNT; }
314 private:
315 css::uno::Reference< css::drawing::XShape >
316 impl_createCube( const css::uno::Reference< css::drawing::XShapes >& xTarget
317 , const css::drawing::Position3D& rPosition
318 , const css::drawing::Direction3D& rSize, sal_Int32 nRotateZAngleHundredthDegree
319 , bool bRounded );
321 css::uno::Reference< css::drawing::XShape >
322 impl_createConeOrCylinder( const css::uno::Reference< css::drawing::XShapes >& xTarget
323 , const css::drawing::Position3D& rPosition
324 , const css::drawing::Direction3D& rSize
325 , double fTopHeight, sal_Int32 nRotateZAngleHundredthDegree
326 , bool bCylinder);
329 } //namespace chart
330 #endif
332 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */