/************************************************************** * * 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 "DiagramWrapper.hxx" #include "macros.hxx" #include "servicenames_charttypes.hxx" #include "DataSeriesPointWrapper.hxx" #include "AxisWrapper.hxx" #include "AxisHelper.hxx" #include "Chart2ModelContact.hxx" #include "PositionAndSizeHelper.hxx" #include "WallFloorWrapper.hxx" #include "MinMaxLineWrapper.hxx" #include "UpDownBarWrapper.hxx" #include "DiagramHelper.hxx" #include "DataSourceHelper.hxx" #include "ChartModelHelper.hxx" #include "WrappedIgnoreProperty.hxx" #include "WrappedAxisAndGridExistenceProperties.hxx" #include "WrappedStatisticProperties.hxx" #include "WrappedSymbolProperties.hxx" #include "WrappedDataCaptionProperties.hxx" #include "WrappedSplineProperties.hxx" #include "WrappedStockProperties.hxx" #include "WrappedSceneProperty.hxx" #include "RelativePositionHelper.hxx" #include "ContainerHelper.hxx" #include "ControllerLockGuard.hxx" #include "ModifyListenerHelper.hxx" #include "DisposeHelper.hxx" #include #include "WrappedAutomaticPositionProperties.hxx" #include "CommonConverters.hxx" #include #include #include #include #include #include #include "LineProperties.hxx" #include "FillProperties.hxx" #include "UserDefinedProperties.hxx" #include "SceneProperties.hxx" #include #include #include // header for define DBG_ERROR #include #include #include using namespace ::com::sun::star; using namespace ::chart::wrapper; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Sequence; using ::com::sun::star::beans::Property; using ::com::sun::star::chart::XAxis; using ::osl::MutexGuard; using ::rtl::OUString; namespace { static const OUString lcl_aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart.Diagram" )); enum { PROP_DIAGRAM_ATTRIBUTED_DATA_POINTS, PROP_DIAGRAM_PERCENT_STACKED, PROP_DIAGRAM_STACKED, PROP_DIAGRAM_THREE_D, PROP_DIAGRAM_SOLIDTYPE, PROP_DIAGRAM_DEEP, PROP_DIAGRAM_VERTICAL, PROP_DIAGRAM_NUMBER_OF_LINES, PROP_DIAGRAM_STACKED_BARS_CONNECTED, PROP_DIAGRAM_DATAROW_SOURCE, PROP_DIAGRAM_GROUP_BARS_PER_AXIS, PROP_DIAGRAM_INCLUDE_HIDDEN_CELLS, PROP_DIAGRAM_SORT_BY_X_VALUES, PROP_DIAGRAM_STARTING_ANGLE, PROP_DIAGRAM_RIGHT_ANGLED_AXES, PROP_DIAGRAM_PERSPECTIVE, PROP_DIAGRAM_ROTATION_HORIZONTAL, PROP_DIAGRAM_ROTATION_VERTICAL, PROP_DIAGRAM_MISSING_VALUE_TREATMENT, PROP_DIAGRAM_HAS_X_AXIS, PROP_DIAGRAM_HAS_X_AXIS_DESCR, PROP_DIAGRAM_HAS_X_AXIS_TITLE, PROP_DIAGRAM_HAS_X_AXIS_GRID, PROP_DIAGRAM_HAS_X_AXIS_HELP_GRID, PROP_DIAGRAM_HAS_Y_AXIS, PROP_DIAGRAM_HAS_Y_AXIS_DESCR, PROP_DIAGRAM_HAS_Y_AXIS_TITLE, PROP_DIAGRAM_HAS_Y_AXIS_GRID, PROP_DIAGRAM_HAS_Y_AXIS_HELP_GRID, PROP_DIAGRAM_HAS_Z_AXIS, PROP_DIAGRAM_HAS_Z_AXIS_DESCR, PROP_DIAGRAM_HAS_Z_AXIS_TITLE, PROP_DIAGRAM_HAS_Z_AXIS_GRID, PROP_DIAGRAM_HAS_Z_AXIS_HELP_GRID, PROP_DIAGRAM_HAS_SECOND_X_AXIS, PROP_DIAGRAM_HAS_SECOND_X_AXIS_DESCR, PROP_DIAGRAM_HAS_SECOND_Y_AXIS, PROP_DIAGRAM_HAS_SECOND_Y_AXIS_DESCR, PROP_DIAGRAM_HAS_SECOND_X_AXIS_TITLE, PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE, PROP_DIAGRAM_AUTOMATIC_SIZE }; void lcl_AddPropertiesToVector( ::std::vector< Property > & rOutProperties ) { rOutProperties.push_back( Property( C2U( "AttributedDataPoints" ), PROP_DIAGRAM_ATTRIBUTED_DATA_POINTS, ::getCppuType( reinterpret_cast< const uno::Sequence< uno::Sequence< sal_Int32 > > * >(0)), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID )); // see com.sun.star.chart.StackableDiagram rOutProperties.push_back( Property( C2U( "Percent" ), PROP_DIAGRAM_PERCENT_STACKED, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "Stacked" ), PROP_DIAGRAM_STACKED, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "Dim3D" ), PROP_DIAGRAM_THREE_D, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // see com.sun.star.chart.Chart3DBarProperties rOutProperties.push_back( Property( C2U( "SolidType" ), PROP_DIAGRAM_SOLIDTYPE, ::getCppuType( reinterpret_cast< sal_Int32 * >(0)), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // see com.sun.star.chart.BarDiagram rOutProperties.push_back( Property( C2U( "Deep" ), PROP_DIAGRAM_DEEP, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "Vertical" ), PROP_DIAGRAM_VERTICAL, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "NumberOfLines" ), PROP_DIAGRAM_NUMBER_OF_LINES, ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "StackedBarsConnected" ), PROP_DIAGRAM_STACKED_BARS_CONNECTED, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "DataRowSource" ), PROP_DIAGRAM_DATAROW_SOURCE, ::getCppuType( reinterpret_cast< const ::com::sun::star::chart::ChartDataRowSource * >(0)), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "GroupBarsPerAxis" ), PROP_DIAGRAM_GROUP_BARS_PER_AXIS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "IncludeHiddenCells" ), PROP_DIAGRAM_INCLUDE_HIDDEN_CELLS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); //new for XY charts rOutProperties.push_back( Property( C2U( "SortByXValues" ), PROP_DIAGRAM_SORT_BY_X_VALUES, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); //for pie and donut charts rOutProperties.push_back( Property( C2U( "StartingAngle" ), PROP_DIAGRAM_STARTING_ANGLE, ::getCppuType( reinterpret_cast< const sal_Int32 * >(0) ), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); //new for 3D charts rOutProperties.push_back( Property( C2U("RightAngledAxes"), PROP_DIAGRAM_RIGHT_ANGLED_AXES, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U("Perspective"), PROP_DIAGRAM_PERSPECTIVE, ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), beans::PropertyAttribute::MAYBEVOID )); rOutProperties.push_back( Property( C2U("RotationHorizontal"), PROP_DIAGRAM_ROTATION_HORIZONTAL, ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), beans::PropertyAttribute::MAYBEVOID )); rOutProperties.push_back( Property( C2U("RotationVertical"), PROP_DIAGRAM_ROTATION_VERTICAL, ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), beans::PropertyAttribute::MAYBEVOID )); // XAxisXSupplier rOutProperties.push_back( Property( C2U( "HasXAxis" ), PROP_DIAGRAM_HAS_X_AXIS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasXAxisDescription" ), PROP_DIAGRAM_HAS_X_AXIS_DESCR, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasXAxisTitle" ), PROP_DIAGRAM_HAS_X_AXIS_TITLE, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasXAxisGrid" ), PROP_DIAGRAM_HAS_X_AXIS_GRID, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasXAxisHelpGrid" ), PROP_DIAGRAM_HAS_X_AXIS_HELP_GRID, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // XAxisYSupplier rOutProperties.push_back( Property( C2U( "HasYAxis" ), PROP_DIAGRAM_HAS_Y_AXIS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasYAxisDescription" ), PROP_DIAGRAM_HAS_Y_AXIS_DESCR, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasYAxisTitle" ), PROP_DIAGRAM_HAS_Y_AXIS_TITLE, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasYAxisGrid" ), PROP_DIAGRAM_HAS_Y_AXIS_GRID, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasYAxisHelpGrid" ), PROP_DIAGRAM_HAS_Y_AXIS_HELP_GRID, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // XAxisZSupplier rOutProperties.push_back( Property( C2U( "HasZAxis" ), PROP_DIAGRAM_HAS_Z_AXIS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasZAxisDescription" ), PROP_DIAGRAM_HAS_Z_AXIS_DESCR, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasZAxisTitle" ), PROP_DIAGRAM_HAS_Z_AXIS_TITLE, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasZAxisGrid" ), PROP_DIAGRAM_HAS_Z_AXIS_GRID, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasZAxisHelpGrid" ), PROP_DIAGRAM_HAS_Z_AXIS_HELP_GRID, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // XTwoAxisXSupplier rOutProperties.push_back( Property( C2U( "HasSecondaryXAxis" ), PROP_DIAGRAM_HAS_SECOND_X_AXIS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasSecondaryXAxisDescription" ), PROP_DIAGRAM_HAS_SECOND_X_AXIS_DESCR, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // XTwoAxisYSupplier rOutProperties.push_back( Property( C2U( "HasSecondaryYAxis" ), PROP_DIAGRAM_HAS_SECOND_Y_AXIS, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasSecondaryYAxisDescription" ), PROP_DIAGRAM_HAS_SECOND_Y_AXIS_DESCR, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); // XSecondAxisTitleSupplier rOutProperties.push_back( Property( C2U( "HasSecondaryXAxisTitle" ), PROP_DIAGRAM_HAS_SECOND_X_AXIS_TITLE, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "HasSecondaryYAxisTitle" ), PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( C2U( "MissingValueTreatment" ), PROP_DIAGRAM_MISSING_VALUE_TREATMENT, ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID )); rOutProperties.push_back( Property( C2U( "AutomaticSize" ), PROP_DIAGRAM_AUTOMATIC_SIZE, ::getBooleanCppuType(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); } struct StaticDiagramWrapperPropertyArray_Initializer { Sequence< Property >* operator()() { static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); return &aPropSeq; } private: uno::Sequence< Property > lcl_GetPropertySequence() { ::std::vector< ::com::sun::star::beans::Property > aProperties; lcl_AddPropertiesToVector( aProperties ); ::chart::LineProperties::AddPropertiesToVector( aProperties ); ::chart::FillProperties::AddPropertiesToVector( aProperties ); ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); ::chart::SceneProperties::AddPropertiesToVector( aProperties ); WrappedStatisticProperties::addProperties( aProperties ); WrappedSymbolProperties::addProperties( aProperties ); WrappedDataCaptionProperties::addProperties( aProperties ); WrappedSplineProperties::addProperties( aProperties ); WrappedStockProperties::addProperties( aProperties ); WrappedAutomaticPositionProperties::addProperties( aProperties ); ::std::sort( aProperties.begin(), aProperties.end(), ::chart::PropertyNameLess() ); return ::chart::ContainerHelper::ContainerToSequence( aProperties ); } }; struct StaticDiagramWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticDiagramWrapperPropertyArray_Initializer > { }; bool lcl_isXYChart( const Reference< chart2::XDiagram > xDiagram ) { bool bRet = false; Reference< chart2::XChartType > xChartType( ::chart::DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); if( xChartType.is() ) { rtl::OUString aChartType( xChartType->getChartType() ); if( aChartType.equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_SCATTER) ) bRet = true; } return bRet; } sal_Int32 lcl_getNewAPIIndexForOldAPIIndex( sal_Int32 nOldAPIIndex , Reference< chart2::XDiagram > xDiagram ) { sal_Int32 nNewAPIIndex = nOldAPIIndex; if( lcl_isXYChart( xDiagram ) ) { if( nNewAPIIndex >= 1 ) nNewAPIIndex -= 1; } ::std::vector< uno::Reference< chart2::XDataSeries > > aSeriesList( ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); if( nNewAPIIndex >= static_cast(aSeriesList.size()) ) nNewAPIIndex = -1; return nNewAPIIndex; } typedef ::std::map< OUString, OUString > tChartTypeMap; OUString lcl_getDiagramType( const OUString & rTemplateServiceName ) { const OUString aPrefix( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart2.template.")); if( rTemplateServiceName.match( aPrefix )) { const OUString aName( rTemplateServiceName.copy( aPrefix.getLength())); // "Area" "StackedArea" "PercentStackedArea" "ThreeDArea" // "StackedThreeDArea" "PercentStackedThreeDArea" if( aName.indexOf( C2U("Area") ) != -1 ) return C2U( "com.sun.star.chart.AreaDiagram" ); // "Pie" "PieAllExploded" "ThreeDPie" "ThreeDPieAllExploded" if( aName.indexOf( C2U("Pie") ) != -1 ) return C2U( "com.sun.star.chart.PieDiagram" ); // "Column" "StackedColumn" "PercentStackedColumn" "ThreeDColumnDeep" // "ThreeDColumnFlat" "StackedThreeDColumnFlat" // "PercentStackedThreeDColumnFlat" "Bar" "StackedBar" // "PercentStackedBar" "ThreeDBarDeep" "ThreeDBarFlat" // "StackedThreeDBarFlat" "PercentStackedThreeDBarFlat" "ColumnWithLine" // "StackedColumnWithLine" if( aName.indexOf( C2U("Column") ) != -1 || aName.indexOf( C2U("Bar") ) != -1 ) return C2U( "com.sun.star.chart.BarDiagram" ); // "Donut" "DonutAllExploded" "ThreeDDonut" "ThreeDDonutAllExploded" if( aName.indexOf( C2U("Donut") ) != -1 ) return C2U( "com.sun.star.chart.DonutDiagram" ); // "ScatterLineSymbol" "ScatterLine" "ScatterSymbol" "ThreeDScatter" if( aName.indexOf( C2U("Scatter") ) != -1 ) return C2U( "com.sun.star.chart.XYDiagram" ); // "FilledNet" "StackedFilledNet" "PercentStackedFilledNet" if( aName.indexOf( C2U("FilledNet") ) != -1 ) return C2U( "com.sun.star.chart.FilledNetDiagram" ); // "Net" "NetSymbol" "NetLine" "StackedNet" "StackedNetSymbol" // "StackedNetLine" "PercentStackedNet" "PercentStackedNetSymbol" // "PercentStackedNetLine" if( aName.indexOf( C2U("Net") ) != -1 ) return C2U( "com.sun.star.chart.NetDiagram" ); // "StockLowHighClose" "StockOpenLowHighClose" "StockVolumeLowHighClose" // "StockVolumeOpenLowHighClose" if( aName.indexOf( C2U("Stock") ) != -1 ) return C2U( "com.sun.star.chart.StockDiagram" ); if( aName.indexOf( C2U("Bubble") ) != -1 ) return C2U( "com.sun.star.chart.BubbleDiagram" ); // Note: this must be checked after Bar, Net and Scatter // "Symbol" "StackedSymbol" "PercentStackedSymbol" "Line" "StackedLine" // "PercentStackedLine" "LineSymbol" "StackedLineSymbol" // "PercentStackedLineSymbol" "ThreeDLine" "StackedThreeDLine" // "PercentStackedThreeDLine" "ThreeDLineDeep" if( aName.indexOf( C2U("Line") ) != -1 || aName.indexOf( C2U("Symbol") ) != -1 ) return C2U( "com.sun.star.chart.LineDiagram" ); OSL_ENSURE( false, "unknown template" ); } return OUString(); } typedef ::comphelper::MakeMap< ::rtl::OUString, ::rtl::OUString > tMakeStringStringMap; const tMakeStringStringMap& lcl_getChartTypeNameMap() { static tMakeStringStringMap g_aChartTypeNameMap = tMakeStringStringMap ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.LineChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.LineDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.AreaChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.AreaDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.ColumnChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.BarDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.PieChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.PieDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.DonutChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.DonutDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.ScatterChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.XYDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.FilledNetChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.FilledNetDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.NetChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.NetDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.CandleStickChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.StockDiagram" ) ) ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.BubbleChartType" ) , ::rtl::OUString::createFromAscii( "com.sun.star.chart.BubbleDiagram" ) ) ; return g_aChartTypeNameMap; } OUString lcl_getOldChartTypeName( const OUString & rNewChartTypeName ) { OUString aOld(rNewChartTypeName); const tMakeStringStringMap& rMap = lcl_getChartTypeNameMap(); tMakeStringStringMap::const_iterator aIt( rMap.find( rNewChartTypeName )); if( aIt != rMap.end()) { aOld = aIt->second; } return aOld; } } // anonymous namespace // -------------------------------------------------------------------------------- namespace chart { namespace wrapper { DiagramWrapper::DiagramWrapper( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : m_spChart2ModelContact( spChart2ModelContact ), m_aEventListenerContainer( m_aMutex ) { } DiagramWrapper::~DiagramWrapper() {} // ____ XDiagram ____ OUString SAL_CALL DiagramWrapper::getDiagramType() throw (uno::RuntimeException) { OUString aRet; Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( xChartDoc.is() && xDiagram.is() ) { Reference< beans::XPropertySet > xChartDocProp( xChartDoc, uno::UNO_QUERY ); if( xChartDocProp.is() ) { uno::Reference< util::XRefreshable > xAddIn; if( xChartDocProp->getPropertyValue( C2U( "AddIn" ) ) >>= xAddIn ) { uno::Reference< lang::XServiceName > xServiceName( xAddIn, uno::UNO_QUERY ); if( xServiceName.is()) return xServiceName->getServiceName(); } } Reference< lang::XMultiServiceFactory > xChartTypeManager( xChartDoc->getChartTypeManager(), uno::UNO_QUERY ); DiagramHelper::tTemplateWithServiceName aTemplateAndService = DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); aRet = lcl_getDiagramType( aTemplateAndService.second ); } if( !aRet.getLength()) { // none of the standard templates matched // use first chart type Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); if( xChartType.is() ) { aRet = xChartType->getChartType(); if( aRet.getLength() ) aRet = lcl_getOldChartTypeName( aRet ); } if( !aRet.getLength()) aRet = C2U( "com.sun.star.chart.BarDiagram" ); } return aRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getDataRowProperties( sal_Int32 nRow ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException) { if( nRow < 0 ) throw lang::IndexOutOfBoundsException( C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); Reference< chart2::XDataSeries > xSeries; sal_Int32 nNewAPIIndex = lcl_getNewAPIIndexForOldAPIIndex( nRow, m_spChart2ModelContact->getChart2Diagram() ); if( nNewAPIIndex < 0 ) throw lang::IndexOutOfBoundsException( C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); Reference< beans::XPropertySet > xRet( new DataSeriesPointWrapper( DataSeriesPointWrapper::DATA_SERIES, nNewAPIIndex, 0, m_spChart2ModelContact ) ); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getDataPointProperties( sal_Int32 nCol, sal_Int32 nRow ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException) { if( nCol < 0 || nRow < 0 ) throw lang::IndexOutOfBoundsException( C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); Reference< chart2::XDataSeries > xSeries; sal_Int32 nNewAPIIndex = lcl_getNewAPIIndexForOldAPIIndex( nRow, m_spChart2ModelContact->getChart2Diagram() ); if( nNewAPIIndex < 0 ) throw lang::IndexOutOfBoundsException( C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); //todo: check borders of point index Reference< beans::XPropertySet > xRet( new DataSeriesPointWrapper( DataSeriesPointWrapper::DATA_POINT, nNewAPIIndex, nCol, m_spChart2ModelContact ) ); return xRet; } // ____ XShape (base of XDiagram) ____ awt::Point SAL_CALL DiagramWrapper::getPosition() throw (uno::RuntimeException) { awt::Point aPosition = ToPoint( m_spChart2ModelContact->GetDiagramRectangleIncludingAxes() ); return aPosition; } void SAL_CALL DiagramWrapper::setPosition( const awt::Point& aPosition ) throw (uno::RuntimeException) { ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); Reference< beans::XPropertySet > xProp( this->getInnerPropertySet() ); if( xProp.is() ) { awt::Size aPageSize( m_spChart2ModelContact->GetPageSize() ); chart2::RelativePosition aRelativePosition; aRelativePosition.Anchor = drawing::Alignment_TOP_LEFT; aRelativePosition.Primary = double(aPosition.X)/double(aPageSize.Width); aRelativePosition.Secondary = double(aPosition.Y)/double(aPageSize.Height); if( aRelativePosition.Primary < 0 || aRelativePosition.Secondary < 0 || aRelativePosition.Primary > 1 || aRelativePosition.Secondary > 1 ) { DBG_ERROR("DiagramWrapper::setPosition called with a position out of range -> automatic values are taken instead" ); uno::Any aEmpty; xProp->setPropertyValue( C2U( "RelativePosition" ), aEmpty ); return; } xProp->setPropertyValue( C2U( "RelativePosition" ), uno::makeAny(aRelativePosition) ); xProp->setPropertyValue( C2U( "PosSizeExcludeAxes" ), uno::makeAny(false) ); } } awt::Size SAL_CALL DiagramWrapper::getSize() throw (uno::RuntimeException) { awt::Size aSize = ToSize( m_spChart2ModelContact->GetDiagramRectangleIncludingAxes() ); return aSize; } void SAL_CALL DiagramWrapper::setSize( const awt::Size& aSize ) throw (beans::PropertyVetoException, uno::RuntimeException) { ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); Reference< beans::XPropertySet > xProp( this->getInnerPropertySet() ); if( xProp.is() ) { awt::Size aPageSize( m_spChart2ModelContact->GetPageSize() ); chart2::RelativeSize aRelativeSize; aRelativeSize.Primary = double(aSize.Width)/double(aPageSize.Width); aRelativeSize.Secondary = double(aSize.Height)/double(aPageSize.Height); if( aRelativeSize.Primary > 1 || aRelativeSize.Secondary > 1 ) { DBG_ERROR("DiagramWrapper::setSize called with sizes bigger than page -> automatic values are taken instead" ); uno::Any aEmpty; xProp->setPropertyValue( C2U( "RelativeSize" ), aEmpty ); return; } xProp->setPropertyValue( C2U( "RelativeSize" ), uno::makeAny(aRelativeSize) ); xProp->setPropertyValue( C2U( "PosSizeExcludeAxes" ), uno::makeAny(false) ); } } // ____ XShapeDescriptor (base of XShape) ____ OUString SAL_CALL DiagramWrapper::getShapeType() throw (uno::RuntimeException) { return C2U( "com.sun.star.chart.Diagram" ); } // ____ XDiagramPositioning ____ void SAL_CALL DiagramWrapper::setAutomaticDiagramPositioning() throw (uno::RuntimeException) { ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); if( xDiaProps.is() ) { xDiaProps->setPropertyValue( C2U( "RelativeSize" ), Any() ); xDiaProps->setPropertyValue( C2U( "RelativePosition" ), Any() ); } } ::sal_Bool SAL_CALL DiagramWrapper::isAutomaticDiagramPositioning( ) throw (uno::RuntimeException) { uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); if( xDiaProps.is() ) { Any aRelativeSize( xDiaProps->getPropertyValue( C2U( "RelativeSize" ) ) ); Any aRelativePosition( xDiaProps->getPropertyValue( C2U( "RelativePosition" ) ) ); if( aRelativeSize.hasValue() && aRelativePosition.hasValue() ) return false; } return true; } void SAL_CALL DiagramWrapper::setDiagramPositionExcludingAxes( const awt::Rectangle& rPositionRect ) throw (uno::RuntimeException) { ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); DiagramHelper::setDiagramPositioning( m_spChart2ModelContact->getChartModel(), rPositionRect ); uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); if( xDiaProps.is() ) xDiaProps->setPropertyValue(C2U("PosSizeExcludeAxes"), uno::makeAny(true) ); } ::sal_Bool SAL_CALL DiagramWrapper::isExcludingDiagramPositioning() throw (uno::RuntimeException) { uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); if( xDiaProps.is() ) { Any aRelativeSize( xDiaProps->getPropertyValue( C2U( "RelativeSize" ) ) ); Any aRelativePosition( xDiaProps->getPropertyValue( C2U( "RelativePosition" ) ) ); if( aRelativeSize.hasValue() && aRelativePosition.hasValue() ) { sal_Bool bPosSizeExcludeAxes = false; xDiaProps->getPropertyValue( C2U( "PosSizeExcludeAxes" ) ) >>= bPosSizeExcludeAxes; return bPosSizeExcludeAxes; } } return false; } awt::Rectangle SAL_CALL DiagramWrapper::calculateDiagramPositionExcludingAxes( ) throw (uno::RuntimeException) { return m_spChart2ModelContact->GetDiagramRectangleExcludingAxes(); } void SAL_CALL DiagramWrapper::setDiagramPositionIncludingAxes( const awt::Rectangle& rPositionRect ) throw (uno::RuntimeException) { ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); DiagramHelper::setDiagramPositioning( m_spChart2ModelContact->getChartModel(), rPositionRect ); uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); if( xDiaProps.is() ) xDiaProps->setPropertyValue(C2U("PosSizeExcludeAxes"), uno::makeAny(false) ); } awt::Rectangle SAL_CALL DiagramWrapper::calculateDiagramPositionIncludingAxes( ) throw (uno::RuntimeException) { return m_spChart2ModelContact->GetDiagramRectangleIncludingAxes(); } void SAL_CALL DiagramWrapper::setDiagramPositionIncludingAxesAndAxisTitles( const awt::Rectangle& rPositionRect ) throw (uno::RuntimeException) { ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); awt::Rectangle aRect( m_spChart2ModelContact->SubstractAxisTitleSizes(rPositionRect) ); DiagramWrapper::setDiagramPositionIncludingAxes( aRect ); } ::com::sun::star::awt::Rectangle SAL_CALL DiagramWrapper::calculateDiagramPositionIncludingAxesAndAxisTitles( ) throw (::com::sun::star::uno::RuntimeException) { return m_spChart2ModelContact->GetDiagramRectangleIncludingTitle(); } // ____ XAxisSupplier ____ Reference< XAxis > SAL_CALL DiagramWrapper::getAxis( sal_Int32 nDimensionIndex ) throw (uno::RuntimeException) { Reference< XAxis > xAxis; if(!nDimensionIndex) { if( !m_xXAxis.is() ) m_xXAxis = new AxisWrapper( AxisWrapper::X_AXIS, m_spChart2ModelContact ); xAxis = m_xXAxis; } else if(1==nDimensionIndex) { if( !m_xYAxis.is() ) m_xYAxis = new AxisWrapper( AxisWrapper::Y_AXIS, m_spChart2ModelContact ); xAxis = m_xYAxis; } else if(2==nDimensionIndex) { if( !m_xZAxis.is() ) m_xZAxis = new AxisWrapper( AxisWrapper::Z_AXIS, m_spChart2ModelContact ); xAxis = m_xZAxis; } return xAxis; } Reference< XAxis > SAL_CALL DiagramWrapper::getSecondaryAxis( sal_Int32 nDimensionIndex ) throw (uno::RuntimeException) { Reference< XAxis > xAxis; if(!nDimensionIndex) { if( !m_xSecondXAxis.is() ) m_xSecondXAxis = new AxisWrapper( AxisWrapper::SECOND_X_AXIS, m_spChart2ModelContact ); xAxis = m_xSecondXAxis; } else if(1==nDimensionIndex) { if( !m_xSecondYAxis.is() ) m_xSecondYAxis = new AxisWrapper( AxisWrapper::SECOND_Y_AXIS, m_spChart2ModelContact ); xAxis = m_xSecondYAxis; } return xAxis; } // ____ XAxisZSupplier ____ Reference< drawing::XShape > SAL_CALL DiagramWrapper::getZAxisTitle() throw (uno::RuntimeException) { Reference< drawing::XShape > xRet; Reference< XAxis > xAxis( getAxis(2) ); if( xAxis.is() ) xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getZMainGrid() throw (uno::RuntimeException) { Reference< beans::XPropertySet > xRet; Reference< XAxis > xAxis( getAxis(2) ); if( xAxis.is() ) xRet = xAxis->getMajorGrid(); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getZHelpGrid() throw (uno::RuntimeException) { Reference< beans::XPropertySet > xRet; Reference< XAxis > xAxis( getAxis(2) ); if( xAxis.is() ) xRet = xAxis->getMinorGrid(); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getZAxis() throw (uno::RuntimeException) { if( ! m_xZAxis.is()) m_xZAxis = new AxisWrapper( AxisWrapper::Z_AXIS, m_spChart2ModelContact ); return Reference< beans::XPropertySet >( m_xZAxis, uno::UNO_QUERY ); } // ____ XTwoAxisXSupplier ____ Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getSecondaryXAxis() throw (uno::RuntimeException) { if( ! m_xSecondXAxis.is()) m_xSecondXAxis = new AxisWrapper( AxisWrapper::SECOND_X_AXIS, m_spChart2ModelContact ); return Reference< beans::XPropertySet >( m_xSecondXAxis, uno::UNO_QUERY ); } // ____ XAxisXSupplier (base of XTwoAxisXSupplier) ____ Reference< drawing::XShape > SAL_CALL DiagramWrapper::getXAxisTitle() throw (uno::RuntimeException) { Reference< drawing::XShape > xRet; Reference< XAxis > xAxis( getAxis(0) ); if( xAxis.is() ) xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getXAxis() throw (uno::RuntimeException) { if( ! m_xXAxis.is()) m_xXAxis = new AxisWrapper( AxisWrapper::X_AXIS, m_spChart2ModelContact ); return Reference< beans::XPropertySet >( m_xXAxis, uno::UNO_QUERY ); } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getXMainGrid() throw (uno::RuntimeException) { Reference< beans::XPropertySet > xRet; Reference< XAxis > xAxis( getAxis(0) ); if( xAxis.is() ) xRet = xAxis->getMajorGrid(); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getXHelpGrid() throw (uno::RuntimeException) { Reference< beans::XPropertySet > xRet; Reference< XAxis > xAxis( getAxis(0) ); if( xAxis.is() ) xRet = xAxis->getMinorGrid(); return xRet; } // ____ XTwoAxisYSupplier ____ Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getSecondaryYAxis() throw (uno::RuntimeException) { if( ! m_xSecondYAxis.is()) m_xSecondYAxis = new AxisWrapper( AxisWrapper::SECOND_Y_AXIS, m_spChart2ModelContact ); return Reference< beans::XPropertySet >( m_xSecondYAxis, uno::UNO_QUERY ); } // ____ XAxisYSupplier (base of XTwoAxisYSupplier) ____ Reference< drawing::XShape > SAL_CALL DiagramWrapper::getYAxisTitle() throw (uno::RuntimeException) { Reference< drawing::XShape > xRet; Reference< XAxis > xAxis( getAxis(1) ); if( xAxis.is() ) xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getYAxis() throw (uno::RuntimeException) { if( ! m_xYAxis.is()) m_xYAxis = new AxisWrapper( AxisWrapper::Y_AXIS, m_spChart2ModelContact ); return Reference< beans::XPropertySet >( m_xYAxis, uno::UNO_QUERY ); } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getYMainGrid() throw (uno::RuntimeException) { Reference< beans::XPropertySet > xRet; Reference< XAxis > xAxis( getAxis(1) ); if( xAxis.is() ) xRet = xAxis->getMajorGrid(); return xRet; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getYHelpGrid() throw (uno::RuntimeException) { Reference< beans::XPropertySet > xRet; Reference< XAxis > xAxis( getAxis(1) ); if( xAxis.is() ) xRet = xAxis->getMinorGrid(); return xRet; } // ____ XSecondAxisTitleSupplier ____ Reference< drawing::XShape > SAL_CALL DiagramWrapper::getSecondXAxisTitle() throw (uno::RuntimeException) { Reference< drawing::XShape > xRet; Reference< XAxis > xAxis( getSecondaryAxis(0) ); if( xAxis.is() ) xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); return xRet; } Reference< drawing::XShape > SAL_CALL DiagramWrapper::getSecondYAxisTitle() throw (uno::RuntimeException) { Reference< drawing::XShape > xRet; Reference< XAxis > xAxis( getSecondaryAxis(1) ); if( xAxis.is() ) xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); return xRet; } // ____ XStatisticDisplay ____ Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getUpBar() throw (uno::RuntimeException) { if( !m_xUpBarWrapper.is() ) { m_xUpBarWrapper = new UpDownBarWrapper( true, m_spChart2ModelContact ); } return m_xUpBarWrapper; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getDownBar() throw (uno::RuntimeException) { if( !m_xDownBarWrapper.is() ) { m_xDownBarWrapper = new UpDownBarWrapper( false, m_spChart2ModelContact ); } return m_xDownBarWrapper; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getMinMaxLine() throw (uno::RuntimeException) { if( !m_xMinMaxLineWrapper.is() ) { m_xMinMaxLineWrapper = new MinMaxLineWrapper( m_spChart2ModelContact ); } return m_xMinMaxLineWrapper; } // ____ X3DDisplay ____ Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getWall() throw (uno::RuntimeException) { if( !m_xWall.is() ) { m_xWall = new WallFloorWrapper( true, m_spChart2ModelContact ); } return m_xWall; } Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getFloor() throw (uno::RuntimeException) { if( !m_xFloor.is() ) { m_xFloor = new WallFloorWrapper( false, m_spChart2ModelContact ); } return m_xFloor; } // ____ X3DDefaultSetter ____ void SAL_CALL DiagramWrapper::set3DSettingsToDefault() throw (uno::RuntimeException) { Reference< X3DDefaultSetter > x3DDefaultSetter( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); if( x3DDefaultSetter.is() ) x3DDefaultSetter->set3DSettingsToDefault(); } void SAL_CALL DiagramWrapper::setDefaultRotation() throw (uno::RuntimeException) { Reference< X3DDefaultSetter > x3DDefaultSetter( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); if( x3DDefaultSetter.is() ) x3DDefaultSetter->setDefaultRotation(); } void SAL_CALL DiagramWrapper::setDefaultIllumination() throw (uno::RuntimeException) { Reference< X3DDefaultSetter > x3DDefaultSetter( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); if( x3DDefaultSetter.is() ) x3DDefaultSetter->setDefaultIllumination(); } // ____ XComponent ____ void SAL_CALL DiagramWrapper::dispose() throw (uno::RuntimeException) { m_aEventListenerContainer.disposeAndClear( lang::EventObject( static_cast< ::cppu::OWeakObject* >( this ))); // /-- MutexGuard aGuard( GetMutex()); DisposeHelper::DisposeAndClear( m_xXAxis ); DisposeHelper::DisposeAndClear( m_xYAxis ); DisposeHelper::DisposeAndClear( m_xZAxis ); DisposeHelper::DisposeAndClear( m_xSecondXAxis ); DisposeHelper::DisposeAndClear( m_xSecondYAxis ); DisposeHelper::DisposeAndClear( m_xWall ); DisposeHelper::DisposeAndClear( m_xFloor ); DisposeHelper::DisposeAndClear( m_xMinMaxLineWrapper ); DisposeHelper::DisposeAndClear( m_xUpBarWrapper ); DisposeHelper::DisposeAndClear( m_xDownBarWrapper ); clearWrappedPropertySet(); // \-- } void SAL_CALL DiagramWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) throw (uno::RuntimeException) { m_aEventListenerContainer.addInterface( xListener ); } void SAL_CALL DiagramWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) throw (uno::RuntimeException) { m_aEventListenerContainer.removeInterface( aListener ); } // ____ XEventListener ____ // void SAL_CALL DiagramWrapper::disposing( const lang::EventObject& Source ) // throw (uno::RuntimeException) // { // } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_DATAROW_SOURCE class WrappedDataRowSourceProperty : public WrappedProperty { public: WrappedDataRowSourceProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedDataRowSourceProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; mutable Any m_aOuterValue; }; WrappedDataRowSourceProperty::WrappedDataRowSourceProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(C2U("DataRowSource"),OUString()) , m_spChart2ModelContact( spChart2ModelContact ) , m_aOuterValue() { m_aOuterValue = WrappedDataRowSourceProperty::getPropertyDefault( 0 ); } WrappedDataRowSourceProperty::~WrappedDataRowSourceProperty() { } void WrappedDataRowSourceProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { ::com::sun::star::chart::ChartDataRowSource eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource_ROWS; if( ! (rOuterValue >>= eChartDataRowSource) ) { sal_Int32 nNew = ::com::sun::star::chart::ChartDataRowSource_ROWS; if( !(rOuterValue >>= nNew) ) throw lang::IllegalArgumentException( C2U("Property DataRowSource requires ::com::sun::star::chart::ChartDataRowSource value"), 0, 0 ); else eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource(nNew); } m_aOuterValue = rOuterValue; bool bNewUseColumns = eChartDataRowSource == ::com::sun::star::chart::ChartDataRowSource_COLUMNS; ::rtl::OUString aRangeString; bool bUseColumns = true; bool bFirstCellAsLabel = true; bool bHasCategories = true; uno::Sequence< sal_Int32 > aSequenceMapping; if( DataSourceHelper::detectRangeSegmentation( m_spChart2ModelContact->getChartModel(), aRangeString, aSequenceMapping, bUseColumns , bFirstCellAsLabel, bHasCategories ) ) { if( bUseColumns != bNewUseColumns ) { aSequenceMapping.realloc(0); DataSourceHelper::setRangeSegmentation( m_spChart2ModelContact->getChartModel(), aSequenceMapping, bNewUseColumns , bHasCategories, bFirstCellAsLabel ); } } } Any WrappedDataRowSourceProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { ::rtl::OUString aRangeString; bool bUseColumns = true; bool bFirstCellAsLabel = true; bool bHasCategories = true; uno::Sequence< sal_Int32 > aSequenceMapping; if( DataSourceHelper::detectRangeSegmentation( m_spChart2ModelContact->getChartModel(), aRangeString, aSequenceMapping, bUseColumns , bFirstCellAsLabel, bHasCategories ) ) { ::com::sun::star::chart::ChartDataRowSource eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource_ROWS; if(bUseColumns) eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource_COLUMNS; m_aOuterValue <<= eChartDataRowSource; } return m_aOuterValue; } Any WrappedDataRowSourceProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; aRet <<= ::com::sun::star::chart::ChartDataRowSource_COLUMNS; return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_STACKED //PROP_DIAGRAM_DEEP //PROP_DIAGRAM_PERCENT_STACKED class WrappedStackingProperty : public WrappedProperty { public: WrappedStackingProperty( StackMode eStackMode, ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedStackingProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); protected: //methods bool detectInnerValue( StackMode& eInnerStackMode ) const; private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; const StackMode m_eStackMode; mutable Any m_aOuterValue; }; WrappedStackingProperty::WrappedStackingProperty( StackMode eStackMode, ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(OUString(),OUString()) , m_spChart2ModelContact( spChart2ModelContact ) , m_eStackMode( eStackMode ) , m_aOuterValue() { switch( m_eStackMode ) { case StackMode_Y_STACKED: m_aOuterName = C2U( "Stacked" ); break; case StackMode_Y_STACKED_PERCENT: m_aOuterName = C2U( "Percent" ); break; case StackMode_Z_STACKED: m_aOuterName = C2U( "Deep" ); break; default: OSL_ENSURE( false, "unexpected stack mode" ); break; } } WrappedStackingProperty::~WrappedStackingProperty() { } bool WrappedStackingProperty::detectInnerValue( StackMode& eStackMode ) const { bool bHasDetectableInnerValue = false; bool bIsAmbiguous = false; eStackMode = DiagramHelper::getStackMode( m_spChart2ModelContact->getChart2Diagram() , bHasDetectableInnerValue, bIsAmbiguous ); return bHasDetectableInnerValue; } void WrappedStackingProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { sal_Bool bNewValue = false; if( ! (rOuterValue >>= bNewValue) ) throw lang::IllegalArgumentException( C2U("Stacking Properties require boolean values"), 0, 0 ); StackMode eInnerStackMode; bool bHasDetectableInnerValue = detectInnerValue( eInnerStackMode ); if( !bHasDetectableInnerValue ) { m_aOuterValue = rOuterValue; return; } if( bNewValue && eInnerStackMode == m_eStackMode ) return; if( !bNewValue && eInnerStackMode != m_eStackMode ) return; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( xDiagram.is() ) { StackMode eNewStackMode = bNewValue ? m_eStackMode : StackMode_NONE; DiagramHelper::setStackMode( xDiagram, eNewStackMode ); } } Any WrappedStackingProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { StackMode eInnerStackMode; if( detectInnerValue( eInnerStackMode ) ) { sal_Bool bValue = (eInnerStackMode == m_eStackMode); Any aAny; aAny <<= bValue; return aAny; } return m_aOuterValue; } Any WrappedStackingProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; aRet <<= sal_Bool( sal_False ); return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_THREE_D class WrappedDim3DProperty : public WrappedProperty { public: WrappedDim3DProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedDim3DProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; mutable Any m_aOuterValue; }; WrappedDim3DProperty::WrappedDim3DProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(C2U("Dim3D"),OUString()) , m_spChart2ModelContact( spChart2ModelContact ) , m_aOuterValue() { m_aOuterValue = WrappedDim3DProperty::getPropertyDefault( 0 ); } WrappedDim3DProperty::~WrappedDim3DProperty() { } void WrappedDim3DProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { sal_Bool bNew3D = false; if( ! (rOuterValue >>= bNew3D) ) throw lang::IllegalArgumentException( C2U("Property Dim3D requires boolean value"), 0, 0 ); m_aOuterValue = rOuterValue; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( !xDiagram.is() ) return; sal_Bool bOld3D = DiagramHelper::getDimension( xDiagram ) == 3; if( bOld3D != bNew3D ) DiagramHelper::setDimension( xDiagram, bNew3D ? 3 : 2 ); } Any WrappedDim3DProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( xDiagram.is() ) { sal_Bool b3D = DiagramHelper::getDimension( xDiagram ) == 3; m_aOuterValue <<= b3D; } return m_aOuterValue; } Any WrappedDim3DProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; aRet <<= sal_Bool( sal_False ); return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_VERTICAL class WrappedVerticalProperty : public WrappedProperty { public: WrappedVerticalProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedVerticalProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; mutable Any m_aOuterValue; }; WrappedVerticalProperty::WrappedVerticalProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(C2U("Vertical"),OUString()) , m_spChart2ModelContact( spChart2ModelContact ) , m_aOuterValue() { m_aOuterValue = WrappedVerticalProperty::getPropertyDefault( 0 ); } WrappedVerticalProperty::~WrappedVerticalProperty() { } void WrappedVerticalProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { sal_Bool bNewVertical = false; if( ! (rOuterValue >>= bNewVertical) ) throw lang::IllegalArgumentException( C2U("Property Vertical requires boolean value"), 0, 0 ); m_aOuterValue = rOuterValue; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( !xDiagram.is() ) return; bool bFound = false; bool bAmbiguous = false; sal_Bool bOldVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); if( bFound && ( bOldVertical != bNewVertical || bAmbiguous ) ) DiagramHelper::setVertical( xDiagram, bNewVertical ); } Any WrappedVerticalProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { bool bFound = false; bool bAmbiguous = false; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( xDiagram.is() ) { sal_Bool bVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); if( bFound ) m_aOuterValue <<= bVertical; } return m_aOuterValue; } Any WrappedVerticalProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; aRet <<= sal_Bool( sal_False ); return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_NUMBER_OF_LINES class WrappedNumberOfLinesProperty : public WrappedProperty { public: WrappedNumberOfLinesProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedNumberOfLinesProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); protected: //methods bool detectInnerValue( uno::Any& rInnerValue ) const; private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; mutable Any m_aOuterValue; }; WrappedNumberOfLinesProperty::WrappedNumberOfLinesProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(C2U("NumberOfLines"),OUString()) , m_spChart2ModelContact( spChart2ModelContact ) , m_aOuterValue( this->getPropertyDefault(0) ) { } WrappedNumberOfLinesProperty::~WrappedNumberOfLinesProperty() { } bool WrappedNumberOfLinesProperty::detectInnerValue( uno::Any& rInnerValue ) const { sal_Int32 nNumberOfLines = 0; bool bHasDetectableInnerValue = false; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); uno::Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); if( xDiagram.is() && xChartDoc.is() ) { ::std::vector< uno::Reference< chart2::XDataSeries > > aSeriesVector( DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); if( aSeriesVector.size() > 0 ) { Reference< lang::XMultiServiceFactory > xFact( xChartDoc->getChartTypeManager(), uno::UNO_QUERY ); DiagramHelper::tTemplateWithServiceName aTemplateAndService = DiagramHelper::getTemplateForDiagram( xDiagram, xFact ); if( aTemplateAndService.second.equals( C2U( "com.sun.star.chart2.template.ColumnWithLine" ) ) ) { try { uno::Reference< beans::XPropertySet > xProp( aTemplateAndService.first, uno::UNO_QUERY ); xProp->getPropertyValue( m_aOuterName ) >>= nNumberOfLines; bHasDetectableInnerValue = true; } catch( uno::Exception & ex ) { ASSERT_EXCEPTION( ex ); } } } } if(bHasDetectableInnerValue) rInnerValue = uno::makeAny(nNumberOfLines); return bHasDetectableInnerValue; } void WrappedNumberOfLinesProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { sal_Int32 nNewValue; if( ! (rOuterValue >>= nNewValue) ) throw lang::IllegalArgumentException( C2U("property NumberOfLines requires sal_Int32 value"), 0, 0 ); m_aOuterValue = rOuterValue; uno::Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); sal_Int32 nDimension = ::chart::DiagramHelper::getDimension( xDiagram ); if( xChartDoc.is() && xDiagram.is() && nDimension == 2 ) { Reference< lang::XMultiServiceFactory > xFact( xChartDoc->getChartTypeManager(), uno::UNO_QUERY ); DiagramHelper::tTemplateWithServiceName aTemplateAndService = DiagramHelper::getTemplateForDiagram( xDiagram, xFact ); uno::Reference< chart2::XChartTypeTemplate > xTemplate(0); if( aTemplateAndService.second.equals( C2U( "com.sun.star.chart2.template.ColumnWithLine" ) ) ) { if( nNewValue != 0 ) { xTemplate.set( aTemplateAndService.first ); try { sal_Int32 nOldValue = 0; uno::Reference< beans::XPropertySet > xProp( xTemplate, uno::UNO_QUERY ); xProp->getPropertyValue( m_aOuterName ) >>= nOldValue; if( nOldValue == nNewValue ) return; } catch( uno::Exception & ex ) { ASSERT_EXCEPTION( ex ); } } else { xTemplate.set( xFact->createInstance( C2U( "com.sun.star.chart2.template.Column" ) ), uno::UNO_QUERY ); } } else if( aTemplateAndService.second.equals( C2U( "com.sun.star.chart2.template.Column" ) ) ) { if( nNewValue == 0 ) return; xTemplate.set( xFact->createInstance( C2U( "com.sun.star.chart2.template.ColumnWithLine" ) ), uno::UNO_QUERY ); } if(xTemplate.is()) { try { // /-- locked controllers ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); uno::Reference< beans::XPropertySet > xProp( xTemplate, uno::UNO_QUERY ); xProp->setPropertyValue( C2U( "NumberOfLines" ), uno::makeAny(nNewValue) ); xTemplate->changeDiagram( xDiagram ); // \-- locked controllers } catch( uno::Exception & ex ) { ASSERT_EXCEPTION( ex ); } } } } Any WrappedNumberOfLinesProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; if( !detectInnerValue( aRet ) ) aRet = m_aOuterValue; return aRet; } Any WrappedNumberOfLinesProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; aRet <<= sal_Int32( 0 ); return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_ATTRIBUTED_DATA_POINTS class WrappedAttributedDataPointsProperty : public WrappedProperty { public: WrappedAttributedDataPointsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedAttributedDataPointsProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; mutable Any m_aOuterValue; }; WrappedAttributedDataPointsProperty::WrappedAttributedDataPointsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(C2U("AttributedDataPoints"),OUString()) , m_spChart2ModelContact( spChart2ModelContact ) , m_aOuterValue() { m_aOuterValue = WrappedAttributedDataPointsProperty::getPropertyDefault( 0 ); } WrappedAttributedDataPointsProperty::~WrappedAttributedDataPointsProperty() { } void WrappedAttributedDataPointsProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { uno::Sequence< uno::Sequence< sal_Int32 > > aNewValue; if( ! (rOuterValue >>= aNewValue) ) throw lang::IllegalArgumentException( C2U("Property AttributedDataPoints requires value of type uno::Sequence< uno::Sequence< sal_Int32 > >"), 0, 0 ); m_aOuterValue = rOuterValue; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); Reference< beans::XPropertySet > xDiaProp( xDiagram, uno::UNO_QUERY ); if( xDiagram.is() && xDiaProp.is()) { ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector( ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); uno::Sequence< uno::Sequence< sal_Int32 > > aResult( aSeriesVector.size() ); ::std::vector< Reference< chart2::XDataSeries > >::const_iterator aIt = aSeriesVector.begin(); sal_Int32 i = 0; for( ; aIt != aSeriesVector.end(); ++aIt, ++i ) { Reference< beans::XPropertySet > xProp( *aIt, uno::UNO_QUERY ); if( xProp.is()) { uno::Any aVal; if( i < aNewValue.getLength() ) aVal <<= aNewValue[i]; else { //set empty sequence uno::Sequence< sal_Int32 > aSeq; aVal <<= aSeq; } xProp->setPropertyValue( C2U( "AttributedDataPoints" ), aVal ); } } } } Any WrappedAttributedDataPointsProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); Reference< beans::XPropertySet > xDiaProp( xDiagram, uno::UNO_QUERY ); if( xDiagram.is() && xDiaProp.is()) { ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector( ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); uno::Sequence< uno::Sequence< sal_Int32 > > aResult( aSeriesVector.size() ); ::std::vector< Reference< chart2::XDataSeries > >::const_iterator aIt = aSeriesVector.begin(); sal_Int32 i = 0; for( ; aIt != aSeriesVector.end(); ++aIt, ++i ) { Reference< beans::XPropertySet > xProp( *aIt, uno::UNO_QUERY ); if( xProp.is()) { uno::Any aVal( xProp->getPropertyValue( C2U( "AttributedDataPoints" ))); uno::Sequence< sal_Int32 > aSeq; if( aVal >>= aSeq ) aResult[ i ] = aSeq; } } m_aOuterValue <<= aResult; } return m_aOuterValue; } Any WrappedAttributedDataPointsProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; uno::Sequence< uno::Sequence< sal_Int32 > > aSeq; aRet <<= aSeq; return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_SOLIDTYPE class WrappedSolidTypeProperty : public WrappedProperty { public: WrappedSolidTypeProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedSolidTypeProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; mutable Any m_aOuterValue; }; WrappedSolidTypeProperty::WrappedSolidTypeProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty( C2U( "SolidType" ), OUString() ) , m_spChart2ModelContact( spChart2ModelContact ) , m_aOuterValue() { m_aOuterValue = WrappedSolidTypeProperty::getPropertyDefault( 0 ); } WrappedSolidTypeProperty::~WrappedSolidTypeProperty() { } void WrappedSolidTypeProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { sal_Int32 nNewSolidType = ::com::sun::star::chart::ChartSolidType::RECTANGULAR_SOLID; if( ! (rOuterValue >>= nNewSolidType) ) throw lang::IllegalArgumentException( C2U("Property SolidType requires integer value"), 0, 0 ); m_aOuterValue = rOuterValue; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( !xDiagram.is() ) return; bool bFound = false; bool bAmbiguous = false; sal_Int32 nOldSolidType = DiagramHelper::getGeometry3D( xDiagram, bFound, bAmbiguous ); if( bFound && ( nOldSolidType != nNewSolidType || bAmbiguous ) ) DiagramHelper::setGeometry3D( xDiagram, nNewSolidType ); } Any WrappedSolidTypeProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { bool bFound = false; bool bAmbiguous = false; Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); if( xDiagram.is() ) { sal_Int32 nGeometry = DiagramHelper::getGeometry3D( xDiagram, bFound, bAmbiguous ); if( bFound ) m_aOuterValue <<= nGeometry; } return m_aOuterValue; } Any WrappedSolidTypeProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { return uno::makeAny( ::com::sun::star::chart::ChartSolidType::RECTANGULAR_SOLID ); } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- class WrappedAutomaticSizeProperty : public WrappedProperty { public: WrappedAutomaticSizeProperty(); virtual ~WrappedAutomaticSizeProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); }; WrappedAutomaticSizeProperty::WrappedAutomaticSizeProperty() : WrappedProperty( C2U( "AutomaticSize" ), OUString() ) { } WrappedAutomaticSizeProperty::~WrappedAutomaticSizeProperty() { } void WrappedAutomaticSizeProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { if( xInnerPropertySet.is() ) { bool bNewValue = true; if( ! (rOuterValue >>= bNewValue) ) throw lang::IllegalArgumentException( C2U("Property AutomaticSize requires value of type boolean"), 0, 0 ); try { if( bNewValue ) { Any aRelativeSize( xInnerPropertySet->getPropertyValue( C2U( "RelativeSize" ) ) ); if( aRelativeSize.hasValue() ) xInnerPropertySet->setPropertyValue( C2U( "RelativeSize" ), Any() ); } } catch( uno::Exception & ex ) { ASSERT_EXCEPTION( ex ); } } } Any WrappedAutomaticSizeProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet( getPropertyDefault( Reference< beans::XPropertyState >( xInnerPropertySet, uno::UNO_QUERY ) ) ); if( xInnerPropertySet.is() ) { Any aRelativeSize( xInnerPropertySet->getPropertyValue( C2U( "RelativeSize" ) ) ); if( !aRelativeSize.hasValue() ) aRet <<= true; } return aRet; } Any WrappedAutomaticSizeProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) { Any aRet; aRet <<= false; return aRet; } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //PROP_DIAGRAM_INCLUDE_HIDDEN_CELLS class WrappedIncludeHiddenCellsProperty : public WrappedProperty { public: WrappedIncludeHiddenCellsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); virtual ~WrappedIncludeHiddenCellsProperty(); virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); private: //member ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; }; WrappedIncludeHiddenCellsProperty::WrappedIncludeHiddenCellsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : WrappedProperty(C2U("IncludeHiddenCells"),C2U("IncludeHiddenCells")) , m_spChart2ModelContact( spChart2ModelContact ) { } WrappedIncludeHiddenCellsProperty::~WrappedIncludeHiddenCellsProperty() { } void WrappedIncludeHiddenCellsProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) { sal_Bool bNewValue = false; if( ! (rOuterValue >>= bNewValue) ) throw lang::IllegalArgumentException( C2U("Property Dim3D requires boolean value"), 0, 0 ); ChartModelHelper::setIncludeHiddenCells( bNewValue, m_spChart2ModelContact->getChartModel() ); } //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- // ____ XDiagramProvider ____ Reference< chart2::XDiagram > SAL_CALL DiagramWrapper::getDiagram() throw (uno::RuntimeException) { return m_spChart2ModelContact->getChart2Diagram(); } void SAL_CALL DiagramWrapper::setDiagram( const Reference< chart2::XDiagram >& /*xDiagram*/ ) throw (uno::RuntimeException) { //@todo: remove this method from interface DBG_ERROR("DiagramWrapper::setDiagram is not implemented, should be removed and not be called" ); } // ================================================================================ Reference< beans::XPropertySet > DiagramWrapper::getInnerPropertySet() { return Reference< beans::XPropertySet >( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); } const Sequence< beans::Property >& DiagramWrapper::getPropertySequence() { return *StaticDiagramWrapperPropertyArray::get(); } const std::vector< WrappedProperty* > DiagramWrapper::createWrappedProperties() { ::std::vector< ::chart::WrappedProperty* > aWrappedProperties; WrappedAxisAndGridExistenceProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); WrappedAxisTitleExistenceProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); WrappedAxisLabelExistenceProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); WrappedSceneProperty::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); WrappedIgnoreProperties::addIgnoreFillProperties( aWrappedProperties ); WrappedIgnoreProperties::addIgnoreLineProperties( aWrappedProperties ); WrappedStatisticProperties::addWrappedPropertiesForDiagram( aWrappedProperties, m_spChart2ModelContact ); WrappedSymbolProperties::addWrappedPropertiesForDiagram( aWrappedProperties, m_spChart2ModelContact ); WrappedDataCaptionProperties::addWrappedPropertiesForDiagram( aWrappedProperties, m_spChart2ModelContact ); WrappedSplineProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); WrappedStockProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); WrappedAutomaticPositionProperties::addWrappedProperties( aWrappedProperties ); aWrappedProperties.push_back( new WrappedDataRowSourceProperty( m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedStackingProperty( StackMode_Y_STACKED,m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedStackingProperty( StackMode_Y_STACKED_PERCENT, m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedStackingProperty( StackMode_Z_STACKED, m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedDim3DProperty( m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedVerticalProperty( m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedNumberOfLinesProperty( m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedAttributedDataPointsProperty( m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedProperty( C2U( "StackedBarsConnected" ), C2U( "ConnectBars" ) ) ); aWrappedProperties.push_back( new WrappedSolidTypeProperty( m_spChart2ModelContact ) ); aWrappedProperties.push_back( new WrappedAutomaticSizeProperty() ); aWrappedProperties.push_back( new WrappedIncludeHiddenCellsProperty( m_spChart2ModelContact ) ); return aWrappedProperties; } // ================================================================================ uno::Sequence< OUString > DiagramWrapper::getSupportedServiceNames_Static() { uno::Sequence< OUString > aServices( 8 ); aServices[ 0 ] = C2U( "com.sun.star.chart.Diagram" ); aServices[ 1 ] = C2U( "com.sun.star.xml.UserDefinedAttributeSupplier" ); aServices[ 2 ] = C2U( "com.sun.star.chart.StackableDiagram" ); aServices[ 3 ] = C2U( "com.sun.star.chart.ChartAxisXSupplier" ); aServices[ 4 ] = C2U( "com.sun.star.chart.ChartAxisYSupplier" ); aServices[ 5 ] = C2U( "com.sun.star.chart.ChartAxisZSupplier" ); aServices[ 6 ] = C2U( "com.sun.star.chart.ChartTwoAxisXSupplier" ); aServices[ 7 ] = C2U( "com.sun.star.chart.ChartTwoAxisYSupplier" ); // aServices[ x ] = C2U( "com.sun.star.beans.PropertySet" ); // aServices[ x ] = C2U( "com.sun.star.drawing.FillProperties" ); // aServices[ x ] = C2U( "com.sun.star.drawing.LineProperties" ); return aServices; } // implement XServiceInfo methods basing upon getSupportedServiceNames_Static APPHELPER_XSERVICEINFO_IMPL( DiagramWrapper, lcl_aServiceName ); } // namespace wrapper } // namespace chart