blob: a09c7e9bac1a78572ea288e74aac1246f087dd5b [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_chart2.hxx"
#include "ChartTypeManager.hxx"
#include "macros.hxx"
#include "StackMode.hxx"
#include "ContainerHelper.hxx"
#include "CartesianCoordinateSystem.hxx"
#include "LineChartTypeTemplate.hxx"
#include "BarChartTypeTemplate.hxx"
#include "ColumnLineChartTypeTemplate.hxx"
#include "AreaChartTypeTemplate.hxx"
#include "PieChartTypeTemplate.hxx"
#include "ScatterChartTypeTemplate.hxx"
#include "StockChartTypeTemplate.hxx"
#include "NetChartTypeTemplate.hxx"
#include "BubbleChartTypeTemplate.hxx"
#include <cppuhelper/component_context.hxx>
#include <comphelper/InlineContainer.hxx>
#include <com/sun/star/container/XContentEnumerationAccess.hpp>
#include <com/sun/star/lang/XServiceName.hpp>
#include <com/sun/star/chart/ChartSolidType.hpp>
#include <com/sun/star/chart2/CurveStyle.hpp>
#include <algorithm>
#include <iterator>
#include <functional>
using namespace ::com::sun::star;
using ::rtl::OUString;
using ::com::sun::star::uno::Sequence;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::Any;
using ::osl::MutexGuard;
// ======================================================================
namespace
{
enum TemplateId
{
TEMPLATE_SYMBOL,
TEMPLATE_STACKEDSYMBOL,
TEMPLATE_PERCENTSTACKEDSYMBOL,
TEMPLATE_LINE,
TEMPLATE_STACKEDLINE,
TEMPLATE_PERCENTSTACKEDLINE,
TEMPLATE_LINESYMBOL,
TEMPLATE_STACKEDLINESYMBOL,
TEMPLATE_PERCENTSTACKEDLINESYMBOL,
TEMPLATE_THREEDLINE,
TEMPLATE_STACKEDTHREEDLINE,
TEMPLATE_PERCENTSTACKEDTHREEDLINE,
TEMPLATE_THREEDLINEDEEP,
TEMPLATE_COLUMN,
TEMPLATE_STACKEDCOLUMN,
TEMPLATE_PERCENTSTACKEDCOLUMN,
TEMPLATE_BAR,
TEMPLATE_STACKEDBAR,
TEMPLATE_PERCENTSTACKEDBAR,
TEMPLATE_THREEDCOLUMNDEEP,
TEMPLATE_THREEDCOLUMNFLAT,
TEMPLATE_STACKEDTHREEDCOLUMNFLAT,
TEMPLATE_PERCENTSTACKEDTHREEDCOLUMNFLAT,
TEMPLATE_THREEDBARDEEP,
TEMPLATE_THREEDBARFLAT,
TEMPLATE_STACKEDTHREEDBARFLAT,
TEMPLATE_PERCENTSTACKEDTHREEDBARFLAT,
TEMPLATE_COLUMNWITHLINE,
TEMPLATE_STACKEDCOLUMNWITHLINE,
TEMPLATE_AREA,
TEMPLATE_STACKEDAREA,
TEMPLATE_PERCENTSTACKEDAREA,
TEMPLATE_THREEDAREA,
TEMPLATE_STACKEDTHREEDAREA,
TEMPLATE_PERCENTSTACKEDTHREEDAREA,
TEMPLATE_PIE,
TEMPLATE_PIEALLEXPLODED,
TEMPLATE_DONUT,
TEMPLATE_DONUTALLEXPLODED,
TEMPLATE_THREEDPIE,
TEMPLATE_THREEDPIEALLEXPLODED,
TEMPLATE_THREEDDONUT,
TEMPLATE_THREEDDONUTALLEXPLODED,
TEMPLATE_SCATTERLINESYMBOL,
TEMPLATE_SCATTERLINE,
TEMPLATE_SCATTERSYMBOL,
TEMPLATE_THREEDSCATTER,
TEMPLATE_NET,
TEMPLATE_NETSYMBOL,
TEMPLATE_NETLINE,
TEMPLATE_STACKEDNET,
TEMPLATE_STACKEDNETSYMBOL,
TEMPLATE_STACKEDNETLINE,
TEMPLATE_PERCENTSTACKEDNET,
TEMPLATE_PERCENTSTACKEDNETSYMBOL,
TEMPLATE_PERCENTSTACKEDNETLINE,
TEMPLATE_FILLEDNET,
TEMPLATE_STACKEDFILLEDNET,
TEMPLATE_PERCENTSTACKEDFILLEDNET,
TEMPLATE_STOCKLOWHIGHCLOSE,
TEMPLATE_STOCKOPENLOWHIGHCLOSE,
TEMPLATE_STOCKVOLUMELOWHIGHCLOSE,
TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE,
TEMPLATE_BUBBLE,
// TEMPLATE_SURFACE,
// TEMPLATE_ADDIN,
TEMPLATE_NOT_FOUND = 0xffff
};
typedef ::std::map< OUString, TemplateId > tTemplateMapType;
const tTemplateMapType & lcl_DefaultChartTypeMap()
{
static const tTemplateMapType aMap = tTemplateMapType(
::comphelper::MakeMap< tTemplateMapType::key_type, tTemplateMapType::mapped_type >
( C2U( "com.sun.star.chart2.template.Symbol" ), TEMPLATE_SYMBOL )
( C2U( "com.sun.star.chart2.template.StackedSymbol" ), TEMPLATE_STACKEDSYMBOL )
( C2U( "com.sun.star.chart2.template.PercentStackedSymbol" ), TEMPLATE_PERCENTSTACKEDSYMBOL )
( C2U( "com.sun.star.chart2.template.Line" ), TEMPLATE_LINE )
( C2U( "com.sun.star.chart2.template.StackedLine" ), TEMPLATE_STACKEDLINE )
( C2U( "com.sun.star.chart2.template.PercentStackedLine" ), TEMPLATE_PERCENTSTACKEDLINE )
( C2U( "com.sun.star.chart2.template.LineSymbol" ), TEMPLATE_LINESYMBOL )
( C2U( "com.sun.star.chart2.template.StackedLineSymbol" ), TEMPLATE_STACKEDLINESYMBOL )
( C2U( "com.sun.star.chart2.template.PercentStackedLineSymbol" ), TEMPLATE_PERCENTSTACKEDLINESYMBOL )
( C2U( "com.sun.star.chart2.template.ThreeDLine" ), TEMPLATE_THREEDLINE )
( C2U( "com.sun.star.chart2.template.StackedThreeDLine" ), TEMPLATE_STACKEDTHREEDLINE )
( C2U( "com.sun.star.chart2.template.PercentStackedThreeDLine" ), TEMPLATE_PERCENTSTACKEDTHREEDLINE )
( C2U( "com.sun.star.chart2.template.ThreeDLineDeep" ), TEMPLATE_THREEDLINEDEEP )
( C2U( "com.sun.star.chart2.template.Column" ), TEMPLATE_COLUMN )
( C2U( "com.sun.star.chart2.template.StackedColumn" ), TEMPLATE_STACKEDCOLUMN )
( C2U( "com.sun.star.chart2.template.PercentStackedColumn" ), TEMPLATE_PERCENTSTACKEDCOLUMN )
( C2U( "com.sun.star.chart2.template.Bar" ), TEMPLATE_BAR )
( C2U( "com.sun.star.chart2.template.StackedBar" ), TEMPLATE_STACKEDBAR )
( C2U( "com.sun.star.chart2.template.PercentStackedBar" ), TEMPLATE_PERCENTSTACKEDBAR )
( C2U( "com.sun.star.chart2.template.ThreeDColumnDeep" ), TEMPLATE_THREEDCOLUMNDEEP )
( C2U( "com.sun.star.chart2.template.ThreeDColumnFlat" ), TEMPLATE_THREEDCOLUMNFLAT )
( C2U( "com.sun.star.chart2.template.StackedThreeDColumnFlat" ), TEMPLATE_STACKEDTHREEDCOLUMNFLAT )
( C2U( "com.sun.star.chart2.template.PercentStackedThreeDColumnFlat" ), TEMPLATE_PERCENTSTACKEDTHREEDCOLUMNFLAT )
( C2U( "com.sun.star.chart2.template.ThreeDBarDeep" ), TEMPLATE_THREEDBARDEEP )
( C2U( "com.sun.star.chart2.template.ThreeDBarFlat" ), TEMPLATE_THREEDBARFLAT )
( C2U( "com.sun.star.chart2.template.StackedThreeDBarFlat" ), TEMPLATE_STACKEDTHREEDBARFLAT )
( C2U( "com.sun.star.chart2.template.PercentStackedThreeDBarFlat" ), TEMPLATE_PERCENTSTACKEDTHREEDBARFLAT )
( C2U( "com.sun.star.chart2.template.ColumnWithLine" ), TEMPLATE_COLUMNWITHLINE )
( C2U( "com.sun.star.chart2.template.StackedColumnWithLine" ), TEMPLATE_STACKEDCOLUMNWITHLINE )
( C2U( "com.sun.star.chart2.template.Area" ), TEMPLATE_AREA )
( C2U( "com.sun.star.chart2.template.StackedArea" ), TEMPLATE_STACKEDAREA )
( C2U( "com.sun.star.chart2.template.PercentStackedArea" ), TEMPLATE_PERCENTSTACKEDAREA )
( C2U( "com.sun.star.chart2.template.ThreeDArea" ), TEMPLATE_THREEDAREA )
( C2U( "com.sun.star.chart2.template.StackedThreeDArea" ), TEMPLATE_STACKEDTHREEDAREA )
( C2U( "com.sun.star.chart2.template.PercentStackedThreeDArea" ), TEMPLATE_PERCENTSTACKEDTHREEDAREA )
( C2U( "com.sun.star.chart2.template.Pie" ), TEMPLATE_PIE )
( C2U( "com.sun.star.chart2.template.PieAllExploded" ), TEMPLATE_PIEALLEXPLODED )
( C2U( "com.sun.star.chart2.template.Donut" ), TEMPLATE_DONUT )
( C2U( "com.sun.star.chart2.template.DonutAllExploded" ), TEMPLATE_DONUTALLEXPLODED )
( C2U( "com.sun.star.chart2.template.ThreeDPie" ), TEMPLATE_THREEDPIE )
( C2U( "com.sun.star.chart2.template.ThreeDPieAllExploded" ), TEMPLATE_THREEDPIEALLEXPLODED )
( C2U( "com.sun.star.chart2.template.ThreeDDonut" ), TEMPLATE_THREEDDONUT )
( C2U( "com.sun.star.chart2.template.ThreeDDonutAllExploded" ), TEMPLATE_THREEDDONUTALLEXPLODED )
( C2U( "com.sun.star.chart2.template.ScatterLineSymbol" ), TEMPLATE_SCATTERLINESYMBOL )
( C2U( "com.sun.star.chart2.template.ScatterLine" ), TEMPLATE_SCATTERLINE )
( C2U( "com.sun.star.chart2.template.ScatterSymbol" ), TEMPLATE_SCATTERSYMBOL )
( C2U( "com.sun.star.chart2.template.ThreeDScatter" ), TEMPLATE_THREEDSCATTER )
( C2U( "com.sun.star.chart2.template.Net" ), TEMPLATE_NET )
( C2U( "com.sun.star.chart2.template.NetSymbol" ), TEMPLATE_NETSYMBOL )
( C2U( "com.sun.star.chart2.template.NetLine" ), TEMPLATE_NETLINE )
( C2U( "com.sun.star.chart2.template.StackedNet" ), TEMPLATE_STACKEDNET )
( C2U( "com.sun.star.chart2.template.StackedNetSymbol" ), TEMPLATE_STACKEDNETSYMBOL )
( C2U( "com.sun.star.chart2.template.StackedNetLine" ), TEMPLATE_STACKEDNETLINE )
( C2U( "com.sun.star.chart2.template.PercentStackedNet" ), TEMPLATE_PERCENTSTACKEDNET )
( C2U( "com.sun.star.chart2.template.PercentStackedNetSymbol" ), TEMPLATE_PERCENTSTACKEDNETSYMBOL )
( C2U( "com.sun.star.chart2.template.PercentStackedNetLine" ), TEMPLATE_PERCENTSTACKEDNETLINE )
( C2U( "com.sun.star.chart2.template.FilledNet" ), TEMPLATE_FILLEDNET )
( C2U( "com.sun.star.chart2.template.StackedFilledNet" ), TEMPLATE_STACKEDFILLEDNET )
( C2U( "com.sun.star.chart2.template.PercentStackedFilledNet" ), TEMPLATE_PERCENTSTACKEDFILLEDNET )
( C2U( "com.sun.star.chart2.template.StockLowHighClose" ), TEMPLATE_STOCKLOWHIGHCLOSE )
( C2U( "com.sun.star.chart2.template.StockOpenLowHighClose" ), TEMPLATE_STOCKOPENLOWHIGHCLOSE )
( C2U( "com.sun.star.chart2.template.StockVolumeLowHighClose" ), TEMPLATE_STOCKVOLUMELOWHIGHCLOSE )
( C2U( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ), TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE )
( C2U( "com.sun.star.chart2.template.Bubble" ), TEMPLATE_BUBBLE )
// ( C2U( "com.sun.star.chart2.template.Surface" ), TEMPLATE_SURFACE )
// ( C2U( "com.sun.star.chart2.template.Addin" ), TEMPLATE_ADDIN )
);
return aMap;
}
TemplateId lcl_GetTemplateIdForService( const OUString & rServiceName )
{
TemplateId eResult = TEMPLATE_NOT_FOUND;
const tTemplateMapType & rMap = lcl_DefaultChartTypeMap();
tTemplateMapType::const_iterator aIt( rMap.find( rServiceName ));
if( aIt != rMap.end())
eResult = (*aIt).second;
return eResult;
}
} // anonymous namespace
namespace chart
{
ChartTypeManager::ChartTypeManager(
uno::Reference<
uno::XComponentContext > const & xContext ) :
m_xContext( xContext )
{}
ChartTypeManager::~ChartTypeManager()
{}
// ____ XMultiServiceFactory ____
uno::Reference< uno::XInterface > SAL_CALL ChartTypeManager::createInstance(
const OUString& aServiceSpecifier )
throw (uno::Exception,
uno::RuntimeException)
{
uno::Reference< uno::XInterface > xResult;
TemplateId nId = lcl_GetTemplateIdForService( aServiceSpecifier );
if( nId == TEMPLATE_NOT_FOUND )
{
try
{
xResult = m_xContext->getServiceManager()->createInstanceWithContext(
aServiceSpecifier, m_xContext );
}
// catch( registry::InvalidValueException & ex )
catch( uno::Exception & ex )
{
// couldn't create service via factory
// As XMultiServiceFactory does not specify, what to do in case
// createInstance is called with an unknown service-name, this
// function will just return an empty XInterface.
ASSERT_EXCEPTION( ex );
OSL_TRACE( "Couldn't instantiate service \"%s\"", U2C( aServiceSpecifier ));
xResult.set( 0 );
}
}
else
{
uno::Reference< chart2::XChartTypeTemplate > xTemplate;
switch( nId )
{
// Point (category x axis)
case TEMPLATE_SYMBOL:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, true, false ));
break;
case TEMPLATE_STACKEDSYMBOL:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, true, false ));
break;
case TEMPLATE_PERCENTSTACKEDSYMBOL:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, true, false ));
break;
// Line (category x axis)
case TEMPLATE_LINE:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, false ));
break;
case TEMPLATE_STACKEDLINE:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, false ));
break;
case TEMPLATE_PERCENTSTACKEDLINE:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, false ));
break;
case TEMPLATE_LINESYMBOL:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, true ));
break;
case TEMPLATE_STACKEDLINESYMBOL:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, true ));
break;
case TEMPLATE_PERCENTSTACKEDLINESYMBOL:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, true ));
break;
case TEMPLATE_THREEDLINE:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, false, true, 3 ));
break;
case TEMPLATE_STACKEDTHREEDLINE:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, false, true, 3 ));
break;
case TEMPLATE_PERCENTSTACKEDTHREEDLINE:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, false, true, 3 ));
break;
case TEMPLATE_THREEDLINEDEEP:
xTemplate.set( new LineChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Z_STACKED, false, true, 3 ));
break;
// Bar/Column
case TEMPLATE_COLUMN:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, BarChartTypeTemplate::VERTICAL ));
break;
case TEMPLATE_STACKEDCOLUMN:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, BarChartTypeTemplate::VERTICAL ));
break;
case TEMPLATE_PERCENTSTACKEDCOLUMN:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, BarChartTypeTemplate::VERTICAL ));
break;
case TEMPLATE_BAR:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, BarChartTypeTemplate::HORIZONTAL ));
break;
case TEMPLATE_STACKEDBAR:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, BarChartTypeTemplate::HORIZONTAL ));
break;
case TEMPLATE_PERCENTSTACKEDBAR:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, BarChartTypeTemplate::HORIZONTAL ));
break;
case TEMPLATE_THREEDCOLUMNDEEP:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Z_STACKED, BarChartTypeTemplate::VERTICAL, 3 ));
break;
case TEMPLATE_THREEDCOLUMNFLAT:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, BarChartTypeTemplate::VERTICAL, 3 ));
break;
case TEMPLATE_STACKEDTHREEDCOLUMNFLAT:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, BarChartTypeTemplate::VERTICAL, 3 ));
break;
case TEMPLATE_PERCENTSTACKEDTHREEDCOLUMNFLAT:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, BarChartTypeTemplate::VERTICAL, 3 ));
break;
case TEMPLATE_THREEDBARDEEP:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Z_STACKED, BarChartTypeTemplate::HORIZONTAL, 3 ));
break;
case TEMPLATE_THREEDBARFLAT:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, BarChartTypeTemplate::HORIZONTAL, 3 ));
break;
case TEMPLATE_STACKEDTHREEDBARFLAT:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, BarChartTypeTemplate::HORIZONTAL, 3 ));
break;
case TEMPLATE_PERCENTSTACKEDTHREEDBARFLAT:
xTemplate.set( new BarChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, BarChartTypeTemplate::HORIZONTAL, 3 ));
break;
// Combi-Chart Line/Column
case TEMPLATE_COLUMNWITHLINE:
case TEMPLATE_STACKEDCOLUMNWITHLINE:
{
StackMode eMode = ( nId == TEMPLATE_COLUMNWITHLINE )
? StackMode_NONE
: StackMode_Y_STACKED;
xTemplate.set( new ColumnLineChartTypeTemplate( m_xContext, aServiceSpecifier, eMode, 1 ));
}
break;
// Area
case TEMPLATE_AREA:
xTemplate.set( new AreaChartTypeTemplate( m_xContext, aServiceSpecifier, StackMode_NONE ));
break;
case TEMPLATE_STACKEDAREA:
xTemplate.set( new AreaChartTypeTemplate( m_xContext, aServiceSpecifier, StackMode_Y_STACKED ));
break;
case TEMPLATE_PERCENTSTACKEDAREA:
xTemplate.set( new AreaChartTypeTemplate( m_xContext, aServiceSpecifier, StackMode_Y_STACKED_PERCENT ));
break;
case TEMPLATE_THREEDAREA:
xTemplate.set( new AreaChartTypeTemplate( m_xContext, aServiceSpecifier, StackMode_Z_STACKED, 3 ));
break;
case TEMPLATE_STACKEDTHREEDAREA:
xTemplate.set( new AreaChartTypeTemplate( m_xContext, aServiceSpecifier, StackMode_Y_STACKED, 3 ));
break;
case TEMPLATE_PERCENTSTACKEDTHREEDAREA:
xTemplate.set( new AreaChartTypeTemplate( m_xContext, aServiceSpecifier, StackMode_Y_STACKED_PERCENT, 3 ));
break;
case TEMPLATE_PIE:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_NONE, false ));
break;
case TEMPLATE_PIEALLEXPLODED:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_ALL_EXPLODED, false ));
break;
case TEMPLATE_DONUT:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_NONE, true ));
break;
case TEMPLATE_DONUTALLEXPLODED:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_ALL_EXPLODED, true ));
break;
case TEMPLATE_THREEDPIE:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_NONE, false, 3 ));
break;
case TEMPLATE_THREEDPIEALLEXPLODED:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_ALL_EXPLODED, false, 3 ));
break;
case TEMPLATE_THREEDDONUT:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_NONE, true, 3 ));
break;
case TEMPLATE_THREEDDONUTALLEXPLODED:
xTemplate.set( new PieChartTypeTemplate( m_xContext, aServiceSpecifier,
chart2::PieChartOffsetMode_ALL_EXPLODED, true, 3 ));
break;
case TEMPLATE_SCATTERLINESYMBOL:
xTemplate.set( new ScatterChartTypeTemplate( m_xContext, aServiceSpecifier, /* bSymbols */ true ));
break;
case TEMPLATE_SCATTERLINE:
xTemplate.set( new ScatterChartTypeTemplate( m_xContext, aServiceSpecifier, /* bSymbols */ false ));
break;
case TEMPLATE_SCATTERSYMBOL:
xTemplate.set( new ScatterChartTypeTemplate( m_xContext, aServiceSpecifier, /* bSymbols */ true, /* bHasLines */ false ));
break;
case TEMPLATE_THREEDSCATTER:
xTemplate.set( new ScatterChartTypeTemplate( m_xContext, aServiceSpecifier, /* bSymbols */ false, /* bHasLines */ true, 3 ));
break;
// NetChart
case TEMPLATE_NET:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, true ));
break;
case TEMPLATE_NETSYMBOL:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, true, false ));
break;
case TEMPLATE_NETLINE:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, false ));
break;
case TEMPLATE_STACKEDNET:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, true ));
break;
case TEMPLATE_STACKEDNETSYMBOL:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, true, false ));
break;
case TEMPLATE_STACKEDNETLINE:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, false, true ));
break;
case TEMPLATE_PERCENTSTACKEDNET:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, true ));
break;
case TEMPLATE_PERCENTSTACKEDNETSYMBOL:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, true, false ));
break;
case TEMPLATE_PERCENTSTACKEDNETLINE:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, false, true ));
break;
case TEMPLATE_FILLEDNET:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_NONE, false, false, true ));
break;
case TEMPLATE_STACKEDFILLEDNET:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED, false, false, true ));
break;
case TEMPLATE_PERCENTSTACKEDFILLEDNET:
xTemplate.set( new NetChartTypeTemplate( m_xContext, aServiceSpecifier,
StackMode_Y_STACKED_PERCENT, false, false, true ));
break;
case TEMPLATE_STOCKLOWHIGHCLOSE:
xTemplate.set( new StockChartTypeTemplate( m_xContext, aServiceSpecifier,
StockChartTypeTemplate::LOW_HI_CLOSE, false ));
break;
case TEMPLATE_STOCKOPENLOWHIGHCLOSE:
xTemplate.set( new StockChartTypeTemplate( m_xContext, aServiceSpecifier,
StockChartTypeTemplate::OPEN_LOW_HI_CLOSE, true ));
break;
case TEMPLATE_STOCKVOLUMELOWHIGHCLOSE:
xTemplate.set( new StockChartTypeTemplate( m_xContext, aServiceSpecifier,
StockChartTypeTemplate::VOL_LOW_HI_CLOSE, false ));
break;
case TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE:
xTemplate.set( new StockChartTypeTemplate( m_xContext, aServiceSpecifier,
StockChartTypeTemplate::VOL_OPEN_LOW_HI_CLOSE, true ));
break;
//BubbleChart
case TEMPLATE_BUBBLE:
xTemplate.set( new BubbleChartTypeTemplate( m_xContext, aServiceSpecifier ));
break;
// case TEMPLATE_SURFACE:
// case TEMPLATE_ADDIN:
// break;
case TEMPLATE_NOT_FOUND:
OSL_ASSERT( false );
break;
}
xResult.set( xTemplate, uno::UNO_QUERY );
}
return xResult;
}
uno::Reference< uno::XInterface > SAL_CALL ChartTypeManager::createInstanceWithArguments(
const OUString& ServiceSpecifier,
const uno::Sequence< uno::Any >& /* Arguments */ )
throw (uno::Exception,
uno::RuntimeException)
{
OSL_ENSURE( false, "createInstanceWithArguments: No arguments supported" );
return createInstance( ServiceSpecifier );
}
uno::Sequence< OUString > SAL_CALL ChartTypeManager::getAvailableServiceNames()
throw (uno::RuntimeException)
{
::std::vector< OUString > aServices;
const tTemplateMapType & rMap = lcl_DefaultChartTypeMap();
aServices.reserve( rMap.size());
// get own default templates
::std::transform( rMap.begin(), rMap.end(), ::std::back_inserter( aServices ),
::std::select1st< tTemplateMapType::value_type >());
// add components that were registered in the context's factory
uno::Reference< container::XContentEnumerationAccess > xEnumAcc(
m_xContext->getServiceManager(), uno::UNO_QUERY );
if( xEnumAcc.is())
{
uno::Reference< container::XEnumeration > xEnum(
xEnumAcc->createContentEnumeration( C2U( "com.sun.star.chart2.ChartTypeTemplate" ) ));
if( xEnum.is())
{
uno::Reference< uno::XInterface > xFactIntf;
while( xEnum->hasMoreElements())
{
if( xEnum->nextElement() >>= xFactIntf )
{
uno::Reference< lang::XServiceName > xServiceName( xFactIntf, uno::UNO_QUERY );
if( xServiceName.is())
aServices.push_back( xServiceName->getServiceName());
}
}
}
}
return ContainerHelper::ContainerToSequence( aServices );
}
// ____ XServiceInfo ____
Sequence< OUString > ChartTypeManager::getSupportedServiceNames_Static()
{
Sequence< OUString > aServices( 2 );
aServices[ 0 ] = C2U( "com.sun.star.chart2.ChartTypeManager" );
aServices[ 1 ] = C2U( "com.sun.star.lang.MultiServiceFactory" );
return aServices;
}
// ================================================================================
// implement XServiceInfo methods basing upon getSupportedServiceNames_Static
APPHELPER_XSERVICEINFO_IMPL( ChartTypeManager,
C2U( "com.sun.star.comp.chart.ChartTypeManager" ));
} // namespace chart