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 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_chart2.hxx"
26*b1cdbd2cSJim Jagielski #include "DataPoint.hxx"
27*b1cdbd2cSJim Jagielski #include "DataPointProperties.hxx"
28*b1cdbd2cSJim Jagielski #include "CharacterProperties.hxx"
29*b1cdbd2cSJim Jagielski #include "UserDefinedProperties.hxx"
30*b1cdbd2cSJim Jagielski #include "PropertyHelper.hxx"
31*b1cdbd2cSJim Jagielski #include "macros.hxx"
32*b1cdbd2cSJim Jagielski #include "ContainerHelper.hxx"
33*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyle.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include <algorithm>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference;
43*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Sequence;
44*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::Property;
45*b1cdbd2cSJim Jagielski using ::osl::MutexGuard;
46*b1cdbd2cSJim Jagielski using ::rtl::OUString;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski // ____________________________________________________________
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski namespace
51*b1cdbd2cSJim Jagielski {
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski struct StaticDataPointInfoHelper_Initializer
54*b1cdbd2cSJim Jagielski {
operator ()__anon6ba96beb0111::StaticDataPointInfoHelper_Initializer55*b1cdbd2cSJim Jagielski     ::cppu::OPropertyArrayHelper* operator()()
56*b1cdbd2cSJim Jagielski     {
57*b1cdbd2cSJim Jagielski         static ::cppu::OPropertyArrayHelper aPropHelper( lcl_GetPropertySequence() );
58*b1cdbd2cSJim Jagielski         return &aPropHelper;
59*b1cdbd2cSJim Jagielski     }
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski private:
lcl_GetPropertySequence__anon6ba96beb0111::StaticDataPointInfoHelper_Initializer62*b1cdbd2cSJim Jagielski     Sequence< Property > lcl_GetPropertySequence()
63*b1cdbd2cSJim Jagielski     {
64*b1cdbd2cSJim Jagielski         ::std::vector< ::com::sun::star::beans::Property > aProperties;
65*b1cdbd2cSJim Jagielski         ::chart::DataPointProperties::AddPropertiesToVector( aProperties );
66*b1cdbd2cSJim Jagielski         ::chart::CharacterProperties::AddPropertiesToVector( aProperties );
67*b1cdbd2cSJim Jagielski         ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties );
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski         ::std::sort( aProperties.begin(), aProperties.end(),
70*b1cdbd2cSJim Jagielski                      ::chart::PropertyNameLess() );
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski         return ::chart::ContainerHelper::ContainerToSequence( aProperties );
73*b1cdbd2cSJim Jagielski     }
74*b1cdbd2cSJim Jagielski };
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski struct StaticDataPointInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticDataPointInfoHelper_Initializer >
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski };
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski struct StaticDataPointInfo_Initializer
81*b1cdbd2cSJim Jagielski {
operator ()__anon6ba96beb0111::StaticDataPointInfo_Initializer82*b1cdbd2cSJim Jagielski     uno::Reference< beans::XPropertySetInfo >* operator()()
83*b1cdbd2cSJim Jagielski     {
84*b1cdbd2cSJim Jagielski         static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo(
85*b1cdbd2cSJim Jagielski             ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticDataPointInfoHelper::get() ) );
86*b1cdbd2cSJim Jagielski         return &xPropertySetInfo;
87*b1cdbd2cSJim Jagielski     }
88*b1cdbd2cSJim Jagielski };
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski struct StaticDataPointInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticDataPointInfo_Initializer >
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski };
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski } // anonymous namespace
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski // ____________________________________________________________
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski namespace chart
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski 
DataPoint(const uno::Reference<beans::XPropertySet> & rParentProperties)101*b1cdbd2cSJim Jagielski DataPoint::DataPoint( const uno::Reference< beans::XPropertySet > & rParentProperties ) :
102*b1cdbd2cSJim Jagielski         ::property::OPropertySet( m_aMutex ),
103*b1cdbd2cSJim Jagielski         m_xParentProperties( rParentProperties ),
104*b1cdbd2cSJim Jagielski         m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder()),
105*b1cdbd2cSJim Jagielski         m_bNoParentPropAllowed( false )
106*b1cdbd2cSJim Jagielski {
107*b1cdbd2cSJim Jagielski     SetNewValuesExplicitlyEvenIfTheyEqualDefault();
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski 
DataPoint(const DataPoint & rOther)110*b1cdbd2cSJim Jagielski DataPoint::DataPoint( const DataPoint & rOther ) :
111*b1cdbd2cSJim Jagielski         MutexContainer(),
112*b1cdbd2cSJim Jagielski         impl::DataPoint_Base(),
113*b1cdbd2cSJim Jagielski         ::property::OPropertySet( rOther, m_aMutex ),
114*b1cdbd2cSJim Jagielski         m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder()),
115*b1cdbd2cSJim Jagielski         m_bNoParentPropAllowed( true )
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski     SetNewValuesExplicitlyEvenIfTheyEqualDefault();
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski     // m_xParentProperties has to be set from outside, like in the method
120*b1cdbd2cSJim Jagielski     // DataSeries::createClone
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski     // add as listener to XPropertySet properties
123*b1cdbd2cSJim Jagielski     Reference< beans::XPropertySet > xPropertySet;
124*b1cdbd2cSJim Jagielski     uno::Any aValue;
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski     getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X );
127*b1cdbd2cSJim Jagielski     if( ( aValue >>= xPropertySet )
128*b1cdbd2cSJim Jagielski         && xPropertySet.is())
129*b1cdbd2cSJim Jagielski         ModifyListenerHelper::addListener( xPropertySet, m_xModifyEventForwarder );
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y );
132*b1cdbd2cSJim Jagielski     if( ( aValue >>= xPropertySet )
133*b1cdbd2cSJim Jagielski         && xPropertySet.is())
134*b1cdbd2cSJim Jagielski         ModifyListenerHelper::addListener( xPropertySet, m_xModifyEventForwarder );
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski     m_bNoParentPropAllowed = false;
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski 
~DataPoint()139*b1cdbd2cSJim Jagielski DataPoint::~DataPoint()
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski     try
142*b1cdbd2cSJim Jagielski     {
143*b1cdbd2cSJim Jagielski         // remove listener from XPropertySet properties
144*b1cdbd2cSJim Jagielski         Reference< beans::XPropertySet > xPropertySet;
145*b1cdbd2cSJim Jagielski         uno::Any aValue;
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski         getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X );
148*b1cdbd2cSJim Jagielski         if( ( aValue >>= xPropertySet )
149*b1cdbd2cSJim Jagielski             && xPropertySet.is())
150*b1cdbd2cSJim Jagielski             ModifyListenerHelper::removeListener( xPropertySet, m_xModifyEventForwarder );
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski         getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y );
153*b1cdbd2cSJim Jagielski         if( ( aValue >>= xPropertySet )
154*b1cdbd2cSJim Jagielski             && xPropertySet.is())
155*b1cdbd2cSJim Jagielski             ModifyListenerHelper::removeListener( xPropertySet, m_xModifyEventForwarder );
156*b1cdbd2cSJim Jagielski     }
157*b1cdbd2cSJim Jagielski     catch( const uno::Exception & ex )
158*b1cdbd2cSJim Jagielski     {
159*b1cdbd2cSJim Jagielski         ASSERT_EXCEPTION( ex );
160*b1cdbd2cSJim Jagielski     }
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski // ____ XCloneable ____
createClone()164*b1cdbd2cSJim Jagielski uno::Reference< util::XCloneable > SAL_CALL DataPoint::createClone()
165*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski     return uno::Reference< util::XCloneable >( new DataPoint( *this ));
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski // ____ XChild ____
getParent()171*b1cdbd2cSJim Jagielski Reference< uno::XInterface > SAL_CALL DataPoint::getParent()
172*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski     return Reference< uno::XInterface >( m_xParentProperties.get(), uno::UNO_QUERY );
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski 
setParent(const Reference<uno::XInterface> & Parent)177*b1cdbd2cSJim Jagielski void SAL_CALL DataPoint::setParent(
178*b1cdbd2cSJim Jagielski     const Reference< uno::XInterface >& Parent )
179*b1cdbd2cSJim Jagielski     throw (lang::NoSupportException,
180*b1cdbd2cSJim Jagielski            uno::RuntimeException)
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski     m_xParentProperties = Reference< beans::XPropertySet >( Parent, uno::UNO_QUERY );
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski // ____ OPropertySet ____
GetDefaultValue(sal_Int32 nHandle) const186*b1cdbd2cSJim Jagielski uno::Any DataPoint::GetDefaultValue( sal_Int32 nHandle ) const
187*b1cdbd2cSJim Jagielski     throw(beans::UnknownPropertyException)
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski     // the value set at the data series is the default
190*b1cdbd2cSJim Jagielski     uno::Reference< beans::XFastPropertySet > xFast( m_xParentProperties.get(), uno::UNO_QUERY );
191*b1cdbd2cSJim Jagielski     if( !xFast.is())
192*b1cdbd2cSJim Jagielski     {
193*b1cdbd2cSJim Jagielski         OSL_ENSURE( m_bNoParentPropAllowed, "data point needs a parent property set to provide values correctly" );
194*b1cdbd2cSJim Jagielski         return uno::Any();
195*b1cdbd2cSJim Jagielski     }
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski     return xFast->getFastPropertyValue( nHandle );
198*b1cdbd2cSJim Jagielski }
199*b1cdbd2cSJim Jagielski 
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const uno::Any & rValue)200*b1cdbd2cSJim Jagielski void SAL_CALL DataPoint::setFastPropertyValue_NoBroadcast(
201*b1cdbd2cSJim Jagielski     sal_Int32 nHandle, const uno::Any& rValue )
202*b1cdbd2cSJim Jagielski     throw (uno::Exception)
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski     if(    nHandle == DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y
205*b1cdbd2cSJim Jagielski         || nHandle == DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X )
206*b1cdbd2cSJim Jagielski     {
207*b1cdbd2cSJim Jagielski         uno::Any aOldValue;
208*b1cdbd2cSJim Jagielski         Reference< util::XModifyBroadcaster > xBroadcaster;
209*b1cdbd2cSJim Jagielski         this->getFastPropertyValue( aOldValue, nHandle );
210*b1cdbd2cSJim Jagielski         if( aOldValue.hasValue() &&
211*b1cdbd2cSJim Jagielski             (aOldValue >>= xBroadcaster) &&
212*b1cdbd2cSJim Jagielski             xBroadcaster.is())
213*b1cdbd2cSJim Jagielski         {
214*b1cdbd2cSJim Jagielski             ModifyListenerHelper::removeListener( xBroadcaster, m_xModifyEventForwarder );
215*b1cdbd2cSJim Jagielski         }
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski         OSL_ASSERT( rValue.getValueType().getTypeClass() == uno::TypeClass_INTERFACE );
218*b1cdbd2cSJim Jagielski         if( rValue.hasValue() &&
219*b1cdbd2cSJim Jagielski             (rValue >>= xBroadcaster) &&
220*b1cdbd2cSJim Jagielski             xBroadcaster.is())
221*b1cdbd2cSJim Jagielski         {
222*b1cdbd2cSJim Jagielski             ModifyListenerHelper::addListener( xBroadcaster, m_xModifyEventForwarder );
223*b1cdbd2cSJim Jagielski         }
224*b1cdbd2cSJim Jagielski     }
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski     ::property::OPropertySet::setFastPropertyValue_NoBroadcast( nHandle, rValue );
227*b1cdbd2cSJim Jagielski }
228*b1cdbd2cSJim Jagielski 
getInfoHelper()229*b1cdbd2cSJim Jagielski ::cppu::IPropertyArrayHelper & SAL_CALL DataPoint::getInfoHelper()
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski     return *StaticDataPointInfoHelper::get();
232*b1cdbd2cSJim Jagielski }
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski // ____ XPropertySet ____
getPropertySetInfo()235*b1cdbd2cSJim Jagielski Reference< beans::XPropertySetInfo > SAL_CALL DataPoint::getPropertySetInfo()
236*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
237*b1cdbd2cSJim Jagielski {
238*b1cdbd2cSJim Jagielski     return *StaticDataPointInfo::get();
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski // ____ XModifyBroadcaster ____
addModifyListener(const uno::Reference<util::XModifyListener> & aListener)242*b1cdbd2cSJim Jagielski void SAL_CALL DataPoint::addModifyListener( const uno::Reference< util::XModifyListener >& aListener )
243*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
244*b1cdbd2cSJim Jagielski {
245*b1cdbd2cSJim Jagielski     try
246*b1cdbd2cSJim Jagielski     {
247*b1cdbd2cSJim Jagielski         uno::Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW );
248*b1cdbd2cSJim Jagielski         xBroadcaster->addModifyListener( aListener );
249*b1cdbd2cSJim Jagielski     }
250*b1cdbd2cSJim Jagielski     catch( const uno::Exception & ex )
251*b1cdbd2cSJim Jagielski     {
252*b1cdbd2cSJim Jagielski         ASSERT_EXCEPTION( ex );
253*b1cdbd2cSJim Jagielski     }
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski 
removeModifyListener(const uno::Reference<util::XModifyListener> & aListener)256*b1cdbd2cSJim Jagielski void SAL_CALL DataPoint::removeModifyListener( const uno::Reference< util::XModifyListener >& aListener )
257*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
258*b1cdbd2cSJim Jagielski {
259*b1cdbd2cSJim Jagielski     try
260*b1cdbd2cSJim Jagielski     {
261*b1cdbd2cSJim Jagielski         uno::Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW );
262*b1cdbd2cSJim Jagielski         xBroadcaster->removeModifyListener( aListener );
263*b1cdbd2cSJim Jagielski     }
264*b1cdbd2cSJim Jagielski     catch( const uno::Exception & ex )
265*b1cdbd2cSJim Jagielski     {
266*b1cdbd2cSJim Jagielski         ASSERT_EXCEPTION( ex );
267*b1cdbd2cSJim Jagielski     }
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski // ____ XModifyListener ____
modified(const lang::EventObject & aEvent)271*b1cdbd2cSJim Jagielski void SAL_CALL DataPoint::modified( const lang::EventObject& aEvent )
272*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski     m_xModifyEventForwarder->modified( aEvent );
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski // ____ XEventListener (base of XModifyListener) ____
disposing(const lang::EventObject &)278*b1cdbd2cSJim Jagielski void SAL_CALL DataPoint::disposing( const lang::EventObject& )
279*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski     // nothing
282*b1cdbd2cSJim Jagielski }
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski // ____ OPropertySet ____
firePropertyChangeEvent()285*b1cdbd2cSJim Jagielski void DataPoint::firePropertyChangeEvent()
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski     fireModifyEvent();
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski 
fireModifyEvent()290*b1cdbd2cSJim Jagielski void DataPoint::fireModifyEvent()
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski     m_xModifyEventForwarder->modified( lang::EventObject( static_cast< uno::XWeak* >( this )));
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()295*b1cdbd2cSJim Jagielski Sequence< OUString > DataPoint::getSupportedServiceNames_Static()
296*b1cdbd2cSJim Jagielski {
297*b1cdbd2cSJim Jagielski     Sequence< OUString > aServices( 3 );
298*b1cdbd2cSJim Jagielski     aServices[ 0 ] = C2U( "com.sun.star.chart2.DataPoint" );
299*b1cdbd2cSJim Jagielski     aServices[ 1 ] = C2U( "com.sun.star.chart2.DataPointProperties" );
300*b1cdbd2cSJim Jagielski     aServices[ 2 ] = C2U( "com.sun.star.beans.PropertySet" );
301*b1cdbd2cSJim Jagielski     return aServices;
302*b1cdbd2cSJim Jagielski }
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski // needed by MSC compiler
305*b1cdbd2cSJim Jagielski using impl::DataPoint_Base;
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE2( DataPoint, DataPoint_Base, ::property::OPropertySet )
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski // implement XServiceInfo methods basing upon getSupportedServiceNames_Static
310*b1cdbd2cSJim Jagielski APPHELPER_XSERVICEINFO_IMPL( DataPoint, C2U( "com.sun.star.comp.chart.DataPoint" ));
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski } //  namespace chart
313