LCOV - code coverage report
Current view: top level - libreoffice/chart2/source/controller/dialogs - ObjectNameProvider.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 394 0.0 %
Date: 2012-12-17 Functions: 0 15 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include "ObjectNameProvider.hxx"
      22             : #include "ResId.hxx"
      23             : #include "Strings.hrc"
      24             : #include "macros.hxx"
      25             : #include "AxisHelper.hxx"
      26             : #include "ChartModelHelper.hxx"
      27             : #include "DiagramHelper.hxx"
      28             : #include "DataSeriesHelper.hxx"
      29             : #include "TitleHelper.hxx"
      30             : #include "AxisIndexDefines.hxx"
      31             : #include "ExplicitCategoriesProvider.hxx"
      32             : #include "CommonConverters.hxx"
      33             : #include "NumberFormatterWrapper.hxx"
      34             : #include "RegressionCurveHelper.hxx"
      35             : #include <rtl/math.hxx>
      36             : #include <tools/string.hxx>
      37             : 
      38             : #include <com/sun/star/chart2/XTitle.hpp>
      39             : #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
      40             : 
      41             : //.............................................................................
      42             : namespace chart
      43             : {
      44             : //.............................................................................
      45             : using namespace ::com::sun::star;
      46             : using namespace ::com::sun::star::chart2;
      47             : using ::com::sun::star::uno::Reference;
      48             : using ::com::sun::star::uno::Sequence;
      49             : using ::com::sun::star::uno::Any;
      50             : 
      51             : namespace
      52             : {
      53             : 
      54           0 : OUString lcl_getDataSeriesName( const OUString& rObjectCID, const Reference< frame::XModel >& xChartModel )
      55             : {
      56           0 :     OUString aRet;
      57             : 
      58           0 :     Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
      59           0 :     Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ), uno::UNO_QUERY );
      60           0 :     if( xDiagram.is() && xSeries.is() )
      61             :     {
      62           0 :         Reference< XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) );
      63           0 :         if( xChartType.is() )
      64             :         {
      65             :             aRet = ::chart::DataSeriesHelper::getDataSeriesLabel(
      66           0 :                     xSeries, xChartType->getRoleOfSequenceForSeriesLabel() ) ;
      67           0 :         }
      68             :     }
      69             : 
      70           0 :     return aRet;
      71             : }
      72             : 
      73           0 : OUString lcl_getFullSeriesName( const OUString& rObjectCID, const Reference< frame::XModel >& xChartModel )
      74             : {
      75           0 :     OUString aRet = String(SchResId(STR_TIP_DATASERIES));
      76           0 :     OUString aWildcard( "%SERIESNAME" );
      77           0 :     sal_Int32 nIndex = aRet.indexOf( aWildcard );
      78           0 :     if( nIndex != -1 )
      79           0 :         aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), lcl_getDataSeriesName( rObjectCID, xChartModel ) );
      80           0 :     return aRet;
      81             : }
      82             : 
      83           0 : void lcl_addText( OUString& rOut, const OUString& rSeparator, const OUString& rNext )
      84             : {
      85           0 :     if( !(rOut.isEmpty() || rNext.isEmpty()) )
      86           0 :         rOut+=rSeparator;
      87           0 :     if( !rNext.isEmpty() )
      88           0 :         rOut+=rNext;
      89           0 : }
      90             : 
      91           0 : OUString lcl_getDataPointValueText( const Reference< XDataSeries >& xSeries, sal_Int32 nPointIndex,
      92             :                                     const Reference< XCoordinateSystem >& xCooSys,
      93             :                                     const Reference< frame::XModel >& xChartModel )
      94             : {
      95             : 
      96           0 :     OUString aRet;
      97             : 
      98             :     Reference<data::XDataSource> xDataSource(
      99           0 :             uno::Reference<data::XDataSource>( xSeries, uno::UNO_QUERY ) );
     100           0 :     if(!xDataSource.is())
     101             :         return aRet;
     102             : 
     103           0 :     Sequence< Reference< data::XLabeledDataSequence > > aDataSequences( xDataSource->getDataSequences() );
     104             : 
     105           0 :     OUString aX, aY, aY_Min, aY_Max, aY_First, aY_Last, a_Size;
     106           0 :     double fValue = 0;
     107             : 
     108           0 :     uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( xChartModel, uno::UNO_QUERY );
     109           0 :     NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier );
     110           0 :     sal_Int32 nLabelColor = 0;//dummy
     111             :     bool bColorChanged;//dummy
     112             : 
     113           0 :     for(sal_Int32 nN = aDataSequences.getLength();nN--;)
     114             :     {
     115           0 :         uno::Reference<data::XDataSequence>  xDataSequence( aDataSequences[nN]->getValues());
     116           0 :         if( !xDataSequence.is() )
     117           0 :             continue;
     118           0 :         Sequence< Any > aData( xDataSequence->getData() );
     119           0 :         if( nPointIndex >= aData.getLength() )
     120           0 :             continue;
     121           0 :         uno::Reference<beans::XPropertySet> xProp(xDataSequence, uno::UNO_QUERY );
     122           0 :         if( xProp.is())
     123             :         {
     124             :             try
     125             :             {
     126           0 :                 uno::Any aARole = xProp->getPropertyValue( "Role" );
     127           0 :                 OUString aRole;
     128           0 :                 aARole >>= aRole;
     129             : 
     130           0 :                 if( aRole == "values-x" )
     131             :                 {
     132           0 :                     aData[nPointIndex]>>= fValue;
     133           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     134           0 :                     aX = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     135             :                 }
     136           0 :                 else if( aRole == "values-y")
     137             :                 {
     138           0 :                     aData[nPointIndex]>>= fValue;
     139           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     140           0 :                     aY = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     141             :                 }
     142           0 :                 else if( aRole == "values-first" )
     143             :                 {
     144           0 :                     aData[nPointIndex]>>= fValue;
     145           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     146           0 :                     aY_First = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     147             :                 }
     148           0 :                 else if( aRole == "values-min" )
     149             :                 {
     150           0 :                     aData[nPointIndex]>>= fValue;
     151           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     152           0 :                     aY_Min = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     153             :                 }
     154           0 :                 else if( aRole == "values-max" )
     155             :                 {
     156           0 :                     aData[nPointIndex]>>= fValue;
     157           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     158           0 :                     aY_Max = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     159             :                 }
     160           0 :                 else if( aRole == "values-last" )
     161             :                 {
     162           0 :                     aData[nPointIndex]>>= fValue;
     163           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     164           0 :                     aY_Last = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     165             :                 }
     166           0 :                 else if( aRole == "values-size" )
     167             :                 {
     168           0 :                     aData[nPointIndex]>>= fValue;
     169           0 :                     sal_Int32 nNumberFormatKey = xDataSequence->getNumberFormatKeyByIndex( nPointIndex );
     170           0 :                     a_Size = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged );
     171           0 :                 }
     172             :             }
     173           0 :             catch( const uno::Exception& e )
     174             :             {
     175             :                 ASSERT_EXCEPTION( e );
     176             :             }
     177             :         }
     178           0 :     }
     179             : 
     180           0 :     if( aX.isEmpty() )
     181             :     {
     182           0 :         aRet = ExplicitCategoriesProvider::getCategoryByIndex( xCooSys, xChartModel, nPointIndex );
     183             :     }
     184             :     else
     185             :     {
     186           0 :         aRet = aX;
     187             :     }
     188             : 
     189           0 :     OUString aSeparator( " " );
     190             : 
     191           0 :     lcl_addText( aRet, aSeparator, aY );
     192           0 :     lcl_addText( aRet, aSeparator, aY_First );
     193           0 :     lcl_addText( aRet, aSeparator, aY_Min );
     194           0 :     lcl_addText( aRet, aSeparator, aY_Max );
     195           0 :     lcl_addText( aRet, aSeparator, aY_Last );
     196           0 :     lcl_addText( aRet, aSeparator, a_Size );
     197             : 
     198           0 :     return aRet;
     199             : }
     200             : 
     201             : } //end anonymous namespace
     202             : 
     203           0 : OUString ObjectNameProvider::getName( ObjectType eObjectType, bool bPlural )
     204             : {
     205           0 :     OUString aRet;
     206           0 :     switch( eObjectType )
     207             :     {
     208             :         case OBJECTTYPE_PAGE:
     209           0 :                 aRet=String(SchResId(STR_OBJECT_PAGE));
     210           0 :                 break;
     211             :         case OBJECTTYPE_TITLE:
     212             :             {
     213           0 :                 if(bPlural)
     214           0 :                     aRet=String(SchResId(STR_OBJECT_TITLES));
     215             :                 else
     216           0 :                     aRet=String(SchResId(STR_OBJECT_TITLE));
     217             :             }
     218           0 :                 break;
     219             :         case OBJECTTYPE_LEGEND:
     220           0 :                 aRet=String(SchResId(STR_OBJECT_LEGEND));
     221           0 :                 break;
     222             :         case OBJECTTYPE_LEGEND_ENTRY:
     223           0 :                 aRet=String(SchResId(STR_OBJECT_LEGEND_SYMBOL));//@todo change string if we do differenciate symbol and legend entry in future
     224           0 :                 break;
     225             :         case OBJECTTYPE_DIAGRAM:
     226           0 :                 aRet=String(SchResId(STR_OBJECT_DIAGRAM));
     227           0 :                 break;
     228             :         case OBJECTTYPE_DIAGRAM_WALL:
     229           0 :                 aRet=String(SchResId(STR_OBJECT_DIAGRAM_WALL));
     230           0 :                 break;
     231             :         case OBJECTTYPE_DIAGRAM_FLOOR:
     232           0 :                 aRet=String(SchResId(STR_OBJECT_DIAGRAM_FLOOR));
     233           0 :                 break;
     234             :         case OBJECTTYPE_AXIS:
     235             :             {
     236           0 :                 if(bPlural)
     237           0 :                     aRet=String(SchResId(STR_OBJECT_AXES));
     238             :                 else
     239           0 :                     aRet=String(SchResId(STR_OBJECT_AXIS));
     240             :             }
     241           0 :                 break;
     242             :         case OBJECTTYPE_AXIS_UNITLABEL:
     243           0 :                 aRet=String(SchResId(STR_OBJECT_LABEL));//@todo maybe a more concrete name
     244           0 :                 break;
     245             :         case OBJECTTYPE_GRID:
     246             :         case OBJECTTYPE_SUBGRID: //maybe todo: different names for subgrids
     247             :             {
     248           0 :                 if(bPlural)
     249           0 :                     aRet=String(SchResId(STR_OBJECT_GRIDS));
     250             :                 else
     251           0 :                     aRet=String(SchResId(STR_OBJECT_GRID));
     252             :             }
     253           0 :                 break;
     254             :         case OBJECTTYPE_DATA_SERIES:
     255             :             {
     256           0 :                 if(bPlural)
     257           0 :                     aRet=String(SchResId(STR_OBJECT_DATASERIES_PLURAL));
     258             :                 else
     259           0 :                     aRet=String(SchResId(STR_OBJECT_DATASERIES));
     260             :             }
     261           0 :                 break;
     262             :         case OBJECTTYPE_DATA_POINT:
     263             :             {
     264           0 :                 if(bPlural)
     265           0 :                     aRet=String(SchResId(STR_OBJECT_DATAPOINTS));
     266             :                 else
     267           0 :                     aRet=String(SchResId(STR_OBJECT_DATAPOINT));
     268             :             }
     269           0 :                 break;
     270             :         case OBJECTTYPE_DATA_LABELS:
     271           0 :                 aRet=String(SchResId(STR_OBJECT_DATALABELS));
     272           0 :                 break;
     273             :         case OBJECTTYPE_DATA_LABEL:
     274           0 :                 aRet=String(SchResId(STR_OBJECT_LABEL));
     275           0 :                 break;
     276             :         case OBJECTTYPE_DATA_ERRORS_X:
     277           0 :                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS_X));
     278           0 :                 break;
     279             :         case OBJECTTYPE_DATA_ERRORS_Y:
     280           0 :                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS_Y));
     281           0 :                 break;
     282             :         case OBJECTTYPE_DATA_ERRORS_Z:
     283           0 :                 aRet=String(SchResId(STR_OBJECT_ERROR_BARS_Z));
     284           0 :                 break;
     285             :         case OBJECTTYPE_DATA_AVERAGE_LINE:
     286           0 :                 aRet=String(SchResId(STR_OBJECT_AVERAGE_LINE));
     287           0 :                 break;
     288             :         case OBJECTTYPE_DATA_CURVE:
     289             :             {
     290           0 :                 if(bPlural)
     291           0 :                     aRet=String(SchResId(STR_OBJECT_CURVES));
     292             :                 else
     293           0 :                     aRet=String(SchResId(STR_OBJECT_CURVE));
     294             :             }
     295           0 :                 break;
     296             :         case OBJECTTYPE_DATA_STOCK_RANGE:
     297           0 :                 break;
     298             :         case OBJECTTYPE_DATA_STOCK_LOSS:
     299           0 :                 aRet=String(SchResId(STR_OBJECT_STOCK_LOSS));
     300           0 :                 break;
     301             :         case OBJECTTYPE_DATA_STOCK_GAIN:
     302           0 :                 aRet=String(SchResId(STR_OBJECT_STOCK_GAIN));
     303           0 :                 break;
     304             :         case OBJECTTYPE_DATA_CURVE_EQUATION:
     305           0 :                 aRet=String(SchResId(STR_OBJECT_CURVE_EQUATION));
     306           0 :                 break;
     307             :         default: //OBJECTTYPE_UNKNOWN
     308             :             ;
     309             :     }
     310           0 :     return aRet;
     311             : }
     312             : 
     313           0 : OUString ObjectNameProvider::getAxisName( const OUString& rObjectCID
     314             :                         , const uno::Reference< frame::XModel >& xChartModel  )
     315             : {
     316           0 :     OUString aRet;
     317             : 
     318             : 
     319             : 
     320             :     Reference< XAxis > xAxis(
     321           0 :         ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ), uno::UNO_QUERY );
     322             : 
     323           0 :     sal_Int32 nCooSysIndex = 0;
     324           0 :     sal_Int32 nDimensionIndex = 0;
     325           0 :     sal_Int32 nAxisIndex = 0;
     326           0 :     AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( xChartModel ), nCooSysIndex, nDimensionIndex, nAxisIndex );
     327             : 
     328           0 :     switch(nDimensionIndex)
     329             :     {
     330             :         case 0://x-axis
     331           0 :             if( nAxisIndex == 0 )
     332           0 :                 aRet=String(SchResId(STR_OBJECT_AXIS_X));
     333             :             else
     334           0 :                 aRet=String(SchResId(STR_OBJECT_SECONDARY_X_AXIS));
     335           0 :             break;
     336             :         case 1://y-axis
     337           0 :             if( nAxisIndex == 0 )
     338           0 :                 aRet=String(SchResId(STR_OBJECT_AXIS_Y));
     339             :             else
     340           0 :                 aRet=String(SchResId(STR_OBJECT_SECONDARY_Y_AXIS));
     341           0 :             break;
     342             :         case 2://z-axis
     343           0 :             aRet=String(SchResId(STR_OBJECT_AXIS_Z));
     344           0 :             break;
     345             :         default://axis
     346           0 :             aRet=String(SchResId(STR_OBJECT_AXIS));
     347           0 :             break;
     348             :     }
     349             : 
     350           0 :     return aRet;
     351             : }
     352             : 
     353           0 : OUString ObjectNameProvider::getTitleNameByType( TitleHelper::eTitleType eType )
     354             : {
     355           0 :     OUString aRet;
     356             : 
     357           0 :     switch(eType)
     358             :     {
     359             :         case TitleHelper::MAIN_TITLE:
     360           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_MAIN));
     361           0 :             break;
     362             :         case TitleHelper::SUB_TITLE:
     363           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_SUB));
     364           0 :             break;
     365             :         case TitleHelper::X_AXIS_TITLE:
     366           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_X_AXIS));
     367           0 :             break;
     368             :         case TitleHelper::Y_AXIS_TITLE:
     369           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_Y_AXIS));
     370           0 :             break;
     371             :         case TitleHelper::Z_AXIS_TITLE:
     372           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_Z_AXIS));
     373           0 :             break;
     374             :         case TitleHelper::SECONDARY_X_AXIS_TITLE:
     375           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_SECONDARY_X_AXIS));
     376           0 :             break;
     377             :         case TitleHelper::SECONDARY_Y_AXIS_TITLE:
     378           0 :             aRet=String(SchResId(STR_OBJECT_TITLE_SECONDARY_Y_AXIS));
     379           0 :             break;
     380             :         default:
     381             :             OSL_FAIL("unknown title type");
     382           0 :             break;
     383             :     }
     384             : 
     385           0 :     if( aRet.isEmpty() )
     386           0 :         aRet=String(SchResId(STR_OBJECT_TITLE));
     387             : 
     388           0 :     return aRet;
     389             : }
     390             : 
     391           0 : OUString ObjectNameProvider::getTitleName( const OUString& rObjectCID
     392             :                         , const Reference< frame::XModel >& xChartModel )
     393             : {
     394           0 :     OUString aRet;
     395             : 
     396             :     Reference< XTitle > xTitle(
     397           0 :         ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ), uno::UNO_QUERY );
     398           0 :     if( xTitle.is() )
     399             :     {
     400             :         TitleHelper::eTitleType eType;
     401           0 :         if( TitleHelper::getTitleType( eType, xTitle, xChartModel ) )
     402           0 :             aRet = ObjectNameProvider::getTitleNameByType( eType );
     403             :     }
     404           0 :     if( aRet.isEmpty() )
     405           0 :         aRet=String(SchResId(STR_OBJECT_TITLE));
     406             : 
     407           0 :     return aRet;
     408             : }
     409             : 
     410           0 : OUString ObjectNameProvider::getGridName( const OUString& rObjectCID
     411             :                         , const uno::Reference< frame::XModel >& xChartModel )
     412             : {
     413           0 :     OUString aRet;
     414             : 
     415             : 
     416           0 :     sal_Int32 nCooSysIndex = -1;
     417           0 :     sal_Int32 nDimensionIndex = -1;
     418           0 :     sal_Int32 nAxisIndex = -1;
     419           0 :     Reference< XAxis > xAxis( ObjectIdentifier::getAxisForCID( rObjectCID , xChartModel ) );
     420             :     AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( xChartModel )
     421           0 :               , nCooSysIndex , nDimensionIndex, nAxisIndex );
     422             : 
     423           0 :     bool bMainGrid = (ObjectIdentifier::getObjectType( rObjectCID ) == OBJECTTYPE_GRID);
     424             : 
     425           0 :     if( bMainGrid )
     426             :     {
     427           0 :         switch(nDimensionIndex)
     428             :         {
     429             :             case 0://x-axis
     430           0 :                 aRet=String(SchResId(STR_OBJECT_GRID_MAJOR_X));
     431           0 :                 break;
     432             :             case 1://y-axis
     433           0 :                 aRet=String(SchResId(STR_OBJECT_GRID_MAJOR_Y));
     434           0 :                 break;
     435             :             case 2://z-axis
     436           0 :                 aRet=String(SchResId(STR_OBJECT_GRID_MAJOR_Z));
     437           0 :                 break;
     438             :             default://axis
     439           0 :                 aRet=String(SchResId(STR_OBJECT_GRID));
     440           0 :                 break;
     441             :         }
     442             :     }
     443             :     else
     444             :     {
     445           0 :         switch(nDimensionIndex)
     446             :         {
     447             :             case 0://x-axis
     448           0 :                 aRet=String(SchResId(STR_OBJECT_GRID_MINOR_X));
     449           0 :                 break;
     450             :             case 1://y-axis
     451           0 :                 aRet=String(SchResId(STR_OBJECT_GRID_MINOR_Y));
     452           0 :                 break;
     453             :             case 2://z-axis
     454           0 :                 aRet=String(SchResId(STR_OBJECT_GRID_MINOR_Z));
     455           0 :                 break;
     456             :             default://axis
     457           0 :                 aRet=String(SchResId(STR_OBJECT_GRID));
     458           0 :                 break;
     459             :         }
     460             :     }
     461           0 :     return aRet;
     462             : }
     463             : 
     464           0 : OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const Reference< chart2::XChartDocument >& xChartDocument, bool bVerbose )
     465             : {
     466           0 :     return getHelpText( rObjectCID, Reference< frame::XModel >( xChartDocument, uno::UNO_QUERY ), bVerbose );
     467             : }
     468             : 
     469           0 : OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const Reference< frame::XModel >& xChartModel, bool bVerbose )
     470             : {
     471           0 :     OUString aRet;
     472           0 :     ObjectType eObjectType( ObjectIdentifier::getObjectType(rObjectCID) );
     473           0 :     if( OBJECTTYPE_AXIS == eObjectType )
     474             :     {
     475           0 :         aRet=ObjectNameProvider::getAxisName( rObjectCID, xChartModel );
     476             :     }
     477           0 :     else if( OBJECTTYPE_GRID == eObjectType
     478             :         || OBJECTTYPE_SUBGRID == eObjectType )
     479             :     {
     480           0 :         aRet=ObjectNameProvider::getGridName( rObjectCID, xChartModel );
     481             :     }
     482           0 :     else if( OBJECTTYPE_TITLE == eObjectType )
     483             :     {
     484           0 :         aRet=ObjectNameProvider::getTitleName( rObjectCID, xChartModel );
     485             :     }
     486           0 :     else if( OBJECTTYPE_DATA_SERIES == eObjectType )
     487             :     {
     488           0 :         aRet = lcl_getFullSeriesName( rObjectCID, xChartModel );
     489             :     }
     490           0 :     else if( OBJECTTYPE_DATA_POINT == eObjectType )
     491             :     {
     492           0 :         if( bVerbose )
     493             :         {
     494           0 :             OUString aNewLine( "\n" );
     495             : 
     496           0 :             aRet=String(SchResId(STR_TIP_DATAPOINT_INDEX));
     497           0 :             aRet+=aNewLine;
     498           0 :             aRet+=String(SchResId(STR_TIP_DATASERIES));
     499           0 :             aRet+=aNewLine;
     500           0 :             aRet+=String(SchResId(STR_TIP_DATAPOINT_VALUES));
     501             :         }
     502             :         else
     503           0 :             aRet=String(SchResId(STR_TIP_DATAPOINT));
     504             : 
     505           0 :         Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
     506           0 :         Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ), uno::UNO_QUERY );
     507           0 :         if( xDiagram.is() && xSeries.is() )
     508             :         {
     509           0 :             sal_Int32 nPointIndex( ObjectIdentifier::getParticleID(rObjectCID).toInt32() );
     510             : 
     511             :             //replace data point index
     512           0 :             sal_Int32 nIndex = -1;
     513           0 :             OUString aWildcard(  "%POINTNUMBER" );
     514           0 :             nIndex = aRet.indexOf( aWildcard );
     515           0 :             if( nIndex != -1 )
     516             :             {
     517           0 :                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), OUString::valueOf(nPointIndex+1) );
     518             :             }
     519             : 
     520             :             //replace data series index
     521           0 :             aWildcard =  "%SERIESNUMBER";
     522           0 :             nIndex = aRet.indexOf( aWildcard );
     523           0 :             if( nIndex != -1 )
     524             :             {
     525             :                 ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector(
     526           0 :                     DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
     527           0 :                 sal_Int32 nSeriesIndex = -1;
     528           0 :                 for( nSeriesIndex=aSeriesVector.size();nSeriesIndex--;)
     529             :                 {
     530           0 :                     if( aSeriesVector[nSeriesIndex] == xSeries )
     531             :                     {
     532           0 :                         break;
     533             :                     }
     534             :                 }
     535             : 
     536           0 :                 OUString aReplacement( OUString::valueOf(nSeriesIndex+1) );
     537           0 :                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), aReplacement );
     538             :             }
     539             : 
     540             :             //replace point values
     541           0 :             aWildcard =  "%POINTVALUES";
     542           0 :             nIndex = aRet.indexOf( aWildcard );
     543           0 :             if( nIndex != -1 )
     544             :                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), lcl_getDataPointValueText(
     545           0 :                 xSeries,nPointIndex, DataSeriesHelper::getCoordinateSystemOfSeries(xSeries, xDiagram), xChartModel ) );
     546             : 
     547             :             //replace series name
     548           0 :             aWildcard = "%SERIESNAME";
     549           0 :             nIndex = aRet.indexOf( aWildcard );
     550           0 :             if( nIndex != -1 )
     551           0 :                 aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), lcl_getDataSeriesName( rObjectCID, xChartModel ) );
     552           0 :         }
     553             :     }
     554           0 :     else if( OBJECTTYPE_DATA_CURVE == eObjectType )
     555             :     {
     556           0 :         if( bVerbose )
     557             :         {
     558           0 :             aRet = String( SchResId( STR_OBJECT_CURVE_WITH_PARAMETERS ));
     559           0 :             Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ));
     560           0 :             Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY );
     561           0 :             if( xCurveCnt.is())
     562             :             {
     563           0 :                 Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xCurveCnt ));
     564           0 :                 if( xCurve.is())
     565             :                 {
     566             :                     try
     567             :                     {
     568           0 :                         Reference< chart2::XRegressionCurveCalculator > xCalculator( xCurve->getCalculator(), uno::UNO_QUERY_THROW );
     569           0 :                         RegressionCurveHelper::initializeCurveCalculator( xCalculator, xSeries, xChartModel );
     570             : 
     571             :                         // replace formula
     572           0 :                         sal_Int32 nIndex = -1;
     573           0 :                         OUString aWildcard( "%FORMULA" );
     574           0 :                         nIndex = aRet.indexOf( aWildcard );
     575           0 :                         if( nIndex != -1 )
     576           0 :                             aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), xCalculator->getRepresentation());
     577             : 
     578             :                         // replace r^2
     579           0 :                         aWildcard = "%RSQUARED";
     580           0 :                         nIndex = aRet.indexOf( aWildcard );
     581           0 :                         if( nIndex != -1 )
     582             :                         {
     583           0 :                             sal_Unicode aDecimalSep( '.' );
     584           0 :                             double fR( xCalculator->getCorrelationCoefficient());
     585             :                             aRet = aRet.replaceAt(
     586             :                                 nIndex, aWildcard.getLength(),
     587             :                                 ::rtl::math::doubleToUString(
     588           0 :                                     fR*fR, rtl_math_StringFormat_G, 4, aDecimalSep, true ));
     589           0 :                         }
     590             :                     }
     591           0 :                     catch( const uno::Exception & ex )
     592             :                     {
     593             :                         ASSERT_EXCEPTION( ex );
     594             :                     }
     595           0 :                 }
     596           0 :             }
     597             :         }
     598             :         else
     599             :         {
     600             :             // non-verbose
     601           0 :             aRet = ObjectNameProvider::getName( eObjectType, false );
     602             :         }
     603             :     }
     604           0 :     else if( OBJECTTYPE_DATA_AVERAGE_LINE == eObjectType )
     605             :     {
     606           0 :         if( bVerbose )
     607             :         {
     608           0 :             aRet = String( SchResId( STR_OBJECT_AVERAGE_LINE_WITH_PARAMETERS ));
     609           0 :             Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ));
     610           0 :             Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY );
     611           0 :             if( xCurveCnt.is())
     612             :             {
     613           0 :                 Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getMeanValueLine( xCurveCnt ));
     614           0 :                 if( xCurve.is())
     615             :                 {
     616             :                     try
     617             :                     {
     618           0 :                         Reference< chart2::XRegressionCurveCalculator > xCalculator( xCurve->getCalculator(), uno::UNO_QUERY_THROW );
     619           0 :                         RegressionCurveHelper::initializeCurveCalculator( xCalculator, xSeries, xChartModel );
     620             : 
     621           0 :                         sal_Unicode aDecimalSep( '.' );
     622             : 
     623           0 :                         sal_Int32 nIndex = -1;
     624           0 :                         OUString aWildcard( "%AVERAGE_VALUE" );
     625           0 :                         nIndex = aRet.indexOf( aWildcard );
     626             :                         // as the curve is constant, the value at any x-value is ok
     627           0 :                         if( nIndex != -1 )
     628             :                         {
     629           0 :                             const double fMeanValue( xCalculator->getCurveValue( 0.0 ));
     630             :                             aRet = aRet.replaceAt(
     631             :                                 nIndex, aWildcard.getLength(),
     632             :                                 ::rtl::math::doubleToUString(
     633           0 :                                     fMeanValue, rtl_math_StringFormat_G, 4, aDecimalSep, true ));
     634             :                         }
     635             : 
     636             :                         // replace standard deviation
     637           0 :                         aWildcard = "%STD_DEVIATION";
     638           0 :                         nIndex = aRet.indexOf( aWildcard );
     639           0 :                         if( nIndex != -1 )
     640             :                         {
     641           0 :                             const double fStdDev( xCalculator->getCorrelationCoefficient());
     642             :                             aRet = aRet.replaceAt(
     643             :                                 nIndex, aWildcard.getLength(),
     644             :                                 ::rtl::math::doubleToUString(
     645           0 :                                     fStdDev, rtl_math_StringFormat_G, 4, aDecimalSep, true ));
     646           0 :                         }
     647             :                     }
     648           0 :                     catch( const uno::Exception & ex )
     649             :                     {
     650             :                         ASSERT_EXCEPTION( ex );
     651             :                     }
     652           0 :                 }
     653           0 :             }
     654             :         }
     655             :         else
     656             :         {
     657             :             // non-verbose
     658           0 :             aRet = ObjectNameProvider::getName( eObjectType, false );
     659             :         }
     660             :     }
     661             :     else
     662             :     {
     663           0 :         aRet = ObjectNameProvider::getName( eObjectType, false );
     664             :     }
     665           0 :     return aRet;
     666             : }
     667             : 
     668           0 : OUString ObjectNameProvider::getSelectedObjectText( const OUString & rObjectCID, const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDocument )
     669             : {
     670           0 :     OUString aRet;
     671           0 :     ObjectType eObjectType( ObjectIdentifier::getObjectType(rObjectCID) );
     672           0 :     Reference< frame::XModel > xChartModel( xChartDocument, uno::UNO_QUERY );
     673             : 
     674           0 :     if( OBJECTTYPE_DATA_POINT == eObjectType )
     675             :     {
     676           0 :         aRet = String( SchResId( STR_STATUS_DATAPOINT_MARKED ));
     677             : 
     678           0 :         Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) );
     679           0 :         Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ), uno::UNO_QUERY );
     680           0 :         if( xDiagram.is() && xSeries.is() )
     681             :         {
     682           0 :             sal_Int32 nPointIndex( ObjectIdentifier::getParticleID(rObjectCID).toInt32() );
     683             : 
     684             :             // replace data point index
     685           0 :             replaceParamterInString( aRet, "%POINTNUMBER", OUString::valueOf( nPointIndex + 1 ));
     686             : 
     687             :             // replace data series index
     688             :             {
     689             :                 ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector(
     690           0 :                     DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
     691           0 :                 sal_Int32 nSeriesIndex = -1;
     692           0 :                 for( nSeriesIndex=aSeriesVector.size();nSeriesIndex--;)
     693             :                 {
     694           0 :                     if( aSeriesVector[nSeriesIndex] == xSeries )
     695           0 :                         break;
     696             :                 }
     697           0 :                 replaceParamterInString( aRet, "%SERIESNUMBER", OUString::valueOf( nSeriesIndex + 1 ) );
     698             :             }
     699             : 
     700             :             // replace point value
     701             :             replaceParamterInString( aRet, "%POINTVALUES", lcl_getDataPointValueText(
     702           0 :                 xSeries, nPointIndex, DataSeriesHelper::getCoordinateSystemOfSeries(xSeries, xDiagram), xChartModel ) );
     703           0 :         }
     704             :     }
     705             :     else
     706             :     {
     707             :         // use the verbose text including the formula for trend lines
     708           0 :         const bool bVerbose( OBJECTTYPE_DATA_CURVE == eObjectType || OBJECTTYPE_DATA_AVERAGE_LINE == eObjectType );
     709           0 :         const OUString aHelpText( getHelpText( rObjectCID, xChartModel, bVerbose ));
     710           0 :         if( !aHelpText.isEmpty())
     711             :         {
     712           0 :             aRet = String( SchResId( STR_STATUS_OBJECT_MARKED ));
     713           0 :             replaceParamterInString( aRet, "%OBJECTNAME", aHelpText );
     714           0 :         }
     715             :     }
     716             : 
     717           0 :     return aRet;
     718             : }
     719             : 
     720             : 
     721           0 : OUString ObjectNameProvider::getNameForCID(
     722             :     const OUString& rObjectCID,
     723             :     const uno::Reference< chart2::XChartDocument >& xChartDocument )
     724             : {
     725           0 :     ObjectType eType( ObjectIdentifier::getObjectType( rObjectCID ));
     726           0 :     Reference< frame::XModel > xModel( xChartDocument, uno::UNO_QUERY );
     727             : 
     728           0 :     switch( eType )
     729             :     {
     730             :         case OBJECTTYPE_AXIS:
     731           0 :             return getAxisName( rObjectCID, xModel );
     732             :         case OBJECTTYPE_TITLE:
     733           0 :             return getTitleName( rObjectCID, xModel );
     734             :         case OBJECTTYPE_GRID:
     735             :         case OBJECTTYPE_SUBGRID:
     736           0 :             return getGridName( rObjectCID, xModel );
     737             :         case OBJECTTYPE_DATA_SERIES:
     738           0 :             return lcl_getFullSeriesName( rObjectCID, xModel );
     739             :         case OBJECTTYPE_DATA_POINT:
     740             :         case OBJECTTYPE_DATA_LABELS:
     741             :         case OBJECTTYPE_DATA_LABEL:
     742             :         case OBJECTTYPE_DATA_ERRORS_X:
     743             :         case OBJECTTYPE_DATA_ERRORS_Y:
     744             :         case OBJECTTYPE_DATA_ERRORS_Z:
     745             :         case OBJECTTYPE_DATA_CURVE:
     746             :         case OBJECTTYPE_DATA_AVERAGE_LINE:
     747             :         case OBJECTTYPE_DATA_CURVE_EQUATION:
     748             :             {
     749           0 :                 OUString aRet = lcl_getFullSeriesName( rObjectCID, xModel );
     750           0 :                 aRet += " ";
     751           0 :                 if( eType == OBJECTTYPE_DATA_POINT || eType == OBJECTTYPE_DATA_LABEL )
     752             :                 {
     753           0 :                     aRet += getName( OBJECTTYPE_DATA_POINT  );
     754           0 :                     sal_Int32 nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( rObjectCID );
     755           0 :                     aRet += " ";
     756           0 :                     aRet += OUString::valueOf(nPointIndex+1);
     757             : 
     758           0 :                     if( eType == OBJECTTYPE_DATA_LABEL )
     759             :                     {
     760           0 :                         aRet += " ";
     761           0 :                         aRet += getName( OBJECTTYPE_DATA_LABEL  );
     762           0 :                     }
     763             :                 }
     764             :                 else
     765           0 :                     aRet += getName( eType );
     766           0 :                 return aRet;
     767             :             }
     768             :         default:
     769           0 :             break;
     770             :     }
     771             : 
     772           0 :     return getName( eType );
     773             : }
     774             : 
     775           0 : OUString ObjectNameProvider::getName_ObjectForSeries(
     776             :         ObjectType eObjectType,
     777             :         const OUString& rSeriesCID,
     778             :         const uno::Reference< chart2::XChartDocument >& xChartDocument )
     779             : {
     780           0 :     uno::Reference< frame::XModel> xChartModel( xChartDocument, uno::UNO_QUERY );
     781           0 :     Reference< XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rSeriesCID , xChartModel ), uno::UNO_QUERY );
     782           0 :     if( xSeries.is() )
     783             :     {
     784           0 :         OUString aRet = String(SchResId(STR_OBJECT_FOR_SERIES));
     785           0 :         replaceParamterInString( aRet, "%OBJECTNAME", getName( eObjectType, false /*bPlural*/ ) );
     786           0 :         replaceParamterInString( aRet, "%SERIESNAME", lcl_getDataSeriesName( rSeriesCID, xChartModel ) );
     787           0 :         return aRet;
     788             :     }
     789             :     else
     790           0 :         return ObjectNameProvider::getName_ObjectForAllSeries( eObjectType );
     791             : }
     792             : 
     793           0 : OUString ObjectNameProvider::getName_ObjectForAllSeries( ObjectType eObjectType )
     794             : {
     795           0 :     OUString aRet = String(SchResId(STR_OBJECT_FOR_ALL_SERIES));
     796           0 :     replaceParamterInString( aRet, "%OBJECTNAME", getName( eObjectType, true /*bPlural*/ ) );
     797           0 :     return aRet;
     798             : }
     799             : 
     800             : //.............................................................................
     801             : } //namespace chart
     802             : //.............................................................................
     803             : 
     804             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10