LCOV - code coverage report
Current view: top level - chart2/source/controller/dialogs - tp_DataSource.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 2 527 0.4 %
Date: 2012-08-25 Functions: 2 52 3.8 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 2 1132 0.2 %

           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                 :            : 
      21                 :            : #include "tp_DataSource.hxx"
      22                 :            : #include "tp_DataSource.hrc"
      23                 :            : #include "Strings.hrc"
      24                 :            : #include "ResId.hxx"
      25                 :            : #include "chartview/ChartSfxItemIds.hxx"
      26                 :            : #include "macros.hxx"
      27                 :            : #include "ChartTypeTemplateProvider.hxx"
      28                 :            : #include "RangeSelectionHelper.hxx"
      29                 :            : #include "DataSeriesHelper.hxx"
      30                 :            : #include "tp_DataSourceControls.hxx"
      31                 :            : #include "ControllerLockGuard.hxx"
      32                 :            : #include "DataSourceHelper.hxx"
      33                 :            : #include <com/sun/star/sheet/XRangeSelection.hpp>
      34                 :            : #include <com/sun/star/table/XCellRange.hpp>
      35                 :            : #include <com/sun/star/chart2/XChartType.hpp>
      36                 :            : #include <com/sun/star/chart2/XChartTypeTemplate.hpp>
      37                 :            : #include <com/sun/star/util/XModifiable.hpp>
      38                 :            : #include <com/sun/star/chart2/data/XDataSink.hpp>
      39                 :            : 
      40                 :            : // for RET_OK
      41                 :            : #include <vcl/msgbox.hxx>
      42                 :            : #include <rtl/ustrbuf.hxx>
      43                 :            : 
      44                 :            : #include <functional>
      45                 :            : #include <algorithm>
      46                 :            : #include <map>
      47                 :            : 
      48                 :            : using namespace ::com::sun::star;
      49                 :            : using namespace ::com::sun::star::chart2;
      50                 :            : 
      51                 :            : using ::com::sun::star::uno::Reference;
      52                 :            : using ::com::sun::star::uno::Sequence;
      53                 :            : using ::rtl::OUString;
      54                 :            : using ::rtl::OUStringBuffer;
      55                 :            : 
      56                 :            : // --------------------------------------------------------------------------------
      57                 :            : 
      58                 :            : namespace
      59                 :            : {
      60                 :            : 
      61                 :         16 : const OUString lcl_aLabelRole( RTL_CONSTASCII_USTRINGPARAM( "label" ));
      62                 :            : 
      63                 :          0 : String lcl_GetRoleLBEntry(
      64                 :            :     const OUString & rRole, const OUString & rRange )
      65                 :            : {
      66                 :          0 :     String aEntry( rRole );
      67         [ #  # ]:          0 :     aEntry += '\t';
      68                 :            :     aEntry += String(
      69 [ #  # ][ #  # ]:          0 :         ::chart::DialogModel::ConvertRoleFromInternalToUI( rRole ));
         [ #  # ][ #  # ]
      70         [ #  # ]:          0 :     aEntry += '\t';
      71 [ #  # ][ #  # ]:          0 :     aEntry += String( rRange );
                 [ #  # ]
      72                 :            : 
      73                 :          0 :     return aEntry;
      74                 :            : }
      75                 :            : 
      76                 :          0 : void lcl_UpdateCurrentRange(
      77                 :            :     SvTabListBox & rOutListBox,
      78                 :            :     const OUString & rRole, const OUString & rRange )
      79                 :            : {
      80                 :          0 :     SvLBoxEntry * pEntry = rOutListBox.FirstSelected();
      81         [ #  # ]:          0 :     if( pEntry )
      82         [ #  # ]:          0 :         rOutListBox.SetEntryText( lcl_GetRoleLBEntry( rRole, rRange ), pEntry );
      83                 :          0 : }
      84                 :            : 
      85                 :          0 : bool lcl_UpdateCurrentSeriesName(
      86                 :            :     SvTreeListBox & rOutListBox )
      87                 :            : {
      88                 :          0 :     bool bResult = false;
      89         [ #  # ]:          0 :     ::chart::SeriesEntry * pEntry = dynamic_cast< ::chart::SeriesEntry * >( rOutListBox.FirstSelected());
      90   [ #  #  #  #  :          0 :     if( pEntry &&
           #  # ][ #  # ]
      91                 :          0 :         pEntry->m_xDataSeries.is() &&
      92                 :          0 :         pEntry->m_xChartType.is())
      93                 :            :     {
      94                 :            :         String aLabel( ::chart::DataSeriesHelper::getDataSeriesLabel(
      95                 :            :                            pEntry->m_xDataSeries,
      96 [ #  # ][ #  # ]:          0 :                            pEntry->m_xChartType->getRoleOfSequenceForSeriesLabel()));
         [ #  # ][ #  # ]
      97         [ #  # ]:          0 :         if( aLabel.Len())
      98                 :            :         {
      99         [ #  # ]:          0 :             rOutListBox.SetEntryText( pEntry, aLabel );
     100                 :          0 :             bResult = true;
     101         [ #  # ]:          0 :         }
     102                 :            :     }
     103                 :          0 :     return bResult;
     104                 :            : }
     105                 :            : 
     106                 :          0 : OUString lcl_GetSelectedRole( const SvTabListBox & rRoleListBox, bool bUITranslated = false )
     107                 :            : {
     108                 :          0 :     OUString aResult;
     109         [ #  # ]:          0 :     SvLBoxEntry * pEntry = rRoleListBox.FirstSelected();
     110         [ #  # ]:          0 :     if( pEntry )
     111                 :            :         aResult = OUString( rRoleListBox.GetEntryText( pEntry,
     112 [ #  # ][ #  # ]:          0 :                                                        bUITranslated ? 1 : 0 ));
         [ #  # ][ #  # ]
     113                 :          0 :     return aResult;
     114                 :            : }
     115                 :            : 
     116                 :          0 : OUString lcl_GetSelectedRolesRange( const SvTabListBox & rRoleListBox )
     117                 :            : {
     118                 :          0 :     OUString aResult;
     119         [ #  # ]:          0 :     SvLBoxEntry * pEntry = rRoleListBox.FirstSelected();
     120         [ #  # ]:          0 :     if( pEntry )
     121 [ #  # ][ #  # ]:          0 :         aResult = OUString( rRoleListBox.GetEntryText( pEntry, 2 ));
                 [ #  # ]
     122                 :          0 :     return aResult;
     123                 :            : }
     124                 :            : 
     125                 :          0 : OUString lcl_GetSequenceNameForLabel( ::chart::SeriesEntry * pEntry )
     126                 :            : {
     127                 :          0 :     OUString aResult( RTL_CONSTASCII_USTRINGPARAM("values-y"));
     128         [ #  # ]:          0 :     if( pEntry &&
           [ #  #  #  # ]
     129                 :          0 :         pEntry->m_xChartType.is())
     130                 :            :     {
     131 [ #  # ][ #  # ]:          0 :         aResult = pEntry->m_xChartType->getRoleOfSequenceForSeriesLabel();
     132                 :            :     }
     133                 :          0 :     return aResult;
     134                 :            : }
     135                 :            : 
     136                 :            : static long lcl_pRoleListBoxTabs[] =
     137                 :            :     {   3,        // Number of Tabs
     138                 :            :         0, 0, 75
     139                 :            :     };
     140                 :            : 
     141                 :          0 : void lcl_ShowChooserButton(
     142                 :            :     ::chart::RangeSelectionButton & rChooserButton,
     143                 :            :     Edit & rEditField,
     144                 :            :     sal_Bool bShow )
     145                 :            : {
     146         [ #  # ]:          0 :     if( rChooserButton.IsVisible() != bShow )
     147                 :            :     {
     148         [ #  # ]:          0 :         rChooserButton.Show( bShow );
     149                 :          0 :         sal_Int32 nWidhtDiff = 12 + 4;
     150         [ #  # ]:          0 :         if( bShow )
     151                 :          0 :             nWidhtDiff = -nWidhtDiff;
     152 [ #  # ][ #  # ]:          0 :         Size aSize = rChooserButton.PixelToLogic( rEditField.GetSizePixel(), MAP_APPFONT );
         [ #  # ][ #  # ]
     153                 :          0 :         aSize.setWidth( aSize.getWidth() + nWidhtDiff );
     154 [ #  # ][ #  # ]:          0 :         rEditField.SetSizePixel( rChooserButton.LogicToPixel( aSize, MAP_APPFONT ));
         [ #  # ][ #  # ]
     155                 :            :     }
     156                 :          0 : }
     157                 :            : 
     158                 :          0 : void lcl_enableRangeChoosing( bool bEnable, Dialog * pDialog )
     159                 :            : {
     160         [ #  # ]:          0 :     if( pDialog )
     161                 :            :     {
     162         [ #  # ]:          0 :         pDialog->Show( bEnable ? sal_False : sal_True );
     163         [ #  # ]:          0 :         pDialog->SetModalInputMode( bEnable ? sal_False : sal_True );
     164                 :            :     }
     165                 :          0 : }
     166                 :            : 
     167                 :          0 : void lcl_addLSequenceToDataSource(
     168                 :            :     const Reference< chart2::data::XLabeledDataSequence > & xLSequence,
     169                 :            :     const Reference< chart2::data::XDataSource > & xSource )
     170                 :            : {
     171         [ #  # ]:          0 :     Reference< data::XDataSink > xSink( xSource, uno::UNO_QUERY );
     172         [ #  # ]:          0 :     if( xSink.is())
     173                 :            :     {
     174 [ #  # ][ #  # ]:          0 :         Sequence< Reference< chart2::data::XLabeledDataSequence > > aData( xSource->getDataSequences());
     175         [ #  # ]:          0 :         aData.realloc( aData.getLength() + 1 );
     176 [ #  # ][ #  # ]:          0 :         aData[ aData.getLength() - 1 ] = xLSequence;
     177 [ #  # ][ #  # ]:          0 :         xSink->setData( aData );
                 [ #  # ]
     178                 :          0 :     }
     179                 :          0 : }
     180                 :            : 
     181                 :          0 : Reference< chart2::data::XLabeledDataSequence > lcl_findLSequenceWithOnlyLabel(
     182                 :            :     const Reference< chart2::data::XDataSource > & xDataSource )
     183                 :            : {
     184                 :          0 :     Reference< chart2::data::XLabeledDataSequence > xResult;
     185 [ #  # ][ #  # ]:          0 :     Sequence< Reference< chart2::data::XLabeledDataSequence > > aSequences( xDataSource->getDataSequences());
     186                 :            : 
     187         [ #  # ]:          0 :     for( sal_Int32 i=0; i<aSequences.getLength(); ++i )
     188                 :            :     {
     189                 :            :         // no values are set but a label exists
     190 [ #  # ][ #  # ]:          0 :         if( ! aSequences[i]->getValues().is() &&
                 [ #  # ]
           [ #  #  #  # ]
                 [ #  # ]
           [ #  #  #  # ]
     191 [ #  # ][ #  # ]:          0 :             aSequences[i]->getLabel().is())
         [ #  # ][ #  # ]
                 [ #  # ]
     192                 :            :         {
     193 [ #  # ][ #  # ]:          0 :             xResult.set( aSequences[i] );
     194                 :          0 :             break;
     195                 :            :         }
     196                 :            :     }
     197                 :            : 
     198         [ #  # ]:          0 :     return xResult;
     199                 :            : }
     200                 :            : 
     201                 :          0 : void lcl_shiftControlY( Control & rControl, long nYOffset )
     202                 :            : {
     203         [ #  # ]:          0 :     Point aPos( rControl.GetPosPixel());
     204                 :          0 :     aPos.setY( aPos.getY() + nYOffset );
     205         [ #  # ]:          0 :     rControl.SetPosPixel( aPos );
     206                 :          0 : }
     207                 :            : 
     208                 :          0 : void lcl_increaseHeightOfControl( Control & rControl, long nYOffset )
     209                 :            : {
     210         [ #  # ]:          0 :     Size aSize( rControl.GetSizePixel());
     211                 :          0 :     aSize.setHeight( aSize.getHeight () + nYOffset );
     212         [ #  # ]:          0 :     rControl.SetSizePixel( aSize );
     213                 :          0 : }
     214                 :            : 
     215                 :            : } //  anonymous namespace
     216                 :            : 
     217                 :            : // --------------------------------------------------------------------------------
     218                 :            : 
     219                 :            : namespace chart
     220                 :            : {
     221                 :            : 
     222                 :          0 : DataSourceTabPage::DataSourceTabPage(
     223                 :            :     Window * pParent,
     224                 :            :     DialogModel & rDialogModel,
     225                 :            :     ChartTypeTemplateProvider* pTemplateProvider,
     226                 :            :     Dialog * pParentDialog,
     227                 :            :     bool bHideDescription /* = false */ ) :
     228                 :            :         ::svt::OWizardPage( pParent, SchResId( TP_DATA_SOURCE )),
     229                 :            : 
     230                 :            :     m_aFT_CAPTION     ( this, SchResId( FT_CAPTION_FOR_WIZARD )),
     231                 :            :     m_aFT_SERIES      ( this, SchResId( FT_SERIES      )),
     232         [ #  # ]:          0 :     m_apLB_SERIES( new SeriesListBox( this, SchResId( LB_SERIES ))),
     233                 :            :     m_aBTN_ADD        ( this, SchResId( BTN_ADD        )),
     234                 :            :     m_aBTN_REMOVE     ( this, SchResId( BTN_REMOVE     )),
     235                 :            :     m_aBTN_UP         ( this, SchResId( BTN_UP         )),
     236                 :            :     m_aBTN_DOWN       ( this, SchResId( BTN_DOWN       )),
     237                 :            :     m_aFT_ROLE        ( this, SchResId( FT_ROLE        )),
     238                 :            :     m_aLB_ROLE        ( this, SchResId( LB_ROLE        )),
     239                 :            :     m_aFT_RANGE       ( this, SchResId( FT_RANGE       )),
     240                 :            :     m_aEDT_RANGE      ( this, SchResId( EDT_RANGE      )),
     241                 :            :     m_aIMB_RANGE_MAIN ( this, SchResId( IMB_RANGE_MAIN )),
     242                 :            :     m_aFT_CATEGORIES  ( this, SchResId( FT_CATEGORIES  )),
     243                 :            :     m_aFT_DATALABELS  ( this, SchResId( FT_DATALABELS  )),
     244                 :            :     m_aEDT_CATEGORIES ( this, SchResId( EDT_CATEGORIES )),
     245                 :            :     m_aIMB_RANGE_CAT  ( this, SchResId( IMB_RANGE_CAT  )),
     246                 :            : 
     247                 :            :     m_pTemplateProvider( pTemplateProvider ),
     248                 :            :     m_rDialogModel( rDialogModel ),
     249                 :            : 
     250                 :            :     m_pCurrentRangeChoosingField( 0 ),
     251                 :            :     m_bIsDirty( false ),
     252                 :            :     m_pParentDialog( pParentDialog ),
     253 [ #  # ][ #  # ]:          0 :     m_pTabPageNotifiable( dynamic_cast< TabPageNotifiable * >( pParentDialog ))
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     254                 :            : {
     255         [ #  # ]:          0 :     FreeResource();
     256                 :            : 
     257         [ #  # ]:          0 :     if( bHideDescription )
     258                 :            :     {
     259                 :            :         // note: the offset should be a negative value for shifting upwards, the
     260                 :            :         // 4 is for the offset difference between a wizard page and a tab-page
     261 [ #  # ][ #  # ]:          0 :         long nYOffset = - ( m_aFT_SERIES.GetPosPixel().getY() - m_aFT_CAPTION.GetPosPixel().getY() + 4 );
     262                 :          0 :         long nUpShift = - 2;
     263                 :          0 :         long nYResize = - (nYOffset - nUpShift);
     264         [ #  # ]:          0 :         m_aFT_CAPTION.Hide();
     265                 :            : 
     266                 :            :         // shift list boxes and enlarge them by the space saved by hiding the caption
     267         [ #  # ]:          0 :         lcl_shiftControlY( m_aFT_SERIES, nYOffset );
     268         [ #  # ]:          0 :         lcl_shiftControlY( *(m_apLB_SERIES.get()), nYOffset );
     269         [ #  # ]:          0 :         lcl_increaseHeightOfControl( *(m_apLB_SERIES.get()), nYResize );
     270                 :            : 
     271         [ #  # ]:          0 :         lcl_shiftControlY( m_aFT_ROLE, nYOffset );
     272         [ #  # ]:          0 :         lcl_shiftControlY( m_aLB_ROLE, nYOffset );
     273         [ #  # ]:          0 :         lcl_increaseHeightOfControl( m_aLB_ROLE, nYResize );
     274                 :            : 
     275         [ #  # ]:          0 :         lcl_shiftControlY( m_aBTN_ADD, nUpShift );
     276         [ #  # ]:          0 :         lcl_shiftControlY( m_aBTN_REMOVE, nUpShift );
     277         [ #  # ]:          0 :         lcl_shiftControlY( m_aBTN_UP, nUpShift );
     278         [ #  # ]:          0 :         lcl_shiftControlY( m_aBTN_DOWN, nUpShift );
     279         [ #  # ]:          0 :         lcl_shiftControlY( m_aFT_RANGE, nUpShift );
     280         [ #  # ]:          0 :         lcl_shiftControlY( m_aEDT_RANGE, nUpShift );
     281         [ #  # ]:          0 :         lcl_shiftControlY( m_aIMB_RANGE_MAIN, nUpShift );
     282         [ #  # ]:          0 :         lcl_shiftControlY( m_aFT_CATEGORIES, nUpShift );
     283         [ #  # ]:          0 :         lcl_shiftControlY( m_aFT_DATALABELS, nUpShift );
     284         [ #  # ]:          0 :         lcl_shiftControlY( m_aEDT_CATEGORIES, nUpShift );
     285         [ #  # ]:          0 :         lcl_shiftControlY( m_aIMB_RANGE_CAT, nUpShift );
     286                 :            :     }
     287                 :            :     else
     288                 :            :     {
     289                 :            :         // make font of caption bold
     290         [ #  # ]:          0 :         Font aFont( m_aFT_CAPTION.GetControlFont() );
     291         [ #  # ]:          0 :         aFont.SetWeight( WEIGHT_BOLD );
     292         [ #  # ]:          0 :         m_aFT_CAPTION.SetControlFont( aFont );
     293                 :            : 
     294                 :            :         // no mnemonic
     295 [ #  # ][ #  # ]:          0 :         m_aFT_CAPTION.SetStyle( m_aFT_CAPTION.GetStyle() | WB_NOLABEL );
                 [ #  # ]
     296                 :            :     }
     297                 :            : 
     298 [ #  # ][ #  # ]:          0 :     m_aFixedTextRange = OUString( m_aFT_RANGE.GetText() );
                 [ #  # ]
     299 [ #  # ][ #  # ]:          0 :     this->SetText( String( SchResId( STR_OBJECT_DATASERIES_PLURAL ) ) );
         [ #  # ][ #  # ]
     300                 :            : 
     301                 :            :     // set handlers
     302         [ #  # ]:          0 :     m_apLB_SERIES->SetSelectHdl( LINK( this, DataSourceTabPage, SeriesSelectionChangedHdl ));
     303                 :            : 
     304 [ #  # ][ #  # ]:          0 :     m_aLB_ROLE.SetStyle( m_aLB_ROLE.GetStyle() | WB_HSCROLL | WB_CLIPCHILDREN );
     305         [ #  # ]:          0 :     m_aLB_ROLE.SetSelectionMode( SINGLE_SELECTION );
     306         [ #  # ]:          0 :     m_aLB_ROLE.SetSelectHdl( LINK( this, DataSourceTabPage, RoleSelectionChangedHdl ));
     307                 :            : 
     308 [ #  # ][ #  # ]:          0 :     m_aEDT_RANGE.SetKeyInputHdl( LINK( this, DataSourceTabPage, MainRangeButtonClickedHdl ));
     309 [ #  # ][ #  # ]:          0 :     m_aEDT_CATEGORIES.SetKeyInputHdl( LINK( this, DataSourceTabPage, CategoriesRangeButtonClickedHdl ));
     310                 :            : 
     311         [ #  # ]:          0 :     m_aIMB_RANGE_MAIN.SetClickHdl( LINK( this, DataSourceTabPage, MainRangeButtonClickedHdl ));
     312         [ #  # ]:          0 :     m_aIMB_RANGE_CAT.SetClickHdl( LINK( this, DataSourceTabPage, CategoriesRangeButtonClickedHdl ));
     313                 :            : 
     314         [ #  # ]:          0 :     m_aBTN_ADD.SetClickHdl( LINK( this, DataSourceTabPage, AddButtonClickedHdl ));
     315         [ #  # ]:          0 :     m_aBTN_REMOVE.SetClickHdl( LINK( this, DataSourceTabPage, RemoveButtonClickedHdl ));
     316                 :            : 
     317         [ #  # ]:          0 :     m_aBTN_UP.SetClickHdl( LINK( this, DataSourceTabPage, UpButtonClickedHdl ));
     318         [ #  # ]:          0 :     m_aBTN_DOWN.SetClickHdl( LINK( this, DataSourceTabPage, DownButtonClickedHdl ));
     319                 :            : 
     320         [ #  # ]:          0 :     m_aEDT_RANGE.SetModifyHdl( LINK( this, DataSourceTabPage, RangeModifiedHdl ));
     321         [ #  # ]:          0 :     m_aEDT_CATEGORIES.SetModifyHdl( LINK( this, DataSourceTabPage, RangeModifiedHdl ));
     322         [ #  # ]:          0 :     m_aEDT_RANGE.SetUpdateDataHdl( LINK( this, DataSourceTabPage, RangeUpdateDataHdl ));
     323         [ #  # ]:          0 :     m_aEDT_CATEGORIES.SetUpdateDataHdl( LINK( this, DataSourceTabPage, RangeUpdateDataHdl ));
     324                 :            : 
     325                 :            :     // #i75179# enable setting the background to a different color
     326 [ #  # ][ #  # ]:          0 :     m_aEDT_RANGE.SetStyle( m_aEDT_RANGE.GetStyle() | WB_FORCECTRLBACKGROUND );
     327 [ #  # ][ #  # ]:          0 :     m_aEDT_CATEGORIES.SetStyle( m_aEDT_CATEGORIES.GetStyle() | WB_FORCECTRLBACKGROUND );
     328                 :            : 
     329                 :            :     // set symbol font for arrows
     330                 :            :     // note: StarSymbol is substituted to OpenSymbol for OOo
     331         [ #  # ]:          0 :     Font aSymbolFont( m_aBTN_UP.GetFont());
     332 [ #  # ][ #  # ]:          0 :     aSymbolFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM( "StarSymbol" )));
         [ #  # ][ #  # ]
     333         [ #  # ]:          0 :     m_aBTN_UP.SetControlFont( aSymbolFont );
     334         [ #  # ]:          0 :     m_aBTN_DOWN.SetControlFont( aSymbolFont );
     335                 :            : 
     336                 :            :     // set button text
     337                 :          0 :     sal_Unicode cBlackUpPointingTriangle( 0x25b2 );
     338                 :          0 :     sal_Unicode cBlackDownPointingTriangle( 0x25bc );
     339 [ #  # ][ #  # ]:          0 :     m_aBTN_UP.SetText( rtl::OUString( cBlackUpPointingTriangle ));
                 [ #  # ]
     340 [ #  # ][ #  # ]:          0 :     m_aBTN_DOWN.SetText( rtl::OUString( cBlackDownPointingTriangle ));
                 [ #  # ]
     341                 :            : 
     342                 :            :     // init controls
     343         [ #  # ]:          0 :     m_aLB_ROLE.SetTabs( lcl_pRoleListBoxTabs, MAP_APPFONT );
     344         [ #  # ]:          0 :     m_aLB_ROLE.Show();
     345                 :            : 
     346         [ #  # ]:          0 :     updateControlsFromDialogModel();
     347                 :            : 
     348                 :            :     // select first series
     349 [ #  # ][ #  # ]:          0 :     if( m_apLB_SERIES->First())
     350 [ #  # ][ #  # ]:          0 :         m_apLB_SERIES->Select( m_apLB_SERIES->First());
     351         [ #  # ]:          0 :     m_apLB_SERIES->GrabFocus();
     352 [ #  # ][ #  # ]:          0 :     m_aBTN_UP.SetAccessibleName(String(SchResId(STR_BUTTON_UP)));
         [ #  # ][ #  # ]
     353 [ #  # ][ #  # ]:          0 :     m_aBTN_DOWN.SetAccessibleName(String(SchResId(STR_BUTTON_DOWN)));
         [ #  # ][ #  # ]
                 [ #  # ]
     354                 :          0 : }
     355                 :            : 
     356 [ #  # ][ #  # ]:          0 : DataSourceTabPage::~DataSourceTabPage()
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     357         [ #  # ]:          0 : {}
     358                 :            : 
     359                 :          0 : void DataSourceTabPage::ActivatePage()
     360                 :            : {
     361                 :          0 :     OWizardPage::ActivatePage();
     362                 :          0 :     updateControlsFromDialogModel();
     363                 :          0 : }
     364                 :            : 
     365                 :          0 : void DataSourceTabPage::initializePage()
     366                 :            : {
     367                 :          0 : }
     368                 :            : 
     369                 :          0 : void DataSourceTabPage::DeactivatePage()
     370                 :            : {
     371                 :          0 :     commitPage();
     372                 :          0 :     svt::OWizardPage::DeactivatePage();
     373                 :          0 : }
     374                 :            : 
     375                 :          0 : void DataSourceTabPage::commitPage()
     376                 :            : {
     377                 :          0 :     commitPage(::svt::WizardTypes::eFinish);
     378                 :          0 : }
     379                 :            : 
     380                 :          0 : sal_Bool DataSourceTabPage::commitPage( ::svt::WizardTypes::CommitPageReason /*eReason*/ )
     381                 :            : {
     382                 :            :     //ranges may have been edited in the meanwhile (dirty is true in that case here)
     383         [ #  # ]:          0 :     if( isValid() )
     384                 :            :     {
     385                 :          0 :         updateModelFromControl( 0 /*update all*/ );
     386                 :          0 :         return sal_True;//return false if this page should not be left
     387                 :            :     }
     388                 :            :     else
     389                 :          0 :         return sal_False;
     390                 :            : }
     391                 :            : 
     392                 :          0 : bool DataSourceTabPage::isRangeFieldContentValid( Edit & rEdit )
     393                 :            : {
     394 [ #  # ][ #  # ]:          0 :     OUString aRange( rEdit.GetText());
                 [ #  # ]
     395                 :          0 :     bool bIsValid = ( aRange.isEmpty() ) ||
     396 [ #  # ][ #  # ]:          0 :         m_rDialogModel.getRangeSelectionHelper()->verifyCellRange( aRange );
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     397                 :            : 
     398         [ #  # ]:          0 :     if( bIsValid )
     399                 :            :     {
     400         [ #  # ]:          0 :         rEdit.SetControlForeground();
     401         [ #  # ]:          0 :         rEdit.SetControlBackground();
     402                 :            :     }
     403                 :            :     else
     404                 :            :     {
     405         [ #  # ]:          0 :         rEdit.SetControlBackground( RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR );
     406         [ #  # ]:          0 :         rEdit.SetControlForeground( RANGE_SELECTION_INVALID_RANGE_FOREGROUND_COLOR );
     407                 :            :     }
     408                 :            : 
     409                 :          0 :     return bIsValid;
     410                 :            : }
     411                 :            : 
     412                 :          0 : bool DataSourceTabPage::isValid()
     413                 :            : {
     414                 :          0 :     bool bRoleRangeValid = true;
     415                 :          0 :     bool bCategoriesRangeValid = true;
     416                 :          0 :     bool bHasSelectedEntry = (m_apLB_SERIES->FirstSelected() != 0);
     417                 :            : 
     418         [ #  # ]:          0 :     if( bHasSelectedEntry )
     419                 :          0 :         bRoleRangeValid = isRangeFieldContentValid( m_aEDT_RANGE );
     420         [ #  # ]:          0 :     if( m_aEDT_CATEGORIES.IsEnabled() )
     421                 :          0 :         bCategoriesRangeValid = isRangeFieldContentValid( m_aEDT_CATEGORIES );
     422 [ #  # ][ #  # ]:          0 :     bool bValid = ( bRoleRangeValid && bCategoriesRangeValid );
     423                 :            : 
     424         [ #  # ]:          0 :     if( m_pTabPageNotifiable )
     425                 :            :     {
     426         [ #  # ]:          0 :         if( bValid )
     427                 :          0 :             m_pTabPageNotifiable->setValidPage( this );
     428                 :            :         else
     429                 :          0 :             m_pTabPageNotifiable->setInvalidPage( this );
     430                 :            :     }
     431                 :            : 
     432                 :          0 :     return bValid;
     433                 :            : }
     434                 :            : 
     435                 :          0 : void DataSourceTabPage::setDirty()
     436                 :            : {
     437                 :          0 :     m_bIsDirty = true;
     438                 :          0 : }
     439                 :            : 
     440                 :          0 : void DataSourceTabPage::updateControlsFromDialogModel()
     441                 :            : {
     442                 :            :     // series
     443                 :          0 :     fillSeriesListBox();
     444                 :          0 :     SeriesSelectionChangedHdl( 0 );
     445                 :            : 
     446                 :            :     // categories
     447 [ #  # ][ #  # ]:          0 :     m_aEDT_CATEGORIES.SetText( String( m_rDialogModel.getCategoriesRange() ));
                 [ #  # ]
     448                 :            : 
     449                 :          0 :     updateControlState();
     450                 :          0 : }
     451                 :            : 
     452                 :          0 : void DataSourceTabPage::fillSeriesListBox()
     453                 :            : {
     454         [ #  # ]:          0 :     m_apLB_SERIES->SetUpdateMode( sal_False );
     455                 :            : 
     456                 :          0 :     Reference< XDataSeries > xSelected;
     457 [ #  # ][ #  # ]:          0 :     SeriesEntry * pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     458         [ #  # ]:          0 :     if( pEntry )
     459         [ #  # ]:          0 :         xSelected.set( pEntry->m_xDataSeries );
     460                 :            : 
     461                 :          0 :     bool bHasSelectedEntry = (pEntry != 0);
     462                 :          0 :     SvLBoxEntry * pSelectedEntry = 0;
     463         [ #  # ]:          0 :     m_apLB_SERIES->Clear();
     464                 :            : 
     465                 :            :     ::std::vector< DialogModel::tSeriesWithChartTypeByName > aSeries(
     466         [ #  # ]:          0 :         m_rDialogModel.getAllDataSeriesWithLabel() );
     467                 :            : 
     468                 :          0 :     sal_Int32 nUnnamedSeriesIndex = 1;
     469 [ #  # ][ #  # ]:          0 :     for( ::std::vector< DialogModel::tSeriesWithChartTypeByName >::const_iterator aIt = aSeries.begin();
                 [ #  # ]
     470                 :          0 :          aIt != aSeries.end(); ++aIt )
     471                 :            :     {
     472         [ #  # ]:          0 :         String aLabel( (*aIt).first );
     473         [ #  # ]:          0 :         if( !aLabel.Len())
     474                 :            :         {
     475         [ #  # ]:          0 :             if( nUnnamedSeriesIndex > 1 )
     476                 :            :             {
     477 [ #  # ][ #  # ]:          0 :                 OUString aResString( String( ::chart::SchResId( STR_DATA_UNNAMED_SERIES_WITH_INDEX )));
         [ #  # ][ #  # ]
     478                 :            : 
     479                 :            :                 // replace index of unnamed series
     480         [ #  # ]:          0 :                 const OUString aReplacementStr( RTL_CONSTASCII_USTRINGPARAM( "%NUMBER" ));
     481                 :          0 :                 sal_Int32 nIndex = aResString.indexOf( aReplacementStr );
     482         [ #  # ]:          0 :                 if( nIndex != -1 )
     483                 :            :                     aLabel = String( aResString.replaceAt(
     484                 :            :                                          nIndex, aReplacementStr.getLength(),
     485 [ #  # ][ #  # ]:          0 :                                          rtl::OUString::valueOf(nUnnamedSeriesIndex)));
                 [ #  # ]
     486                 :            :             }
     487         [ #  # ]:          0 :             if( aLabel.Len() == 0 )
     488 [ #  # ][ #  # ]:          0 :                 aLabel = String( ::chart::SchResId( STR_DATA_UNNAMED_SERIES ));
         [ #  # ][ #  # ]
     489                 :            : 
     490                 :          0 :             ++nUnnamedSeriesIndex;
     491                 :            :         }
     492                 :            :         pEntry = dynamic_cast< SeriesEntry * >(
     493 [ #  # ][ #  # ]:          0 :             m_apLB_SERIES->InsertEntry( aLabel ));
     494         [ #  # ]:          0 :         if( pEntry )
     495                 :            :         {
     496         [ #  # ]:          0 :             pEntry->m_xDataSeries.set( (*aIt).second.first );
     497         [ #  # ]:          0 :             pEntry->m_xChartType.set(  (*aIt).second.second );
     498 [ #  # ][ #  # ]:          0 :             if( bHasSelectedEntry && ((*aIt).second.first == xSelected))
         [ #  # ][ #  # ]
     499                 :          0 :                 pSelectedEntry = pEntry;
     500                 :            :         }
     501         [ #  # ]:          0 :     }
     502                 :            : 
     503 [ #  # ][ #  # ]:          0 :     if( bHasSelectedEntry && pSelectedEntry )
     504         [ #  # ]:          0 :         m_apLB_SERIES->Select( pSelectedEntry );
     505                 :            : 
     506         [ #  # ]:          0 :     m_apLB_SERIES->SetUpdateMode( sal_True );
     507                 :          0 : }
     508                 :            : 
     509                 :          0 : void DataSourceTabPage::fillRoleListBox()
     510                 :            : {
     511         [ #  # ]:          0 :     SeriesEntry * pSeriesEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     512                 :          0 :     bool bHasSelectedEntry = (pSeriesEntry != 0);
     513                 :            : 
     514                 :          0 :     SvLBoxEntry * pRoleEntry =  m_aLB_ROLE.FirstSelected();
     515                 :          0 :     sal_uLong nRoleIndex = SAL_MAX_UINT32;
     516         [ #  # ]:          0 :     if( pRoleEntry )
     517                 :          0 :         nRoleIndex = m_aLB_ROLE.GetModel()->GetAbsPos( pRoleEntry );
     518                 :            : 
     519         [ #  # ]:          0 :     if( bHasSelectedEntry )
     520                 :            :     {
     521                 :            :         DialogModel::tRolesWithRanges aRoles(
     522                 :            :             m_rDialogModel.getRolesWithRanges(
     523                 :            :                 pSeriesEntry->m_xDataSeries,
     524                 :            :                 lcl_GetSequenceNameForLabel( pSeriesEntry ),
     525 [ #  # ][ #  # ]:          0 :                 pSeriesEntry->m_xChartType ));
     526                 :            : 
     527                 :            :         // fill role list
     528         [ #  # ]:          0 :         m_aLB_ROLE.SetUpdateMode( sal_False );
     529         [ #  # ]:          0 :         m_aLB_ROLE.Clear();
     530         [ #  # ]:          0 :         m_aLB_ROLE.RemoveSelection();
     531                 :            : 
     532         [ #  # ]:          0 :         for( DialogModel::tRolesWithRanges::const_iterator aIt( aRoles.begin());
     533                 :          0 :              aIt != aRoles.end(); ++ aIt )
     534                 :            :         {
     535 [ #  # ][ #  # ]:          0 :             m_aLB_ROLE.InsertEntry( lcl_GetRoleLBEntry( aIt->first, aIt->second ));
                 [ #  # ]
     536                 :            :         }
     537                 :            : 
     538                 :            :         // series may contain no roles, check listbox size before selecting entries
     539         [ #  # ]:          0 :         if( m_aLB_ROLE.GetEntryCount() > 0 )
     540                 :            :         {
     541         [ #  # ]:          0 :             if( nRoleIndex >= m_aLB_ROLE.GetEntryCount())
     542                 :          0 :                 nRoleIndex = 0;
     543 [ #  # ][ #  # ]:          0 :             m_aLB_ROLE.Select( m_aLB_ROLE.GetEntry( nRoleIndex ));
     544                 :            :         }
     545                 :            : 
     546         [ #  # ]:          0 :         m_aLB_ROLE.SetUpdateMode( sal_True );
     547                 :            :     }
     548                 :          0 : }
     549                 :            : 
     550                 :          0 : void DataSourceTabPage::updateControlState()
     551                 :            : {
     552                 :          0 :     SvLBoxEntry * pSeriesEntry = m_apLB_SERIES->FirstSelected();
     553                 :          0 :     bool bHasSelectedSeries = (pSeriesEntry != 0);
     554                 :          0 :     bool bHasValidRole = false;
     555         [ #  # ]:          0 :     bool bHasRangeChooser = m_rDialogModel.getRangeSelectionHelper()->hasRangeSelection();
     556                 :            : 
     557         [ #  # ]:          0 :     if( bHasSelectedSeries )
     558                 :            :     {
     559                 :          0 :         SvLBoxEntry * pRoleEntry =  m_aLB_ROLE.FirstSelected();
     560                 :          0 :         bHasValidRole = (pRoleEntry != 0);
     561                 :            :     }
     562                 :            : 
     563                 :          0 :     m_aBTN_ADD.Enable( true );
     564                 :          0 :     m_aBTN_REMOVE.Enable( bHasSelectedSeries );
     565                 :            : 
     566 [ #  # ][ #  # ]:          0 :     m_aBTN_UP.Enable( bHasSelectedSeries && (pSeriesEntry != m_apLB_SERIES->First()));
     567 [ #  # ][ #  # ]:          0 :     m_aBTN_DOWN.Enable( bHasSelectedSeries && (pSeriesEntry != m_apLB_SERIES->Last()));
     568                 :            : 
     569                 :          0 :     bool bHasCategories = m_rDialogModel.isCategoryDiagram();
     570                 :            : 
     571                 :          0 :     m_aFT_DATALABELS.Show(!bHasCategories);
     572                 :          0 :     m_aFT_CATEGORIES.Show( bHasCategories);
     573                 :          0 :     sal_Bool bShowIB = bHasRangeChooser;
     574                 :          0 :     lcl_ShowChooserButton( m_aIMB_RANGE_CAT, m_aEDT_CATEGORIES, bShowIB );
     575                 :            : 
     576                 :          0 :     m_aFT_SERIES.Enable();
     577                 :          0 :     m_apLB_SERIES->Enable();
     578                 :            : 
     579                 :          0 :     m_aFT_ROLE.Enable( bHasSelectedSeries );
     580                 :          0 :     m_aLB_ROLE.Enable( bHasSelectedSeries );
     581                 :            : 
     582                 :          0 :     m_aFT_RANGE.Enable( bHasValidRole );
     583                 :          0 :     m_aEDT_RANGE.Enable( bHasValidRole );
     584                 :          0 :     lcl_ShowChooserButton( m_aIMB_RANGE_MAIN, m_aEDT_RANGE, bShowIB );
     585                 :          0 :     isValid();
     586                 :          0 : }
     587                 :            : 
     588                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, SeriesSelectionChangedHdl)
     589                 :            : {
     590                 :          0 :     m_rDialogModel.startControllerLockTimer();
     591         [ #  # ]:          0 :     if( m_apLB_SERIES->FirstSelected())
     592                 :            :     {
     593                 :          0 :         fillRoleListBox();
     594                 :          0 :         RoleSelectionChangedHdl( 0 );
     595                 :            :     }
     596                 :          0 :     updateControlState();
     597                 :            : 
     598                 :          0 :     return 0;
     599                 :            : }
     600                 :            : 
     601                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, RoleSelectionChangedHdl)
     602                 :            : {
     603                 :          0 :     m_rDialogModel.startControllerLockTimer();
     604                 :          0 :     SvLBoxEntry * pEntry = m_aLB_ROLE.FirstSelected();
     605         [ #  # ]:          0 :     if( pEntry )
     606                 :            :     {
     607 [ #  # ][ #  # ]:          0 :         OUString aRange( m_aEDT_RANGE.GetText());
                 [ #  # ]
     608         [ #  # ]:          0 :         OUString aSelectedRoleUI = lcl_GetSelectedRole( m_aLB_ROLE, true );
     609         [ #  # ]:          0 :         OUString aSelectedRange = lcl_GetSelectedRolesRange( m_aLB_ROLE );
     610                 :            : 
     611                 :            :         // replace role in fixed text label
     612         [ #  # ]:          0 :         const OUString aReplacementStr( RTL_CONSTASCII_USTRINGPARAM( "%VALUETYPE" ));
     613                 :          0 :         sal_Int32 nIndex = m_aFixedTextRange.indexOf( aReplacementStr );
     614         [ #  # ]:          0 :         if( nIndex != -1 )
     615                 :            :         {
     616                 :            :             m_aFT_RANGE.SetText(
     617                 :            :                 String( m_aFixedTextRange.replaceAt(
     618 [ #  # ][ #  # ]:          0 :                             nIndex, aReplacementStr.getLength(), aSelectedRoleUI )));
                 [ #  # ]
     619                 :            :         }
     620                 :            : 
     621 [ #  # ][ #  # ]:          0 :         m_aEDT_RANGE.SetText( String( aSelectedRange ));
                 [ #  # ]
     622         [ #  # ]:          0 :         isValid();
     623                 :            :     }
     624                 :            : 
     625                 :          0 :     return 0;
     626                 :            : }
     627                 :            : 
     628                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, MainRangeButtonClickedHdl)
     629                 :            : {
     630                 :            :     OSL_ASSERT( m_pCurrentRangeChoosingField == 0 );
     631                 :          0 :     m_pCurrentRangeChoosingField = & m_aEDT_RANGE;
     632 [ #  # ][ #  # ]:          0 :     if( m_aEDT_RANGE.GetText().Len() > 0 &&
         [ #  # ][ #  # ]
                 [ #  # ]
           [ #  #  #  # ]
     633         [ #  # ]:          0 :         ! updateModelFromControl( m_pCurrentRangeChoosingField ))
     634                 :          0 :         return 0;
     635                 :            : 
     636 [ #  # ][ #  # ]:          0 :     SeriesEntry * pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     637                 :          0 :     bool bHasSelectedEntry = (pEntry != 0);
     638                 :            : 
     639         [ #  # ]:          0 :     OUString aSelectedRolesRange = lcl_GetSelectedRolesRange( m_aLB_ROLE );
     640                 :            : 
     641 [ #  # ][ #  # ]:          0 :     if( bHasSelectedEntry && (m_aLB_ROLE.FirstSelected() != 0))
         [ #  # ][ #  # ]
     642                 :            :     {
     643 [ #  # ][ #  # ]:          0 :         String aStr( SchResId( STR_DATA_SELECT_RANGE_FOR_SERIES ));
     644         [ #  # ]:          0 :         OUString aUIStr( aStr );
     645                 :            : 
     646                 :            :         // replace role
     647         [ #  # ]:          0 :         OUString aReplacement( RTL_CONSTASCII_USTRINGPARAM( "%VALUETYPE" ));
     648                 :          0 :         sal_Int32 nIndex = aUIStr.indexOf( aReplacement );
     649         [ #  # ]:          0 :         if( nIndex != -1 )
     650                 :            :         {
     651                 :            :             aUIStr = aUIStr.replaceAt( nIndex, aReplacement.getLength(),
     652         [ #  # ]:          0 :                                        lcl_GetSelectedRole( m_aLB_ROLE, true ));
     653                 :            :         }
     654                 :            :         // replace series name
     655         [ #  # ]:          0 :         aReplacement = C2U( "%SERIESNAME" );
     656                 :          0 :         nIndex = aUIStr.indexOf( aReplacement );
     657         [ #  # ]:          0 :         if( nIndex != -1 )
     658                 :            :         {
     659                 :            :             aUIStr = aUIStr.replaceAt( nIndex, aReplacement.getLength(),
     660 [ #  # ][ #  # ]:          0 :                                        OUString( m_apLB_SERIES->GetEntryText( pEntry )));
                 [ #  # ]
     661                 :            :         }
     662                 :            : 
     663         [ #  # ]:          0 :         lcl_enableRangeChoosing( true, m_pParentDialog );
     664 [ #  # ][ #  # ]:          0 :         m_rDialogModel.getRangeSelectionHelper()->chooseRange( aSelectedRolesRange, aUIStr, *this );
         [ #  # ][ #  # ]
     665                 :            :     }
     666                 :            :     else
     667                 :          0 :         m_pCurrentRangeChoosingField = 0;
     668                 :            : 
     669                 :          0 :     return 0;
     670                 :            : }
     671                 :            : 
     672                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, CategoriesRangeButtonClickedHdl)
     673                 :            : {
     674                 :            :     OSL_ASSERT( m_pCurrentRangeChoosingField == 0 );
     675                 :          0 :     m_pCurrentRangeChoosingField = & m_aEDT_CATEGORIES;
     676 [ #  # ][ #  # ]:          0 :     if( m_aEDT_CATEGORIES.GetText().Len() > 0 &&
         [ #  # ][ #  # ]
                 [ #  # ]
           [ #  #  #  # ]
     677         [ #  # ]:          0 :         ! updateModelFromControl( m_pCurrentRangeChoosingField ))
     678                 :          0 :         return 0;
     679                 :            : 
     680 [ #  # ][ #  # ]:          0 :     String aStr( SchResId( m_aFT_CATEGORIES.IsVisible() ? STR_DATA_SELECT_RANGE_FOR_CATEGORIES : STR_DATA_SELECT_RANGE_FOR_DATALABELS ));
         [ #  # ][ #  # ]
     681         [ #  # ]:          0 :     lcl_enableRangeChoosing( true, m_pParentDialog );
     682                 :            :     m_rDialogModel.getRangeSelectionHelper()->chooseRange(
     683 [ #  # ][ #  # ]:          0 :         m_rDialogModel.getCategoriesRange(), OUString( aStr ), *this );
         [ #  # ][ #  # ]
                 [ #  # ]
     684         [ #  # ]:          0 :     return 0;
     685                 :            : }
     686                 :            : 
     687                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, AddButtonClickedHdl)
     688                 :            : {
     689         [ #  # ]:          0 :     m_rDialogModel.startControllerLockTimer();
     690 [ #  # ][ #  # ]:          0 :     SeriesEntry * pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     691                 :          0 :     Reference< XDataSeries > xSeriesToInsertAfter;
     692                 :          0 :     Reference< XChartType > xChartTypeForNewSeries;
     693         [ #  # ]:          0 :     if( m_pTemplateProvider )
     694 [ #  # ][ #  # ]:          0 :             m_rDialogModel.setTemplate( m_pTemplateProvider->getCurrentTemplate());
     695                 :            : 
     696         [ #  # ]:          0 :     if( pEntry )
     697                 :            :     {
     698         [ #  # ]:          0 :         xSeriesToInsertAfter.set( pEntry->m_xDataSeries );
     699         [ #  # ]:          0 :         xChartTypeForNewSeries.set( pEntry->m_xChartType );
     700                 :            :     }
     701                 :            :     else
     702                 :            :     {
     703                 :            :         ::std::vector< Reference< XDataSeriesContainer > > aCntVec(
     704         [ #  # ]:          0 :             m_rDialogModel.getAllDataSeriesContainers());
     705         [ #  # ]:          0 :         if( ! aCntVec.empty())
     706 [ #  # ][ #  # ]:          0 :             xChartTypeForNewSeries.set( aCntVec.front(), uno::UNO_QUERY );
     707                 :            :     }
     708                 :            :     OSL_ENSURE( xChartTypeForNewSeries.is(), "Cannot insert new series" );
     709                 :            : 
     710         [ #  # ]:          0 :     m_rDialogModel.insertSeriesAfter( xSeriesToInsertAfter, xChartTypeForNewSeries );
     711                 :          0 :     setDirty();
     712                 :            : 
     713         [ #  # ]:          0 :     fillSeriesListBox();
     714                 :            :     // note the box was cleared and refilled, so pEntry is invalid now
     715         [ #  # ]:          0 :     SvLBoxEntry * pSelEntry = m_apLB_SERIES->FirstSelected();
     716         [ #  # ]:          0 :     if( pSelEntry )
     717                 :            :     {
     718         [ #  # ]:          0 :         SvLBoxEntry * pNextEntry = m_apLB_SERIES->Next( pSelEntry );
     719         [ #  # ]:          0 :         if( pNextEntry )
     720         [ #  # ]:          0 :             m_apLB_SERIES->Select( pNextEntry );
     721                 :            :     }
     722         [ #  # ]:          0 :     SeriesSelectionChangedHdl( 0 );
     723                 :            : 
     724                 :          0 :     return 0;
     725                 :            : }
     726                 :            : 
     727                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, RemoveButtonClickedHdl)
     728                 :            : {
     729                 :          0 :     m_rDialogModel.startControllerLockTimer();
     730         [ #  # ]:          0 :     SeriesEntry * pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     731         [ #  # ]:          0 :     if( pEntry )
     732                 :            :     {
     733                 :          0 :         Reference< XDataSeries > xNewSelSeries;
     734                 :            :         SeriesEntry * pNewSelEntry = dynamic_cast< SeriesEntry * >(
     735 [ #  # ][ #  # ]:          0 :             m_apLB_SERIES->Next( pEntry ));
     736         [ #  # ]:          0 :         if( pNewSelEntry )
     737         [ #  # ]:          0 :             xNewSelSeries.set( pNewSelEntry->m_xDataSeries );
     738                 :            :         else
     739                 :            :         {
     740 [ #  # ][ #  # ]:          0 :             pNewSelEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->Prev( pEntry ));
     741         [ #  # ]:          0 :             if( pNewSelEntry )
     742         [ #  # ]:          0 :                 xNewSelSeries.set( pNewSelEntry->m_xDataSeries );
     743                 :            :         }
     744                 :            : 
     745         [ #  # ]:          0 :         m_rDialogModel.deleteSeries( pEntry->m_xDataSeries, pEntry->m_xChartType );
     746                 :          0 :         setDirty();
     747                 :            : 
     748         [ #  # ]:          0 :         m_apLB_SERIES->RemoveSelection();
     749         [ #  # ]:          0 :         fillSeriesListBox();
     750                 :            : 
     751                 :            :         // select previous or next series
     752                 :            :         //@improve: see methods GetModel()->GetAbsPos()/GetEntry() for absoulte list positions
     753         [ #  # ]:          0 :         if( xNewSelSeries.is())
     754                 :            :         {
     755 [ #  # ][ #  # ]:          0 :             pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->First());
     756         [ #  # ]:          0 :             while( pEntry )
     757                 :            :             {
     758 [ #  # ][ #  # ]:          0 :                 if( pEntry->m_xDataSeries == xNewSelSeries )
     759                 :            :                 {
     760         [ #  # ]:          0 :                     m_apLB_SERIES->Select( pEntry );
     761                 :          0 :                     break;
     762                 :            :                 }
     763 [ #  # ][ #  # ]:          0 :                 pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->Next( pEntry ));
     764                 :            :             }
     765                 :            :         }
     766         [ #  # ]:          0 :         SeriesSelectionChangedHdl( 0 );
     767                 :            :     }
     768                 :            : 
     769                 :          0 :     return 0;
     770                 :            : }
     771                 :            : 
     772                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, UpButtonClickedHdl)
     773                 :            : {
     774                 :          0 :     m_rDialogModel.startControllerLockTimer();
     775         [ #  # ]:          0 :     SeriesEntry * pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     776                 :          0 :     bool bHasSelectedEntry = (pEntry != 0);
     777                 :            : 
     778         [ #  # ]:          0 :     if( bHasSelectedEntry )
     779                 :            :     {
     780                 :          0 :         m_rDialogModel.moveSeries( pEntry->m_xDataSeries, DialogModel::MOVE_UP );
     781                 :          0 :         setDirty();
     782                 :          0 :         fillSeriesListBox();
     783                 :          0 :         SeriesSelectionChangedHdl(0);
     784                 :            :     }
     785                 :            : 
     786                 :          0 :     return 0;
     787                 :            : }
     788                 :            : 
     789                 :          0 : IMPL_LINK_NOARG(DataSourceTabPage, DownButtonClickedHdl)
     790                 :            : {
     791                 :          0 :     m_rDialogModel.startControllerLockTimer();
     792         [ #  # ]:          0 :     SeriesEntry * pEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     793                 :          0 :     bool bHasSelectedEntry = (pEntry != 0);
     794                 :            : 
     795         [ #  # ]:          0 :     if( bHasSelectedEntry )
     796                 :            :     {
     797                 :          0 :         m_rDialogModel.moveSeries( pEntry->m_xDataSeries, DialogModel::MOVE_DOWN );
     798                 :          0 :         setDirty();
     799                 :          0 :         fillSeriesListBox();
     800                 :          0 :         SeriesSelectionChangedHdl(0);
     801                 :            :     }
     802                 :            : 
     803                 :          0 :     return 0;
     804                 :            : }
     805                 :            : 
     806                 :          0 : IMPL_LINK( DataSourceTabPage, RangeModifiedHdl, Edit*, pEdit )
     807                 :            : {
     808         [ #  # ]:          0 :     if( isRangeFieldContentValid( *pEdit ))
     809                 :          0 :         setDirty();
     810                 :            : 
     811                 :            :     // enable/disable OK button
     812                 :          0 :     isValid();
     813                 :            : 
     814                 :          0 :     return 0;
     815                 :            : }
     816                 :            : 
     817                 :          0 : IMPL_LINK( DataSourceTabPage, RangeUpdateDataHdl, Edit*, pEdit )
     818                 :            : {
     819                 :            :     // note: isValid sets the color of the edit field
     820         [ #  # ]:          0 :     if( isRangeFieldContentValid( *pEdit ))
     821                 :            :     {
     822                 :          0 :         setDirty();
     823                 :          0 :         updateModelFromControl( pEdit );
     824         [ #  # ]:          0 :         if( pEdit== &m_aEDT_RANGE )
     825                 :            :         {
     826         [ #  # ]:          0 :             if( ! lcl_UpdateCurrentSeriesName( *m_apLB_SERIES ))
     827                 :          0 :                 fillSeriesListBox();
     828                 :            :         }
     829                 :            :     }
     830                 :            :     // enable/disable OK button
     831                 :          0 :     isValid();
     832                 :            : 
     833                 :          0 :     return 0;
     834                 :            : }
     835                 :            : 
     836                 :          0 : void DataSourceTabPage::listeningFinished(
     837                 :            :     const ::rtl::OUString & rNewRange )
     838                 :            : {
     839                 :            :     // rNewRange becomes invalid after removing the listener
     840                 :          0 :     OUString aRange( rNewRange );
     841                 :            : 
     842         [ #  # ]:          0 :     m_rDialogModel.startControllerLockTimer();
     843                 :            : 
     844                 :            :     // stop listening
     845 [ #  # ][ #  # ]:          0 :     m_rDialogModel.getRangeSelectionHelper()->stopRangeListening();
                 [ #  # ]
     846                 :            : 
     847                 :            :     // change edit field
     848         [ #  # ]:          0 :     ToTop();
     849         [ #  # ]:          0 :     GrabFocus();
     850         [ #  # ]:          0 :     if( m_pCurrentRangeChoosingField )
     851                 :            :     {
     852 [ #  # ][ #  # ]:          0 :         m_pCurrentRangeChoosingField->SetText( String( aRange ));
                 [ #  # ]
     853         [ #  # ]:          0 :         m_pCurrentRangeChoosingField->GrabFocus();
     854                 :            :     }
     855                 :            : 
     856         [ #  # ]:          0 :     if( m_pCurrentRangeChoosingField == & m_aEDT_RANGE )
     857                 :            :     {
     858 [ #  # ][ #  # ]:          0 :         m_aEDT_RANGE.SetText( String( aRange ));
                 [ #  # ]
     859                 :          0 :         setDirty();
     860                 :            :     }
     861         [ #  # ]:          0 :     else if( m_pCurrentRangeChoosingField == & m_aEDT_CATEGORIES )
     862                 :            :     {
     863 [ #  # ][ #  # ]:          0 :         m_aEDT_CATEGORIES.SetText( String( aRange ));
                 [ #  # ]
     864                 :          0 :         setDirty();
     865                 :            :     }
     866                 :            : 
     867         [ #  # ]:          0 :     updateModelFromControl( m_pCurrentRangeChoosingField );
     868 [ #  # ][ #  # ]:          0 :     if( ! lcl_UpdateCurrentSeriesName( *m_apLB_SERIES ))
     869         [ #  # ]:          0 :         fillSeriesListBox();
     870                 :            : 
     871                 :          0 :     m_pCurrentRangeChoosingField = 0;
     872                 :            : 
     873         [ #  # ]:          0 :     updateControlState();
     874         [ #  # ]:          0 :     lcl_enableRangeChoosing( false, m_pParentDialog );
     875                 :          0 : }
     876                 :            : 
     877                 :          0 : void DataSourceTabPage::disposingRangeSelection()
     878                 :            : {
     879         [ #  # ]:          0 :     m_rDialogModel.getRangeSelectionHelper()->stopRangeListening( false );
     880                 :          0 : }
     881                 :            : 
     882                 :          0 : bool DataSourceTabPage::updateModelFromControl( Edit * pField )
     883                 :            : {
     884         [ #  # ]:          0 :     if( !m_bIsDirty )
     885                 :          0 :         return true;
     886                 :            : 
     887 [ #  # ][ #  # ]:          0 :     ControllerLockGuard aLockedControllers( m_rDialogModel.getChartModel() );
     888                 :            : 
     889                 :            :     // @todo: validity check of field content
     890                 :          0 :     bool bResult = true;
     891                 :          0 :     bool bAll = (pField == 0);
     892         [ #  # ]:          0 :     Reference< data::XDataProvider > xDataProvider( m_rDialogModel.getDataProvider());
     893                 :            : 
     894 [ #  # ][ #  # ]:          0 :     if( bAll || (pField == & m_aEDT_CATEGORIES) )
     895                 :            :     {
     896         [ #  # ]:          0 :         Reference< data::XLabeledDataSequence > xLabeledSeq( m_rDialogModel.getCategories() );
     897         [ #  # ]:          0 :         if( xDataProvider.is())
     898                 :            :         {
     899 [ #  # ][ #  # ]:          0 :             OUString aRange( m_aEDT_CATEGORIES.GetText());
                 [ #  # ]
     900         [ #  # ]:          0 :             if( !aRange.isEmpty())
     901                 :            :             {
     902                 :            :                 // create or change categories
     903         [ #  # ]:          0 :                 if( !xLabeledSeq.is())
     904                 :            :                 {
     905 [ #  # ][ #  # ]:          0 :                     xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence( Reference< uno::XComponentContext >(0)));
                 [ #  # ]
     906         [ #  # ]:          0 :                     m_rDialogModel.setCategories( xLabeledSeq );
     907                 :            :                 }
     908                 :            :                 try
     909                 :            :                 {
     910 [ #  # ][ #  # ]:          0 :                     xLabeledSeq->setValues( xDataProvider->createDataSequenceByRangeRepresentation( aRange ));
         [ #  # ][ #  # ]
                 [ #  # ]
     911                 :            :                 }
     912         [ #  # ]:          0 :                 catch( const uno::Exception & ex )
     913                 :            :                 {
     914                 :            :                     // should work as validation should have happened before
     915                 :            :                     ASSERT_EXCEPTION( ex );
     916                 :            :                 }
     917                 :            :             }
     918         [ #  # ]:          0 :             else if( xLabeledSeq.is())
     919                 :            :             {
     920                 :            :                 // clear existing categories
     921         [ #  # ]:          0 :                 xLabeledSeq.set(0);
     922         [ #  # ]:          0 :                 m_rDialogModel.setCategories( xLabeledSeq );
     923                 :          0 :             }
     924                 :          0 :         }
     925                 :            :     }
     926                 :            : 
     927 [ #  # ][ #  # ]:          0 :     SeriesEntry * pSeriesEntry = dynamic_cast< SeriesEntry * >( m_apLB_SERIES->FirstSelected());
     928                 :          0 :     bool bHasSelectedEntry = (pSeriesEntry != 0);
     929                 :            : 
     930         [ #  # ]:          0 :     if( bHasSelectedEntry )
     931                 :            :     {
     932 [ #  # ][ #  # ]:          0 :         if( bAll || (pField == & m_aEDT_RANGE) )
     933                 :            :         {
     934                 :            :             try
     935                 :            :             {
     936         [ #  # ]:          0 :                 OUString aSelectedRole = lcl_GetSelectedRole( m_aLB_ROLE );
     937 [ #  # ][ #  # ]:          0 :                 OUString aRange( m_aEDT_RANGE.GetText());
                 [ #  # ]
     938                 :          0 :                 OUString aSequenceRole( aSelectedRole );
     939                 :          0 :                 bool bIsLabel = aSequenceRole.equals( lcl_aLabelRole );
     940         [ #  # ]:          0 :                 OUString aSequenceNameForLabel( lcl_GetSequenceNameForLabel( pSeriesEntry ));
     941                 :            : 
     942         [ #  # ]:          0 :                 if( bIsLabel )
     943                 :          0 :                     aSequenceRole = aSequenceNameForLabel;
     944                 :            : 
     945         [ #  # ]:          0 :                 Reference< data::XDataSource > xSource( pSeriesEntry->m_xDataSeries, uno::UNO_QUERY_THROW );
     946                 :            :                 Reference< data::XLabeledDataSequence > xLabeledSeq(
     947         [ #  # ]:          0 :                     DataSeriesHelper::getDataSequenceByRole( xSource, aSequenceRole ));
     948                 :            : 
     949         [ #  # ]:          0 :                 if( xDataProvider.is())
     950                 :            :                 {
     951         [ #  # ]:          0 :                     if( bIsLabel )
     952                 :            :                     {
     953         [ #  # ]:          0 :                         if( ! xLabeledSeq.is())
     954                 :            :                         {
     955                 :            :                             // check if there is already an "orphan" label sequence
     956 [ #  # ][ #  # ]:          0 :                             xLabeledSeq.set( lcl_findLSequenceWithOnlyLabel( xSource ));
     957         [ #  # ]:          0 :                             if( ! xLabeledSeq.is())
     958                 :            :                             {
     959                 :            :                                 // no corresponding labeled data sequence for label found
     960 [ #  # ][ #  # ]:          0 :                                 xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence( Reference< uno::XComponentContext >(0)));
                 [ #  # ]
     961         [ #  # ]:          0 :                                 lcl_addLSequenceToDataSource( xLabeledSeq, xSource );
     962                 :            :                             }
     963                 :            :                         }
     964         [ #  # ]:          0 :                         if( xLabeledSeq.is())
     965                 :            :                         {
     966         [ #  # ]:          0 :                             if( !aRange.isEmpty())
     967                 :            :                             {
     968                 :          0 :                                 Reference< data::XDataSequence > xNewSeq;
     969                 :            :                                 try
     970                 :            :                                 {
     971 [ #  # ][ #  # ]:          0 :                                     xNewSeq.set( xDataProvider->createDataSequenceByRangeRepresentation( aRange ));
         [ #  # ][ #  # ]
     972                 :            :                                 }
     973         [ #  # ]:          0 :                                 catch( const uno::Exception & ex )
     974                 :            :                                 {
     975                 :            :                                     // should work as validation should have happened before
     976                 :            :                                     ASSERT_EXCEPTION( ex );
     977                 :            :                                 }
     978         [ #  # ]:          0 :                                 if( xNewSeq.is())
     979                 :            :                                 {
     980                 :            :                                     // update range name by the full string provided
     981                 :            :                                     // by the data provider. E.g. "a1" might become
     982                 :            :                                     // "$Sheet1.$A$1"
     983 [ #  # ][ #  # ]:          0 :                                     aRange = xNewSeq->getSourceRangeRepresentation();
     984         [ #  # ]:          0 :                                     Reference< beans::XPropertySet > xProp( xNewSeq, uno::UNO_QUERY_THROW );
     985 [ #  # ][ #  # ]:          0 :                                     xProp->setPropertyValue( C2U("Role"), uno::makeAny( lcl_aLabelRole ));
         [ #  # ][ #  # ]
     986 [ #  # ][ #  # ]:          0 :                                     xLabeledSeq->setLabel( xNewSeq );
     987                 :          0 :                                 }
     988                 :            :                             }
     989                 :            :                             else
     990                 :            :                             {
     991 [ #  # ][ #  # ]:          0 :                                 xLabeledSeq->setLabel( Reference< data::XDataSequence >());
     992                 :            :                             }
     993                 :            :                         }
     994                 :            :                     }
     995                 :            :                     else
     996                 :            :                     {
     997         [ #  # ]:          0 :                         if( !aRange.isEmpty())
     998                 :            :                         {
     999                 :          0 :                             Reference< data::XDataSequence > xNewSeq;
    1000                 :            :                             try
    1001                 :            :                             {
    1002 [ #  # ][ #  # ]:          0 :                                 xNewSeq.set( xDataProvider->createDataSequenceByRangeRepresentation( aRange ));
         [ #  # ][ #  # ]
    1003                 :            :                             }
    1004         [ #  # ]:          0 :                             catch( const uno::Exception & ex )
    1005                 :            :                             {
    1006                 :            :                                 // should work as validation should have happened before
    1007                 :            :                                 ASSERT_EXCEPTION( ex );
    1008                 :            :                             }
    1009         [ #  # ]:          0 :                             if( xNewSeq.is())
    1010                 :            :                             {
    1011                 :            :                                 // update range name by the full string provided
    1012                 :            :                                 // by the data provider. E.g. "a1:e1" might become
    1013                 :            :                                 // "$Sheet1.$A$1:$E$1"
    1014 [ #  # ][ #  # ]:          0 :                                 aRange = xNewSeq->getSourceRangeRepresentation();
    1015                 :            : 
    1016         [ #  # ]:          0 :                                 Reference< beans::XPropertySet > xProp( xNewSeq, uno::UNO_QUERY_THROW );
    1017 [ #  # ][ #  # ]:          0 :                                 xProp->setPropertyValue( C2U("Role"), uno::makeAny( aSelectedRole ));
         [ #  # ][ #  # ]
    1018         [ #  # ]:          0 :                                 if( !xLabeledSeq.is())
    1019                 :            :                                 {
    1020         [ #  # ]:          0 :                                     if( aSelectedRole.equals( aSequenceNameForLabel ))
    1021 [ #  # ][ #  # ]:          0 :                                         xLabeledSeq.set( lcl_findLSequenceWithOnlyLabel( xSource ));
    1022         [ #  # ]:          0 :                                     if( ! xLabeledSeq.is())
    1023                 :            :                                     {
    1024 [ #  # ][ #  # ]:          0 :                                         xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence( Reference< uno::XComponentContext >(0)));
                 [ #  # ]
    1025         [ #  # ]:          0 :                                         lcl_addLSequenceToDataSource( xLabeledSeq, xSource );
    1026                 :            :                                     }
    1027                 :            :                                 }
    1028 [ #  # ][ #  # ]:          0 :                                 xLabeledSeq->setValues( xNewSeq );
    1029                 :          0 :                             }
    1030                 :            :                         }
    1031                 :            :                     }
    1032                 :            :                 }
    1033                 :            : 
    1034 [ #  # ][ #  # ]:          0 :                 lcl_UpdateCurrentRange( m_aLB_ROLE, aSelectedRole, aRange );
    1035                 :            :             }
    1036         [ #  # ]:          0 :             catch( const uno::Exception & ex )
    1037                 :            :             {
    1038                 :          0 :                 bResult = false;
    1039                 :            :                 ASSERT_EXCEPTION( ex );
    1040                 :            :             }
    1041                 :            :         }
    1042                 :            :     }
    1043                 :            : 
    1044                 :            :     // update View
    1045                 :            :     // @todo remove this when automatic view updates from calc, writer and own data sequences are available
    1046         [ #  # ]:          0 :     if( bResult )
    1047                 :            :     {
    1048                 :            :         try
    1049                 :            :         {
    1050 [ #  # ][ #  # ]:          0 :             Reference< util::XModifiable > xModifiable( m_rDialogModel.getChartModel(), uno::UNO_QUERY );
    1051         [ #  # ]:          0 :             if( xModifiable.is() )
    1052 [ #  # ][ #  # ]:          0 :                 xModifiable->setModified( sal_True );
                 [ #  # ]
    1053                 :            :         }
    1054         [ #  # ]:          0 :         catch( const uno::Exception & ex )
    1055                 :            :         {
    1056                 :            :             ASSERT_EXCEPTION( ex );
    1057                 :            :         }
    1058                 :            :     }
    1059                 :            : 
    1060         [ #  # ]:          0 :     return bResult;
    1061                 :            : }
    1062                 :            : 
    1063 [ +  - ][ +  - ]:         48 : } //  namespace chart
    1064                 :            : 
    1065                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10