1*cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*cde9e8dcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*cde9e8dcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*cde9e8dcSAndrew Rist  * distributed with this work for additional information
6*cde9e8dcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*cde9e8dcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*cde9e8dcSAndrew Rist  * "License"); you may not use this file except in compliance
9*cde9e8dcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*cde9e8dcSAndrew Rist  *
11*cde9e8dcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*cde9e8dcSAndrew Rist  *
13*cde9e8dcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*cde9e8dcSAndrew Rist  * software distributed under the License is distributed on an
15*cde9e8dcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cde9e8dcSAndrew Rist  * KIND, either express or implied.  See the License for the
17*cde9e8dcSAndrew Rist  * specific language governing permissions and limitations
18*cde9e8dcSAndrew Rist  * under the License.
19*cde9e8dcSAndrew Rist  *
20*cde9e8dcSAndrew Rist  *************************************************************/
21*cde9e8dcSAndrew Rist 
22*cde9e8dcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir #include "BarChartTypeTemplate.hxx"
27cdf0e10cSrcweir #include "macros.hxx"
28cdf0e10cSrcweir #include "DiagramHelper.hxx"
29cdf0e10cSrcweir #include "servicenames_charttypes.hxx"
30cdf0e10cSrcweir #include "ContainerHelper.hxx"
31cdf0e10cSrcweir #include "DataSeriesHelper.hxx"
32cdf0e10cSrcweir #include "PropertyHelper.hxx"
33cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
34cdf0e10cSrcweir #include <com/sun/star/drawing/LineStyle.hpp>
35cdf0e10cSrcweir #include <com/sun/star/chart2/DataPointGeometry3D.hpp>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include <algorithm>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir using namespace ::com::sun::star;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
42cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
43cdf0e10cSrcweir using ::com::sun::star::beans::Property;
44cdf0e10cSrcweir using ::osl::MutexGuard;
45cdf0e10cSrcweir using ::rtl::OUString;
46cdf0e10cSrcweir 
47cdf0e10cSrcweir namespace
48cdf0e10cSrcweir {
49cdf0e10cSrcweir 
50cdf0e10cSrcweir static const OUString lcl_aServiceName(
51cdf0e10cSrcweir     RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.BarChartTypeTemplate" ));
52cdf0e10cSrcweir 
53cdf0e10cSrcweir enum
54cdf0e10cSrcweir {
55cdf0e10cSrcweir     PROP_BAR_TEMPLATE_DIMENSION,
56cdf0e10cSrcweir     PROP_BAR_TEMPLATE_GEOMETRY3D
57cdf0e10cSrcweir };
58cdf0e10cSrcweir 
lcl_AddPropertiesToVector(::std::vector<Property> & rOutProperties)59cdf0e10cSrcweir void lcl_AddPropertiesToVector(
60cdf0e10cSrcweir     ::std::vector< Property > & rOutProperties )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir     rOutProperties.push_back(
63cdf0e10cSrcweir         Property( C2U( "Dimension" ),
64cdf0e10cSrcweir                   PROP_BAR_TEMPLATE_DIMENSION,
65cdf0e10cSrcweir                   ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
66cdf0e10cSrcweir                   beans::PropertyAttribute::BOUND
67cdf0e10cSrcweir                   | beans::PropertyAttribute::MAYBEDEFAULT ));
68cdf0e10cSrcweir     rOutProperties.push_back(
69cdf0e10cSrcweir         Property( C2U( "Geometry3D" ),
70cdf0e10cSrcweir                   PROP_BAR_TEMPLATE_GEOMETRY3D,
71cdf0e10cSrcweir                   ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
72cdf0e10cSrcweir                   beans::PropertyAttribute::BOUND
73cdf0e10cSrcweir                   | beans::PropertyAttribute::MAYBEDEFAULT ));
74cdf0e10cSrcweir }
75cdf0e10cSrcweir 
76cdf0e10cSrcweir struct StaticBarChartTypeTemplateDefaults_Initializer
77cdf0e10cSrcweir {
operator ()__anone3cba5ba0111::StaticBarChartTypeTemplateDefaults_Initializer78cdf0e10cSrcweir     ::chart::tPropertyValueMap* operator()()
79cdf0e10cSrcweir     {
80cdf0e10cSrcweir         static ::chart::tPropertyValueMap aStaticDefaults;
81cdf0e10cSrcweir         lcl_AddDefaultsToMap( aStaticDefaults );
82cdf0e10cSrcweir         return &aStaticDefaults;
83cdf0e10cSrcweir     }
84cdf0e10cSrcweir private:
lcl_AddDefaultsToMap__anone3cba5ba0111::StaticBarChartTypeTemplateDefaults_Initializer85cdf0e10cSrcweir     void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap )
86cdf0e10cSrcweir     {
87cdf0e10cSrcweir         ::chart::PropertyHelper::setPropertyValueDefault< sal_Int32 >( rOutMap, PROP_BAR_TEMPLATE_DIMENSION, 2 );
88cdf0e10cSrcweir         ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_BAR_TEMPLATE_GEOMETRY3D, ::chart2::DataPointGeometry3D::CUBOID );
89cdf0e10cSrcweir     }
90cdf0e10cSrcweir };
91cdf0e10cSrcweir 
92cdf0e10cSrcweir struct StaticBarChartTypeTemplateDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticBarChartTypeTemplateDefaults_Initializer >
93cdf0e10cSrcweir {
94cdf0e10cSrcweir };
95cdf0e10cSrcweir 
96cdf0e10cSrcweir struct StaticBarChartTypeTemplateInfoHelper_Initializer
97cdf0e10cSrcweir {
operator ()__anone3cba5ba0111::StaticBarChartTypeTemplateInfoHelper_Initializer98cdf0e10cSrcweir     ::cppu::OPropertyArrayHelper* operator()()
99cdf0e10cSrcweir     {
100cdf0e10cSrcweir         static ::cppu::OPropertyArrayHelper aPropHelper( lcl_GetPropertySequence() );
101cdf0e10cSrcweir         return &aPropHelper;
102cdf0e10cSrcweir     }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir private:
lcl_GetPropertySequence__anone3cba5ba0111::StaticBarChartTypeTemplateInfoHelper_Initializer105cdf0e10cSrcweir     Sequence< Property > lcl_GetPropertySequence()
106cdf0e10cSrcweir     {
107cdf0e10cSrcweir         ::std::vector< ::com::sun::star::beans::Property > aProperties;
108cdf0e10cSrcweir         lcl_AddPropertiesToVector( aProperties );
109cdf0e10cSrcweir 
110cdf0e10cSrcweir         ::std::sort( aProperties.begin(), aProperties.end(),
111cdf0e10cSrcweir                      ::chart::PropertyNameLess() );
112cdf0e10cSrcweir 
113cdf0e10cSrcweir         return ::chart::ContainerHelper::ContainerToSequence( aProperties );
114cdf0e10cSrcweir     }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir };
117cdf0e10cSrcweir 
118cdf0e10cSrcweir struct StaticBarChartTypeTemplateInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticBarChartTypeTemplateInfoHelper_Initializer >
119cdf0e10cSrcweir {
120cdf0e10cSrcweir };
121cdf0e10cSrcweir 
122cdf0e10cSrcweir struct StaticBarChartTypeTemplateInfo_Initializer
123cdf0e10cSrcweir {
operator ()__anone3cba5ba0111::StaticBarChartTypeTemplateInfo_Initializer124cdf0e10cSrcweir     uno::Reference< beans::XPropertySetInfo >* operator()()
125cdf0e10cSrcweir     {
126cdf0e10cSrcweir         static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo(
127cdf0e10cSrcweir             ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticBarChartTypeTemplateInfoHelper::get() ) );
128cdf0e10cSrcweir         return &xPropertySetInfo;
129cdf0e10cSrcweir     }
130cdf0e10cSrcweir };
131cdf0e10cSrcweir 
132cdf0e10cSrcweir struct StaticBarChartTypeTemplateInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticBarChartTypeTemplateInfo_Initializer >
133cdf0e10cSrcweir {
134cdf0e10cSrcweir };
135cdf0e10cSrcweir 
136cdf0e10cSrcweir } // anonymous namespace
137cdf0e10cSrcweir 
138cdf0e10cSrcweir namespace chart
139cdf0e10cSrcweir {
140cdf0e10cSrcweir 
BarChartTypeTemplate(Reference<uno::XComponentContext> const & xContext,const OUString & rServiceName,StackMode eStackMode,BarDirection eDirection,sal_Int32 nDim)141cdf0e10cSrcweir BarChartTypeTemplate::BarChartTypeTemplate(
142cdf0e10cSrcweir     Reference<
143cdf0e10cSrcweir         uno::XComponentContext > const & xContext,
144cdf0e10cSrcweir     const OUString & rServiceName,
145cdf0e10cSrcweir     StackMode eStackMode,
146cdf0e10cSrcweir     BarDirection eDirection,
147cdf0e10cSrcweir     sal_Int32 nDim         /* = 2 */ ) :
148cdf0e10cSrcweir         ChartTypeTemplate( xContext, rServiceName ),
149cdf0e10cSrcweir         ::property::OPropertySet( m_aMutex ),
150cdf0e10cSrcweir         m_eStackMode( eStackMode ),
151cdf0e10cSrcweir         m_eBarDirection( eDirection ),
152cdf0e10cSrcweir         m_nDim( nDim )
153cdf0e10cSrcweir {}
154cdf0e10cSrcweir 
~BarChartTypeTemplate()155cdf0e10cSrcweir BarChartTypeTemplate::~BarChartTypeTemplate()
156cdf0e10cSrcweir {}
157cdf0e10cSrcweir 
getDimension() const158cdf0e10cSrcweir sal_Int32 BarChartTypeTemplate::getDimension() const
159cdf0e10cSrcweir {
160cdf0e10cSrcweir     return m_nDim;
161cdf0e10cSrcweir }
162cdf0e10cSrcweir 
getStackMode(sal_Int32) const163cdf0e10cSrcweir StackMode BarChartTypeTemplate::getStackMode( sal_Int32 /* nChartTypeIndex */ ) const
164cdf0e10cSrcweir {
165cdf0e10cSrcweir     return m_eStackMode;
166cdf0e10cSrcweir }
167cdf0e10cSrcweir 
isSwapXAndY() const168cdf0e10cSrcweir bool BarChartTypeTemplate::isSwapXAndY() const
169cdf0e10cSrcweir {
170cdf0e10cSrcweir     return (m_eBarDirection == HORIZONTAL);
171cdf0e10cSrcweir }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir // ____ XChartTypeTemplate ____
matchesTemplate(const Reference<chart2::XDiagram> & xDiagram,sal_Bool bAdaptProperties)174cdf0e10cSrcweir sal_Bool SAL_CALL BarChartTypeTemplate::matchesTemplate(
175cdf0e10cSrcweir     const Reference< chart2::XDiagram >& xDiagram,
176cdf0e10cSrcweir     sal_Bool bAdaptProperties )
177cdf0e10cSrcweir     throw (uno::RuntimeException)
178cdf0e10cSrcweir {
179cdf0e10cSrcweir     sal_Bool bResult = ChartTypeTemplate::matchesTemplate( xDiagram, bAdaptProperties );
180cdf0e10cSrcweir 
181cdf0e10cSrcweir     //check BarDirection
182cdf0e10cSrcweir     if( bResult )
183cdf0e10cSrcweir     {
184cdf0e10cSrcweir         bool bFound = false;
185cdf0e10cSrcweir         bool bAmbiguous = false;
186cdf0e10cSrcweir         bool bVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous );
187cdf0e10cSrcweir         if( m_eBarDirection == HORIZONTAL )
188cdf0e10cSrcweir             bResult = sal_Bool( bVertical );
189cdf0e10cSrcweir         else if( m_eBarDirection == VERTICAL )
190cdf0e10cSrcweir             bResult = sal_Bool( !bVertical );
191cdf0e10cSrcweir     }
192cdf0e10cSrcweir 
193cdf0e10cSrcweir     // adapt solid-type of template according to values in series
194cdf0e10cSrcweir     if( bAdaptProperties &&
195cdf0e10cSrcweir         bResult &&
196cdf0e10cSrcweir         getDimension() == 3 )
197cdf0e10cSrcweir     {
198cdf0e10cSrcweir         ::std::vector< Reference< chart2::XDataSeries > > aSeriesVec(
199cdf0e10cSrcweir             DiagramHelper::getDataSeriesFromDiagram( xDiagram ));
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         bool bGeomFound = false, bGeomAmbiguous = false;
202cdf0e10cSrcweir         sal_Int32 aCommonGeom = DiagramHelper::getGeometry3D( xDiagram, bGeomFound, bGeomAmbiguous );
203cdf0e10cSrcweir 
204cdf0e10cSrcweir         if( !bGeomAmbiguous )
205cdf0e10cSrcweir         {
206cdf0e10cSrcweir             setFastPropertyValue_NoBroadcast(
207cdf0e10cSrcweir                 PROP_BAR_TEMPLATE_GEOMETRY3D, uno::makeAny( aCommonGeom ));
208cdf0e10cSrcweir         }
209cdf0e10cSrcweir     }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir     return bResult;
212cdf0e10cSrcweir }
getChartTypeForIndex(sal_Int32)213cdf0e10cSrcweir Reference< chart2::XChartType > BarChartTypeTemplate::getChartTypeForIndex( sal_Int32 /*nChartTypeIndex*/ )
214cdf0e10cSrcweir {
215cdf0e10cSrcweir     Reference< chart2::XChartType > xResult;
216cdf0e10cSrcweir 
217cdf0e10cSrcweir     try
218cdf0e10cSrcweir     {
219cdf0e10cSrcweir         Reference< lang::XMultiServiceFactory > xFact(
220cdf0e10cSrcweir             GetComponentContext()->getServiceManager(), uno::UNO_QUERY_THROW );
221cdf0e10cSrcweir         xResult.set( xFact->createInstance(
222cdf0e10cSrcweir                          CHART2_SERVICE_NAME_CHARTTYPE_COLUMN ), uno::UNO_QUERY_THROW );
223cdf0e10cSrcweir     }
224cdf0e10cSrcweir     catch( uno::Exception & ex )
225cdf0e10cSrcweir     {
226cdf0e10cSrcweir         ASSERT_EXCEPTION( ex );
227cdf0e10cSrcweir     }
228cdf0e10cSrcweir 
229cdf0e10cSrcweir     return xResult;
230cdf0e10cSrcweir }
231cdf0e10cSrcweir 
getChartTypeForNewSeries(const uno::Sequence<Reference<chart2::XChartType>> & aFormerlyUsedChartTypes)232cdf0e10cSrcweir Reference< chart2::XChartType > SAL_CALL BarChartTypeTemplate::getChartTypeForNewSeries(
233cdf0e10cSrcweir         const uno::Sequence< Reference< chart2::XChartType > >& aFormerlyUsedChartTypes )
234cdf0e10cSrcweir     throw (uno::RuntimeException)
235cdf0e10cSrcweir {
236cdf0e10cSrcweir     Reference< chart2::XChartType > xResult( getChartTypeForIndex( 0 ) );
237cdf0e10cSrcweir     ChartTypeTemplate::copyPropertiesFromOldToNewCoordianteSystem( aFormerlyUsedChartTypes, xResult );
238cdf0e10cSrcweir     return xResult;
239cdf0e10cSrcweir }
240cdf0e10cSrcweir 
241cdf0e10cSrcweir 
242cdf0e10cSrcweir // ____ OPropertySet ____
GetDefaultValue(sal_Int32 nHandle) const243cdf0e10cSrcweir uno::Any BarChartTypeTemplate::GetDefaultValue( sal_Int32 nHandle ) const
244cdf0e10cSrcweir     throw(beans::UnknownPropertyException)
245cdf0e10cSrcweir {
246cdf0e10cSrcweir     const tPropertyValueMap& rStaticDefaults = *StaticBarChartTypeTemplateDefaults::get();
247cdf0e10cSrcweir     tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( nHandle ) );
248cdf0e10cSrcweir     if( aFound == rStaticDefaults.end() )
249cdf0e10cSrcweir         return uno::Any();
250cdf0e10cSrcweir     return (*aFound).second;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir 
getInfoHelper()253cdf0e10cSrcweir ::cppu::IPropertyArrayHelper & SAL_CALL BarChartTypeTemplate::getInfoHelper()
254cdf0e10cSrcweir {
255cdf0e10cSrcweir     return *StaticBarChartTypeTemplateInfoHelper::get();
256cdf0e10cSrcweir }
257cdf0e10cSrcweir 
258cdf0e10cSrcweir // ____ XPropertySet ____
getPropertySetInfo()259cdf0e10cSrcweir Reference< beans::XPropertySetInfo > SAL_CALL BarChartTypeTemplate::getPropertySetInfo()
260cdf0e10cSrcweir     throw (uno::RuntimeException)
261cdf0e10cSrcweir {
262cdf0e10cSrcweir     return *StaticBarChartTypeTemplateInfo::get();
263cdf0e10cSrcweir }
264cdf0e10cSrcweir 
applyStyle(const Reference<chart2::XDataSeries> & xSeries,::sal_Int32 nChartTypeIndex,::sal_Int32 nSeriesIndex,::sal_Int32 nSeriesCount)265cdf0e10cSrcweir void SAL_CALL BarChartTypeTemplate::applyStyle(
266cdf0e10cSrcweir     const Reference< chart2::XDataSeries >& xSeries,
267cdf0e10cSrcweir     ::sal_Int32 nChartTypeIndex,
268cdf0e10cSrcweir     ::sal_Int32 nSeriesIndex,
269cdf0e10cSrcweir     ::sal_Int32 nSeriesCount )
270cdf0e10cSrcweir     throw (uno::RuntimeException)
271cdf0e10cSrcweir {
272cdf0e10cSrcweir     ChartTypeTemplate::applyStyle( xSeries, nChartTypeIndex, nSeriesIndex, nSeriesCount );
273cdf0e10cSrcweir     DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "BorderStyle" ), uno::makeAny( drawing::LineStyle_NONE ) );
274cdf0e10cSrcweir     if( getDimension() == 3 )
275cdf0e10cSrcweir     {
276cdf0e10cSrcweir         try
277cdf0e10cSrcweir         {
278cdf0e10cSrcweir             //apply Geometry3D
279cdf0e10cSrcweir             uno::Any aAGeometry3D;
280cdf0e10cSrcweir             this->getFastPropertyValue( aAGeometry3D, PROP_BAR_TEMPLATE_GEOMETRY3D );
281cdf0e10cSrcweir             DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "Geometry3D" ), aAGeometry3D );
282cdf0e10cSrcweir         }
283cdf0e10cSrcweir         catch( uno::Exception & ex )
284cdf0e10cSrcweir         {
285cdf0e10cSrcweir             ASSERT_EXCEPTION( ex );
286cdf0e10cSrcweir         }
287cdf0e10cSrcweir     }
288cdf0e10cSrcweir }
289cdf0e10cSrcweir 
resetStyles(const Reference<chart2::XDiagram> & xDiagram)290cdf0e10cSrcweir void SAL_CALL BarChartTypeTemplate::resetStyles(
291cdf0e10cSrcweir     const Reference< chart2::XDiagram >& xDiagram )
292cdf0e10cSrcweir     throw (uno::RuntimeException)
293cdf0e10cSrcweir {
294cdf0e10cSrcweir     ChartTypeTemplate::resetStyles( xDiagram );
295cdf0e10cSrcweir     ::std::vector< Reference< chart2::XDataSeries > > aSeriesVec(
296cdf0e10cSrcweir         DiagramHelper::getDataSeriesFromDiagram( xDiagram ));
297cdf0e10cSrcweir     uno::Any aLineStyleAny( uno::makeAny( drawing::LineStyle_NONE ));
298cdf0e10cSrcweir     for( ::std::vector< Reference< chart2::XDataSeries > >::iterator aIt( aSeriesVec.begin());
299cdf0e10cSrcweir          aIt != aSeriesVec.end(); ++aIt )
300cdf0e10cSrcweir     {
301cdf0e10cSrcweir         Reference< beans::XPropertyState > xState( *aIt, uno::UNO_QUERY );
302cdf0e10cSrcweir         if( xState.is())
303cdf0e10cSrcweir         {
304cdf0e10cSrcweir             if( getDimension() == 3 )
305cdf0e10cSrcweir                 xState->setPropertyToDefault( C2U("Geometry3D"));
306cdf0e10cSrcweir             Reference< beans::XPropertySet > xProp( xState, uno::UNO_QUERY );
307cdf0e10cSrcweir             if( xProp.is() &&
308cdf0e10cSrcweir                 xProp->getPropertyValue( C2U("BorderStyle")) == aLineStyleAny )
309cdf0e10cSrcweir             {
310cdf0e10cSrcweir                 xState->setPropertyToDefault( C2U("BorderStyle"));
311cdf0e10cSrcweir             }
312cdf0e10cSrcweir         }
313cdf0e10cSrcweir     }
314cdf0e10cSrcweir 
315cdf0e10cSrcweir     DiagramHelper::setVertical( xDiagram, false );
316cdf0e10cSrcweir }
317cdf0e10cSrcweir 
318cdf0e10cSrcweir 
createCoordinateSystems(const Reference<chart2::XCoordinateSystemContainer> & xCooSysCnt)319cdf0e10cSrcweir void BarChartTypeTemplate::createCoordinateSystems(
320cdf0e10cSrcweir     const Reference< chart2::XCoordinateSystemContainer > & xCooSysCnt )
321cdf0e10cSrcweir {
322cdf0e10cSrcweir     ChartTypeTemplate::createCoordinateSystems( xCooSysCnt );
323cdf0e10cSrcweir 
324cdf0e10cSrcweir     Reference< chart2::XDiagram > xDiagram( xCooSysCnt, uno::UNO_QUERY );
325cdf0e10cSrcweir     DiagramHelper::setVertical( xDiagram, m_eBarDirection == HORIZONTAL );
326cdf0e10cSrcweir }
327cdf0e10cSrcweir 
328cdf0e10cSrcweir // ----------------------------------------
329cdf0e10cSrcweir 
getSupportedServiceNames_Static()330cdf0e10cSrcweir Sequence< OUString > BarChartTypeTemplate::getSupportedServiceNames_Static()
331cdf0e10cSrcweir {
332cdf0e10cSrcweir     Sequence< OUString > aServices( 2 );
333cdf0e10cSrcweir     aServices[ 0 ] = lcl_aServiceName;
334cdf0e10cSrcweir     aServices[ 1 ] = C2U( "com.sun.star.chart2.ChartTypeTemplate" );
335cdf0e10cSrcweir     return aServices;
336cdf0e10cSrcweir }
337cdf0e10cSrcweir 
338cdf0e10cSrcweir // implement XServiceInfo methods basing upon getSupportedServiceNames_Static
339cdf0e10cSrcweir APPHELPER_XSERVICEINFO_IMPL( BarChartTypeTemplate, lcl_aServiceName );
340cdf0e10cSrcweir 
341cdf0e10cSrcweir IMPLEMENT_FORWARD_XINTERFACE2( BarChartTypeTemplate, ChartTypeTemplate, OPropertySet )
342cdf0e10cSrcweir IMPLEMENT_FORWARD_XTYPEPROVIDER2( BarChartTypeTemplate, ChartTypeTemplate, OPropertySet )
343cdf0e10cSrcweir 
344cdf0e10cSrcweir } //  namespace chart
345