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 OOX_DRAWINGML_SHAPEPROPERTYMAP_HXX
21 #define OOX_DRAWINGML_SHAPEPROPERTYMAP_HXX
23 #include "oox/helper/propertymap.hxx"
24 #include "oox/dllapi.h"
26 namespace oox
{ class ModelObjectHelper
; }
31 // ============================================================================
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.
43 SHAPEPROP_LineTransparency
,
44 SHAPEPROP_LineDash
, /// Explicit line dash or name of a line dash stored in a global container.
46 SHAPEPROP_LineStart
, /// Explicit line start marker or name of a line marker stored in a global container.
47 SHAPEPROP_LineStartWidth
,
48 SHAPEPROP_LineStartCenter
,
49 SHAPEPROP_LineEnd
, /// Explicit line end marker or name of a line marker stored in a global container.
50 SHAPEPROP_LineEndWidth
,
51 SHAPEPROP_LineEndCenter
,
54 SHAPEPROP_FillTransparency
,
55 SHAPEPROP_GradientTransparency
,
56 SHAPEPROP_FillGradient
, /// Explicit fill gradient or name of a fill gradient stored in a global container.
57 SHAPEPROP_FillBitmapUrl
, /// Explicit fill bitmap URL or name of a fill bitmap URL stored in a global container.
58 SHAPEPROP_FillBitmapMode
,
59 SHAPEPROP_FillBitmapSizeX
,
60 SHAPEPROP_FillBitmapSizeY
,
61 SHAPEPROP_FillBitmapOffsetX
,
62 SHAPEPROP_FillBitmapOffsetY
,
63 SHAPEPROP_FillBitmapRectanglePoint
,
65 SHAPEPROP_ShadowXDistance
,
66 SHAPEPROP_FillBitmapNameFromUrl
,
70 // ============================================================================
72 struct OOX_DLLPUBLIC ShapePropertyInfo
74 const sal_Int32
* mpnPropertyIds
; /// Pointer to array of property identifiers for all SHAPEPROP properties.
75 bool mbNamedLineMarker
; /// True = use named line marker instead of explicit line marker.
76 bool mbNamedLineDash
; /// True = use named line dash instead of explicit line dash.
77 bool mbNamedFillGradient
; /// True = use named fill gradient instead of explicit fill gradient.
78 bool mbNamedFillBitmapUrl
; /// True = use named fill bitmap URL instead of explicit fill bitmap URL.
80 static ShapePropertyInfo DEFAULT
; /// Default property info (used as default parameter of other methods).
82 explicit ShapePropertyInfo(
83 const sal_Int32
* pnPropertyIds
,
84 bool bNamedLineMarker
,
86 bool bNamedFillGradient
,
87 bool bNamedFillBitmapUrl
);
89 inline bool has( ShapePropertyId ePropId
) const { return mpnPropertyIds
[ ePropId
] >= 0; }
90 inline sal_Int32
operator[]( ShapePropertyId ePropId
) const { return mpnPropertyIds
[ ePropId
]; }
93 // ============================================================================
95 class OOX_DLLPUBLIC ShapePropertyMap
: public PropertyMap
98 explicit ShapePropertyMap(
99 ModelObjectHelper
& rModelObjHelper
,
100 const ShapePropertyInfo
& rShapePropInfo
= ShapePropertyInfo::DEFAULT
);
102 /** Returns true, if the specified property is supported. */
103 bool supportsProperty( ShapePropertyId ePropId
) const;
105 /** Returns true, if named line markers are supported, and the specified
106 line marker has already been inserted into the marker table. */
107 bool hasNamedLineMarkerInTable( const OUString
& rMarkerName
) const;
109 /** Sets the specified shape property to the passed value. */
110 bool setAnyProperty( ShapePropertyId ePropId
, const ::com::sun::star::uno::Any
& rValue
);
112 /** Sets the specified shape property to the passed value. */
113 template< typename Type
>
114 inline bool setProperty( ShapePropertyId ePropId
, const Type
& rValue
)
115 { return setAnyProperty( ePropId
, ::com::sun::star::uno::Any( rValue
) ); }
117 using PropertyMap::setAnyProperty
;
118 using PropertyMap::setProperty
;
119 using PropertyMap::operator[];
122 /** Sets an explicit line marker, or creates a named line marker. */
123 bool setLineMarker( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
124 /** Sets an explicit line dash, or creates a named line dash. */
125 bool setLineDash( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
126 /** Sets an explicit fill gradient, or creates a named fill gradient. */
127 bool setFillGradient( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
128 /** Creates a named transparency gradient. */
129 bool setGradientTrans( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
130 /** Sets an explicit fill bitmap URL, or creates a named fill bitmap URL. */
131 bool setFillBitmapUrl( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
132 /** Sets an explicit fill bitmap URL and pushes the name to FillBitmapName */
133 bool setFillBitmapNameFromUrl( sal_Int32 nPropId
, const ::com::sun::star::uno::Any
& rValue
);
135 // not implemented, to prevent implicit conversion from enum to int
136 ::com::sun::star::uno::Any
& operator[]( ShapePropertyId ePropId
);
137 const ::com::sun::star::uno::Any
& operator[]( ShapePropertyId ePropId
) const;
140 ModelObjectHelper
& mrModelObjHelper
;
141 ShapePropertyInfo maShapePropInfo
;
144 // ============================================================================
146 } // namespace drawingml
151 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */