LCOV - code coverage report
Current view: top level - chart2/source/tools - RegressionCurveHelper.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 143 286 50.0 %
Date: 2012-08-25 Functions: 15 23 65.2 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 149 651 22.9 %

           Branch data     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 "RegressionCurveHelper.hxx"
      21                 :            : #include "MeanValueRegressionCurveCalculator.hxx"
      22                 :            : #include "LinearRegressionCurveCalculator.hxx"
      23                 :            : #include "LogarithmicRegressionCurveCalculator.hxx"
      24                 :            : #include "ExponentialRegressionCurveCalculator.hxx"
      25                 :            : #include "PotentialRegressionCurveCalculator.hxx"
      26                 :            : #include "CommonConverters.hxx"
      27                 :            : #include "RegressionCurveModel.hxx"
      28                 :            : #include "ChartTypeHelper.hxx"
      29                 :            : #include "ChartModelHelper.hxx"
      30                 :            : #include "macros.hxx"
      31                 :            : #include "PropertyHelper.hxx"
      32                 :            : #include "ResId.hxx"
      33                 :            : #include "Strings.hrc"
      34                 :            : #include "DiagramHelper.hxx"
      35                 :            : #include <com/sun/star/chart2/XChartDocument.hpp>
      36                 :            : 
      37                 :            : using namespace ::com::sun::star;
      38                 :            : using namespace ::com::sun::star::chart2;
      39                 :            : 
      40                 :            : using ::com::sun::star::uno::Reference;
      41                 :            : using ::com::sun::star::uno::Sequence;
      42                 :            : using ::com::sun::star::uno::XComponentContext;
      43                 :            : using ::com::sun::star::lang::XServiceName;
      44                 :            : using ::com::sun::star::beans::XPropertySet;
      45                 :            : using ::com::sun::star::uno::Exception;
      46                 :            : using ::rtl::OUString;
      47                 :            : 
      48                 :            : namespace
      49                 :            : {
      50                 :          6 : OUString lcl_getServiceNameForType( ::chart::RegressionCurveHelper::tRegressionType eType )
      51                 :            : {
      52                 :          6 :     OUString aServiceName;
      53   [ -  -  -  +  :          6 :     switch( eType )
                      - ]
      54                 :            :     {
      55                 :            :         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_LINEAR:
      56         [ #  # ]:          0 :             aServiceName = C2U( "com.sun.star.chart2.LinearRegressionCurve" );
      57                 :          0 :             break;
      58                 :            :         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_LOG:
      59         [ #  # ]:          0 :             aServiceName = C2U( "com.sun.star.chart2.LogarithmicRegressionCurve" );
      60                 :          0 :             break;
      61                 :            :         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_EXP:
      62         [ #  # ]:          0 :             aServiceName = C2U( "com.sun.star.chart2.ExponentialRegressionCurve" );
      63                 :          0 :             break;
      64                 :            :         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_POWER:
      65         [ +  - ]:          6 :             aServiceName = C2U( "com.sun.star.chart2.PotentialRegressionCurve" );
      66                 :          6 :             break;
      67                 :            :         default:
      68                 :            :             OSL_FAIL("unknown regression curve type - use linear instead");
      69         [ #  # ]:          0 :             aServiceName = C2U( "com.sun.star.chart2.LinearRegressionCurve" );
      70                 :          0 :             break;
      71                 :            :     }
      72                 :          6 :     return aServiceName;
      73                 :            : }
      74                 :            : } // anonymous namespace
      75                 :            : 
      76                 :            : //.............................................................................
      77                 :            : namespace chart
      78                 :            : {
      79                 :            : //.............................................................................
      80                 :            : 
      81                 :          8 : Reference< XRegressionCurve > RegressionCurveHelper::createMeanValueLine(
      82                 :            :     const Reference< XComponentContext > & xContext )
      83                 :            : {
      84                 :            :     return Reference< XRegressionCurve >(
      85 [ +  - ][ +  - ]:          8 :         new MeanValueRegressionCurve( xContext ));
      86                 :            : }
      87                 :            : 
      88                 :          6 : Reference< XRegressionCurve > RegressionCurveHelper::createRegressionCurveByServiceName(
      89                 :            :     const Reference< XComponentContext > & xContext,
      90                 :            :     ::rtl::OUString aServiceName )
      91                 :            : {
      92                 :          6 :     Reference< XRegressionCurve > xResult;
      93                 :            : 
      94                 :            :     // todo: use factory methods with service name
      95         [ -  + ]:          6 :     if( aServiceName == "com.sun.star.chart2.LinearRegressionCurve" )
      96                 :            :     {
      97 [ #  # ][ #  # ]:          0 :         xResult.set( new LinearRegressionCurve( xContext ) );
                 [ #  # ]
      98                 :            :     }
      99         [ -  + ]:          6 :     else if( aServiceName == "com.sun.star.chart2.LogarithmicRegressionCurve" )
     100                 :            :     {
     101 [ #  # ][ #  # ]:          0 :         xResult.set( new LogarithmicRegressionCurve( xContext ) );
                 [ #  # ]
     102                 :            :     }
     103         [ -  + ]:          6 :     else if( aServiceName == "com.sun.star.chart2.ExponentialRegressionCurve" )
     104                 :            :     {
     105 [ #  # ][ #  # ]:          0 :         xResult.set( new ExponentialRegressionCurve( xContext ) );
                 [ #  # ]
     106                 :            :     }
     107         [ +  - ]:          6 :     else if( aServiceName == "com.sun.star.chart2.PotentialRegressionCurve" )
     108                 :            :     {
     109 [ +  - ][ +  - ]:          6 :         xResult.set( new PotentialRegressionCurve( xContext ) );
                 [ +  - ]
     110                 :            :     }
     111                 :            : 
     112                 :          6 :     return xResult;
     113                 :            : }
     114                 :            : 
     115                 :            : // ------------------------------------------------------------
     116                 :            : 
     117                 :        108 : Reference< XRegressionCurveCalculator > RegressionCurveHelper::createRegressionCurveCalculatorByServiceName(
     118                 :            :     ::rtl::OUString aServiceName )
     119                 :            : {
     120                 :        108 :     Reference< XRegressionCurveCalculator > xResult;
     121                 :            : 
     122                 :            :     // todo: use factory methods with service name
     123         [ +  + ]:        108 :     if( aServiceName == "com.sun.star.chart2.MeanValueRegressionCurve" )
     124                 :            :     {
     125 [ +  - ][ +  - ]:         76 :         xResult.set( new MeanValueRegressionCurveCalculator() );
                 [ +  - ]
     126                 :            :     }
     127         [ -  + ]:        108 :     if( aServiceName == "com.sun.star.chart2.LinearRegressionCurve" )
     128                 :            :     {
     129 [ #  # ][ #  # ]:          0 :         xResult.set( new LinearRegressionCurveCalculator() );
                 [ #  # ]
     130                 :            :     }
     131         [ -  + ]:        108 :     else if( aServiceName == "com.sun.star.chart2.LogarithmicRegressionCurve" )
     132                 :            :     {
     133 [ #  # ][ #  # ]:          0 :         xResult.set( new LogarithmicRegressionCurveCalculator() );
                 [ #  # ]
     134                 :            :     }
     135         [ -  + ]:        108 :     else if( aServiceName == "com.sun.star.chart2.ExponentialRegressionCurve" )
     136                 :            :     {
     137 [ #  # ][ #  # ]:          0 :         xResult.set( new ExponentialRegressionCurveCalculator() );
                 [ #  # ]
     138                 :            :     }
     139         [ +  + ]:        108 :     else if( aServiceName == "com.sun.star.chart2.PotentialRegressionCurve" )
     140                 :            :     {
     141 [ +  - ][ +  - ]:         32 :         xResult.set( new PotentialRegressionCurveCalculator() );
                 [ +  - ]
     142                 :            :     }
     143                 :            : 
     144                 :        108 :     return xResult;
     145                 :            : }
     146                 :            : 
     147                 :          0 : void RegressionCurveHelper::initializeCurveCalculator(
     148                 :            :     const Reference< XRegressionCurveCalculator > & xOutCurveCalculator,
     149                 :            :     const Reference< data::XDataSource > & xSource,
     150                 :            :     bool bUseXValuesIfAvailable /* = true */ )
     151                 :            : {
     152         [ #  # ]:          0 :     if( ! (xOutCurveCalculator.is() &&
     153 [ #  # ][ #  # ]:          0 :            xSource.is() ))
     154                 :          0 :         return;
     155                 :            : 
     156 [ #  # ][ #  # ]:          0 :     Sequence< double > aXValues, aYValues;
     157                 :          0 :     bool bXValuesFound = false, bYValuesFound = false;
     158                 :            : 
     159 [ #  # ][ #  # ]:          0 :     Sequence< Reference< data::XLabeledDataSequence > > aDataSeqs( xSource->getDataSequences());
     160                 :          0 :     sal_Int32 i = 0;
     161   [ #  #  #  # ]:          0 :     for( i=0;
                 [ #  # ]
     162         [ #  # ]:          0 :          ! (bXValuesFound && bYValuesFound) && i<aDataSeqs.getLength();
     163                 :            :          ++i )
     164                 :            :     {
     165                 :            :         try
     166                 :            :         {
     167 [ #  # ][ #  # ]:          0 :             Reference< data::XDataSequence > xSeq( aDataSeqs[i]->getValues());
                 [ #  # ]
     168         [ #  # ]:          0 :             Reference< XPropertySet > xProp( xSeq, uno::UNO_QUERY_THROW );
     169                 :          0 :             ::rtl::OUString aRole;
     170   [ #  #  #  # ]:          0 :             if( xProp->getPropertyValue(
     171 [ #  # ][ #  # ]:          0 :                     ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Role" ))) >>= aRole )
     172                 :            :             {
     173 [ #  # ][ #  # ]:          0 :                 if( bUseXValuesIfAvailable && !bXValuesFound && aRole == "values-x" )
         [ #  # ][ #  # ]
     174                 :            :                 {
     175 [ #  # ][ #  # ]:          0 :                     aXValues = DataSequenceToDoubleSequence( xSeq );
                 [ #  # ]
     176                 :          0 :                     bXValuesFound = true;
     177                 :            :                 }
     178 [ #  # ][ #  # ]:          0 :                 else if( !bYValuesFound && aRole == "values-y" )
                 [ #  # ]
     179                 :            :                 {
     180 [ #  # ][ #  # ]:          0 :                     aYValues = DataSequenceToDoubleSequence( xSeq );
                 [ #  # ]
     181                 :          0 :                     bYValuesFound = true;
     182                 :            :                 }
     183         [ #  # ]:          0 :             }
     184                 :            :         }
     185         [ #  # ]:          0 :         catch( const Exception & ex )
     186                 :            :         {
     187                 :            :             ASSERT_EXCEPTION( ex );
     188                 :            :         }
     189                 :            :     }
     190                 :            : 
     191 [ #  # ][ #  # ]:          0 :     if( ! bXValuesFound &&
     192                 :            :         bYValuesFound )
     193                 :            :     {
     194                 :            :         // initialize with 1, 2, ...
     195                 :            :         //first category (index 0) matches with real number 1.0
     196         [ #  # ]:          0 :         aXValues.realloc( aYValues.getLength());
     197         [ #  # ]:          0 :         for( i=0; i<aXValues.getLength(); ++i )
     198         [ #  # ]:          0 :             aXValues[i] = i+1;
     199                 :          0 :         bXValuesFound = true;
     200                 :            :     }
     201                 :            : 
     202 [ #  # ][ #  #  :          0 :     if( bXValuesFound && bYValuesFound &&
             #  #  #  # ]
                 [ #  # ]
     203                 :          0 :         aXValues.getLength() > 0 &&
     204                 :          0 :         aYValues.getLength() > 0 )
     205 [ #  # ][ #  # ]:          0 :         xOutCurveCalculator->recalculateRegression( aXValues, aYValues );
         [ #  # ][ #  # ]
                 [ #  # ]
     206                 :            : }
     207                 :            : 
     208                 :          0 : void RegressionCurveHelper::initializeCurveCalculator(
     209                 :            :     const Reference< XRegressionCurveCalculator > & xOutCurveCalculator,
     210                 :            :     const Reference< XDataSeries > & xSeries,
     211                 :            :     const Reference< frame::XModel > & xModel )
     212                 :            : {
     213                 :            :     sal_Int32 nAxisType = ChartTypeHelper::getAxisType(
     214         [ #  # ]:          0 :         ChartModelHelper::getChartTypeOfSeries( xModel, xSeries ), 0 ); // x-axis
     215                 :            : 
     216                 :            :     initializeCurveCalculator( xOutCurveCalculator,
     217                 :            :                                uno::Reference< data::XDataSource >( xSeries, uno::UNO_QUERY ),
     218         [ #  # ]:          0 :                                (nAxisType == AxisType::REALNUMBER) );
     219                 :          0 : }
     220                 :            : 
     221                 :            : // ----------------------------------------
     222                 :            : 
     223                 :        248 : bool RegressionCurveHelper::hasMeanValueLine(
     224                 :            :     const uno::Reference< XRegressionCurveContainer > & xRegCnt )
     225                 :            : {
     226         [ -  + ]:        248 :     if( !xRegCnt.is())
     227                 :          0 :         return false;
     228                 :            : 
     229                 :            :     try
     230                 :            :     {
     231                 :            :         uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
     232 [ +  - ][ +  - ]:        248 :             xRegCnt->getRegressionCurves());
     233         [ +  + ]:        248 :         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     234                 :            :         {
     235 [ +  - ][ +  - ]:          6 :             if( isMeanValueLine( aCurves[i] ))
                 [ +  - ]
     236                 :          6 :                 return true;
     237 [ +  - ][ +  + ]:        248 :         }
                 [ #  # ]
     238                 :            :     }
     239                 :          0 :     catch( const Exception & ex )
     240                 :            :     {
     241                 :            :         ASSERT_EXCEPTION( ex );
     242                 :            :     }
     243                 :            : 
     244                 :        248 :     return false;
     245                 :            : }
     246                 :            : 
     247                 :        222 : bool RegressionCurveHelper::isMeanValueLine(
     248                 :            :     const uno::Reference< chart2::XRegressionCurve > & xRegCurve )
     249                 :            : {
     250         [ +  - ]:        222 :     uno::Reference< XServiceName > xServName( xRegCurve, uno::UNO_QUERY );
     251   [ +  -  +  + ]:        666 :     if( xServName.is() &&
                 [ +  + ]
     252         [ +  - ]:        222 :         xServName->getServiceName().equals(
     253 [ +  - ][ +  - ]:        666 :             C2U( "com.sun.star.chart2.MeanValueRegressionCurve" )))
         [ +  - ][ +  - ]
           [ #  #  #  # ]
     254                 :        170 :         return true;
     255                 :        222 :     return false;
     256                 :            : }
     257                 :            : 
     258                 :            : uno::Reference< chart2::XRegressionCurve >
     259                 :          2 :     RegressionCurveHelper::getMeanValueLine(
     260                 :            :         const uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
     261                 :            : {
     262         [ +  - ]:          2 :     if( xRegCnt.is())
     263                 :            :     {
     264                 :            :         try
     265                 :            :         {
     266                 :            :             uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
     267 [ +  - ][ +  - ]:          2 :                 xRegCnt->getRegressionCurves());
     268         [ +  - ]:          2 :             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     269                 :            :             {
     270 [ +  - ][ +  - ]:          2 :                 if( isMeanValueLine( aCurves[i] ))
                 [ +  - ]
     271         [ +  - ]:          2 :                     return aCurves[i];
     272 [ +  - ][ -  + ]:          2 :             }
                 [ #  # ]
     273                 :            :         }
     274                 :          0 :         catch( const Exception & ex )
     275                 :            :         {
     276                 :            :             ASSERT_EXCEPTION( ex );
     277                 :            :         }
     278                 :            :     }
     279                 :            : 
     280                 :          2 :     return uno::Reference< chart2::XRegressionCurve >();
     281                 :            : }
     282                 :            : 
     283                 :          8 : void RegressionCurveHelper::addMeanValueLine(
     284                 :            :     uno::Reference< XRegressionCurveContainer > & xRegCnt,
     285                 :            :     const uno::Reference< XComponentContext > & xContext,
     286                 :            :     const uno::Reference< XPropertySet > & xSeriesProp )
     287                 :            : {
     288 [ +  - ][ -  + ]:         16 :     if( !xRegCnt.is() ||
                 [ +  - ]
     289         [ +  - ]:          8 :         ::chart::RegressionCurveHelper::hasMeanValueLine( xRegCnt ) )
     290                 :          8 :         return;
     291                 :            : 
     292                 :            :     // todo: use a valid context
     293         [ +  - ]:          8 :     uno::Reference< XRegressionCurve > xCurve( createMeanValueLine( xContext ));
     294 [ +  - ][ +  - ]:          8 :     xRegCnt->addRegressionCurve( xCurve );
     295                 :            : 
     296         [ -  + ]:          8 :     if( xSeriesProp.is())
     297                 :            :     {
     298         [ #  # ]:          0 :         uno::Reference< XPropertySet > xProp( xCurve, uno::UNO_QUERY );
     299         [ #  # ]:          0 :         if( xProp.is())
     300                 :            :         {
     301         [ #  # ]:          0 :             xProp->setPropertyValue( C2U( "LineColor" ),
     302 [ #  # ][ #  # ]:          0 :                                      xSeriesProp->getPropertyValue( C2U( "Color" )));
         [ #  # ][ #  # ]
                 [ #  # ]
     303                 :          0 :         }
     304                 :          8 :     }
     305                 :            : }
     306                 :            : 
     307                 :         36 : void RegressionCurveHelper::removeMeanValueLine(
     308                 :            :     Reference< XRegressionCurveContainer > & xRegCnt )
     309                 :            : {
     310         [ -  + ]:         36 :     if( !xRegCnt.is())
     311                 :         36 :         return;
     312                 :            : 
     313                 :            :     try
     314                 :            :     {
     315                 :            :         Sequence< Reference< XRegressionCurve > > aCurves(
     316 [ +  - ][ +  - ]:         36 :             xRegCnt->getRegressionCurves());
     317         [ -  + ]:         36 :         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     318                 :            :         {
     319 [ #  # ][ #  # ]:          0 :             if( isMeanValueLine( aCurves[i] ))
                 [ #  # ]
     320                 :            :             {
     321 [ #  # ][ #  # ]:          0 :                 xRegCnt->removeRegressionCurve( aCurves[i] );
                 [ #  # ]
     322                 :            :                 // attention: the iterator i has become invalid now
     323                 :            : 
     324                 :            :                 // note: assume that there is only one mean-value curve
     325                 :            :                 // to remove multiple mean-value curves remove the break
     326                 :          0 :                 break;
     327                 :            :             }
     328 [ +  - ][ #  # ]:         36 :         }
     329                 :            :     }
     330                 :          0 :     catch( const Exception & ex )
     331                 :            :     {
     332                 :            :         ASSERT_EXCEPTION( ex );
     333                 :            :     }
     334                 :            : }
     335                 :            : 
     336                 :          6 : void RegressionCurveHelper::addRegressionCurve(
     337                 :            :     tRegressionType eType,
     338                 :            :     uno::Reference< XRegressionCurveContainer > & xRegCnt,
     339                 :            :     const uno::Reference< XComponentContext > & /* xContext */,
     340                 :            :     const uno::Reference< beans::XPropertySet >& xPropertySource,
     341                 :            :     const uno::Reference< beans::XPropertySet >& xEquationProperties )
     342                 :            : {
     343         [ +  - ]:          6 :     if( !xRegCnt.is() )
     344                 :            :         return;
     345                 :            : 
     346         [ +  - ]:          6 :     if( eType == REGRESSION_TYPE_NONE )
     347                 :            :     {
     348                 :            :         OSL_FAIL("don't create a regression curve of type none");
     349                 :            :         return;
     350                 :            :     }
     351                 :            : 
     352                 :          6 :     uno::Reference< chart2::XRegressionCurve > xCurve;
     353         [ +  - ]:          6 :     ::rtl::OUString aServiceName( lcl_getServiceNameForType( eType ));
     354                 :            : 
     355         [ +  - ]:          6 :     if( !aServiceName.isEmpty())
     356                 :            :     {
     357                 :            :         // todo: use a valid context
     358                 :            :         xCurve.set( createRegressionCurveByServiceName(
     359 [ +  - ][ +  - ]:          6 :                          uno::Reference< uno::XComponentContext >(), aServiceName ));
     360                 :            : 
     361         [ -  + ]:          6 :         if( xEquationProperties.is())
     362 [ #  # ][ #  # ]:          0 :             xCurve->setEquationProperties( xEquationProperties );
     363                 :            : 
     364         [ +  - ]:          6 :         uno::Reference< beans::XPropertySet > xProp( xCurve, uno::UNO_QUERY );
     365         [ +  - ]:          6 :         if( xProp.is())
     366                 :            :         {
     367         [ -  + ]:          6 :             if( xPropertySource.is())
     368         [ #  # ]:          0 :                 comphelper::copyProperties( xPropertySource, xProp );
     369                 :            :             else
     370                 :            :             {
     371         [ +  - ]:          6 :                 uno::Reference< XPropertySet > xSeriesProp( xRegCnt, uno::UNO_QUERY );
     372         [ +  - ]:          6 :                 if( xSeriesProp.is())
     373                 :            :                 {
     374         [ +  - ]:          6 :                     xProp->setPropertyValue( C2U( "LineColor" ),
     375 [ +  - ][ +  - ]:          6 :                                              xSeriesProp->getPropertyValue( C2U( "Color" )));
         [ +  - ][ +  - ]
                 [ +  - ]
     376                 :          6 :                 }
     377                 :            : //                 xProp->setPropertyValue( C2U( "LineWidth" ), uno::makeAny( sal_Int32( 100 )));
     378                 :            :             }
     379                 :          6 :         }
     380                 :            :     }
     381 [ +  - ][ +  - ]:          6 :     xRegCnt->addRegressionCurve( xCurve );
     382                 :            : }
     383                 :            : 
     384                 :            : /** removes all regression curves that are not of type mean value
     385                 :            :     and returns true, if anything was removed
     386                 :            :  */
     387                 :         42 : bool RegressionCurveHelper::removeAllExceptMeanValueLine(
     388                 :            :     uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
     389                 :            : {
     390                 :         42 :     bool bRemovedSomething = false;
     391         [ +  - ]:         42 :     if( xRegCnt.is())
     392                 :            :     {
     393                 :            :         try
     394                 :            :         {
     395                 :            :             uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
     396 [ +  - ][ +  - ]:         42 :                 xRegCnt->getRegressionCurves());
     397         [ +  - ]:         42 :             ::std::vector< uno::Reference< chart2::XRegressionCurve > > aCurvesToDelete;
     398         [ +  + ]:         48 :             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     399                 :            :             {
     400 [ +  - ][ +  - ]:          6 :                 if( ! isMeanValueLine( aCurves[i] ))
                 [ -  + ]
     401                 :            :                 {
     402 [ #  # ][ #  # ]:          0 :                     aCurvesToDelete.push_back( aCurves[ i ] );
     403                 :            :                 }
     404                 :            :             }
     405                 :            : 
     406 [ +  - ][ +  - ]:         84 :             for( ::std::vector< uno::Reference< chart2::XRegressionCurve > >::const_iterator aIt = aCurvesToDelete.begin();
                 [ -  + ]
     407                 :         42 :                      aIt != aCurvesToDelete.end(); ++aIt )
     408                 :            :             {
     409 [ #  # ][ #  # ]:          0 :                 xRegCnt->removeRegressionCurve( *aIt );
     410                 :          0 :                 bRemovedSomething = true;
     411 [ +  - ][ #  # ]:         42 :             }
     412                 :            :         }
     413                 :          0 :         catch( const uno::Exception & ex )
     414                 :            :         {
     415                 :            :             ASSERT_EXCEPTION( ex );
     416                 :            :         }
     417                 :            :     }
     418                 :         42 :     return bRemovedSomething;
     419                 :            : }
     420                 :            : 
     421                 :          0 : void RegressionCurveHelper::removeEquations(
     422                 :            :         uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
     423                 :            : {
     424         [ #  # ]:          0 :     if( xRegCnt.is())
     425                 :            :     {
     426                 :            :         try
     427                 :            :         {
     428                 :            :             uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
     429 [ #  # ][ #  # ]:          0 :                 xRegCnt->getRegressionCurves());
     430         [ #  # ]:          0 :             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     431                 :            :             {
     432 [ #  # ][ #  # ]:          0 :                 if( !isMeanValueLine( aCurves[i] ) )
                 [ #  # ]
     433                 :            :                 {
     434         [ #  # ]:          0 :                     uno::Reference< chart2::XRegressionCurve > xRegCurve( aCurves[ i ] );
     435         [ #  # ]:          0 :                     if( xRegCurve.is() )
     436                 :            :                     {
     437 [ #  # ][ #  # ]:          0 :                         uno::Reference< beans::XPropertySet > xEqProp( xRegCurve->getEquationProperties() ) ;
     438         [ #  # ]:          0 :                         if( xEqProp.is())
     439                 :            :                         {
     440 [ #  # ][ #  # ]:          0 :                             xEqProp->setPropertyValue( C2U("ShowEquation"), uno::makeAny( false ));
         [ #  # ][ #  # ]
     441 [ #  # ][ #  # ]:          0 :                             xEqProp->setPropertyValue( C2U("ShowCorrelationCoefficient"), uno::makeAny( false ));
         [ #  # ][ #  # ]
     442                 :          0 :                         }
     443                 :          0 :                     }
     444                 :            :                 }
     445 [ #  # ][ #  # ]:          0 :             }
     446                 :            :         }
     447                 :          0 :         catch( const uno::Exception & ex )
     448                 :            :         {
     449                 :            :             ASSERT_EXCEPTION( ex );
     450                 :            :         }
     451                 :            :     }
     452                 :          0 : }
     453                 :            : 
     454                 :          0 : void RegressionCurveHelper::replaceOrAddCurveAndReduceToOne(
     455                 :            :     tRegressionType eType,
     456                 :            :     uno::Reference< XRegressionCurveContainer > & xRegCnt,
     457                 :            :     const uno::Reference< XComponentContext > & xContext )
     458                 :            : {
     459         [ #  # ]:          0 :     uno::Reference< chart2::XRegressionCurve > xRegressionCurve( getFirstCurveNotMeanValueLine( xRegCnt ));
     460         [ #  # ]:          0 :     if( ! xRegressionCurve.is())
     461         [ #  # ]:          0 :         RegressionCurveHelper::addRegressionCurve( eType, xRegCnt, xContext );
     462                 :            :     else
     463                 :            :     {
     464         [ #  # ]:          0 :         OUString aServiceName( lcl_getServiceNameForType( eType ));
     465         [ #  # ]:          0 :         if( !aServiceName.isEmpty())
     466                 :            :         {
     467         [ #  # ]:          0 :             RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCnt );
     468                 :            :             RegressionCurveHelper::addRegressionCurve(
     469                 :            :                 eType, xRegCnt, xContext,
     470                 :            :                 Reference< beans::XPropertySet >( xRegressionCurve, uno::UNO_QUERY ),
     471 [ #  # ][ #  # ]:          0 :                 xRegressionCurve->getEquationProperties());
         [ #  # ][ #  # ]
     472                 :          0 :         }
     473                 :          0 :     }
     474                 :          0 : }
     475                 :            : 
     476                 :          0 : uno::Reference< chart2::XRegressionCurve > RegressionCurveHelper::getFirstCurveNotMeanValueLine(
     477                 :            :     const Reference< XRegressionCurveContainer > & xRegCnt )
     478                 :            : {
     479         [ #  # ]:          0 :     if( !xRegCnt.is())
     480                 :          0 :         return NULL;
     481                 :            : 
     482                 :            :     try
     483                 :            :     {
     484                 :            :         uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
     485 [ #  # ][ #  # ]:          0 :             xRegCnt->getRegressionCurves());
     486         [ #  # ]:          0 :         ::std::vector< uno::Reference< chart2::XRegressionCurve > > aCurvesToDelete;
     487         [ #  # ]:          0 :         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     488                 :            :         {
     489 [ #  # ][ #  # ]:          0 :             if( ! isMeanValueLine( aCurves[i] ))
                 [ #  # ]
     490                 :            :             {
     491         [ #  # ]:          0 :                 return aCurves[ i ];
     492                 :            :             }
     493 [ #  # ][ #  # ]:          0 :         }
         [ #  # ][ #  # ]
     494                 :            :     }
     495                 :          0 :     catch( const Exception & ex )
     496                 :            :     {
     497                 :            :         ASSERT_EXCEPTION( ex );
     498                 :            :     }
     499                 :            : 
     500                 :          0 :     return NULL;
     501                 :            : }
     502                 :            : 
     503                 :         24 : RegressionCurveHelper::tRegressionType RegressionCurveHelper::getRegressionType(
     504                 :            :     const Reference< XRegressionCurve > & xCurve )
     505                 :            : {
     506                 :         24 :     tRegressionType eResult = REGRESSION_TYPE_UNKNOWN;
     507                 :            : 
     508                 :            :     try
     509                 :            :     {
     510         [ +  - ]:         24 :         Reference< lang::XServiceName > xServName( xCurve, uno::UNO_QUERY );
     511         [ +  - ]:         24 :         if( xServName.is())
     512                 :            :         {
     513 [ +  - ][ +  - ]:         24 :             ::rtl::OUString aServiceName( xServName->getServiceName() );
     514                 :            : 
     515         [ -  + ]:         24 :             if( aServiceName == "com.sun.star.chart2.LinearRegressionCurve" )
     516                 :            :             {
     517                 :          0 :                 eResult = REGRESSION_TYPE_LINEAR;
     518                 :            :             }
     519         [ -  + ]:         24 :             else if( aServiceName == "com.sun.star.chart2.LogarithmicRegressionCurve" )
     520                 :            :             {
     521                 :          0 :                 eResult = REGRESSION_TYPE_LOG;
     522                 :            :             }
     523         [ -  + ]:         24 :             else if( aServiceName == "com.sun.star.chart2.ExponentialRegressionCurve" )
     524                 :            :             {
     525                 :          0 :                 eResult = REGRESSION_TYPE_EXP;
     526                 :            :             }
     527         [ +  + ]:         24 :             else if( aServiceName == "com.sun.star.chart2.PotentialRegressionCurve" )
     528                 :            :             {
     529                 :          6 :                 eResult = REGRESSION_TYPE_POWER;
     530                 :            :             }
     531         [ +  - ]:         18 :             else if( aServiceName == "com.sun.star.chart2.MeanValueRegressionCurve" )
     532                 :            :             {
     533                 :         18 :                 eResult = REGRESSION_TYPE_MEAN_VALUE;
     534                 :         24 :             }
     535         [ #  # ]:         24 :         }
     536                 :            :     }
     537                 :          0 :     catch( const Exception & ex )
     538                 :            :     {
     539                 :            :         ASSERT_EXCEPTION( ex );
     540                 :            :     }
     541                 :            : 
     542                 :         24 :     return eResult;
     543                 :            : }
     544                 :            : 
     545                 :        240 : RegressionCurveHelper::tRegressionType RegressionCurveHelper::getFirstRegressTypeNotMeanValueLine(
     546                 :            :     const Reference< XRegressionCurveContainer > & xRegCnt )
     547                 :            : {
     548                 :        240 :     tRegressionType eResult = REGRESSION_TYPE_NONE;
     549                 :            : 
     550         [ +  - ]:        240 :     if( xRegCnt.is())
     551                 :            :     {
     552                 :            :         Sequence< Reference< XRegressionCurve > > aCurves(
     553 [ +  - ][ +  - ]:        240 :             xRegCnt->getRegressionCurves());
     554         [ +  + ]:        258 :         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     555                 :            :         {
     556 [ +  - ][ +  - ]:         24 :             tRegressionType eType = getRegressionType( aCurves[i] );
     557 [ +  + ][ +  - ]:         24 :             if( eType != REGRESSION_TYPE_MEAN_VALUE &&
     558                 :            :                 eType != REGRESSION_TYPE_UNKNOWN )
     559                 :            :             {
     560                 :          6 :                 eResult = eType;
     561                 :          6 :                 break;
     562                 :            :             }
     563         [ +  - ]:        240 :         }
     564                 :            :     }
     565                 :            : 
     566                 :        240 :     return eResult;
     567                 :            : }
     568                 :            : 
     569                 :        108 : OUString RegressionCurveHelper::getUINameForRegressionCurve( const Reference< XRegressionCurve >& xRegressionCurve )
     570                 :            : {
     571                 :        108 :     OUString aResult;
     572         [ +  - ]:        108 :     Reference< lang::XServiceName > xServiceName( xRegressionCurve, uno::UNO_QUERY );
     573         [ +  - ]:        108 :     if( ! xServiceName.is())
     574                 :            :         return aResult;
     575                 :            : 
     576 [ +  - ][ +  - ]:        108 :     OUString aServiceName( xServiceName->getServiceName());
     577         [ +  + ]:        108 :     if( aServiceName == "com.sun.star.chart2.MeanValueRegressionCurve" )
     578                 :            :     {
     579 [ +  - ][ +  - ]:         76 :         aResult = SCH_RESSTR(STR_REGRESSION_MEAN);
     580                 :            :     }
     581         [ -  + ]:         32 :     else if( aServiceName == "com.sun.star.chart2.LinearRegressionCurve" )
     582                 :            :     {
     583 [ #  # ][ #  # ]:          0 :         aResult = SCH_RESSTR(STR_REGRESSION_LINEAR);
     584                 :            :     }
     585         [ -  + ]:         32 :     else if( aServiceName == "com.sun.star.chart2.LogarithmicRegressionCurve" )
     586                 :            :     {
     587 [ #  # ][ #  # ]:          0 :         aResult = SCH_RESSTR(STR_REGRESSION_LOG);
     588                 :            :     }
     589         [ -  + ]:         32 :     else if( aServiceName == "com.sun.star.chart2.ExponentialRegressionCurve" )
     590                 :            :     {
     591 [ #  # ][ #  # ]:          0 :         aResult = SCH_RESSTR(STR_REGRESSION_EXP);
     592                 :            :     }
     593         [ +  - ]:         32 :     else if( aServiceName == "com.sun.star.chart2.PotentialRegressionCurve" )
     594                 :            :     {
     595 [ +  - ][ +  - ]:         32 :         aResult = SCH_RESSTR(STR_REGRESSION_POWER);
     596                 :            :     }
     597                 :            : 
     598                 :        108 :     return aResult;
     599                 :            : }
     600                 :            : 
     601                 :            : ::std::vector< Reference< chart2::XRegressionCurve > >
     602                 :          0 :     RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine(
     603                 :            :         const Reference< chart2::XDiagram > & xDiagram )
     604                 :            : {
     605         [ #  # ]:          0 :     ::std::vector< Reference< chart2::XRegressionCurve > > aResult;
     606         [ #  # ]:          0 :     ::std::vector< Reference< chart2::XDataSeries > > aSeries( DiagramHelper::getDataSeriesFromDiagram( xDiagram ));
     607 [ #  # ][ #  # ]:          0 :     for( ::std::vector< Reference< chart2::XDataSeries > >::iterator aIt( aSeries.begin());
     608                 :          0 :          aIt != aSeries.end(); ++aIt )
     609                 :            :     {
     610         [ #  # ]:          0 :         Reference< chart2::XRegressionCurveContainer > xCurveCnt( *aIt, uno::UNO_QUERY );
     611         [ #  # ]:          0 :         if( xCurveCnt.is())
     612                 :            :         {
     613                 :            :             uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
     614 [ #  # ][ #  # ]:          0 :                 xCurveCnt->getRegressionCurves());
     615         [ #  # ]:          0 :             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     616                 :            :             {
     617 [ #  # ][ #  # ]:          0 :                 if( ! isMeanValueLine( aCurves[i] ))
                 [ #  # ]
     618 [ #  # ][ #  # ]:          0 :                     aResult.push_back( aCurves[i] );
     619         [ #  # ]:          0 :             }
     620                 :            :         }
     621                 :          0 :     }
     622                 :            : 
     623                 :          0 :     return aResult;
     624                 :            : }
     625                 :            : 
     626                 :          0 : void RegressionCurveHelper::resetEquationPosition(
     627                 :            :     const Reference< chart2::XRegressionCurve > & xCurve )
     628                 :            : {
     629         [ #  # ]:          0 :     if( xCurve.is())
     630                 :            :     {
     631                 :            :         try
     632                 :            :         {
     633         [ #  # ]:          0 :             const OUString aPosPropertyName( RTL_CONSTASCII_USTRINGPARAM( "RelativePosition" ));
     634 [ #  # ][ #  # ]:          0 :             Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties()); // since m233: , uno::UNO_SET_THROW );
     635 [ #  # ][ #  # ]:          0 :             if( xEqProp->getPropertyValue( aPosPropertyName ).hasValue())
                 [ #  # ]
     636 [ #  # ][ #  # ]:          0 :                 xEqProp->setPropertyValue( aPosPropertyName, uno::Any());
                 [ #  # ]
     637                 :            :         }
     638                 :          0 :         catch( const uno::Exception & ex )
     639                 :            :         {
     640                 :            :             ASSERT_EXCEPTION( ex );
     641                 :            :         }
     642                 :            :     }
     643                 :          0 : }
     644                 :            : 
     645                 :          0 : sal_Int32 RegressionCurveHelper::getRegressionCurveIndex(
     646                 :            :     const Reference< chart2::XRegressionCurveContainer > & xContainer,
     647                 :            :     const Reference< chart2::XRegressionCurve > & xCurve )
     648                 :            : {
     649         [ #  # ]:          0 :     if( xContainer.is())
     650                 :            :     {
     651                 :            :         uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
     652 [ #  # ][ #  # ]:          0 :             xContainer->getRegressionCurves());
     653         [ #  # ]:          0 :         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
     654                 :            :         {
     655 [ #  # ][ #  # ]:          0 :             if( xCurve == aCurves[i] )
                 [ #  # ]
     656                 :          0 :                 return i;
     657 [ #  # ][ #  # ]:          0 :         }
     658                 :            :     }
     659                 :          0 :     return -1;
     660                 :            : }
     661                 :            : 
     662                 :         16 : bool RegressionCurveHelper::hasEquation( const Reference< chart2::XRegressionCurve > & xCurve )
     663                 :            : {
     664                 :         16 :     bool bHasEquation = false;
     665         [ +  - ]:         16 :     if( xCurve.is())
     666                 :            :     {
     667 [ +  - ][ +  - ]:         16 :         uno::Reference< beans::XPropertySet > xEquationProp( xCurve->getEquationProperties());
     668         [ +  - ]:         16 :         if( xEquationProp.is())
     669                 :            :         {
     670                 :         16 :             bool bShowEquation = false;
     671                 :         16 :             bool bShowCoefficient = false;
     672 [ +  - ][ +  - ]:         16 :             xEquationProp->getPropertyValue( C2U("ShowEquation")) >>= bShowEquation;
                 [ +  - ]
     673 [ +  - ][ +  - ]:         16 :             xEquationProp->getPropertyValue( C2U("ShowCorrelationCoefficient")) >>= bShowCoefficient;
                 [ +  - ]
     674 [ -  + ][ +  - ]:         16 :             bHasEquation = bShowEquation || bShowCoefficient;
     675                 :         16 :         }
     676                 :            :     }
     677                 :         16 :     return bHasEquation;
     678                 :            : }
     679                 :            : 
     680                 :            : //.............................................................................
     681                 :            : } //namespace chart
     682                 :            : //.............................................................................
     683                 :            : 
     684                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10