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

Generated by: LCOV version 1.10