LCOV - code coverage report
Current view: top level - chart2/source/tools - TitleHelper.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 134 159 84.3 %
Date: 2012-08-25 Functions: 8 8 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 172 342 50.3 %

           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 "TitleHelper.hxx"
      21                 :            : #include "ChartModelHelper.hxx"
      22                 :            : #include "macros.hxx"
      23                 :            : #include "AxisHelper.hxx"
      24                 :            : #include "DiagramHelper.hxx"
      25                 :            : #include <com/sun/star/chart2/XChartDocument.hpp>
      26                 :            : #include <rtl/ustrbuf.hxx>
      27                 :            : 
      28                 :            : //.............................................................................
      29                 :            : namespace chart
      30                 :            : {
      31                 :            : //.............................................................................
      32                 :            : 
      33                 :            : using namespace ::com::sun::star;
      34                 :            : using namespace ::com::sun::star::chart2;
      35                 :            : using ::com::sun::star::uno::Reference;
      36                 :            : 
      37                 :      17619 : uno::Reference< XTitled > lcl_getTitleParentFromDiagram(
      38                 :            :       TitleHelper::eTitleType nTitleIndex
      39                 :            :     , const uno::Reference< XDiagram >& xDiagram )
      40                 :            : {
      41                 :      17619 :     uno::Reference< XTitled > xResult;
      42                 :            : 
      43 [ +  + ][ +  + ]:      17619 :     if( nTitleIndex == TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION ||
      44                 :            :         nTitleIndex == TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION )
      45                 :            :     {
      46                 :       1966 :         bool bDummy = false;
      47         [ +  - ]:       1966 :         bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy );
      48                 :            : 
      49         [ +  + ]:       1966 :         if( nTitleIndex == TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION )
      50         [ +  + ]:        983 :             nTitleIndex = bIsVertical ? TitleHelper::X_AXIS_TITLE : TitleHelper::Y_AXIS_TITLE;
      51                 :            :         else
      52         [ +  + ]:       1966 :             nTitleIndex = bIsVertical ? TitleHelper::Y_AXIS_TITLE : TitleHelper::X_AXIS_TITLE;
      53                 :            :     }
      54                 :            : 
      55                 :            : 
      56   [ +  +  +  +  :      17619 :     switch( nTitleIndex )
                +  +  - ]
      57                 :            :     {
      58                 :            :         case TitleHelper::SUB_TITLE:
      59         [ +  + ]:       5686 :             if( xDiagram.is())
      60         [ +  - ]:       5644 :                 xResult.set( xDiagram, uno::UNO_QUERY );
      61                 :       5686 :             break;
      62                 :            :         case TitleHelper::X_AXIS_TITLE:
      63         [ +  + ]:       2583 :             if( xDiagram.is())
      64 [ +  - ][ +  - ]:       2541 :                 xResult.set( AxisHelper::getAxis( 0, true, xDiagram ), uno::UNO_QUERY );
      65                 :       2583 :             break;
      66                 :            :         case TitleHelper::Y_AXIS_TITLE:
      67         [ +  + ]:       2583 :             if( xDiagram.is())
      68 [ +  - ][ +  - ]:       2541 :                 xResult.set( AxisHelper::getAxis( 1, true, xDiagram ), uno::UNO_QUERY );
      69                 :       2583 :             break;
      70                 :            :         case TitleHelper::Z_AXIS_TITLE:
      71         [ +  + ]:       1637 :             if( xDiagram.is())
      72 [ +  - ][ +  - ]:       1595 :                 xResult.set( AxisHelper::getAxis( 2, true, xDiagram ), uno::UNO_QUERY );
      73                 :       1637 :             break;
      74                 :            :         case TitleHelper::SECONDARY_X_AXIS_TITLE:
      75         [ +  + ]:       2565 :             if( xDiagram.is())
      76 [ +  - ][ +  - ]:       2523 :                 xResult.set( AxisHelper::getAxis( 0, false, xDiagram ), uno::UNO_QUERY );
      77                 :       2565 :             break;
      78                 :            :         case TitleHelper::SECONDARY_Y_AXIS_TITLE:
      79         [ +  + ]:       2565 :             if( xDiagram.is())
      80 [ +  - ][ +  - ]:       2523 :                 xResult.set( AxisHelper::getAxis( 1, false, xDiagram ), uno::UNO_QUERY );
      81                 :       2565 :             break;
      82                 :            : 
      83                 :            :         case TitleHelper::MAIN_TITLE:
      84                 :            :         default:
      85                 :            :             OSL_FAIL( "Unsupported Title-Type requested" );
      86                 :          0 :             break;
      87                 :            :     }
      88                 :            : 
      89                 :      17619 :     return xResult;
      90                 :            : }
      91                 :            : 
      92                 :      28519 : uno::Reference< XTitled > lcl_getTitleParent( TitleHelper::eTitleType nTitleIndex
      93                 :            :                                               , const uno::Reference< frame::XModel >& xModel )
      94                 :            : {
      95                 :      28519 :     uno::Reference< XTitled > xResult;
      96         [ +  - ]:      28519 :     uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY );
      97                 :      28519 :     uno::Reference< XDiagram > xDiagram;
      98         [ +  - ]:      28519 :     if( xChartDoc.is())
      99 [ +  - ][ +  - ]:      28519 :         xDiagram.set( xChartDoc->getFirstDiagram());
                 [ +  - ]
     100                 :            : 
     101      [ +  +  - ]:      28519 :     switch( nTitleIndex )
     102                 :            :     {
     103                 :            :         case TitleHelper::MAIN_TITLE:
     104         [ +  - ]:      10900 :             xResult.set( xModel, uno::UNO_QUERY );
     105                 :      10900 :             break;
     106                 :            :         case TitleHelper::SUB_TITLE:
     107                 :            :         case TitleHelper::X_AXIS_TITLE:
     108                 :            :         case TitleHelper::Y_AXIS_TITLE:
     109                 :            :         case TitleHelper::Z_AXIS_TITLE:
     110                 :            :         case TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION:
     111                 :            :         case TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION:
     112                 :            :         case TitleHelper::SECONDARY_X_AXIS_TITLE:
     113                 :            :         case TitleHelper::SECONDARY_Y_AXIS_TITLE:
     114 [ +  - ][ +  - ]:      17619 :             xResult.set( lcl_getTitleParentFromDiagram( nTitleIndex, xDiagram ));
     115                 :      17619 :             break;
     116                 :            :         default:
     117                 :            :             OSL_FAIL( "Unsupported Title-Type requested" );
     118                 :          0 :             break;
     119                 :            :     }
     120                 :            : 
     121                 :      28519 :     return xResult;
     122                 :            : }
     123                 :            : 
     124                 :      28479 : uno::Reference< XTitle > TitleHelper::getTitle( TitleHelper::eTitleType nTitleIndex
     125                 :            :                             , const uno::Reference< frame::XModel >& xModel )
     126                 :            : {
     127         [ +  - ]:      28479 :     uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xModel ) );
     128         [ +  + ]:      28479 :     if( xTitled.is())
     129 [ +  - ][ +  - ]:      21578 :         return xTitled->getTitleObject();
     130         [ +  - ]:      28479 :     return NULL;
     131                 :            : }
     132                 :            : 
     133                 :         34 : uno::Reference< XTitle > TitleHelper::createTitle(
     134                 :            :       TitleHelper::eTitleType eTitleType
     135                 :            :     , const rtl::OUString& rTitleText
     136                 :            :     , const uno::Reference< frame::XModel >& xModel
     137                 :            :     , const uno::Reference< uno::XComponentContext > & xContext
     138                 :            :     , ReferenceSizeProvider * pRefSizeProvider )
     139                 :            : {
     140                 :         34 :     uno::Reference< XTitle > xTitle;
     141         [ +  - ]:         34 :     uno::Reference< XTitled > xTitled( lcl_getTitleParent( eTitleType, xModel ) );
     142                 :            : 
     143         [ +  + ]:         34 :     if( !xTitled.is() )
     144                 :            :     {
     145         [ +  - ]:          2 :         uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
     146                 :          2 :         uno::Reference< chart2::XAxis > xAxis;
     147      [ -  -  + ]:          2 :         switch( eTitleType )
     148                 :            :         {
     149                 :            :             case TitleHelper::SECONDARY_X_AXIS_TITLE:
     150 [ #  # ][ #  # ]:          0 :                 xAxis = AxisHelper::createAxis( 0, false, xDiagram, xContext );
     151                 :          0 :                 break;
     152                 :            :             case TitleHelper::SECONDARY_Y_AXIS_TITLE:
     153 [ #  # ][ #  # ]:          0 :                 xAxis = AxisHelper::createAxis( 1, false, xDiagram, xContext );
     154                 :          0 :                break;
     155                 :            :             default:
     156                 :          2 :                break;
     157                 :            :         }
     158         [ +  - ]:          2 :         uno::Reference< beans::XPropertySet > xProps( xAxis, uno::UNO_QUERY );
     159         [ -  + ]:          2 :         if( xProps.is() )
     160                 :            :         {
     161 [ #  # ][ #  # ]:          0 :             xProps->setPropertyValue( C2U( "Show" ), uno::makeAny( sal_False ) );
         [ #  # ][ #  # ]
     162 [ #  # ][ #  # ]:          0 :             xTitled = lcl_getTitleParent( eTitleType, xModel );
     163                 :          2 :         }
     164                 :            :     }
     165                 :            : 
     166         [ +  + ]:         34 :     if(xTitled.is())
     167                 :            :     {
     168         [ +  - ]:         32 :         uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
     169                 :            : 
     170 [ +  - ][ +  - ]:         64 :         xTitle.set( xContext->getServiceManager()->createInstanceWithContext(
                 [ +  - ]
     171                 :            :                         C2U( "com.sun.star.chart2.Title" ),
     172 [ +  - ][ +  - ]:         32 :                         xContext ), uno::UNO_QUERY );
                 [ +  - ]
     173                 :            : 
     174         [ +  - ]:         32 :         if(xTitle.is())
     175                 :            :         {
     176                 :            :             // default char height (main: 13.0 == default)
     177                 :         32 :             float fDefaultCharHeightSub = 11.0;
     178                 :         32 :             float fDefaultCharHeightAxis = 9.0;
     179      [ +  +  + ]:         32 :             switch( eTitleType )
     180                 :            :             {
     181                 :            :                 case TitleHelper::SUB_TITLE:
     182                 :            :                     TitleHelper::setCompleteString(
     183         [ +  - ]:         10 :                         rTitleText, xTitle, xContext, & fDefaultCharHeightSub );
     184                 :         10 :                     break;
     185                 :            :                 case TitleHelper::X_AXIS_TITLE:
     186                 :            :                 case TitleHelper::Y_AXIS_TITLE:
     187                 :            :                 case TitleHelper::Z_AXIS_TITLE:
     188                 :            :                 case TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION:
     189                 :            :                 case TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION:
     190                 :            :                 case TitleHelper::SECONDARY_X_AXIS_TITLE:
     191                 :            :                 case TitleHelper::SECONDARY_Y_AXIS_TITLE:
     192                 :            :                     TitleHelper::setCompleteString(
     193         [ +  - ]:          4 :                         rTitleText, xTitle, xContext, & fDefaultCharHeightAxis );
     194                 :          4 :                     break;
     195                 :            :                 default:
     196         [ +  - ]:         18 :                     TitleHelper::setCompleteString( rTitleText, xTitle, xContext );
     197                 :         18 :                     break;
     198                 :            :             }
     199                 :            : 
     200                 :            :             // set/clear autoscale
     201         [ -  + ]:         32 :             if( pRefSizeProvider )
     202         [ #  # ]:          0 :                 pRefSizeProvider->setValuesAtTitle( xTitle );
     203                 :            : 
     204 [ +  - ][ +  - ]:         32 :             xTitled->setTitleObject( xTitle );
     205                 :            : 
     206                 :            :             //default rotation 90 degree for y axis title in normal coordinatesystems or for x axis title for swapped coordinatesystems
     207 [ +  + ][ +  + ]:         32 :             if( eTitleType == TitleHelper::X_AXIS_TITLE ||
         [ +  - ][ -  + ]
     208                 :            :                 eTitleType == TitleHelper::Y_AXIS_TITLE ||
     209                 :            :                 eTitleType == TitleHelper::SECONDARY_X_AXIS_TITLE ||
     210                 :            :                 eTitleType == TitleHelper::SECONDARY_Y_AXIS_TITLE )
     211                 :            : 
     212                 :            :             {
     213                 :            :                 try
     214                 :            :                 {
     215                 :          4 :                     bool bDummy = false;
     216         [ +  - ]:          4 :                     bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy );
     217                 :            : 
     218         [ +  - ]:          4 :                     Reference< beans::XPropertySet > xTitleProps( xTitle, uno::UNO_QUERY );
     219         [ +  - ]:          4 :                     if( xTitleProps.is() )
     220                 :            :                     {
     221 [ +  - ][ +  + ]:          4 :                         if( (!bIsVertical && eTitleType == TitleHelper::Y_AXIS_TITLE)
         [ -  + ][ #  # ]
         [ +  - ][ +  - ]
         [ -  + ][ #  # ]
     222                 :            :                             || (bIsVertical && eTitleType == TitleHelper::X_AXIS_TITLE)
     223                 :          2 :                             || (!bIsVertical && eTitleType == TitleHelper::SECONDARY_Y_AXIS_TITLE)
     224                 :            :                             || (bIsVertical && eTitleType == TitleHelper::SECONDARY_X_AXIS_TITLE) )
     225                 :            :                         {
     226                 :          2 :                             double fNewAngleDegree = 90.0;
     227 [ +  - ][ +  - ]:          2 :                             xTitleProps->setPropertyValue( C2U( "TextRotation" ), uno::makeAny( fNewAngleDegree ));
         [ +  - ][ +  - ]
     228                 :            :                         }
     229         [ #  # ]:         32 :                     }
     230                 :            :                 }
     231         [ #  # ]:          0 :                 catch( const uno::Exception & ex )
     232                 :            :                 {
     233                 :            :                     ASSERT_EXCEPTION( ex );
     234                 :            :                 }
     235                 :            :             }
     236                 :         32 :         }
     237                 :            :     }
     238                 :         34 :     return xTitle;
     239                 :            : 
     240                 :            : }
     241                 :            : 
     242                 :       6015 : rtl::OUString TitleHelper::getCompleteString( const uno::Reference< XTitle >& xTitle )
     243                 :            : {
     244                 :       6015 :     rtl::OUString aRet;
     245         [ +  + ]:       6015 :     if(!xTitle.is())
     246                 :            :         return aRet;
     247 [ +  - ][ +  - ]:       1002 :     uno::Sequence< uno::Reference< XFormattedString > > aStringList = xTitle->getText();
     248         [ +  + ]:       2004 :     for( sal_Int32 nN=0; nN<aStringList.getLength();nN++ )
     249 [ +  - ][ +  - ]:       1002 :         aRet += aStringList[nN]->getString();
                 [ +  - ]
     250         [ +  - ]:       6015 :     return aRet;
     251                 :            : }
     252                 :            : 
     253                 :         46 : void TitleHelper::setCompleteString( const rtl::OUString& rNewText
     254                 :            :                     , const uno::Reference< XTitle >& xTitle
     255                 :            :                     , const uno::Reference< uno::XComponentContext > & xContext
     256                 :            :                     , float * pDefaultCharHeight /* = 0 */ )
     257                 :            : {
     258                 :            :     //the format of the first old text portion will be maintained if there is any
     259         [ +  - ]:         46 :     if(!xTitle.is())
     260                 :         46 :         return;
     261                 :            : 
     262                 :         46 :     rtl::OUString aNewText = rNewText;
     263                 :            : 
     264                 :         46 :     bool bStacked = false;
     265         [ +  - ]:         46 :     uno::Reference< beans::XPropertySet > xTitleProperties( xTitle, uno::UNO_QUERY );
     266         [ +  - ]:         46 :     if( xTitleProperties.is() )
     267 [ +  - ][ +  - ]:         46 :         xTitleProperties->getPropertyValue( C2U( "StackCharacters" ) ) >>= bStacked;
                 [ +  - ]
     268                 :            : 
     269         [ -  + ]:         46 :     if( bStacked )
     270                 :            :     {
     271                 :            :         //#i99841# remove linebreaks that were added for vertical stacking
     272                 :          0 :         rtl::OUStringBuffer aUnstackedStr;
     273         [ #  # ]:          0 :         rtl::OUStringBuffer aSource(rNewText);
     274                 :            : 
     275                 :          0 :         bool bBreakIgnored = false;
     276                 :          0 :         sal_Int32 nLen = rNewText.getLength();
     277         [ #  # ]:          0 :         for( sal_Int32 nPos = 0; nPos < nLen; ++nPos )
     278                 :            :         {
     279                 :          0 :             sal_Unicode aChar = aSource[nPos];
     280         [ #  # ]:          0 :             if( aChar != '\n' )
     281                 :            :             {
     282         [ #  # ]:          0 :                 aUnstackedStr.append( aChar );
     283                 :          0 :                 bBreakIgnored = false;
     284                 :            :             }
     285 [ #  # ][ #  # ]:          0 :             else if( aChar == '\n' && bBreakIgnored )
     286         [ #  # ]:          0 :                 aUnstackedStr.append( aChar );
     287                 :            :             else
     288                 :          0 :                 bBreakIgnored = true;
     289                 :            :         }
     290         [ #  # ]:          0 :         aNewText = aUnstackedStr.makeStringAndClear();
     291                 :            :     }
     292                 :            : 
     293         [ +  - ]:         46 :     uno::Sequence< uno::Reference< XFormattedString > > aNewStringList(1);
     294                 :            : 
     295 [ +  - ][ +  - ]:         46 :     uno::Sequence< uno::Reference< XFormattedString > >  aOldStringList = xTitle->getText();
     296         [ +  + ]:         46 :     if( aOldStringList.getLength() )
     297                 :            :     {
     298 [ +  - ][ +  - ]:         14 :         aNewStringList[0].set( aOldStringList[0] );
                 [ +  - ]
     299 [ +  - ][ +  - ]:         14 :         aNewStringList[0]->setString( aNewText );
                 [ +  - ]
     300                 :            :     }
     301                 :            :     else
     302                 :            :     {
     303                 :            :         uno::Reference< uno::XInterface > xI(
     304 [ +  - ][ +  - ]:         64 :             xContext->getServiceManager()->createInstanceWithContext(
                 [ +  - ]
     305 [ +  - ][ +  - ]:         32 :             C2U( "com.sun.star.chart2.FormattedString" ), xContext ) );
     306         [ +  - ]:         32 :         uno::Reference< XFormattedString > xFormattedString( xI, uno::UNO_QUERY );
     307                 :            : 
     308         [ +  - ]:         32 :         if(xFormattedString.is())
     309                 :            :         {
     310 [ +  - ][ +  - ]:         32 :             xFormattedString->setString( aNewText );
     311 [ +  - ][ +  - ]:         32 :             aNewStringList[0].set( xFormattedString );
     312         [ +  + ]:         32 :             if( pDefaultCharHeight != 0 )
     313                 :            :             {
     314                 :            :                 try
     315                 :            :                 {
     316         [ +  - ]:         14 :                     uno::Reference< beans::XPropertySet > xProp( xFormattedString, uno::UNO_QUERY_THROW );
     317                 :            : 
     318         [ +  - ]:         14 :                     uno::Any aFontSize( uno::makeAny( *pDefaultCharHeight ));
     319 [ +  - ][ +  - ]:         14 :                     xProp->setPropertyValue( C2U("CharHeight"), aFontSize );
                 [ +  - ]
     320 [ +  - ][ +  - ]:         14 :                     xProp->setPropertyValue( C2U("CharHeightAsian"), aFontSize );
                 [ +  - ]
     321 [ +  - ][ +  - ]:         14 :                     xProp->setPropertyValue( C2U("CharHeightComplex"), aFontSize );
         [ #  # ][ +  - ]
     322                 :            :                 }
     323         [ #  # ]:          0 :                 catch( const uno::Exception & ex )
     324                 :            :                 {
     325                 :            :                     ASSERT_EXCEPTION( ex );
     326                 :            :                 }
     327                 :            :             }
     328                 :         32 :         }
     329                 :            :     }
     330 [ +  - ][ +  - ]:         46 :     xTitle->setText( aNewStringList );
         [ +  - ][ +  - ]
     331                 :            : }
     332                 :            : 
     333                 :          6 : void TitleHelper::removeTitle( TitleHelper::eTitleType nTitleIndex
     334                 :            :                     , const ::com::sun::star::uno::Reference<
     335                 :            :                             ::com::sun::star::frame::XModel >& xModel )
     336                 :            : {
     337         [ +  - ]:          6 :     uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xModel ) );
     338         [ +  - ]:          6 :     if( xTitled.is())
     339                 :            :     {
     340 [ +  - ][ +  - ]:          6 :         xTitled->setTitleObject(NULL);
                 [ +  - ]
     341                 :          6 :     }
     342                 :          6 : }
     343                 :            : 
     344                 :       5339 : bool TitleHelper::getTitleType( eTitleType& rType
     345                 :            :                     , const ::com::sun::star::uno::Reference<
     346                 :            :                         ::com::sun::star::chart2::XTitle >& xTitle
     347                 :            :                     , const ::com::sun::star::uno::Reference<
     348                 :            :                         ::com::sun::star::frame::XModel >& xModel )
     349                 :            : {
     350 [ +  - ][ -  + ]:       5339 :     if( !xTitle.is() || !xModel.is() )
                 [ -  + ]
     351                 :          0 :         return false;
     352                 :            : 
     353                 :       5339 :     Reference< chart2::XTitle > xCurrentTitle;
     354         [ +  - ]:       7410 :     for( sal_Int32 nTitleType = TITLE_BEGIN; nTitleType < NORMAL_TITLE_END; nTitleType++ )
     355                 :            :     {
     356 [ +  - ][ +  - ]:       7410 :         xCurrentTitle = TitleHelper::getTitle( static_cast<eTitleType>(nTitleType), xModel );
     357 [ +  + ][ +  - ]:       7410 :         if( xCurrentTitle == xTitle )
     358                 :            :         {
     359                 :       5339 :             rType = static_cast<eTitleType>(nTitleType);
     360                 :       5339 :             return true;
     361                 :            :         }
     362                 :            :     }
     363                 :            : 
     364                 :       5339 :     return false;
     365                 :            : }
     366                 :            : 
     367                 :            : //.............................................................................
     368                 :            : } //namespace chart
     369                 :            : //.............................................................................
     370                 :            : 
     371                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10