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