1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_chart2.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "tp_RangeChooser.hxx" 32*cdf0e10cSrcweir #include "tp_RangeChooser.hrc" 33*cdf0e10cSrcweir #include "Strings.hrc" 34*cdf0e10cSrcweir #include "ResId.hxx" 35*cdf0e10cSrcweir #include "macros.hxx" 36*cdf0e10cSrcweir #include "NoWarningThisInCTOR.hxx" 37*cdf0e10cSrcweir #include "DataSourceHelper.hxx" 38*cdf0e10cSrcweir #include "DiagramHelper.hxx" 39*cdf0e10cSrcweir #include "ChartTypeTemplateProvider.hxx" 40*cdf0e10cSrcweir #include "DialogModel.hxx" 41*cdf0e10cSrcweir #include "RangeSelectionHelper.hxx" 42*cdf0e10cSrcweir #include <com/sun/star/awt/XTopWindow.hpp> 43*cdf0e10cSrcweir #include <com/sun/star/embed/EmbedStates.hpp> 44*cdf0e10cSrcweir #include <com/sun/star/embed/XComponentSupplier.hpp> 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir namespace 47*cdf0e10cSrcweir { 48*cdf0e10cSrcweir void lcl_ShowChooserButton( 49*cdf0e10cSrcweir ::chart::RangeSelectionButton & rChooserButton, 50*cdf0e10cSrcweir Edit & rEditField, 51*cdf0e10cSrcweir sal_Bool bShow ) 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir if( rChooserButton.IsVisible() != bShow ) 54*cdf0e10cSrcweir { 55*cdf0e10cSrcweir rChooserButton.Show( bShow ); 56*cdf0e10cSrcweir sal_Int32 nWidhtDiff = 10 + 2; 57*cdf0e10cSrcweir if( bShow ) 58*cdf0e10cSrcweir nWidhtDiff = -nWidhtDiff; 59*cdf0e10cSrcweir Size aSize = rChooserButton.PixelToLogic( rEditField.GetSizePixel(), MAP_APPFONT ); 60*cdf0e10cSrcweir aSize.setWidth( aSize.getWidth() + nWidhtDiff ); 61*cdf0e10cSrcweir rEditField.SetSizePixel( rChooserButton.LogicToPixel( aSize, MAP_APPFONT )); 62*cdf0e10cSrcweir } 63*cdf0e10cSrcweir } 64*cdf0e10cSrcweir void lcl_enableRangeChoosing( bool bEnable, Dialog * pDialog ) 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir if( pDialog ) 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir pDialog->Show( bEnable ? sal_False : sal_True ); 69*cdf0e10cSrcweir pDialog->SetModalInputMode( bEnable ? sal_False : sal_True ); 70*cdf0e10cSrcweir } 71*cdf0e10cSrcweir } 72*cdf0e10cSrcweir void lcl_shiftControlY( Control & rControl, long nYOffset ) 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir Point aPos( rControl.GetPosPixel()); 75*cdf0e10cSrcweir aPos.setY( aPos.getY() + nYOffset ); 76*cdf0e10cSrcweir rControl.SetPosPixel( aPos ); 77*cdf0e10cSrcweir } 78*cdf0e10cSrcweir } // anonymous namespace 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir //............................................................................. 81*cdf0e10cSrcweir namespace chart 82*cdf0e10cSrcweir { 83*cdf0e10cSrcweir //............................................................................. 84*cdf0e10cSrcweir using namespace ::com::sun::star; 85*cdf0e10cSrcweir using namespace ::com::sun::star::chart2; 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 88*cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir RangeChooserTabPage::RangeChooserTabPage( Window* pParent 92*cdf0e10cSrcweir , DialogModel & rDialogModel 93*cdf0e10cSrcweir , ChartTypeTemplateProvider* pTemplateProvider 94*cdf0e10cSrcweir , Dialog * pParentDialog 95*cdf0e10cSrcweir , bool bHideDescription /* = false */ ) 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir : OWizardPage( pParent, SchResId(TP_RANGECHOOSER) ) 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir , m_aFT_Caption( this, SchResId( FT_CAPTION_FOR_WIZARD ) ) 100*cdf0e10cSrcweir , m_aFT_Range( this, SchResId( FT_RANGE ) ) 101*cdf0e10cSrcweir , m_aED_Range( this, SchResId( ED_RANGE ) ) 102*cdf0e10cSrcweir , m_aIB_Range( this, SchResId( IB_RANGE ) ) 103*cdf0e10cSrcweir , m_aRB_Rows( this, SchResId( RB_DATAROWS ) ) 104*cdf0e10cSrcweir , m_aRB_Columns( this, SchResId( RB_DATACOLS ) ) 105*cdf0e10cSrcweir , m_aCB_FirstRowAsLabel( this, SchResId( CB_FIRST_ROW_ASLABELS ) ) 106*cdf0e10cSrcweir , m_aCB_FirstColumnAsLabel( this, SchResId( CB_FIRST_COLUMN_ASLABELS ) ) 107*cdf0e10cSrcweir , m_nChangingControlCalls(0) 108*cdf0e10cSrcweir , m_bIsDirty(false) 109*cdf0e10cSrcweir , m_xDataProvider( 0 ) 110*cdf0e10cSrcweir , m_aLastValidRangeString() 111*cdf0e10cSrcweir , m_xCurrentChartTypeTemplate(0) 112*cdf0e10cSrcweir , m_pTemplateProvider(pTemplateProvider) 113*cdf0e10cSrcweir , m_rDialogModel( rDialogModel ) 114*cdf0e10cSrcweir , m_pParentDialog( pParentDialog ) 115*cdf0e10cSrcweir , m_pTabPageNotifiable( dynamic_cast< TabPageNotifiable * >( pParentDialog )) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir FreeResource(); 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir if( bHideDescription ) 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir // note: the offset should be a negative value for shifting upwards, the 122*cdf0e10cSrcweir // 4 is for the offset difference between a wizard page and a tab-page 123*cdf0e10cSrcweir long nYOffset = - ( m_aFT_Range.GetPosPixel().getY() - m_aFT_Caption.GetPosPixel().getY() + 4 ); 124*cdf0e10cSrcweir m_aFT_Caption.Hide(); 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir // shift all controls by the offset space saved by hiding the caption 127*cdf0e10cSrcweir lcl_shiftControlY( m_aFT_Range, nYOffset ); 128*cdf0e10cSrcweir lcl_shiftControlY( m_aED_Range, nYOffset ); 129*cdf0e10cSrcweir lcl_shiftControlY( m_aIB_Range, nYOffset ); 130*cdf0e10cSrcweir lcl_shiftControlY( m_aRB_Rows, nYOffset ); 131*cdf0e10cSrcweir lcl_shiftControlY( m_aRB_Columns, nYOffset ); 132*cdf0e10cSrcweir lcl_shiftControlY( m_aCB_FirstRowAsLabel, nYOffset ); 133*cdf0e10cSrcweir lcl_shiftControlY( m_aCB_FirstColumnAsLabel, nYOffset ); 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir else 136*cdf0e10cSrcweir { 137*cdf0e10cSrcweir // make font of caption bold 138*cdf0e10cSrcweir Font aFont( m_aFT_Caption.GetControlFont() ); 139*cdf0e10cSrcweir aFont.SetWeight( WEIGHT_BOLD ); 140*cdf0e10cSrcweir m_aFT_Caption.SetControlFont( aFont ); 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir // no mnemonic 143*cdf0e10cSrcweir m_aFT_Caption.SetStyle( m_aFT_Caption.GetStyle() | WB_NOLABEL ); 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir this->SetText( String(SchResId(STR_PAGE_DATA_RANGE)) ); 147*cdf0e10cSrcweir m_aIB_Range.SetQuickHelpText( String(SchResId(STR_TIP_SELECT_RANGE)) ); 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir // set defaults as long as DetectArguments does not work 150*cdf0e10cSrcweir m_aRB_Columns.Check(); 151*cdf0e10cSrcweir m_aCB_FirstColumnAsLabel.Check(); 152*cdf0e10cSrcweir m_aCB_FirstRowAsLabel.Check(); 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir // BM: Note, that the range selection is not available, if there is no view. 155*cdf0e10cSrcweir // This happens for charts having their own embedded spreadsheet. If you 156*cdf0e10cSrcweir // force to get the range selection here, this would mean when entering this 157*cdf0e10cSrcweir // page the calc view would be created in this case. So, I enable the 158*cdf0e10cSrcweir // button here, and in the worst case nothing happens when it is pressed. 159*cdf0e10cSrcweir // Not nice, but I see no better solution for the moment. 160*cdf0e10cSrcweir m_aIB_Range.SetClickHdl( LINK( this, RangeChooserTabPage, ChooseRangeHdl )); 161*cdf0e10cSrcweir m_aED_Range.SetKeyInputHdl( LINK( this, RangeChooserTabPage, ChooseRangeHdl )); 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir // #i75179# enable setting the background to a different color 164*cdf0e10cSrcweir m_aED_Range.SetStyle( m_aED_Range.GetStyle() | WB_FORCECTRLBACKGROUND ); 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir m_aED_Range.SetUpdateDataHdl( LINK( this, RangeChooserTabPage, ControlChangedHdl )); 167*cdf0e10cSrcweir m_aED_Range.SetModifyHdl( LINK( this, RangeChooserTabPage, ControlEditedHdl )); 168*cdf0e10cSrcweir m_aRB_Rows.SetToggleHdl( LINK( this, RangeChooserTabPage, ControlChangedHdl ) ); 169*cdf0e10cSrcweir m_aCB_FirstRowAsLabel.SetToggleHdl( LINK( this, RangeChooserTabPage, ControlChangedHdl ) ); 170*cdf0e10cSrcweir m_aCB_FirstColumnAsLabel.SetToggleHdl( LINK( this, RangeChooserTabPage, ControlChangedHdl ) ); 171*cdf0e10cSrcweir } 172*cdf0e10cSrcweir 173*cdf0e10cSrcweir RangeChooserTabPage::~RangeChooserTabPage() 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir void RangeChooserTabPage::ActivatePage() 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir OWizardPage::ActivatePage(); 180*cdf0e10cSrcweir initControlsFromModel(); 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir void RangeChooserTabPage::initControlsFromModel() 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir m_nChangingControlCalls++; 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir if(m_pTemplateProvider) 188*cdf0e10cSrcweir { 189*cdf0e10cSrcweir m_xCurrentChartTypeTemplate = m_pTemplateProvider->getCurrentTemplate(); 190*cdf0e10cSrcweir } 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir bool bUseColumns = ! m_aRB_Rows.IsChecked(); 193*cdf0e10cSrcweir bool bFirstCellAsLabel = bUseColumns ? m_aCB_FirstRowAsLabel.IsChecked() : m_aCB_FirstColumnAsLabel.IsChecked(); 194*cdf0e10cSrcweir bool bHasCategories = bUseColumns ? m_aCB_FirstColumnAsLabel.IsChecked() : m_aCB_FirstRowAsLabel.IsChecked(); 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir bool bIsValid = m_rDialogModel.allArgumentsForRectRangeDetected(); 197*cdf0e10cSrcweir if( bIsValid ) 198*cdf0e10cSrcweir m_rDialogModel.detectArguments( 199*cdf0e10cSrcweir m_aLastValidRangeString, bUseColumns, bFirstCellAsLabel, bHasCategories ); 200*cdf0e10cSrcweir else 201*cdf0e10cSrcweir m_aLastValidRangeString = String::EmptyString(); 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir m_aED_Range.SetText( m_aLastValidRangeString ); 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir m_aRB_Rows.Check( !bUseColumns ); 206*cdf0e10cSrcweir m_aRB_Columns.Check( bUseColumns ); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir m_aCB_FirstRowAsLabel.Check( m_aRB_Rows.IsChecked()?bHasCategories:bFirstCellAsLabel ); 209*cdf0e10cSrcweir m_aCB_FirstColumnAsLabel.Check( m_aRB_Columns.IsChecked()?bHasCategories:bFirstCellAsLabel ); 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir isValid(); 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir m_nChangingControlCalls--; 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir void RangeChooserTabPage::DeactivatePage() 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir commitPage(); 219*cdf0e10cSrcweir svt::OWizardPage::DeactivatePage(); 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir void RangeChooserTabPage::commitPage() 223*cdf0e10cSrcweir { 224*cdf0e10cSrcweir commitPage(::svt::WizardTypes::eFinish); 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir sal_Bool RangeChooserTabPage::commitPage( ::svt::WizardTypes::CommitPageReason /*eReason*/ ) 228*cdf0e10cSrcweir { 229*cdf0e10cSrcweir //ranges may have been edited in the meanwhile (dirty is true in that case here) 230*cdf0e10cSrcweir if( isValid() ) 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir changeDialogModelAccordingToControls(); 233*cdf0e10cSrcweir return sal_True;//return false if this page should not be left 234*cdf0e10cSrcweir } 235*cdf0e10cSrcweir else 236*cdf0e10cSrcweir return sal_False; 237*cdf0e10cSrcweir } 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir void RangeChooserTabPage::changeDialogModelAccordingToControls() 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir if(m_nChangingControlCalls>0) 242*cdf0e10cSrcweir return; 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir if( !m_xCurrentChartTypeTemplate.is() ) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir if(m_pTemplateProvider) 247*cdf0e10cSrcweir m_xCurrentChartTypeTemplate.set( m_pTemplateProvider->getCurrentTemplate()); 248*cdf0e10cSrcweir if( !m_xCurrentChartTypeTemplate.is()) 249*cdf0e10cSrcweir { 250*cdf0e10cSrcweir OSL_ENSURE( false, "Need a template to change data source" ); 251*cdf0e10cSrcweir return; 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir if( m_bIsDirty ) 256*cdf0e10cSrcweir { 257*cdf0e10cSrcweir sal_Bool bFirstCellAsLabel = ( m_aCB_FirstColumnAsLabel.IsChecked() && !m_aRB_Columns.IsChecked() ) 258*cdf0e10cSrcweir || ( m_aCB_FirstRowAsLabel.IsChecked() && !m_aRB_Rows.IsChecked() ); 259*cdf0e10cSrcweir sal_Bool bHasCategories = ( m_aCB_FirstColumnAsLabel.IsChecked() && m_aRB_Columns.IsChecked() ) 260*cdf0e10cSrcweir || ( m_aCB_FirstRowAsLabel.IsChecked() && m_aRB_Rows.IsChecked() ); 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir Sequence< beans::PropertyValue > aArguments( 263*cdf0e10cSrcweir DataSourceHelper::createArguments( 264*cdf0e10cSrcweir m_aRB_Columns.IsChecked(), bFirstCellAsLabel, bHasCategories ) ); 265*cdf0e10cSrcweir 266*cdf0e10cSrcweir // only if range is valid 267*cdf0e10cSrcweir if( m_aLastValidRangeString.equals( m_aED_Range.GetText())) 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir m_rDialogModel.setTemplate( m_xCurrentChartTypeTemplate ); 270*cdf0e10cSrcweir aArguments.realloc( aArguments.getLength() + 1 ); 271*cdf0e10cSrcweir aArguments[aArguments.getLength() - 1] = 272*cdf0e10cSrcweir beans::PropertyValue( C2U("CellRangeRepresentation"), -1, 273*cdf0e10cSrcweir uno::makeAny( m_aLastValidRangeString ), 274*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ); 275*cdf0e10cSrcweir m_rDialogModel.setData( aArguments ); 276*cdf0e10cSrcweir m_bIsDirty = false; 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir //@todo warn user that the selected range is not valid 280*cdf0e10cSrcweir //@todo better: disable OK-Button if range is invalid 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir } 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir bool RangeChooserTabPage::isValid() 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir ::rtl::OUString aRange( m_aED_Range.GetText()); 287*cdf0e10cSrcweir sal_Bool bFirstCellAsLabel = ( m_aCB_FirstColumnAsLabel.IsChecked() && !m_aRB_Columns.IsChecked() ) 288*cdf0e10cSrcweir || ( m_aCB_FirstRowAsLabel.IsChecked() && !m_aRB_Rows.IsChecked() ); 289*cdf0e10cSrcweir sal_Bool bHasCategories = ( m_aCB_FirstColumnAsLabel.IsChecked() && m_aRB_Columns.IsChecked() ) 290*cdf0e10cSrcweir || ( m_aCB_FirstRowAsLabel.IsChecked() && m_aRB_Rows.IsChecked() ); 291*cdf0e10cSrcweir bool bIsValid = ( aRange.getLength() == 0 ) || 292*cdf0e10cSrcweir m_rDialogModel.getRangeSelectionHelper()->verifyArguments( 293*cdf0e10cSrcweir DataSourceHelper::createArguments( 294*cdf0e10cSrcweir aRange, Sequence< sal_Int32 >(), m_aRB_Columns.IsChecked(), bFirstCellAsLabel, bHasCategories )); 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir if( bIsValid ) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir m_aED_Range.SetControlForeground(); 299*cdf0e10cSrcweir m_aED_Range.SetControlBackground(); 300*cdf0e10cSrcweir if( m_pTabPageNotifiable ) 301*cdf0e10cSrcweir m_pTabPageNotifiable->setValidPage( this ); 302*cdf0e10cSrcweir m_aLastValidRangeString = aRange; 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir else 305*cdf0e10cSrcweir { 306*cdf0e10cSrcweir m_aED_Range.SetControlBackground( RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR ); 307*cdf0e10cSrcweir m_aED_Range.SetControlForeground( RANGE_SELECTION_INVALID_RANGE_FOREGROUND_COLOR ); 308*cdf0e10cSrcweir if( m_pTabPageNotifiable ) 309*cdf0e10cSrcweir m_pTabPageNotifiable->setInvalidPage( this ); 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir // enable/disable controls 313*cdf0e10cSrcweir // #i79531# if the range is valid but an action of one of these buttons 314*cdf0e10cSrcweir // would render it invalid, the button should be disabled 315*cdf0e10cSrcweir if( bIsValid ) 316*cdf0e10cSrcweir { 317*cdf0e10cSrcweir bool bDataInColumns = m_aRB_Columns.IsChecked(); 318*cdf0e10cSrcweir bool bIsSwappedRangeValid = m_rDialogModel.getRangeSelectionHelper()->verifyArguments( 319*cdf0e10cSrcweir DataSourceHelper::createArguments( 320*cdf0e10cSrcweir aRange, Sequence< sal_Int32 >(), ! bDataInColumns, bHasCategories, bFirstCellAsLabel )); 321*cdf0e10cSrcweir m_aRB_Rows.Enable( bIsSwappedRangeValid ); 322*cdf0e10cSrcweir m_aRB_Columns.Enable( bIsSwappedRangeValid ); 323*cdf0e10cSrcweir 324*cdf0e10cSrcweir m_aCB_FirstRowAsLabel.Enable( 325*cdf0e10cSrcweir m_rDialogModel.getRangeSelectionHelper()->verifyArguments( 326*cdf0e10cSrcweir DataSourceHelper::createArguments( 327*cdf0e10cSrcweir aRange, Sequence< sal_Int32 >(), m_aRB_Columns.IsChecked(), 328*cdf0e10cSrcweir bDataInColumns ? ! bFirstCellAsLabel : bFirstCellAsLabel, 329*cdf0e10cSrcweir bDataInColumns ? bHasCategories : ! bHasCategories ))); 330*cdf0e10cSrcweir m_aCB_FirstColumnAsLabel.Enable( 331*cdf0e10cSrcweir m_rDialogModel.getRangeSelectionHelper()->verifyArguments( 332*cdf0e10cSrcweir DataSourceHelper::createArguments( 333*cdf0e10cSrcweir aRange, Sequence< sal_Int32 >(), m_aRB_Columns.IsChecked(), 334*cdf0e10cSrcweir bDataInColumns ? bFirstCellAsLabel : ! bFirstCellAsLabel, 335*cdf0e10cSrcweir bDataInColumns ? ! bHasCategories : bHasCategories ))); 336*cdf0e10cSrcweir } 337*cdf0e10cSrcweir else 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir m_aRB_Rows.Enable( bIsValid ); 340*cdf0e10cSrcweir m_aRB_Columns.Enable( bIsValid ); 341*cdf0e10cSrcweir m_aCB_FirstRowAsLabel.Enable( bIsValid ); 342*cdf0e10cSrcweir m_aCB_FirstColumnAsLabel.Enable( bIsValid ); 343*cdf0e10cSrcweir } 344*cdf0e10cSrcweir sal_Bool bShowIB = m_rDialogModel.getRangeSelectionHelper()->hasRangeSelection(); 345*cdf0e10cSrcweir lcl_ShowChooserButton( m_aIB_Range, m_aED_Range, bShowIB ); 346*cdf0e10cSrcweir 347*cdf0e10cSrcweir return bIsValid; 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir IMPL_LINK( RangeChooserTabPage, ControlEditedHdl, void*, EMPTYARG ) 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir setDirty(); 353*cdf0e10cSrcweir isValid(); 354*cdf0e10cSrcweir return 0; 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir 357*cdf0e10cSrcweir IMPL_LINK( RangeChooserTabPage, ControlChangedHdl, void*, EMPTYARG ) 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir setDirty(); 360*cdf0e10cSrcweir if( isValid()) 361*cdf0e10cSrcweir changeDialogModelAccordingToControls(); 362*cdf0e10cSrcweir return 0; 363*cdf0e10cSrcweir } 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir IMPL_LINK( RangeChooserTabPage, ChooseRangeHdl, void *, EMPTYARG ) 366*cdf0e10cSrcweir { 367*cdf0e10cSrcweir rtl::OUString aRange = m_aED_Range.GetText(); 368*cdf0e10cSrcweir // using assignment for broken gcc 3.3 369*cdf0e10cSrcweir rtl::OUString aTitle = String( SchResId( STR_PAGE_DATA_RANGE ) ); 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir lcl_enableRangeChoosing( true, m_pParentDialog ); 372*cdf0e10cSrcweir m_rDialogModel.getRangeSelectionHelper()->chooseRange( aRange, aTitle, *this ); 373*cdf0e10cSrcweir 374*cdf0e10cSrcweir return 0; 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir 378*cdf0e10cSrcweir void RangeChooserTabPage::listeningFinished( const ::rtl::OUString & rNewRange ) 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir //user has selected a new range 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir rtl::OUString aRange( rNewRange ); 383*cdf0e10cSrcweir 384*cdf0e10cSrcweir m_rDialogModel.startControllerLockTimer(); 385*cdf0e10cSrcweir 386*cdf0e10cSrcweir // stop listening 387*cdf0e10cSrcweir m_rDialogModel.getRangeSelectionHelper()->stopRangeListening(); 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir //update dialog state 390*cdf0e10cSrcweir ToTop(); 391*cdf0e10cSrcweir GrabFocus(); 392*cdf0e10cSrcweir m_aED_Range.SetText( String( aRange ) ); 393*cdf0e10cSrcweir m_aED_Range.GrabFocus(); 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir setDirty(); 396*cdf0e10cSrcweir if( isValid()) 397*cdf0e10cSrcweir changeDialogModelAccordingToControls(); 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir lcl_enableRangeChoosing( false, m_pParentDialog ); 400*cdf0e10cSrcweir } 401*cdf0e10cSrcweir void RangeChooserTabPage::disposingRangeSelection() 402*cdf0e10cSrcweir { 403*cdf0e10cSrcweir m_rDialogModel.getRangeSelectionHelper()->stopRangeListening( false ); 404*cdf0e10cSrcweir } 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir void RangeChooserTabPage::setDirty() 407*cdf0e10cSrcweir { 408*cdf0e10cSrcweir if( m_nChangingControlCalls == 0 ) 409*cdf0e10cSrcweir m_bIsDirty = true; 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir //............................................................................. 413*cdf0e10cSrcweir } //namespace chart 414*cdf0e10cSrcweir //............................................................................. 415