fix baseline build (old cairo) - 'cairo_rectangle_int_t' does not name a type
[LibreOffice.git] / chart2 / source / model / main / DataSeries.cxx
blob3cf89fa952d7e0321e8e4693b8903bf5ea29a41e
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 #include "DataSeries.hxx"
21 #include "DataSeriesProperties.hxx"
22 #include "DataPointProperties.hxx"
23 #include "CharacterProperties.hxx"
24 #include "UserDefinedProperties.hxx"
25 #include "DataPoint.hxx"
26 #include "macros.hxx"
27 #include "DataSeriesHelper.hxx"
28 #include "ContainerHelper.hxx"
29 #include "CloneHelper.hxx"
30 #include "ModifyListenerHelper.hxx"
31 #include "EventListenerHelper.hxx"
32 #include <cppuhelper/supportsservice.hxx>
34 #include <algorithm>
36 using namespace ::com::sun::star;
38 using ::com::sun::star::beans::Property;
39 using ::com::sun::star::uno::Sequence;
40 using ::com::sun::star::uno::Reference;
41 using ::com::sun::star::uno::Any;
42 using ::osl::MutexGuard;
44 namespace
47 struct StaticDataSeriesDefaults : public rtl::StaticWithInit< ::chart::tPropertyValueMap, StaticDataSeriesDefaults >
49 ::chart::tPropertyValueMap operator()()
51 ::chart::tPropertyValueMap aStaticDefaults;
52 ::chart::DataSeriesProperties::AddDefaultsToMap( aStaticDefaults );
53 ::chart::CharacterProperties::AddDefaultsToMap( aStaticDefaults );
54 float fDefaultCharHeight = 10.0;
55 ::chart::PropertyHelper::setPropertyValue( aStaticDefaults, ::chart::CharacterProperties::PROP_CHAR_CHAR_HEIGHT, fDefaultCharHeight );
56 ::chart::PropertyHelper::setPropertyValue( aStaticDefaults, ::chart::CharacterProperties::PROP_CHAR_ASIAN_CHAR_HEIGHT, fDefaultCharHeight );
57 ::chart::PropertyHelper::setPropertyValue( aStaticDefaults, ::chart::CharacterProperties::PROP_CHAR_COMPLEX_CHAR_HEIGHT, fDefaultCharHeight );
58 return aStaticDefaults;
62 struct StaticDataSeriesInfoHelper : public rtl::StaticWithInit< ::cppu::OPropertyArrayHelper, StaticDataSeriesInfoHelper, StaticDataSeriesInfoHelper, uno::Sequence< Property > >
64 uno::Sequence< Property > operator()()
66 ::std::vector< ::com::sun::star::beans::Property > aProperties;
67 ::chart::DataSeriesProperties::AddPropertiesToVector( aProperties );
68 ::chart::CharacterProperties::AddPropertiesToVector( aProperties );
69 ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties );
71 ::std::sort( aProperties.begin(), aProperties.end(),
72 ::chart::PropertyNameLess() );
74 return ::chart::ContainerHelper::ContainerToSequence( aProperties );
78 struct StaticDataSeriesInfo : public rtl::StaticWithInit< uno::Reference< beans::XPropertySetInfo >, StaticDataSeriesInfo >
80 uno::Reference< beans::XPropertySetInfo > operator()()
82 return ::cppu::OPropertySetHelper::createPropertySetInfo(StaticDataSeriesInfoHelper::get() );
86 void lcl_SetParent(
87 const uno::Reference< uno::XInterface > & xChildInterface,
88 const uno::Reference< uno::XInterface > & xParentInterface )
90 uno::Reference< container::XChild > xChild( xChildInterface, uno::UNO_QUERY );
91 if( xChild.is())
92 xChild->setParent( xParentInterface );
95 typedef ::std::map< sal_Int32, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > >
96 lcl_tDataPointMap;
98 void lcl_CloneAttributedDataPoints(
99 const lcl_tDataPointMap & rSource, lcl_tDataPointMap & rDestination,
100 const uno::Reference< uno::XInterface > & xSeries )
102 for( lcl_tDataPointMap::const_iterator aIt( rSource.begin());
103 aIt != rSource.end(); ++aIt )
105 Reference< beans::XPropertySet > xPoint( (*aIt).second );
106 if( xPoint.is())
108 Reference< util::XCloneable > xCloneable( xPoint, uno::UNO_QUERY );
109 if( xCloneable.is())
111 xPoint.set( xCloneable->createClone(), uno::UNO_QUERY );
112 if( xPoint.is())
114 lcl_SetParent( xPoint, xSeries );
115 rDestination.insert( lcl_tDataPointMap::value_type( (*aIt).first, xPoint ));
122 } // anonymous namespace
124 namespace chart
127 DataSeries::DataSeries( const uno::Reference< uno::XComponentContext > & xContext ) :
128 ::property::OPropertySet( m_aMutex ),
129 m_xContext( xContext ),
130 m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder())
134 DataSeries::DataSeries( const DataSeries & rOther ) :
135 MutexContainer(),
136 impl::DataSeries_Base(),
137 ::property::OPropertySet( rOther, m_aMutex ),
138 m_xContext( rOther.m_xContext ),
139 m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder())
141 if( ! rOther.m_aDataSequences.empty())
143 CloneHelper::CloneRefVector< tDataSequenceContainer::value_type >(
144 rOther.m_aDataSequences, m_aDataSequences );
145 ModifyListenerHelper::addListenerToAllElements( m_aDataSequences, m_xModifyEventForwarder );
148 CloneHelper::CloneRefVector< Reference< chart2::XRegressionCurve > >( rOther.m_aRegressionCurves, m_aRegressionCurves );
149 ModifyListenerHelper::addListenerToAllElements( m_aRegressionCurves, m_xModifyEventForwarder );
151 // add as listener to XPropertySet properties
152 Reference< beans::XPropertySet > xPropertySet;
153 uno::Any aValue;
155 getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X );
156 if( ( aValue >>= xPropertySet )
157 && xPropertySet.is())
158 ModifyListenerHelper::addListener( xPropertySet, m_xModifyEventForwarder );
160 getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y );
161 if( ( aValue >>= xPropertySet )
162 && xPropertySet.is())
163 ModifyListenerHelper::addListener( xPropertySet, m_xModifyEventForwarder );
166 // late initialization to call after copy-constructing
167 void DataSeries::Init( const DataSeries & rOther )
169 if( ! rOther.m_aDataSequences.empty())
170 EventListenerHelper::addListenerToAllElements( m_aDataSequences, this );
172 Reference< uno::XInterface > xThisInterface( static_cast< ::cppu::OWeakObject * >( this ));
173 if( ! rOther.m_aAttributedDataPoints.empty())
175 lcl_CloneAttributedDataPoints(
176 rOther.m_aAttributedDataPoints, m_aAttributedDataPoints, xThisInterface );
177 ModifyListenerHelper::addListenerToAllMapElements( m_aAttributedDataPoints, m_xModifyEventForwarder );
180 // add as parent to error bars
181 Reference< beans::XPropertySet > xPropertySet;
182 uno::Any aValue;
184 getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X );
185 if( ( aValue >>= xPropertySet )
186 && xPropertySet.is())
187 lcl_SetParent( xPropertySet, xThisInterface );
189 getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y );
190 if( ( aValue >>= xPropertySet )
191 && xPropertySet.is())
192 lcl_SetParent( xPropertySet, xThisInterface );
195 DataSeries::~DataSeries()
199 ModifyListenerHelper::removeListenerFromAllMapElements( m_aAttributedDataPoints, m_xModifyEventForwarder );
200 ModifyListenerHelper::removeListenerFromAllElements( m_aRegressionCurves, m_xModifyEventForwarder );
201 ModifyListenerHelper::removeListenerFromAllElements( m_aDataSequences, m_xModifyEventForwarder );
203 // remove listener from XPropertySet properties
204 Reference< beans::XPropertySet > xPropertySet;
205 uno::Any aValue;
207 getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X );
208 if( ( aValue >>= xPropertySet )
209 && xPropertySet.is())
210 ModifyListenerHelper::removeListener( xPropertySet, m_xModifyEventForwarder );
212 getFastPropertyValue( aValue, DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y );
213 if( ( aValue >>= xPropertySet )
214 && xPropertySet.is())
215 ModifyListenerHelper::removeListener( xPropertySet, m_xModifyEventForwarder );
217 catch( const uno::Exception & ex )
219 ASSERT_EXCEPTION( ex );
223 // ____ XCloneable ____
224 uno::Reference< util::XCloneable > SAL_CALL DataSeries::createClone()
225 throw (uno::RuntimeException, std::exception)
227 DataSeries * pNewSeries( new DataSeries( *this ));
228 // hold a reference to the clone
229 uno::Reference< util::XCloneable > xResult( pNewSeries );
230 // do initialization that uses uno references to the clone
231 pNewSeries->Init( *this );
233 return xResult;
236 Sequence< OUString > DataSeries::getSupportedServiceNames_Static()
238 Sequence< OUString > aServices( 3 );
239 aServices[ 0 ] = "com.sun.star.chart2.DataSeries";
240 aServices[ 1 ] = "com.sun.star.chart2.DataPointProperties";
241 aServices[ 2 ] = "com.sun.star.beans.PropertySet";
242 return aServices;
245 // ____ OPropertySet ____
246 uno::Any DataSeries::GetDefaultValue( sal_Int32 nHandle ) const
247 throw (beans::UnknownPropertyException,
248 uno::RuntimeException)
250 const tPropertyValueMap& rStaticDefaults = StaticDataSeriesDefaults::get();
251 tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( nHandle ) );
252 if( aFound == rStaticDefaults.end() )
253 return uno::Any();
254 return (*aFound).second;
257 // ____ OPropertySet ____
258 ::cppu::IPropertyArrayHelper & SAL_CALL DataSeries::getInfoHelper()
260 return StaticDataSeriesInfoHelper::get();
263 // ____ XPropertySet ____
264 uno::Reference< beans::XPropertySetInfo > SAL_CALL DataSeries::getPropertySetInfo()
265 throw (uno::RuntimeException, std::exception)
267 return StaticDataSeriesInfo::get();
270 void SAL_CALL DataSeries::getFastPropertyValue
271 ( uno::Any& rValue,
272 sal_Int32 nHandle ) const
274 // special handling for get. set is not possible for this property
275 if( nHandle == DataSeriesProperties::PROP_DATASERIES_ATTRIBUTED_DATA_POINTS )
277 // ToDo: only add those property sets that are really modified
278 uno::Sequence< sal_Int32 > aSeq( m_aAttributedDataPoints.size());
279 sal_Int32 * pIndexArray = aSeq.getArray();
280 sal_Int32 i = 0;
282 for( tDataPointAttributeContainer::const_iterator aIt( m_aAttributedDataPoints.begin());
283 aIt != m_aAttributedDataPoints.end(); ++aIt )
285 pIndexArray[ i ] = (*aIt).first;
286 ++i;
289 rValue <<= aSeq;
291 else
292 OPropertySet::getFastPropertyValue( rValue, nHandle );
295 void SAL_CALL DataSeries::setFastPropertyValue_NoBroadcast(
296 sal_Int32 nHandle, const uno::Any& rValue )
297 throw (uno::Exception, std::exception)
299 if( nHandle == DataPointProperties::PROP_DATAPOINT_ERROR_BAR_Y
300 || nHandle == DataPointProperties::PROP_DATAPOINT_ERROR_BAR_X )
302 uno::Any aOldValue;
303 Reference< util::XModifyBroadcaster > xBroadcaster;
304 this->getFastPropertyValue( aOldValue, nHandle );
305 if( aOldValue.hasValue() &&
306 (aOldValue >>= xBroadcaster) &&
307 xBroadcaster.is())
309 ModifyListenerHelper::removeListener( xBroadcaster, m_xModifyEventForwarder );
312 OSL_ASSERT( rValue.getValueType().getTypeClass() == uno::TypeClass_INTERFACE );
313 if( rValue.hasValue() &&
314 (rValue >>= xBroadcaster) &&
315 xBroadcaster.is())
317 ModifyListenerHelper::addListener( xBroadcaster, m_xModifyEventForwarder );
321 ::property::OPropertySet::setFastPropertyValue_NoBroadcast( nHandle, rValue );
324 Reference< beans::XPropertySet >
325 SAL_CALL DataSeries::getDataPointByIndex( sal_Int32 nIndex )
326 throw (lang::IndexOutOfBoundsException,
327 uno::RuntimeException, std::exception)
329 Reference< beans::XPropertySet > xResult;
331 Sequence< Reference< chart2::data::XLabeledDataSequence > > aSequences;
333 MutexGuard aGuard( GetMutex() );
334 aSequences = ContainerHelper::ContainerToSequence( m_aDataSequences );
337 ::std::vector< Reference< chart2::data::XLabeledDataSequence > > aValuesSeries(
338 DataSeriesHelper::getAllDataSequencesByRole( aSequences , "values", true ) );
340 if (aValuesSeries.empty())
341 throw lang::IndexOutOfBoundsException();
343 Reference< chart2::data::XDataSequence > xSeq( aValuesSeries.front()->getValues() );
344 if( 0 <= nIndex && nIndex < xSeq->getData().getLength() )
347 MutexGuard aGuard( GetMutex() );
348 tDataPointAttributeContainer::iterator aIt( m_aAttributedDataPoints.find( nIndex ) );
349 if( aIt != m_aAttributedDataPoints.end() )
350 xResult = (*aIt).second;
352 if( !xResult.is() )
354 Reference< beans::XPropertySet > xParentProperties;
355 Reference< util::XModifyListener > xModifyEventForwarder;
357 MutexGuard aGuard( GetMutex() );
358 xParentProperties = this;
359 xModifyEventForwarder = m_xModifyEventForwarder;
362 // create a new XPropertySet for this data point
363 xResult.set( new DataPoint( xParentProperties ) );
365 MutexGuard aGuard( GetMutex() );
366 m_aAttributedDataPoints[ nIndex ] = xResult;
368 ModifyListenerHelper::addListener( xResult, xModifyEventForwarder );
372 return xResult;
375 void SAL_CALL DataSeries::resetDataPoint( sal_Int32 nIndex )
376 throw (uno::RuntimeException, std::exception)
378 Reference< beans::XPropertySet > xDataPointProp;
379 Reference< util::XModifyListener > xModifyEventForwarder;
381 MutexGuard aGuard( GetMutex() );
382 xModifyEventForwarder = m_xModifyEventForwarder;
383 tDataPointAttributeContainer::iterator aIt( m_aAttributedDataPoints.find( nIndex ));
384 if( aIt != m_aAttributedDataPoints.end())
386 xDataPointProp = (*aIt).second;
387 m_aAttributedDataPoints.erase(aIt);
391 if( xDataPointProp.is() )
393 Reference< util::XModifyBroadcaster > xBroadcaster( xDataPointProp, uno::UNO_QUERY );
394 if( xBroadcaster.is() && xModifyEventForwarder.is())
395 xBroadcaster->removeModifyListener( xModifyEventForwarder );
396 fireModifyEvent();
400 void SAL_CALL DataSeries::resetAllDataPoints()
401 throw (uno::RuntimeException, std::exception)
403 tDataPointAttributeContainer aOldAttributedDataPoints;
404 Reference< util::XModifyListener > xModifyEventForwarder;
406 MutexGuard aGuard( GetMutex() );
407 xModifyEventForwarder = m_xModifyEventForwarder;
408 std::swap( aOldAttributedDataPoints, m_aAttributedDataPoints );
410 ModifyListenerHelper::removeListenerFromAllMapElements( aOldAttributedDataPoints, xModifyEventForwarder );
411 aOldAttributedDataPoints.clear();
412 fireModifyEvent();
415 // ____ XDataSink ____
416 void SAL_CALL DataSeries::setData( const uno::Sequence< Reference< chart2::data::XLabeledDataSequence > >& aData )
417 throw (uno::RuntimeException, std::exception)
419 tDataSequenceContainer aOldDataSequences;
420 tDataSequenceContainer aNewDataSequences;
421 Reference< util::XModifyListener > xModifyEventForwarder;
422 Reference< lang::XEventListener > xListener;
424 MutexGuard aGuard( GetMutex() );
425 xModifyEventForwarder = m_xModifyEventForwarder;
426 xListener = this;
427 std::swap( aOldDataSequences, m_aDataSequences );
428 aNewDataSequences = ContainerHelper::SequenceToVector( aData );
429 m_aDataSequences = aNewDataSequences;
431 ModifyListenerHelper::removeListenerFromAllElements( aOldDataSequences, xModifyEventForwarder );
432 EventListenerHelper::removeListenerFromAllElements( aOldDataSequences, xListener );
433 EventListenerHelper::addListenerToAllElements( aNewDataSequences, xListener );
434 ModifyListenerHelper::addListenerToAllElements( aNewDataSequences, xModifyEventForwarder );
435 fireModifyEvent();
438 // ____ XDataSource ____
439 Sequence< Reference< chart2::data::XLabeledDataSequence > > SAL_CALL DataSeries::getDataSequences()
440 throw (uno::RuntimeException, std::exception)
442 MutexGuard aGuard( GetMutex() );
443 return ContainerHelper::ContainerToSequence( m_aDataSequences );
446 // ____ XRegressionCurveContainer ____
447 void SAL_CALL DataSeries::addRegressionCurve(
448 const uno::Reference< chart2::XRegressionCurve >& xRegressionCurve )
449 throw (lang::IllegalArgumentException,
450 uno::RuntimeException, std::exception)
452 Reference< util::XModifyListener > xModifyEventForwarder;
454 MutexGuard aGuard( GetMutex() );
455 xModifyEventForwarder = m_xModifyEventForwarder;
456 if( ::std::find( m_aRegressionCurves.begin(), m_aRegressionCurves.end(), xRegressionCurve )
457 != m_aRegressionCurves.end())
458 throw lang::IllegalArgumentException();
459 m_aRegressionCurves.push_back( xRegressionCurve );
461 ModifyListenerHelper::addListener( xRegressionCurve, xModifyEventForwarder );
462 fireModifyEvent();
465 void SAL_CALL DataSeries::removeRegressionCurve(
466 const uno::Reference< chart2::XRegressionCurve >& xRegressionCurve )
467 throw (container::NoSuchElementException,
468 uno::RuntimeException, std::exception)
470 if( !xRegressionCurve.is() )
471 throw container::NoSuchElementException();
473 Reference< util::XModifyListener > xModifyEventForwarder;
475 MutexGuard aGuard( GetMutex() );
476 xModifyEventForwarder = m_xModifyEventForwarder;
477 tRegressionCurveContainerType::iterator aIt(
478 ::std::find( m_aRegressionCurves.begin(), m_aRegressionCurves.end(), xRegressionCurve ) );
479 if( aIt == m_aRegressionCurves.end())
480 throw container::NoSuchElementException(
481 "The given regression curve is no element of this series",
482 static_cast< uno::XWeak * >( this ));
483 m_aRegressionCurves.erase( aIt );
486 ModifyListenerHelper::removeListener( xRegressionCurve, xModifyEventForwarder );
487 fireModifyEvent();
490 uno::Sequence< uno::Reference< chart2::XRegressionCurve > > SAL_CALL DataSeries::getRegressionCurves()
491 throw (uno::RuntimeException, std::exception)
493 MutexGuard aGuard( GetMutex() );
494 return ContainerHelper::ContainerToSequence( m_aRegressionCurves );
497 void SAL_CALL DataSeries::setRegressionCurves(
498 const Sequence< Reference< chart2::XRegressionCurve > >& aRegressionCurves )
499 throw (uno::RuntimeException, std::exception)
501 tRegressionCurveContainerType aOldCurves;
502 tRegressionCurveContainerType aNewCurves( ContainerHelper::SequenceToVector( aRegressionCurves ) );
503 Reference< util::XModifyListener > xModifyEventForwarder;
505 MutexGuard aGuard( GetMutex() );
506 xModifyEventForwarder = m_xModifyEventForwarder;
507 std::swap( aOldCurves, m_aRegressionCurves );
508 m_aRegressionCurves = aNewCurves;
510 ModifyListenerHelper::removeListenerFromAllElements( aOldCurves, xModifyEventForwarder );
511 ModifyListenerHelper::addListenerToAllElements( aNewCurves, xModifyEventForwarder );
512 fireModifyEvent();
515 // ____ XModifyBroadcaster ____
516 void SAL_CALL DataSeries::addModifyListener( const Reference< util::XModifyListener >& aListener )
517 throw (uno::RuntimeException, std::exception)
521 Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW );
522 xBroadcaster->addModifyListener( aListener );
524 catch( const uno::Exception & ex )
526 ASSERT_EXCEPTION( ex );
530 void SAL_CALL DataSeries::removeModifyListener( const Reference< util::XModifyListener >& aListener )
531 throw (uno::RuntimeException, std::exception)
535 Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW );
536 xBroadcaster->removeModifyListener( aListener );
538 catch( const uno::Exception & ex )
540 ASSERT_EXCEPTION( ex );
544 // ____ XModifyListener ____
545 void SAL_CALL DataSeries::modified( const lang::EventObject& aEvent )
546 throw (uno::RuntimeException, std::exception)
548 m_xModifyEventForwarder->modified( aEvent );
551 // ____ XEventListener (base of XModifyListener) ____
552 void SAL_CALL DataSeries::disposing( const lang::EventObject& rEventObject )
553 throw (uno::RuntimeException, std::exception)
555 // forget disposed data sequences
556 tDataSequenceContainer::iterator aIt(
557 ::std::find( m_aDataSequences.begin(), m_aDataSequences.end(), rEventObject.Source ));
558 if( aIt != m_aDataSequences.end())
559 m_aDataSequences.erase( aIt );
562 // ____ OPropertySet ____
563 void DataSeries::firePropertyChangeEvent()
565 fireModifyEvent();
568 void DataSeries::fireModifyEvent()
570 m_xModifyEventForwarder->modified( lang::EventObject( static_cast< uno::XWeak* >( this )));
573 using impl::DataSeries_Base;
574 using ::property::OPropertySet;
576 IMPLEMENT_FORWARD_XINTERFACE2( DataSeries, DataSeries_Base, OPropertySet )
577 IMPLEMENT_FORWARD_XTYPEPROVIDER2( DataSeries, DataSeries_Base, OPropertySet )
579 // implement XServiceInfo methods basing upon getSupportedServiceNames_Static
580 OUString SAL_CALL DataSeries::getImplementationName()
581 throw( css::uno::RuntimeException, std::exception )
583 return getImplementationName_Static();
586 OUString DataSeries::getImplementationName_Static()
588 return OUString("com.sun.star.comp.chart.DataSeries");
591 sal_Bool SAL_CALL DataSeries::supportsService( const OUString& rServiceName )
592 throw( css::uno::RuntimeException, std::exception )
594 return cppu::supportsService(this, rServiceName);
597 css::uno::Sequence< OUString > SAL_CALL DataSeries::getSupportedServiceNames()
598 throw( css::uno::RuntimeException, std::exception )
600 return getSupportedServiceNames_Static();
603 } // namespace chart
605 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
606 com_sun_star_comp_chart_DataSeries_get_implementation(css::uno::XComponentContext *context,
607 css::uno::Sequence<css::uno::Any> const &)
609 return cppu::acquire(new ::chart::DataSeries(context));
612 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */