diff options
Diffstat (limited to 'sc/source/ui/vba/vbachart.cxx')
-rw-r--r-- | sc/source/ui/vba/vbachart.cxx | 1129 |
1 files changed, 0 insertions, 1129 deletions
diff --git a/sc/source/ui/vba/vbachart.cxx b/sc/source/ui/vba/vbachart.cxx deleted file mode 100644 index dbbae0698..000000000 --- a/sc/source/ui/vba/vbachart.cxx +++ /dev/null @@ -1,1129 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#include "vbachart.hxx" -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/sheet/XCellRangeAddressable.hpp> -#include <com/sun/star/chart/XAxisXSupplier.hpp> -#include <com/sun/star/chart/XAxisYSupplier.hpp> -#include <com/sun/star/chart/XAxisZSupplier.hpp> -#include <com/sun/star/chart/XTwoAxisXSupplier.hpp> -#include <com/sun/star/chart/XTwoAxisYSupplier.hpp> -#include <com/sun/star/chart/XChartDataArray.hpp> -#include <com/sun/star/chart/ChartSymbolType.hpp> -#include <com/sun/star/chart/ChartSolidType.hpp> -#include <com/sun/star/chart/ChartDataRowSource.hpp> -#include <com/sun/star/chart/ChartDataCaption.hpp> -#include <ooo/vba/excel/XlChartType.hpp> -#include <ooo/vba/excel/XlRowCol.hpp> -#include <ooo/vba/excel/XlAxisType.hpp> -#include <ooo/vba/excel/XlAxisGroup.hpp> - -#include <basic/sberrors.hxx> -#include "vbachartobject.hxx" -#include "vbarange.hxx" -#include "vbacharttitle.hxx" -#include "vbaaxes.hxx" - -using namespace ::com::sun::star; -using namespace ::ooo::vba; -using namespace ::ooo::vba::excel::XlChartType; -using namespace ::ooo::vba::excel::XlRowCol; -using namespace ::ooo::vba::excel::XlAxisType; -using namespace ::ooo::vba::excel::XlAxisGroup; - -const rtl::OUString CHART_NAME( RTL_CONSTASCII_USTRINGPARAM("Name") ); -// #TODO move this constant to vbaseries.[ch]xx ( when it exists ) -const rtl::OUString DEFAULTSERIESPREFIX( RTL_CONSTASCII_USTRINGPARAM("Series") ); -const rtl::OUString DATAROWSOURCE( RTL_CONSTASCII_USTRINGPARAM("DataRowSource") ); -const rtl::OUString UPDOWN( RTL_CONSTASCII_USTRINGPARAM("UpDown") ); -const rtl::OUString VOLUME( RTL_CONSTASCII_USTRINGPARAM("Volume") ); -const rtl::OUString LINES( RTL_CONSTASCII_USTRINGPARAM("Lines") ); -const rtl::OUString SPLINETYPE( RTL_CONSTASCII_USTRINGPARAM("SplineType") ); -const rtl::OUString SYMBOLTYPE( RTL_CONSTASCII_USTRINGPARAM("SymbolType") ); -const rtl::OUString DEEP( RTL_CONSTASCII_USTRINGPARAM("Deep") ); -const rtl::OUString SOLIDTYPE( RTL_CONSTASCII_USTRINGPARAM("SolidType") ); -const rtl::OUString VERTICAL( RTL_CONSTASCII_USTRINGPARAM("Vertical") ); -const rtl::OUString PERCENT( RTL_CONSTASCII_USTRINGPARAM("Percent") ); -const rtl::OUString STACKED( RTL_CONSTASCII_USTRINGPARAM("Stacked") ); -const rtl::OUString DIM3D( RTL_CONSTASCII_USTRINGPARAM("Dim3D") ); -const rtl::OUString HASMAINTITLE( RTL_CONSTASCII_USTRINGPARAM("HasMainTitle") ); -const rtl::OUString HASLEGEND( RTL_CONSTASCII_USTRINGPARAM("HasLegend") ); -const rtl::OUString DATACAPTION( RTL_CONSTASCII_USTRINGPARAM("DataCaption") ); - -ScVbaChart::ScVbaChart( const css::uno::Reference< ov::XHelperInterface >& _xParent, const css::uno::Reference< css::uno::XComponentContext >& _xContext, const css::uno::Reference< css::lang::XComponent >& _xChartComponent, const css::uno::Reference< css::table::XTableChart >& _xTableChart ) : ChartImpl_BASE( _xParent, _xContext ), mxTableChart( _xTableChart ) -{ - mxChartDocument.set( _xChartComponent, uno::UNO_QUERY_THROW ) ; - // #TODO is is possible that the XPropertySet interface is not set - // code in setPlotBy seems to indicate that this is possible? but - // additionally there is no check in most of the places where it is used - // ( and therefore could possibly be NULL ) - // I'm going to let it throw for the moment ( npower ) - mxDiagramPropertySet.set( mxChartDocument->getDiagram(), uno::UNO_QUERY_THROW ); - mxChartPropertySet.set( _xChartComponent, uno::UNO_QUERY_THROW ) ; -} - -::rtl::OUString SAL_CALL -ScVbaChart::getName() throw (css::uno::RuntimeException) -{ - rtl::OUString sName; - uno::Reference< beans::XPropertySet > xProps( mxChartDocument, uno::UNO_QUERY_THROW ); - try - { - xProps->getPropertyValue( CHART_NAME ) >>= sName; - } - catch( const uno::Exception & ) // swallow exceptions - { - } - return sName; -} - -uno::Any SAL_CALL -ScVbaChart::SeriesCollection(const uno::Any&) throw (uno::RuntimeException) -{ - return uno::Any(); -} - -::sal_Int32 SAL_CALL -ScVbaChart::getChartType() throw ( uno::RuntimeException, script::BasicErrorException) -{ - sal_Int32 nChartType = -1; - try - { - rtl::OUString sDiagramType = mxChartDocument->getDiagram()->getDiagramType(); - if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart.AreaDiagram" )))) - { - if (is3D()) - { - nChartType = getStackedType(xl3DAreaStacked, xl3DAreaStacked100, xl3DArea); - } - else - { - nChartType = getStackedType(xlAreaStacked, xlAreaStacked100, xlArea); - } - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.PieDiagram")))) - { - if (is3D()) - nChartType = xl3DPie; - else - nChartType = xlPie; /*TODO XlChartType xlPieExploded, XlChartType xlPieOfPie */ - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.BarDiagram")))) - { - sal_Int32 nSolidType = chart::ChartSolidType::RECTANGULAR_SOLID; - if (mxDiagramPropertySet->getPropertySetInfo()->hasPropertyByName(SOLIDTYPE)) - { //in 2D diagrams 'SolidType' may not be set - if (is3D()) - mxDiagramPropertySet->getPropertyValue(SOLIDTYPE) >>= nSolidType; - } - switch (nSolidType) - { - case chart::ChartSolidType::CONE: - nChartType = getSolidType(xlConeCol, xlConeColStacked, xlConeColStacked100, xlConeColClustered, xlConeBarStacked, xlConeBarStacked100, xlConeBarClustered); - break; - case chart::ChartSolidType::CYLINDER: - nChartType = getSolidType(xlCylinderCol, xlCylinderColStacked, xlCylinderColStacked100, xlCylinderColClustered, xlCylinderBarStacked, xlCylinderBarStacked100, xlCylinderBarClustered); - break; - case chart::ChartSolidType::PYRAMID: - nChartType = getSolidType(xlPyramidCol, xlPyramidColStacked, xlPyramidColStacked100, xlPyramidColClustered, xlPyramidBarStacked, xlPyramidBarStacked100, xlPyramidBarClustered); - break; - default: // RECTANGULAR_SOLID - if (is3D()) - { - nChartType = getSolidType(xl3DColumn, xl3DColumnStacked, xl3DColumnStacked100, xl3DColumnClustered, xl3DBarStacked, xl3DBarStacked100, xl3DBarClustered); - } - else - { - nChartType = getSolidType(xlColumnClustered, xlColumnStacked, xlColumnStacked100, xlColumnClustered, xlBarStacked, xlBarStacked100, xlBarClustered); - } - break; - } - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.StockDiagram")))) - { - sal_Bool bVolume = false; - mxDiagramPropertySet->getPropertyValue(VOLUME) >>= bVolume; - if (bVolume) - { - nChartType = getStockUpDownValue(xlStockVOHLC, xlStockVHLC); - } - else - { - nChartType = getStockUpDownValue(xlStockOHLC, xlStockHLC); - } - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.XYDiagram")))) - { - sal_Bool bHasLines = false; - mxDiagramPropertySet->getPropertyValue(LINES) >>= bHasLines; - sal_Int32 nSplineType = 0; - mxDiagramPropertySet->getPropertyValue(SPLINETYPE) >>= nSplineType; - if (nSplineType == 1) - { - nChartType = getMarkerType(xlXYScatterSmooth, xlXYScatterSmoothNoMarkers); - } - else if (bHasLines) - { - nChartType = getMarkerType(xlXYScatterLines, xlXYScatterLinesNoMarkers); - } - else - { - nChartType = xlXYScatter; - } - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.LineDiagram")))) - { - if (is3D()) - { - nChartType = xl3DLine; - } - else if (hasMarkers()) - { - nChartType = getStackedType(xlLineMarkersStacked, xlLineMarkersStacked100, xlLineMarkers); - } - else - { - nChartType = getStackedType(xlLineStacked, xlLineStacked100, xlLine); - } - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.DonutDiagram")))) - { - nChartType = xlDoughnut; // TODO DoughnutExploded ?? - } - else if (sDiagramType.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.NetDiagram")))) - { - nChartType = getMarkerType(xlRadarMarkers, xlRadar); - } - } - catch ( const uno::Exception& ) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - return nChartType; -} - -void SAL_CALL -ScVbaChart::setChartType( ::sal_Int32 _nChartType ) throw ( uno::RuntimeException, script::BasicErrorException) -{ -try -{ - switch (_nChartType) - { - case xlColumnClustered: - case xlColumnStacked: - case xlColumnStacked100: - case xl3DColumnClustered: - case xl3DColumnStacked: - case xl3DColumnStacked100: - case xl3DColumn: - case xlBarClustered: - case xlBarStacked: - case xlBarStacked100: - case xl3DBarClustered: - case xl3DBarStacked: - case xl3DBarStacked100: - case xlConeColClustered: - case xlConeColStacked: - case xlConeColStacked100: - case xlConeBarClustered: - case xlConeBarStacked: - case xlConeBarStacked100: - case xlConeCol: - case xlPyramidColClustered: - case xlPyramidColStacked: - case xlPyramidColStacked100: - case xlPyramidBarClustered: - case xlPyramidBarStacked: - case xlPyramidBarStacked100: - case xlPyramidCol: - case xlCylinderColClustered: - case xlCylinderColStacked: - case xlCylinderColStacked100: - case xlCylinderBarClustered: - case xlCylinderBarStacked: - case xlCylinderBarStacked100: - case xlCylinderCol: - case xlSurface: // not possible - case xlSurfaceWireframe: - case xlSurfaceTopView: - case xlSurfaceTopViewWireframe: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.BarDiagram"))); - break; - case xlLine: - case xl3DLine: - case xlLineStacked: - case xlLineStacked100: - case xlLineMarkers: - case xlLineMarkersStacked: - case xlLineMarkersStacked100: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.LineDiagram"))); - break; - case xl3DArea: - case xlArea: - case xlAreaStacked: - case xlAreaStacked100: - case xl3DAreaStacked: - case xl3DAreaStacked100: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.AreaDiagram")) ); - break; - case xlDoughnut: - case xlDoughnutExploded: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.DonutDiagram") ) ); - break; - case xlStockHLC: - case xlStockOHLC: - case xlStockVHLC: - case xlStockVOHLC: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.StockDiagram"))); - mxDiagramPropertySet->setPropertyValue( UPDOWN, uno::makeAny(sal_Bool((_nChartType == xlStockOHLC) || (_nChartType == xlStockVOHLC)))); - mxDiagramPropertySet->setPropertyValue(VOLUME, uno::makeAny(sal_Bool((_nChartType == xlStockVHLC) || (_nChartType == xlStockVOHLC)))); - break; - - case xlPieOfPie: // not possible - case xlPieExploded: // SegmentOffset an ChartDataPointProperties ->am XDiagram abholen //wie macht Excel das? - case xl3DPieExploded: - case xl3DPie: - case xlPie: - case xlBarOfPie: // not possible (Zoom pie) - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.PieDiagram"))); - break; - - case xlRadar: - case xlRadarMarkers: - case xlRadarFilled: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.NetDiagram"))); - break; - case xlXYScatter: - case xlBubble: // not possible - case xlBubble3DEffect: // not possible - case xlXYScatterLines: - case xlXYScatterLinesNoMarkers: - case xlXYScatterSmooth: - case xlXYScatterSmoothNoMarkers: - setDiagram( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart.XYDiagram"))); - switch(_nChartType) - { - case xlXYScatter: - case xlBubble: // not possible - case xlBubble3DEffect: // not possible - mxDiagramPropertySet->setPropertyValue(LINES, uno::makeAny( sal_False )); - break; - case xlXYScatterLines: - case xlXYScatterLinesNoMarkers: - mxDiagramPropertySet->setPropertyValue(LINES, uno::makeAny( sal_True )); - break; - case xlXYScatterSmooth: - case xlXYScatterSmoothNoMarkers: - mxDiagramPropertySet->setPropertyValue(SPLINETYPE, uno::makeAny( sal_Int32(1))); - break; - default: - break; - } - break; - default: - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_CONVERSION, rtl::OUString() ); - } - - switch (_nChartType) - { - case xlLineMarkers: - case xlLineMarkersStacked: - case xlLineMarkersStacked100: - case xlRadarMarkers: - case xlXYScatterLines: - case xlXYScatterSmooth: - case xlXYScatter: - case xlBubble: // not possible - case xlBubble3DEffect: // not possible - mxDiagramPropertySet->setPropertyValue(SYMBOLTYPE, uno::makeAny( chart::ChartSymbolType::AUTO)); - break; - default: - if (mxDiagramPropertySet->getPropertySetInfo()->hasPropertyByName(SYMBOLTYPE)) - { - mxDiagramPropertySet->setPropertyValue(SYMBOLTYPE, uno::makeAny(chart::ChartSymbolType::NONE)); - } - break; - } - - switch (_nChartType) - { - case xlConeCol: - case xlPyramidCol: - case xlCylinderCol: - case xl3DColumn: - case xlSurface: // not possible - case xlSurfaceWireframe: - case xlSurfaceTopView: - case xlSurfaceTopViewWireframe: - mxDiagramPropertySet->setPropertyValue(DEEP,uno::makeAny( sal_True )); - break; - default: - if (mxDiagramPropertySet->getPropertySetInfo()->hasPropertyByName(DEEP)) - { - mxDiagramPropertySet->setPropertyValue(DEEP, uno::makeAny( sal_False)); - } - break; - } - - - switch (_nChartType) - { - case xlConeColClustered: - case xlConeColStacked: - case xlConeColStacked100: - case xlConeBarClustered: - case xlConeBarStacked: - case xlConeBarStacked100: - case xlConeCol: - mxDiagramPropertySet->setPropertyValue(SOLIDTYPE, uno::makeAny(chart::ChartSolidType::CONE)); - break; - case xlPyramidColClustered: - case xlPyramidColStacked: - case xlPyramidColStacked100: - case xlPyramidBarClustered: - case xlPyramidBarStacked: - case xlPyramidBarStacked100: - case xlPyramidCol: - mxDiagramPropertySet->setPropertyValue(SOLIDTYPE, uno::makeAny(chart::ChartSolidType::PYRAMID)); - break; - case xlCylinderColClustered: - case xlCylinderColStacked: - case xlCylinderColStacked100: - case xlCylinderBarClustered: - case xlCylinderBarStacked: - case xlCylinderBarStacked100: - case xlCylinderCol: - mxDiagramPropertySet->setPropertyValue(SOLIDTYPE, uno::makeAny(chart::ChartSolidType::CYLINDER)); - break; - default: - if (mxDiagramPropertySet->getPropertySetInfo()->hasPropertyByName(SOLIDTYPE)) - { - mxDiagramPropertySet->setPropertyValue(SOLIDTYPE, uno::makeAny(chart::ChartSolidType::RECTANGULAR_SOLID)); - } - break; - } - - switch ( _nChartType) - { - case xlConeCol: - case xlConeColClustered: - case xlConeColStacked: - case xlConeColStacked100: - case xlPyramidColClustered: - case xlPyramidColStacked: - case xlPyramidColStacked100: - case xlCylinderColClustered: - case xlCylinderColStacked: - case xlCylinderColStacked100: - case xlColumnClustered: - case xlColumnStacked: - case xlColumnStacked100: - case xl3DColumnClustered: - case xl3DColumnStacked: - case xl3DColumnStacked100: - case xlSurface: // not possible - case xlSurfaceWireframe: - case xlSurfaceTopView: - case xlSurfaceTopViewWireframe: - mxDiagramPropertySet->setPropertyValue(VERTICAL, uno::makeAny( sal_True)); - break; - default: - if (mxDiagramPropertySet->getPropertySetInfo()->hasPropertyByName(VERTICAL)) - { - mxDiagramPropertySet->setPropertyValue(VERTICAL, uno::makeAny(sal_False)); - } - break; - } - - switch (_nChartType) - { - case xlColumnStacked: - case xl3DColumnStacked: - case xlBarStacked: - case xl3DBarStacked: - case xlLineStacked: - case xlLineMarkersStacked: - case xlAreaStacked: - case xl3DAreaStacked: - case xlCylinderColStacked: - case xlCylinderBarStacked: - case xlConeColStacked: - case xlConeBarStacked: - case xlPyramidColStacked: - case xlPyramidBarStacked: - mxDiagramPropertySet->setPropertyValue(PERCENT, uno::makeAny( sal_False )); - mxDiagramPropertySet->setPropertyValue(STACKED, uno::makeAny( sal_True )); - break; - case xlPyramidColStacked100: - case xlPyramidBarStacked100: - case xlConeColStacked100: - case xlConeBarStacked100: - case xlCylinderBarStacked100: - case xlCylinderColStacked100: - case xl3DAreaStacked100: - case xlLineMarkersStacked100: - case xlAreaStacked100: - case xlLineStacked100: - case xl3DBarStacked100: - case xlBarStacked100: - case xl3DColumnStacked100: - case xlColumnStacked100: - mxDiagramPropertySet->setPropertyValue(STACKED, uno::makeAny( sal_True)); - mxDiagramPropertySet->setPropertyValue(PERCENT, uno::makeAny( sal_True )); - break; - default: - mxDiagramPropertySet->setPropertyValue(PERCENT, uno::makeAny( sal_False)); - mxDiagramPropertySet->setPropertyValue(STACKED, uno::makeAny( sal_False)); - break; - } - switch (_nChartType) - { - case xl3DArea: - case xl3DAreaStacked: - case xl3DAreaStacked100: - case xl3DBarClustered: - case xl3DBarStacked: - case xl3DBarStacked100: - case xl3DColumn: - case xl3DColumnClustered: - case xl3DColumnStacked: - case xl3DColumnStacked100: - case xl3DLine: - case xl3DPie: - case xl3DPieExploded: - case xlConeColClustered: - case xlConeColStacked: - case xlConeColStacked100: - case xlConeBarClustered: - case xlConeBarStacked: - case xlConeBarStacked100: - case xlConeCol: - case xlPyramidColClustered: - case xlPyramidColStacked: - case xlPyramidColStacked100: - case xlPyramidBarClustered: - case xlPyramidBarStacked: - case xlPyramidBarStacked100: - case xlPyramidCol: - case xlCylinderColClustered: - case xlCylinderColStacked: - case xlCylinderColStacked100: - case xlCylinderBarClustered: - case xlCylinderBarStacked: - case xlCylinderBarStacked100: - case xlCylinderCol: - mxDiagramPropertySet->setPropertyValue(DIM3D, uno::makeAny( sal_True)); - break; - default: - if (mxDiagramPropertySet->getPropertySetInfo()->hasPropertyByName(DIM3D)) - { - mxDiagramPropertySet->setPropertyValue(DIM3D, uno::makeAny( sal_False)); - } - break; - } - } - catch ( const uno::Exception& ) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - -void SAL_CALL -ScVbaChart::Activate() throw (script::BasicErrorException, uno::RuntimeException) -{ - // #TODO how are Chart sheets handled ( I know we don't even consider - // them in the worksheets/sheets collections ), but.....??? - // note: in vba for excel the parent of a Chart sheet is a workbook, - // e.g. 'ThisWorkbook' - uno::Reference< XHelperInterface > xParent( getParent() ); - ScVbaChartObject* pChartObj = static_cast< ScVbaChartObject* >( xParent.get() ); - if ( pChartObj ) - pChartObj->Activate(); - else - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "no ChartObject as parent" ) ) ); -} - -void SAL_CALL -ScVbaChart::setSourceData( const css::uno::Reference< ::ooo::vba::excel::XRange >& _xCalcRange, const css::uno::Any& _aPlotBy ) throw (css::script::BasicErrorException, css::uno::RuntimeException) -{ - try - { - uno::Sequence< table::CellRangeAddress > mRangeAddresses(1); - table::CellRangeAddress mSingleRangeAddress; - - uno::Reference< sheet::XCellRangeAddressable > xAddressable( _xCalcRange->getCellRange(), uno::UNO_QUERY_THROW ); - mSingleRangeAddress = xAddressable->getRangeAddress(); - - mRangeAddresses[0] = mSingleRangeAddress; - - mxTableChart->setRanges(mRangeAddresses); - - sal_Bool bsetRowHeaders = false; - sal_Bool bsetColumnHeaders = false; - - ScVbaRange* pRange = static_cast< ScVbaRange* >( _xCalcRange.get() ); - if ( pRange ) - { - ScDocument* pDoc = pRange->getScDocument(); - if ( pDoc ) - { - bsetRowHeaders = pDoc->HasRowHeader( static_cast< SCCOL >( mSingleRangeAddress.StartColumn ), static_cast< SCROW >( mSingleRangeAddress.StartRow ), static_cast< SCCOL >( mSingleRangeAddress.EndColumn ), static_cast< SCROW >( mSingleRangeAddress.EndRow ), static_cast< SCTAB >( mSingleRangeAddress.Sheet ) );; - bsetColumnHeaders = pDoc->HasColHeader( static_cast< SCCOL >( mSingleRangeAddress.StartColumn ), static_cast< SCROW >( mSingleRangeAddress.StartRow ), static_cast< SCCOL >( mSingleRangeAddress.EndColumn ), static_cast< SCROW >( mSingleRangeAddress.EndRow ), static_cast< SCTAB >( mSingleRangeAddress.Sheet )); -; - } - } - mxTableChart->setHasRowHeaders(bsetRowHeaders); - mxTableChart->setHasColumnHeaders(bsetColumnHeaders); - - if ((!bsetColumnHeaders) || (!bsetRowHeaders)) - { - uno::Reference< chart::XChartDataArray > xChartDataArray( mxChartDocument->getData(), uno::UNO_QUERY_THROW ); - if (!bsetColumnHeaders) - { - xChartDataArray->setColumnDescriptions( getDefaultSeriesDescriptions(xChartDataArray->getColumnDescriptions().getLength() )); - } - if (!bsetRowHeaders) - { - xChartDataArray->setRowDescriptions(getDefaultSeriesDescriptions(xChartDataArray->getRowDescriptions().getLength() )); - } - } - - if ( _aPlotBy.hasValue() ) - { - sal_Int32 nVal = 0; - _aPlotBy >>= nVal; - setPlotBy( nVal ); - } - else - { - sal_Int32 nRows = mSingleRangeAddress.EndRow - mSingleRangeAddress.StartRow; - sal_Int32 nCols = mSingleRangeAddress.EndColumn - mSingleRangeAddress.StartColumn; - // AutoDetect emulation - if ( nRows > nCols ) - setPlotBy( xlColumns ); - else if ( nRows <= nCols ) - setPlotBy( xlRows ); - } - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - -uno::Sequence< rtl::OUString > -ScVbaChart::getDefaultSeriesDescriptions( sal_Int32 _nCount ) -{ - uno::Sequence< rtl::OUString > sDescriptions ( _nCount ); - sal_Int32 nLen = sDescriptions.getLength(); - for (sal_Int32 i = 0; i < nLen; i++) - { - sDescriptions[i] = DEFAULTSERIESPREFIX + rtl::OUString::valueOf(i+1); - } - return sDescriptions; -} - -void -ScVbaChart::setDefaultChartType() throw ( script::BasicErrorException ) -{ - setChartType( xlColumnClustered ); -} - -void -ScVbaChart::setPlotBy( ::sal_Int32 _nPlotBy ) throw (css::script::BasicErrorException, css::uno::RuntimeException) -{ - try - { - if ( !mxDiagramPropertySet.is() ) - setDefaultChartType(); - switch (_nPlotBy) - { - case xlRows: - mxDiagramPropertySet->setPropertyValue( DATAROWSOURCE, uno::makeAny( chart::ChartDataRowSource_ROWS ) ); - break; - case xlColumns: - mxDiagramPropertySet->setPropertyValue( DATAROWSOURCE, uno::makeAny( chart::ChartDataRowSource_COLUMNS) ); - break; - default: - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - -::sal_Int32 SAL_CALL -ScVbaChart::getPlotBy( ) throw (script::BasicErrorException, uno::RuntimeException) -{ - try - { - chart::ChartDataRowSource aChartDataRowSource; - mxDiagramPropertySet->getPropertyValue(DATAROWSOURCE) >>= aChartDataRowSource; - if (aChartDataRowSource == chart::ChartDataRowSource_COLUMNS) - { - return xlColumns; - } - else - { - return xlRows; - } - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - -void -ScVbaChart::setDiagram( const rtl::OUString& _sDiagramType ) throw( script::BasicErrorException ) -{ - try - { - uno::Reference< lang::XMultiServiceFactory > xMSF( mxChartDocument, uno::UNO_QUERY_THROW ); - uno::Reference< chart::XDiagram > xDiagram( xMSF->createInstance( _sDiagramType ), uno::UNO_QUERY_THROW ); - mxChartDocument->setDiagram( xDiagram ); - mxDiagramPropertySet.set( xDiagram, uno::UNO_QUERY_THROW ); - } - catch ( const uno::Exception& ) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - -// #TODO find out why we have Location/getLocation ? there is afaiks no -// Location property, just a Location function for the Chart object -sal_Int32 SAL_CALL -ScVbaChart::Location() throw (css::script::BasicErrorException, css::uno::RuntimeException) -{ - return getLocation(); -} - -sal_Int32 SAL_CALL -ScVbaChart::getLocation() throw (css::script::BasicErrorException, css::uno::RuntimeException) -{ - return -1; -} - -void SAL_CALL -ScVbaChart::setLocation( ::sal_Int32 /*where*/, const css::uno::Any& /*Name*/ ) throw (script::BasicErrorException, uno::RuntimeException) -{ - // Helper api just stubs out the code <shrug> - // #TODO come back and make sense out of this -// String sheetName = null; -// -// if ((name != null) && name instanceof String) { -// sheetName = (String) name; -// } -// XSpreadsheetDocument xShDoc = (XSpreadsheetDocument) UnoRuntime.queryInterface( XSpreadsheetDocument.class,getXModel() ); -// com.sun.star.sheet.XSpreadsheets xSheets = xShDoc.Sheets(); -// -// switch (where) { -// case ClLocationType.clLocationAsObject_value: //{ -// -// if (sheetName == null) { -// DebugHelper.writeInfo("Can't embed in Chart without knowing SheetName"); -// return; -// } -// -// try { -// Any any = (Any) xSheets.getByName(sheetName); -// chartSheet = (XSpreadsheet) any.getObject(); -// -// // chartSheet = (XSpreadsheet) xSheets.getByName( sheetName ); -// } catch (NoSuchElementException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// -// return; -// } catch (WrappedTargetException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// -// return; -// } catch (java.lang.Exception e) { -// e.printStackTrace(); -// } -// -// XTableChartsSupplier xTCS = (XTableChartsSupplier) UnoRuntime.queryInterface( XTableChartsSupplier.class, chartSheet); -// XTableCharts xTableCharts = xTCS.getCharts(); -// XIndexAccess xIA = (XIndexAccess) UnoRuntime.queryInterface( XIndexAccess.class, xTableCharts); -// int numCharts = xIA.getCount(); -// chartName = "Chart " + (numCharts + 1); -// -// //} -// break; -// -// case ClLocationType.clLocationAsNewSheet_value: -// case ClLocationType.clLocationAutomatic_value:default: //{ -// chartName = "Chart 1"; // Since it's a new sheet, it's the first on it... -// -// XIndexAccess xSheetIA = (XIndexAccess) UnoRuntime.queryInterface( XIndexAccess.class, xSheets); -// -// short newSheetNum = (short) (xSheetIA.getCount() + 1); -// -// if (sheetName == null){ -// sheetName = "ChartSheet " + newSheetNum; // Why not? -// } -// // DPK TODO : Probably should use Sheets to create this! -// xSheets.insertNewByName(sheetName, newSheetNum); -// -// try { -// chartSheet = -// (XSpreadsheet) xSheets.getByName(sheetName); -// } catch (NoSuchElementException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// -// return; -// } catch (WrappedTargetException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// -// return; -// } -// -// //} -// break; -// } -// -// // Last thing should be a call to createChartForReal(), one of them -// // should succeed. -// createChartForReal(); - -} - -sal_Bool SAL_CALL -ScVbaChart::getHasTitle( ) throw (script::BasicErrorException, uno::RuntimeException) -{ - sal_Bool bHasTitle = false; - try - { - mxChartPropertySet->getPropertyValue(HASMAINTITLE) >>= bHasTitle; - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - return bHasTitle; -} - -void SAL_CALL -ScVbaChart::setHasTitle( ::sal_Bool bTitle ) throw (script::BasicErrorException, uno::RuntimeException) -{ - try - { - mxChartPropertySet->setPropertyValue(HASMAINTITLE, uno::makeAny( bTitle )); - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - -} - -::sal_Bool SAL_CALL -ScVbaChart::getHasLegend( ) throw (script::BasicErrorException, uno::RuntimeException) -{ - sal_Bool bHasLegend = false; - try - { - mxChartPropertySet->getPropertyValue(HASLEGEND) >>= bHasLegend; - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - return bHasLegend; -} - -void SAL_CALL -ScVbaChart::setHasLegend( ::sal_Bool bLegend ) throw (script::BasicErrorException, uno::RuntimeException) -{ - try - { - mxChartPropertySet->setPropertyValue(HASLEGEND, uno::makeAny(bLegend)); - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - -uno::Reference< excel::XChartTitle > SAL_CALL -ScVbaChart::getChartTitle( ) throw (script::BasicErrorException, uno::RuntimeException) -{ - uno::Reference< drawing::XShape > xTitleShape = mxChartDocument->getTitle(); - // #TODO check parent - return new ScVbaChartTitle(this, mxContext, xTitleShape); -} - -uno::Any SAL_CALL -ScVbaChart::Axes( const uno::Any& Type, const uno::Any& AxisGroup ) throw (script::BasicErrorException, uno::RuntimeException) -{ - // mmm chart probably is the parent, #TODO check parent - uno::Reference< excel::XAxes > xAxes = new ScVbaAxes( this, mxContext, this ); - if ( !Type.hasValue() ) - return uno::makeAny( xAxes ); - return xAxes->Item( Type, AxisGroup ); -} -bool -ScVbaChart::is3D() throw ( uno::RuntimeException ) -{ - // #TODO perhaps provide limited Debughelper functionality - sal_Bool is3d = false; - mxDiagramPropertySet->getPropertyValue(DIM3D) >>= is3d; - return is3d; -} - -sal_Int32 -ScVbaChart::getStackedType( sal_Int32 _nStacked, sal_Int32 _n100PercentStacked, sal_Int32 _nUnStacked ) throw ( uno::RuntimeException ) -{ - // #TODO perhaps provide limited Debughelper functionality - if (isStacked()) - { - if (is100PercentStacked()) - return _n100PercentStacked; - else - return _nStacked; - } - else - return _nUnStacked; -} - -bool -ScVbaChart::isStacked() throw ( uno::RuntimeException ) -{ - // #TODO perhaps provide limited Debughelper functionality - sal_Bool bStacked = false; - mxDiagramPropertySet->getPropertyValue(STACKED) >>= bStacked; - return bStacked; -} - -bool -ScVbaChart::is100PercentStacked() throw ( uno::RuntimeException ) -{ - // #TODO perhaps provide limited Debughelper functionality - sal_Bool b100Percent = false; - mxDiagramPropertySet->getPropertyValue(PERCENT) >>= b100Percent; - return b100Percent; -} - -sal_Int32 -ScVbaChart::getSolidType(sal_Int32 _nDeep, sal_Int32 _nVertiStacked, sal_Int32 _nVerti100PercentStacked, sal_Int32 _nVertiUnStacked, sal_Int32 _nHoriStacked, sal_Int32 _nHori100PercentStacked, sal_Int32 _nHoriUnStacked) throw ( script::BasicErrorException ) -{ - sal_Bool bIsVertical = true; - try - { - mxDiagramPropertySet->getPropertyValue(VERTICAL) >>= bIsVertical; - sal_Bool bIsDeep = false; - mxDiagramPropertySet->getPropertyValue(DEEP) >>= bIsDeep; - - if (bIsDeep) - { - return _nDeep; - } - else - { - if (bIsVertical) - { - return getStackedType(_nVertiStacked, _nVerti100PercentStacked, _nVertiUnStacked); - } - else - { - return getStackedType(_nHoriStacked, _nHori100PercentStacked, _nHoriUnStacked); - } - } - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } -} - - -sal_Int32 -ScVbaChart::getStockUpDownValue(sal_Int32 _nUpDown, sal_Int32 _nNotUpDown) throw (script::BasicErrorException) -{ - sal_Bool bUpDown = false; - try - { - mxDiagramPropertySet->getPropertyValue(UPDOWN) >>= bUpDown; - if (bUpDown) - { - return _nUpDown; - } - else - { - return _nNotUpDown; - } - } - catch (const uno::Exception&) - { - rtl::OUString aTemp; // temporary needed for g++ 3.3.5 - script::BasicErrorException( aTemp, uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - return _nNotUpDown; -} - -bool -ScVbaChart::hasMarkers() throw ( script::BasicErrorException ) -{ - bool bHasMarkers = false; - try - { - sal_Int32 nSymbol=0; - mxDiagramPropertySet->getPropertyValue(SYMBOLTYPE) >>= nSymbol; - bHasMarkers = nSymbol != chart::ChartSymbolType::NONE; - } - catch (const uno::Exception&) - { - rtl::OUString aTemp; // temporary needed for g++ 3.3.5 - script::BasicErrorException( aTemp, uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - return bHasMarkers; -} - -sal_Int32 -ScVbaChart::getMarkerType(sal_Int32 _nWithMarkers, sal_Int32 _nWithoutMarkers) throw ( script::BasicErrorException ) -{ - if (hasMarkers()) - return _nWithMarkers; - return _nWithoutMarkers; -} - -void -ScVbaChart::assignDiagramAttributes() -{ - xAxisXSupplier.set( mxDiagramPropertySet, uno::UNO_QUERY_THROW ); - xAxisYSupplier.set( mxDiagramPropertySet, uno::UNO_QUERY_THROW ); - xAxisZSupplier.set( mxDiagramPropertySet, uno::UNO_QUERY_THROW ); - xTwoAxisXSupplier.set( mxDiagramPropertySet, uno::UNO_QUERY_THROW ); - xTwoAxisYSupplier.set( mxDiagramPropertySet, uno::UNO_QUERY_THROW ); -} - -bool -ScVbaChart::isSeriesIndexValid(sal_Int32 _seriesindex) throw( script::BasicErrorException ) -{ - bool bret = false; - try - { - uno::Reference< chart::XChartDataArray > xChartDataArray( mxChartDocument->getData(), uno::UNO_QUERY_THROW ); - //TODO I guess we have to differentiate between XlRowCol - if ( !xChartDataArray.is() ) - { - if (getPlotBy() == xlRows) - { - if ((_seriesindex < xChartDataArray->getRowDescriptions().getLength() ) && (_seriesindex >= 0)) - bret = true; - } - else - { - if ((_seriesindex < xChartDataArray->getColumnDescriptions().getLength() ) && (_seriesindex >= 0)) - bret = true; - } - } - } - catch (const uno::Exception&) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() ); - } - if (!bret) - { - throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_OUT_OF_RANGE, rtl::OUString() ); - } - return bret; -} - -bool -ScVbaChart::areIndicesValid( sal_Int32 _seriesindex, sal_Int32 _valindex) throw ( css::script::BasicErrorException ) -{ - if (isSeriesIndexValid(_seriesindex)) - { - uno::Reference< chart::XChartDataArray > xChartDataArray( mxChartDocument->getData(), uno::UNO_QUERY_THROW ); - dblValues = xChartDataArray->getData(); - return (_valindex < dblValues[_seriesindex].getLength() ); - } - return false; -} - - -uno::Reference< beans::XPropertySet > -ScVbaChart::getAxisPropertySet(sal_Int32 _nAxisType, sal_Int32 _nAxisGroup) throw ( script::BasicErrorException ) -{ - assignDiagramAttributes(); - uno::Reference< beans::XPropertySet > xAxisProps; - switch(_nAxisType) - { - case xlCategory: - if (_nAxisGroup == xlPrimary) - { - xAxisProps = xAxisXSupplier->getXAxis(); - } - else if (_nAxisGroup == xlSecondary) - { - xAxisProps = xTwoAxisXSupplier->getSecondaryXAxis(); - } - break; - case xlSeriesAxis: - xAxisProps = xAxisZSupplier->getZAxis(); - break; - case xlValue: - if (_nAxisGroup == xlPrimary) - xAxisProps = xAxisYSupplier->getYAxis(); - else if (_nAxisGroup == xlSecondary) - xAxisProps = xTwoAxisYSupplier->getSecondaryYAxis(); - break; - default: - return xAxisProps; - } - return xAxisProps; -} - - -rtl::OUString& -ScVbaChart::getServiceImplName() -{ - static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaChart") ); - return sImplName; -} - -uno::Sequence< rtl::OUString > -ScVbaChart::getServiceNames() -{ - static uno::Sequence< rtl::OUString > aServiceNames; - if ( aServiceNames.getLength() == 0 ) - { - aServiceNames.realloc( 1 ); - aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.excel.Chart" ) ); - } - return aServiceNames; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |