1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_chart2.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "Chart2ModelContact.hxx" 32*cdf0e10cSrcweir #include "ChartModelHelper.hxx" 33*cdf0e10cSrcweir #include "LegendHelper.hxx" 34*cdf0e10cSrcweir #include "CommonConverters.hxx" 35*cdf0e10cSrcweir #include "macros.hxx" 36*cdf0e10cSrcweir #include "servicenames.hxx" 37*cdf0e10cSrcweir #include "ObjectIdentifier.hxx" 38*cdf0e10cSrcweir #include "chartview/ExplicitValueProvider.hxx" 39*cdf0e10cSrcweir #include "chartview/DrawModelWrapper.hxx" 40*cdf0e10cSrcweir #include "AxisHelper.hxx" 41*cdf0e10cSrcweir #include "DiagramHelper.hxx" 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir using namespace ::com::sun::star; 44*cdf0e10cSrcweir using namespace ::com::sun::star::chart2; 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 47*cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 48*cdf0e10cSrcweir using ::rtl::OUString; 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir namespace chart 51*cdf0e10cSrcweir { 52*cdf0e10cSrcweir namespace wrapper 53*cdf0e10cSrcweir { 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir Chart2ModelContact::Chart2ModelContact( 56*cdf0e10cSrcweir const Reference< uno::XComponentContext > & xContext ) : 57*cdf0e10cSrcweir m_xContext( xContext ), 58*cdf0e10cSrcweir m_xChartModel( 0 ), 59*cdf0e10cSrcweir m_xChartView(0) 60*cdf0e10cSrcweir { 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir Chart2ModelContact::~Chart2ModelContact() 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir this->clear(); 66*cdf0e10cSrcweir } 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir void Chart2ModelContact::setModel( const ::com::sun::star::uno::Reference< 69*cdf0e10cSrcweir ::com::sun::star::frame::XModel >& xChartModel ) 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir this->clear(); 72*cdf0e10cSrcweir m_xChartModel = xChartModel; 73*cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > xTableFactory( xChartModel, uno::UNO_QUERY ); 74*cdf0e10cSrcweir if( xTableFactory.is() ) 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xDashTable( xTableFactory->createInstance( C2U( "com.sun.star.drawing.DashTable" ) ), uno::UNO_QUERY ); 77*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xGradientTable( xTableFactory->createInstance( C2U( "com.sun.star.drawing.GradientTable" ) ), uno::UNO_QUERY ); 78*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xHatchTable( xTableFactory->createInstance( C2U( "com.sun.star.drawing.HatchTable" ) ), uno::UNO_QUERY ); 79*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xBitmapTable( xTableFactory->createInstance( C2U( "com.sun.star.drawing.BitmapTable" ) ), uno::UNO_QUERY ); 80*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xTransparencyGradientTable( xTableFactory->createInstance( C2U( "com.sun.star.drawing.TransparencyGradientTable" ) ), uno::UNO_QUERY ); 81*cdf0e10cSrcweir //C2U( "com.sun.star.drawing.MarkerTable" ) 82*cdf0e10cSrcweir m_aTableMap[ C2U( "LineDashName" ) ] = xDashTable; 83*cdf0e10cSrcweir m_aTableMap[ C2U( "FillGradientName" ) ] = xGradientTable; 84*cdf0e10cSrcweir m_aTableMap[ C2U( "FillHatchName" ) ] = xHatchTable; 85*cdf0e10cSrcweir m_aTableMap[ C2U( "FillBitmapName" ) ] = xBitmapTable; 86*cdf0e10cSrcweir m_aTableMap[ C2U( "FillTransparenceGradientName" ) ] = xTransparencyGradientTable; 87*cdf0e10cSrcweir } 88*cdf0e10cSrcweir } 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir void Chart2ModelContact::clear() 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir m_xChartModel = uno::WeakReference< frame::XModel >(0); 93*cdf0e10cSrcweir m_xChartView.clear(); 94*cdf0e10cSrcweir } 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir Reference< frame::XModel > Chart2ModelContact::getChartModel() const 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir return Reference< frame::XModel >( m_xChartModel.get(), uno::UNO_QUERY ); 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir Reference< chart2::XChartDocument > Chart2ModelContact::getChart2Document() const 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir return Reference< chart2::XChartDocument >( m_xChartModel.get(), uno::UNO_QUERY ); 104*cdf0e10cSrcweir } 105*cdf0e10cSrcweir 106*cdf0e10cSrcweir Reference< chart2::XDiagram > Chart2ModelContact::getChart2Diagram() const 107*cdf0e10cSrcweir { 108*cdf0e10cSrcweir return ChartModelHelper::findDiagram( this->getChartModel() ); 109*cdf0e10cSrcweir } 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir uno::Reference< lang::XUnoTunnel > Chart2ModelContact::getChartView() const 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir if(!m_xChartView.is()) 114*cdf0e10cSrcweir { 115*cdf0e10cSrcweir // get the chart view 116*cdf0e10cSrcweir Reference<frame::XModel> xModel(m_xChartModel); 117*cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > xFact( xModel, uno::UNO_QUERY ); 118*cdf0e10cSrcweir if( xFact.is() ) 119*cdf0e10cSrcweir m_xChartView = Reference< lang::XUnoTunnel >( xFact->createInstance( CHART_VIEW_SERVICE_NAME ), uno::UNO_QUERY ); 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir return m_xChartView; 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir ExplicitValueProvider* Chart2ModelContact::getExplicitValueProvider() const 125*cdf0e10cSrcweir { 126*cdf0e10cSrcweir getChartView(); 127*cdf0e10cSrcweir if(!m_xChartView.is()) 128*cdf0e10cSrcweir return 0; 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir //obtain the ExplicitValueProvider from the chart view 131*cdf0e10cSrcweir ExplicitValueProvider* pProvider = reinterpret_cast<ExplicitValueProvider*>(m_xChartView->getSomething( 132*cdf0e10cSrcweir ExplicitValueProvider::getUnoTunnelId() )); 133*cdf0e10cSrcweir return pProvider; 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir uno::Reference< drawing::XDrawPage > Chart2ModelContact::getDrawPage() 137*cdf0e10cSrcweir { 138*cdf0e10cSrcweir uno::Reference< drawing::XDrawPage > xResult; 139*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 140*cdf0e10cSrcweir if( pProvider ) 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir xResult.set( pProvider->getDrawModelWrapper()->getMainDrawPage() ); 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir return xResult; 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir sal_Bool Chart2ModelContact::getExplicitValuesForAxis( 148*cdf0e10cSrcweir const Reference< XAxis > & xAxis, 149*cdf0e10cSrcweir ExplicitScaleData & rOutExplicitScale, 150*cdf0e10cSrcweir ExplicitIncrementData & rOutExplicitIncrement ) 151*cdf0e10cSrcweir { 152*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 153*cdf0e10cSrcweir if( pProvider ) 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir return pProvider->getExplicitValuesForAxis( 156*cdf0e10cSrcweir xAxis, rOutExplicitScale, rOutExplicitIncrement ); 157*cdf0e10cSrcweir } 158*cdf0e10cSrcweir return sal_False; 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir sal_Int32 Chart2ModelContact::getExplicitNumberFormatKeyForAxis( 162*cdf0e10cSrcweir const Reference< chart2::XAxis >& xAxis ) 163*cdf0e10cSrcweir { 164*cdf0e10cSrcweir Reference< chart2::XCoordinateSystem > xCooSys( 165*cdf0e10cSrcweir AxisHelper::getCoordinateSystemOfAxis( 166*cdf0e10cSrcweir xAxis, ChartModelHelper::findDiagram( m_xChartModel ) ) ); 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir return ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( xAxis, xCooSys 169*cdf0e10cSrcweir , Reference< util::XNumberFormatsSupplier >( m_xChartModel.get(), uno::UNO_QUERY ) ); 170*cdf0e10cSrcweir } 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir sal_Int32 Chart2ModelContact::getExplicitNumberFormatKeyForSeries( 173*cdf0e10cSrcweir const Reference< chart2::XDataSeries >& xSeries ) 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir return ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( 176*cdf0e10cSrcweir uno::Reference< beans::XPropertySet >( xSeries, uno::UNO_QUERY ), 177*cdf0e10cSrcweir xSeries, 178*cdf0e10cSrcweir -1 /*-1 for whole series*/, 179*cdf0e10cSrcweir ChartModelHelper::findDiagram( m_xChartModel ) 180*cdf0e10cSrcweir ); 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir //----------------------------------------------------------------------------- 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir awt::Size Chart2ModelContact::GetPageSize() const 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir return ChartModelHelper::getPageSize(m_xChartModel); 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir awt::Rectangle Chart2ModelContact::SubstractAxisTitleSizes( const awt::Rectangle& rPositionRect ) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir awt::Rectangle aRect = ExplicitValueProvider::substractAxisTitleSizes( 193*cdf0e10cSrcweir m_xChartModel, getChartView(), rPositionRect ); 194*cdf0e10cSrcweir return aRect; 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingTitle() const 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir awt::Rectangle aRect( GetDiagramRectangleIncludingAxes() ); 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir //add axis title sizes to the diagram size 202*cdf0e10cSrcweir aRect = ExplicitValueProvider::addAxisTitleSizes( 203*cdf0e10cSrcweir m_xChartModel, getChartView(), aRect ); 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir return aRect; 206*cdf0e10cSrcweir } 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingAxes() const 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir awt::Rectangle aRect(0,0,0,0); 211*cdf0e10cSrcweir uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( m_xChartModel ) ); 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir if( DiagramPositioningMode_INCLUDING == DiagramHelper::getDiagramPositioningMode( xDiagram ) ) 214*cdf0e10cSrcweir aRect = DiagramHelper::getDiagramRectangleFromModel(m_xChartModel); 215*cdf0e10cSrcweir else 216*cdf0e10cSrcweir { 217*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 218*cdf0e10cSrcweir if( pProvider ) 219*cdf0e10cSrcweir aRect = pProvider->getRectangleOfObject( C2U("PlotAreaIncludingAxes") ); 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir return aRect; 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir awt::Rectangle Chart2ModelContact::GetDiagramRectangleExcludingAxes() const 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir awt::Rectangle aRect(0,0,0,0); 227*cdf0e10cSrcweir uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( m_xChartModel ) ); 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir if( DiagramPositioningMode_EXCLUDING == DiagramHelper::getDiagramPositioningMode( xDiagram ) ) 230*cdf0e10cSrcweir aRect = DiagramHelper::getDiagramRectangleFromModel(m_xChartModel); 231*cdf0e10cSrcweir else 232*cdf0e10cSrcweir { 233*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 234*cdf0e10cSrcweir if( pProvider ) 235*cdf0e10cSrcweir aRect = pProvider->getDiagramRectangleExcludingAxes(); 236*cdf0e10cSrcweir } 237*cdf0e10cSrcweir return aRect; 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir awt::Size Chart2ModelContact::GetLegendSize() const 241*cdf0e10cSrcweir { 242*cdf0e10cSrcweir awt::Size aSize; 243*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 244*cdf0e10cSrcweir if( pProvider ) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir uno::Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( m_xChartModel ) ); 247*cdf0e10cSrcweir rtl::OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel ) ); 248*cdf0e10cSrcweir aSize = ToSize( pProvider->getRectangleOfObject( aCID ) ); 249*cdf0e10cSrcweir } 250*cdf0e10cSrcweir return aSize; 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir awt::Point Chart2ModelContact::GetLegendPosition() const 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir awt::Point aPoint; 256*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 257*cdf0e10cSrcweir if( pProvider ) 258*cdf0e10cSrcweir { 259*cdf0e10cSrcweir uno::Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( m_xChartModel ) ); 260*cdf0e10cSrcweir rtl::OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel ) ); 261*cdf0e10cSrcweir aPoint = ToPoint( pProvider->getRectangleOfObject( aCID ) ); 262*cdf0e10cSrcweir } 263*cdf0e10cSrcweir return aPoint; 264*cdf0e10cSrcweir } 265*cdf0e10cSrcweir 266*cdf0e10cSrcweir awt::Size Chart2ModelContact::GetTitleSize( const uno::Reference< 267*cdf0e10cSrcweir ::com::sun::star::chart2::XTitle > & xTitle ) const 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir awt::Size aSize; 270*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 271*cdf0e10cSrcweir if( pProvider && xTitle.is() ) 272*cdf0e10cSrcweir { 273*cdf0e10cSrcweir rtl::OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xTitle, m_xChartModel ) ); 274*cdf0e10cSrcweir aSize = ToSize( pProvider->getRectangleOfObject( aCID ) ); 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir return aSize; 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir awt::Point Chart2ModelContact::GetTitlePosition( const uno::Reference< 280*cdf0e10cSrcweir ::com::sun::star::chart2::XTitle > & xTitle ) const 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir awt::Point aPoint; 283*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 284*cdf0e10cSrcweir if( pProvider && xTitle.is() ) 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir rtl::OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xTitle, m_xChartModel ) ); 287*cdf0e10cSrcweir aPoint = ToPoint( pProvider->getRectangleOfObject( aCID ) ); 288*cdf0e10cSrcweir } 289*cdf0e10cSrcweir return aPoint; 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir awt::Size Chart2ModelContact::GetAxisSize( const uno::Reference< 293*cdf0e10cSrcweir ::com::sun::star::chart2::XAxis > & xAxis ) const 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir awt::Size aSize; 296*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 297*cdf0e10cSrcweir if( pProvider && xAxis.is() ) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir rtl::OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xAxis, m_xChartModel ) ); 300*cdf0e10cSrcweir aSize = ToSize( pProvider->getRectangleOfObject( aCID ) ); 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir return aSize; 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir awt::Point Chart2ModelContact::GetAxisPosition( const uno::Reference< 306*cdf0e10cSrcweir ::com::sun::star::chart2::XAxis > & xAxis ) const 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir awt::Point aPoint; 309*cdf0e10cSrcweir ExplicitValueProvider* pProvider( getExplicitValueProvider() ); 310*cdf0e10cSrcweir if( pProvider && xAxis.is() ) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir rtl::OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xAxis, m_xChartModel ) ); 313*cdf0e10cSrcweir aPoint = ToPoint( pProvider->getRectangleOfObject( aCID ) ); 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir return aPoint; 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir } // namespace wrapper 319*cdf0e10cSrcweir } // namespace chart 320