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_DRAWINGML_SHAPEPROPERTYMAP_HXX
21 #define INCLUDED_OOX_DRAWINGML_SHAPEPROPERTYMAP_HXX
23 #include <oox/helper/propertymap.hxx>
24 #include <oox/dllapi.h>
28 namespace oox
{ class ModelObjectHelper
; }
33 /** Enumeration for various properties related to drawing shape formatting.
35 This is an abstraction for shape formatting properties that have different
36 names in various implementations, e.g. drawing shapes vs. chart objects.
38 If you *insert* ids into this list, then update spnCommonPropIds, spnLinearPropIds
39 and spnFilledPropIds of oox/source/drawingml/chart/objectformatter.cxx if
40 the newly inserted enum is inside the range they cover
47 SHAPEPROP_LineTransparency
,
48 SHAPEPROP_LineDash
, /// Explicit line dash or name of a line dash stored in a global container.
50 SHAPEPROP_LineStart
, /// Explicit line start marker or name of a line marker stored in a global container.
51 SHAPEPROP_LineStartWidth
,
52 SHAPEPROP_LineStartCenter
,
53 SHAPEPROP_LineEnd
, /// Explicit line end marker or name of a line marker stored in a global container.
54 SHAPEPROP_LineEndWidth
,
55 SHAPEPROP_LineEndCenter
,
58 SHAPEPROP_FillTransparency
,
59 SHAPEPROP_GradientTransparency
,
60 SHAPEPROP_FillGradient
, /// Explicit fill gradient or name of a fill gradient stored in a global container.
61 SHAPEPROP_FillBitmapUrl
, /// Explicit fill bitmap URL or name of a fill bitmap URL stored in a global container.
62 SHAPEPROP_FillBitmapMode
,
63 SHAPEPROP_FillBitmapSizeX
,
64 SHAPEPROP_FillBitmapSizeY
,
65 SHAPEPROP_FillBitmapOffsetX
,
66 SHAPEPROP_FillBitmapOffsetY
,
67 SHAPEPROP_FillBitmapRectanglePoint
,
69 SHAPEPROP_ShadowXDistance
,
70 SHAPEPROP_FillBitmapNameFromUrl
,
74 struct OOX_DLLPUBLIC ShapePropertyInfo
76 std::vector
<sal_Int32
> maPropertyIds
;
77 bool mbNamedLineMarker
; /// True = use named line marker instead of explicit line marker.
78 bool mbNamedLineDash
; /// True = use named line dash instead of explicit line dash.
79 bool mbNamedFillGradient
; /// True = use named fill gradient instead of explicit fill gradient.
80 bool mbNamedFillBitmapUrl
; /// True = use named fill bitmap URL instead of explicit fill bitmap URL.
82 static ShapePropertyInfo DEFAULT
; /// Default property info (used as default parameter of other methods).
84 explicit ShapePropertyInfo(
85 const sal_Int32
* pnPropertyIds
,
86 bool bNamedLineMarker
,
88 bool bNamedFillGradient
,
89 bool bNamedFillBitmapUrl
);
91 bool has( ShapePropertyId ePropId
) const { return maPropertyIds
.size() > size_t(ePropId
) && maPropertyIds
[ ePropId
] >= 0; }
92 sal_Int32
operator[]( ShapePropertyId ePropId
) const { return maPropertyIds
[ ePropId
]; }
97 class OOX_DLLPUBLIC ShapePropertyMap
: public PropertyMap
100 explicit ShapePropertyMap(
101 ModelObjectHelper
& rModelObjHelper
,
102 const ShapePropertyInfo
& rShapePropInfo
= ShapePropertyInfo::DEFAULT
);
104 /** Returns true, if the specified property is supported. */
105 bool supportsProperty( ShapePropertyId ePropId
) const;
107 /** Returns true, if named line markers are supported, and the specified
108 line marker has already been inserted into the marker table. */
109 bool hasNamedLineMarkerInTable( const OUString
& rMarkerName
) const;
111 /** Sets the specified shape property to the passed value. */
112 bool setAnyProperty( ShapePropertyId ePropId
, const ::com::sun::star::uno::Any
& rValue
);
114 /** Sets the specified shape property to the passed value. */
115 template< typename Type
>
116 bool setProperty( ShapePropertyId ePropId
, const Type
& rValue
)
117 { return setAnyProperty( ePropId
, ::com::sun::star::uno::Any( rValue
) ); }
119 using PropertyMap::setAnyProperty
;
120 using PropertyMap::setProperty
;
123 /** Sets an explicit line marker, or creates a named line marker. */
124 bool setLineMarker( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
125 /** Sets an explicit line dash, or creates a named line dash. */
126 bool setLineDash( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
127 /** Sets an explicit fill gradient, or creates a named fill gradient. */
128 bool setFillGradient( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
129 /** Creates a named transparency gradient. */
130 bool setGradientTrans( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
131 /** Sets an explicit fill bitmap URL, or creates a named fill bitmap URL. */
132 bool setFillBitmapUrl( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
133 /** Sets an explicit fill bitmap URL and pushes the name to FillBitmapName */
134 bool setFillBitmapNameFromUrl( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
136 // not implemented, to prevent implicit conversion from enum to int
137 ::com::sun::star::uno::Any
& operator[]( ShapePropertyId ePropId
);
138 const ::com::sun::star::uno::Any
& operator[]( ShapePropertyId ePropId
) const;
141 ModelObjectHelper
& mrModelObjHelper
;
142 ShapePropertyInfo maShapePropInfo
;
147 } // namespace drawingml
152 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */