1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef CHART_PROPERTYHELPER_HXX
24*b1cdbd2cSJim Jagielski #define CHART_PROPERTYHELPER_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/Property.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Any.hxx>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
31*b1cdbd2cSJim Jagielski #include <comphelper/property.hxx>
32*b1cdbd2cSJim Jagielski #include <map>
33*b1cdbd2cSJim Jagielski #include "charttoolsdllapi.hxx"
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski namespace chart
36*b1cdbd2cSJim Jagielski {
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski typedef int tPropertyValueMapKey;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski typedef ::std::map< tPropertyValueMapKey, ::com::sun::star::uno::Any >
41*b1cdbd2cSJim Jagielski     tPropertyValueMap;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski namespace PropertyHelper
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski /** adds a line dash with a unique name to the gradient obtained by the given
47*b1cdbd2cSJim Jagielski     factory.
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski     @return The name used for storing this element in the table
50*b1cdbd2cSJim Jagielski */
51*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::rtl::OUString addLineDashUniqueNameToTable(
52*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Any & rValue,
53*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
54*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XMultiServiceFactory > & xFact,
55*b1cdbd2cSJim Jagielski     const ::rtl::OUString & rPreferredName );
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski /** adds a gradient with a unique name to the gradient obtained by the given
58*b1cdbd2cSJim Jagielski     factory.
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski     @return The name used for storing this element in the table
61*b1cdbd2cSJim Jagielski */
62*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::rtl::OUString addGradientUniqueNameToTable(
63*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Any & rValue,
64*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
65*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XMultiServiceFactory > & xFact,
66*b1cdbd2cSJim Jagielski     const ::rtl::OUString & rPreferredName );
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski /** adds a transparency gradient with a unique name to the gradient obtained
69*b1cdbd2cSJim Jagielski     by the given factory.
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski     @return The name used for storing this element in the table
72*b1cdbd2cSJim Jagielski */
73*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
74*b1cdbd2cSJim Jagielski ::rtl::OUString addTransparencyGradientUniqueNameToTable(
75*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Any & rValue,
76*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
77*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XMultiServiceFactory > & xFact,
78*b1cdbd2cSJim Jagielski     const ::rtl::OUString & rPreferredName );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski /** adds a hatch with a unique name to the gradient obtained by the given
81*b1cdbd2cSJim Jagielski     factory.
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski     @return The name used for storing this element in the table
84*b1cdbd2cSJim Jagielski */
85*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::rtl::OUString addHatchUniqueNameToTable(
86*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Any & rValue,
87*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
88*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XMultiServiceFactory > & xFact,
89*b1cdbd2cSJim Jagielski     const ::rtl::OUString & rPreferredName );
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski /** adds a bitmap with a unique name to the gradient obtained by the given
92*b1cdbd2cSJim Jagielski     factory.
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski     @return The name used for storing this element in the table
95*b1cdbd2cSJim Jagielski */
96*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::rtl::OUString addBitmapUniqueNameToTable(
97*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Any & rValue,
98*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
99*b1cdbd2cSJim Jagielski         ::com::sun::star::lang::XMultiServiceFactory > & xFact,
100*b1cdbd2cSJim Jagielski     const ::rtl::OUString & rPreferredName );
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------------
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski /** Set a property to a certain value in the given map.  This works for
105*b1cdbd2cSJim Jagielski     properties that are already set, and those which are not yet in the map.
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     @param any is the value encapsulated in the variant type Any
108*b1cdbd2cSJim Jagielski  */
109*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
110*b1cdbd2cSJim Jagielski void setPropertyValueAny( tPropertyValueMap & rOutMap, tPropertyValueMapKey key,
111*b1cdbd2cSJim Jagielski                           const ::com::sun::star::uno::Any & rAny );
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski /** Set a property to a certain value in the given map.  This works for
114*b1cdbd2cSJim Jagielski     properties that are already set, and those which are not yet in the map.
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     @param value is the value of type Value that will be put into a variant type
117*b1cdbd2cSJim Jagielski         Any before set in the property map.
118*b1cdbd2cSJim Jagielski  */
119*b1cdbd2cSJim Jagielski template< typename Value >
setPropertyValue(tPropertyValueMap & rOutMap,tPropertyValueMapKey key,const Value & value)120*b1cdbd2cSJim Jagielski     void setPropertyValue( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const Value & value )
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski     setPropertyValueAny( rOutMap, key, ::com::sun::star::uno::makeAny( value ));
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski template<>
126*b1cdbd2cSJim Jagielski     void setPropertyValue< ::com::sun::star::uno::Any >( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const ::com::sun::star::uno::Any & rAny );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS void setPropertyValueDefaultAny( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const ::com::sun::star::uno::Any & rAny );
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski /** Calls setPropertyValue() but asserts that the given property hasn't been set
131*b1cdbd2cSJim Jagielski     before.
132*b1cdbd2cSJim Jagielski  */
133*b1cdbd2cSJim Jagielski template< typename Value >
setPropertyValueDefault(tPropertyValueMap & rOutMap,tPropertyValueMapKey key,const Value & value)134*b1cdbd2cSJim Jagielski     void setPropertyValueDefault( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const Value & value )
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski     setPropertyValueDefaultAny( rOutMap, key, ::com::sun::star::uno::makeAny( value ));
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski /** Calls setPropertyValue() but asserts that the given property hasn't been set
140*b1cdbd2cSJim Jagielski     before.
141*b1cdbd2cSJim Jagielski  */
142*b1cdbd2cSJim Jagielski template<>
143*b1cdbd2cSJim Jagielski     void setPropertyValueDefault< ::com::sun::star::uno::Any >( tPropertyValueMap & rOutMap, tPropertyValueMapKey key, const ::com::sun::star::uno::Any & rAny );
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski /** Calls setPropertyValueDefault() with an empty Any as value
146*b1cdbd2cSJim Jagielski  */
147*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS void setEmptyPropertyValueDefault( tPropertyValueMap & rOutMap, tPropertyValueMapKey key );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski } // namespace PropertyHelper
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski // ================================================================================
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski struct OOO_DLLPUBLIC_CHARTTOOLS PropertyNameLess
155*b1cdbd2cSJim Jagielski {
operator ()chart::PropertyNameLess156*b1cdbd2cSJim Jagielski     inline bool operator() ( const ::com::sun::star::beans::Property & first,
157*b1cdbd2cSJim Jagielski                              const ::com::sun::star::beans::Property & second )
158*b1cdbd2cSJim Jagielski     {
159*b1cdbd2cSJim Jagielski         return ( first.Name.compareTo( second.Name ) < 0 );
160*b1cdbd2cSJim Jagielski     }
161*b1cdbd2cSJim Jagielski };
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski struct OOO_DLLPUBLIC_CHARTTOOLS PropertyLess : public ::std::binary_function<
164*b1cdbd2cSJim Jagielski         ::com::sun::star::beans::Property,
165*b1cdbd2cSJim Jagielski         ::com::sun::star::beans::Property,
166*b1cdbd2cSJim Jagielski         bool >
167*b1cdbd2cSJim Jagielski {
operator ()chart::PropertyLess168*b1cdbd2cSJim Jagielski     bool operator() ( const ::com::sun::star::beans::Property & rFirst,
169*b1cdbd2cSJim Jagielski                       const ::com::sun::star::beans::Property & rSecond )
170*b1cdbd2cSJim Jagielski     {
171*b1cdbd2cSJim Jagielski         return ( rFirst.Name.compareTo( rSecond.Name ) < 0 );
172*b1cdbd2cSJim Jagielski     }
173*b1cdbd2cSJim Jagielski };
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski struct OOO_DLLPUBLIC_CHARTTOOLS PropertyValueNameEquals : public ::std::unary_function< ::com::sun::star::beans::PropertyValue, bool >
176*b1cdbd2cSJim Jagielski {
PropertyValueNameEqualschart::PropertyValueNameEquals177*b1cdbd2cSJim Jagielski     explicit PropertyValueNameEquals( const ::rtl::OUString & rName ) :
178*b1cdbd2cSJim Jagielski             m_aName( rName )
179*b1cdbd2cSJim Jagielski     {}
180*b1cdbd2cSJim Jagielski 
operator ()chart::PropertyValueNameEquals181*b1cdbd2cSJim Jagielski     bool operator() ( const ::com::sun::star::beans::PropertyValue & rPropValue )
182*b1cdbd2cSJim Jagielski     {
183*b1cdbd2cSJim Jagielski         return rPropValue.Name.equals( m_aName );
184*b1cdbd2cSJim Jagielski     }
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski private:
187*b1cdbd2cSJim Jagielski     ::rtl::OUString m_aName;
188*b1cdbd2cSJim Jagielski };
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski } //  namespace chart
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski // CHART_PROPERTYHELPER_HXX
193*b1cdbd2cSJim Jagielski #endif
194