1*cde9e8dcSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*cde9e8dcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*cde9e8dcSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*cde9e8dcSAndrew Rist * distributed with this work for additional information 6*cde9e8dcSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*cde9e8dcSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*cde9e8dcSAndrew Rist * "License"); you may not use this file except in compliance 9*cde9e8dcSAndrew Rist * with the License. You may obtain a copy of the License at 10*cde9e8dcSAndrew Rist * 11*cde9e8dcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*cde9e8dcSAndrew Rist * 13*cde9e8dcSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*cde9e8dcSAndrew Rist * software distributed under the License is distributed on an 15*cde9e8dcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*cde9e8dcSAndrew Rist * KIND, either express or implied. See the License for the 17*cde9e8dcSAndrew Rist * specific language governing permissions and limitations 18*cde9e8dcSAndrew Rist * under the License. 19*cde9e8dcSAndrew Rist * 20*cde9e8dcSAndrew Rist *************************************************************/ 21*cde9e8dcSAndrew Rist 22*cde9e8dcSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_chart2.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "res_ErrorBar.hxx" 28cdf0e10cSrcweir #include "res_ErrorBar_IDs.hrc" 29cdf0e10cSrcweir #include "ResId.hxx" 30cdf0e10cSrcweir #include "Strings.hrc" 31cdf0e10cSrcweir #include "Bitmaps.hrc" 32cdf0e10cSrcweir #include "Bitmaps_HC.hrc" 33cdf0e10cSrcweir #include "RangeSelectionHelper.hxx" 34cdf0e10cSrcweir // for RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR 35cdf0e10cSrcweir #include "TabPageNotifiable.hxx" 36cdf0e10cSrcweir #include "macros.hxx" 37cdf0e10cSrcweir 38cdf0e10cSrcweir #include <rtl/math.hxx> 39cdf0e10cSrcweir #include <vcl/dialog.hxx> 40cdf0e10cSrcweir #include <svl/stritem.hxx> 41cdf0e10cSrcweir 42cdf0e10cSrcweir using namespace ::com::sun::star; 43cdf0e10cSrcweir 44cdf0e10cSrcweir namespace 45cdf0e10cSrcweir { 46cdf0e10cSrcweir void lcl_enableRangeChoosing( bool bEnable, Dialog * pDialog ) 47cdf0e10cSrcweir { 48cdf0e10cSrcweir if( pDialog ) 49cdf0e10cSrcweir { 50cdf0e10cSrcweir pDialog->Show( bEnable ? sal_False : sal_True ); 51cdf0e10cSrcweir pDialog->SetModalInputMode( bEnable ? sal_False : sal_True ); 52cdf0e10cSrcweir } 53cdf0e10cSrcweir } 54cdf0e10cSrcweir 55cdf0e10cSrcweir sal_uInt16 lcl_getLbEntryPosByErrorKind( SvxChartKindError eErrorKind ) 56cdf0e10cSrcweir { 57cdf0e10cSrcweir sal_uInt16 nResult = 0; 58cdf0e10cSrcweir switch( eErrorKind ) 59cdf0e10cSrcweir { 60cdf0e10cSrcweir // for these cases select the default in the list box 61cdf0e10cSrcweir case CHERROR_NONE: 62cdf0e10cSrcweir case CHERROR_PERCENT: 63cdf0e10cSrcweir case CHERROR_CONST: 64cdf0e10cSrcweir case CHERROR_RANGE: 65cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_STD_DEV; 66cdf0e10cSrcweir break; 67cdf0e10cSrcweir case CHERROR_VARIANT: 68cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_VARIANCE; 69cdf0e10cSrcweir break; 70cdf0e10cSrcweir case CHERROR_SIGMA: 71cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_STD_DEV; 72cdf0e10cSrcweir break; 73cdf0e10cSrcweir case CHERROR_BIGERROR: 74cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_ERROR_MARGIN; 75cdf0e10cSrcweir break; 76cdf0e10cSrcweir case CHERROR_STDERROR: 77cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_STD_ERROR; 78cdf0e10cSrcweir break; 79cdf0e10cSrcweir } 80cdf0e10cSrcweir return nResult; 81cdf0e10cSrcweir } 82cdf0e10cSrcweir } // anonymous namespace 83cdf0e10cSrcweir 84cdf0e10cSrcweir 85cdf0e10cSrcweir //............................................................................. 86cdf0e10cSrcweir namespace chart 87cdf0e10cSrcweir { 88cdf0e10cSrcweir //............................................................................. 89cdf0e10cSrcweir 90cdf0e10cSrcweir // macro for selecting a normal or high contrast bitmap the stack variable 91cdf0e10cSrcweir // bIsHighContrast must exist and reflect the correct state 92cdf0e10cSrcweir #define SELECT_IMAGE(name) Image( SchResId( bIsHighContrast ? name ## _HC : name )) 93cdf0e10cSrcweir 94cdf0e10cSrcweir enum StatIndicator 95cdf0e10cSrcweir { 96cdf0e10cSrcweir INDICATE_BOTH, 97cdf0e10cSrcweir INDICATE_UP, 98cdf0e10cSrcweir INDICATE_DOWN 99cdf0e10cSrcweir }; 100cdf0e10cSrcweir 101cdf0e10cSrcweir ErrorBarResources::ErrorBarResources( Window* pParent, Dialog * pParentDialog, 102cdf0e10cSrcweir const SfxItemSet& rInAttrs, bool bNoneAvailable, 103cdf0e10cSrcweir tErrorBarType eType /* = ERROR_BAR_Y */ ) : 104cdf0e10cSrcweir 105cdf0e10cSrcweir m_aFlErrorCategory( pParent, SchResId( FL_ERROR )), 106cdf0e10cSrcweir m_aRbNone( pParent, SchResId( RB_NONE )), 107cdf0e10cSrcweir m_aRbConst( pParent, SchResId( RB_CONST )), 108cdf0e10cSrcweir m_aRbPercent( pParent, SchResId( RB_PERCENT )), 109cdf0e10cSrcweir m_aRbFunction( pParent, SchResId( RB_FUNCTION )), 110cdf0e10cSrcweir m_aRbRange( pParent, SchResId( RB_RANGE )), 111cdf0e10cSrcweir m_aLbFunction( pParent, SchResId( LB_FUNCTION )), 112cdf0e10cSrcweir 113cdf0e10cSrcweir m_aFlParameters( pParent, SchResId( FL_PARAMETERS )), 114cdf0e10cSrcweir m_aFtPositive( pParent, SchResId( FT_POSITIVE )), 115cdf0e10cSrcweir m_aMfPositive( pParent, SchResId( MF_POSITIVE )), 116cdf0e10cSrcweir m_aEdRangePositive( pParent, SchResId( ED_RANGE_POSITIVE )), 117cdf0e10cSrcweir m_aIbRangePositive( pParent, SchResId( IB_RANGE_POSITIVE )), 118cdf0e10cSrcweir m_aFtNegative( pParent, SchResId( FT_NEGATIVE )), 119cdf0e10cSrcweir m_aMfNegative( pParent, SchResId( MF_NEGATIVE )), 120cdf0e10cSrcweir m_aEdRangeNegative( pParent, SchResId( ED_RANGE_NEGATIVE )), 121cdf0e10cSrcweir m_aIbRangeNegative( pParent, SchResId( IB_RANGE_NEGATIVE )), 122cdf0e10cSrcweir m_aCbSyncPosNeg( pParent, SchResId( CB_SYN_POS_NEG )), 123cdf0e10cSrcweir 124cdf0e10cSrcweir m_aFlIndicate( pParent, SchResId( FL_INDICATE )), 125cdf0e10cSrcweir m_aRbBoth( pParent, SchResId( RB_BOTH )), 126cdf0e10cSrcweir m_aRbPositive( pParent, SchResId( RB_POSITIVE )), 127cdf0e10cSrcweir m_aRbNegative( pParent, SchResId( RB_NEGATIVE )), 128cdf0e10cSrcweir m_aFiBoth( pParent, SchResId( FI_BOTH )), 129cdf0e10cSrcweir m_aFiPositive( pParent, SchResId( FI_POSITIVE )), 130cdf0e10cSrcweir m_aFiNegative( pParent, SchResId( FI_NEGATIVE )), 131cdf0e10cSrcweir 132cdf0e10cSrcweir m_eErrorKind( CHERROR_NONE ), 133cdf0e10cSrcweir m_eIndicate( CHINDICATE_BOTH ), 134cdf0e10cSrcweir m_bErrorKindUnique( true ), 135cdf0e10cSrcweir m_bIndicatorUnique( true ), 136cdf0e10cSrcweir m_bPlusUnique( true ), 137cdf0e10cSrcweir m_bMinusUnique( true ), 138cdf0e10cSrcweir m_bRangePosUnique( true ), 139cdf0e10cSrcweir m_bRangeNegUnique( true ), 140cdf0e10cSrcweir m_bNoneAvailable( bNoneAvailable ), 141cdf0e10cSrcweir m_eErrorBarType( eType ), 142cdf0e10cSrcweir m_nConstDecimalDigits( 1 ), 143cdf0e10cSrcweir m_nConstSpinSize( 1 ), 144cdf0e10cSrcweir m_pParentWindow( pParent ), 145cdf0e10cSrcweir m_pParentDialog( pParentDialog ), 146cdf0e10cSrcweir m_pCurrentRangeChoosingField( 0 ), 147cdf0e10cSrcweir m_bHasInternalDataProvider( true ), 148cdf0e10cSrcweir m_bDisableDataTableDialog( false ) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir if( m_bNoneAvailable ) 151cdf0e10cSrcweir m_aRbNone.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); 152cdf0e10cSrcweir else 153cdf0e10cSrcweir m_aRbNone.Hide(); 154cdf0e10cSrcweir 155cdf0e10cSrcweir m_aRbConst.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); 156cdf0e10cSrcweir m_aRbPercent.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); 157cdf0e10cSrcweir m_aRbFunction.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); 158cdf0e10cSrcweir m_aRbRange.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); 159cdf0e10cSrcweir m_aLbFunction.SetSelectHdl( LINK( this, ErrorBarResources, CategoryChosen )); 160cdf0e10cSrcweir 161cdf0e10cSrcweir m_aCbSyncPosNeg.Check( sal_False ); 162cdf0e10cSrcweir m_aCbSyncPosNeg.SetToggleHdl( LINK( this, ErrorBarResources, SynchronizePosAndNeg )); 163cdf0e10cSrcweir 164cdf0e10cSrcweir m_aMfPositive.SetModifyHdl( LINK( this, ErrorBarResources, PosValueChanged )); 165cdf0e10cSrcweir m_aEdRangePositive.SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged )); 166cdf0e10cSrcweir m_aEdRangeNegative.SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged )); 167cdf0e10cSrcweir 168cdf0e10cSrcweir m_aRbPositive.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); 169cdf0e10cSrcweir m_aRbNegative.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); 170cdf0e10cSrcweir m_aRbBoth.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); 171cdf0e10cSrcweir 172cdf0e10cSrcweir m_aIbRangePositive.SetClickHdl( LINK( this, ErrorBarResources, ChooseRange )); 173cdf0e10cSrcweir m_aIbRangeNegative.SetClickHdl( LINK( this, ErrorBarResources, ChooseRange )); 174cdf0e10cSrcweir m_aIbRangePositive.SetQuickHelpText( String( SchResId( STR_TIP_SELECT_RANGE ))); 175cdf0e10cSrcweir m_aIbRangeNegative.SetQuickHelpText( String( SchResId( STR_TIP_SELECT_RANGE ))); 176cdf0e10cSrcweir 177cdf0e10cSrcweir FillValueSets(); 178cdf0e10cSrcweir Reset( rInAttrs ); 179cdf0e10cSrcweir } 180cdf0e10cSrcweir 181cdf0e10cSrcweir ErrorBarResources::~ErrorBarResources() 182cdf0e10cSrcweir { 183cdf0e10cSrcweir } 184cdf0e10cSrcweir 185cdf0e10cSrcweir void ErrorBarResources::SetErrorBarType( tErrorBarType eNewType ) 186cdf0e10cSrcweir { 187cdf0e10cSrcweir if( m_eErrorBarType != eNewType ) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir m_eErrorBarType = eNewType; 190cdf0e10cSrcweir FillValueSets(); 191cdf0e10cSrcweir } 192cdf0e10cSrcweir } 193cdf0e10cSrcweir 194cdf0e10cSrcweir void ErrorBarResources::SetChartDocumentForRangeChoosing( 195cdf0e10cSrcweir const uno::Reference< chart2::XChartDocument > & xChartDocument ) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir if( xChartDocument.is()) 198cdf0e10cSrcweir { 199cdf0e10cSrcweir m_bHasInternalDataProvider = xChartDocument->hasInternalDataProvider(); 200cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xProps( xChartDocument, uno::UNO_QUERY ); 201cdf0e10cSrcweir if ( xProps.is() ) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir try 204cdf0e10cSrcweir { 205cdf0e10cSrcweir xProps->getPropertyValue( C2U( "DisableDataTableDialog" ) ) >>= m_bDisableDataTableDialog; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir catch( uno::Exception& e ) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir ASSERT_EXCEPTION( e ); 210cdf0e10cSrcweir } 211cdf0e10cSrcweir } 212cdf0e10cSrcweir } 213cdf0e10cSrcweir m_apRangeSelectionHelper.reset( new RangeSelectionHelper( xChartDocument )); 214cdf0e10cSrcweir 215cdf0e10cSrcweir // has internal data provider => rename "cell range" to "from data" 216cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get()); 217cdf0e10cSrcweir if( m_bHasInternalDataProvider ) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir m_aRbRange.SetText( String( SchResId( STR_CONTROLTEXT_ERROR_BARS_FROM_DATA ))); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir 222cdf0e10cSrcweir if( m_aRbRange.IsChecked()) 223cdf0e10cSrcweir { 224cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangePositive ); 225cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangeNegative ); 226cdf0e10cSrcweir } 227cdf0e10cSrcweir } 228cdf0e10cSrcweir 229cdf0e10cSrcweir void ErrorBarResources::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth ) 230cdf0e10cSrcweir { 231cdf0e10cSrcweir if( fMinorStepWidth < 0 ) 232cdf0e10cSrcweir fMinorStepWidth = -fMinorStepWidth; 233cdf0e10cSrcweir 234cdf0e10cSrcweir sal_Int32 nExponent = static_cast< sal_Int32 >( ::rtl::math::approxFloor( log10( fMinorStepWidth ))); 235cdf0e10cSrcweir if( nExponent <= 0 ) 236cdf0e10cSrcweir { 237cdf0e10cSrcweir // one digit precision more 238cdf0e10cSrcweir m_nConstDecimalDigits = static_cast< sal_uInt16 >( (-nExponent) + 1 ); 239cdf0e10cSrcweir m_nConstSpinSize = 10; 240cdf0e10cSrcweir } 241cdf0e10cSrcweir else 242cdf0e10cSrcweir { 243cdf0e10cSrcweir m_nConstDecimalDigits = 0; 244cdf0e10cSrcweir m_nConstSpinSize = static_cast< sal_Int64 >( pow( 10.0, (int)nExponent )); 245cdf0e10cSrcweir } 246cdf0e10cSrcweir } 247cdf0e10cSrcweir 248cdf0e10cSrcweir void ErrorBarResources::UpdateControlStates() 249cdf0e10cSrcweir { 250cdf0e10cSrcweir // function 251cdf0e10cSrcweir bool bIsFunction = m_aRbFunction.IsChecked(); 252cdf0e10cSrcweir m_aLbFunction.Enable( bIsFunction ); 253cdf0e10cSrcweir 254cdf0e10cSrcweir // range buttons 255cdf0e10cSrcweir m_aRbRange.Enable( !m_bHasInternalDataProvider || !m_bDisableDataTableDialog ); 256cdf0e10cSrcweir bool bShowRange = ( m_aRbRange.IsChecked()); 257cdf0e10cSrcweir bool bCanChooseRange = 258cdf0e10cSrcweir ( bShowRange && 259cdf0e10cSrcweir m_apRangeSelectionHelper.get() && 260cdf0e10cSrcweir m_apRangeSelectionHelper->hasRangeSelection()); 261cdf0e10cSrcweir 262cdf0e10cSrcweir m_aMfPositive.Show( ! bShowRange ); 263cdf0e10cSrcweir m_aMfNegative.Show( ! bShowRange ); 264cdf0e10cSrcweir 265cdf0e10cSrcweir // use range but without range chooser => hide controls 266cdf0e10cSrcweir m_aEdRangePositive.Show( bShowRange && ! m_bHasInternalDataProvider ); 267cdf0e10cSrcweir m_aIbRangePositive.Show( bCanChooseRange ); 268cdf0e10cSrcweir m_aEdRangeNegative.Show( bShowRange && ! m_bHasInternalDataProvider ); 269cdf0e10cSrcweir m_aIbRangeNegative.Show( bCanChooseRange ); 270cdf0e10cSrcweir 271cdf0e10cSrcweir bool bShowPosNegAndSync = ! (bShowRange && m_bHasInternalDataProvider); 272cdf0e10cSrcweir m_aFtPositive.Show( bShowPosNegAndSync ); 273cdf0e10cSrcweir m_aFtNegative.Show( bShowPosNegAndSync ); 274cdf0e10cSrcweir m_aCbSyncPosNeg.Show( bShowPosNegAndSync ); 275cdf0e10cSrcweir m_aFlParameters.Show( bShowPosNegAndSync ); 276cdf0e10cSrcweir 277cdf0e10cSrcweir // unit for metric fields 278cdf0e10cSrcweir bool bIsErrorMargin( 279cdf0e10cSrcweir ( m_aRbFunction.IsChecked()) && 280cdf0e10cSrcweir ( m_aLbFunction.GetSelectEntryPos() == CHART_LB_FUNCTION_ERROR_MARGIN )); 281cdf0e10cSrcweir bool bIsPercentage( m_aRbPercent.IsChecked() || bIsErrorMargin ); 282cdf0e10cSrcweir String aCustomUnit; 283cdf0e10cSrcweir 284cdf0e10cSrcweir if( bIsPercentage ) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir aCustomUnit = String( RTL_CONSTASCII_USTRINGPARAM( " %" )); 287cdf0e10cSrcweir m_aMfPositive.SetDecimalDigits( 1 ); 288cdf0e10cSrcweir m_aMfPositive.SetSpinSize( 10 ); 289cdf0e10cSrcweir m_aMfNegative.SetDecimalDigits( 1 ); 290cdf0e10cSrcweir m_aMfNegative.SetSpinSize( 10 ); 291cdf0e10cSrcweir } 292cdf0e10cSrcweir else 293cdf0e10cSrcweir { 294cdf0e10cSrcweir m_aMfPositive.SetDecimalDigits( m_nConstDecimalDigits ); 295cdf0e10cSrcweir m_aMfPositive.SetSpinSize( m_nConstSpinSize ); 296cdf0e10cSrcweir m_aMfNegative.SetDecimalDigits( m_nConstDecimalDigits ); 297cdf0e10cSrcweir m_aMfNegative.SetSpinSize( m_nConstSpinSize ); 298cdf0e10cSrcweir } 299cdf0e10cSrcweir m_aMfPositive.SetCustomUnitText( aCustomUnit ); 300cdf0e10cSrcweir m_aMfNegative.SetCustomUnitText( aCustomUnit ); 301cdf0e10cSrcweir 302cdf0e10cSrcweir // positive and negative value fields 303cdf0e10cSrcweir bool bPosEnabled = ( m_aRbPositive.IsChecked() || m_aRbBoth.IsChecked()); 304cdf0e10cSrcweir bool bNegEnabled = ( m_aRbNegative.IsChecked() || m_aRbBoth.IsChecked()); 305cdf0e10cSrcweir if( !( bPosEnabled || bNegEnabled )) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir // all three controls are not checked -> ambiguous state 308cdf0e10cSrcweir bPosEnabled = true; 309cdf0e10cSrcweir bNegEnabled = true; 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir // functions with only one parameter 313cdf0e10cSrcweir bool bOneParameterCategory = 314cdf0e10cSrcweir bIsErrorMargin || m_aRbPercent.IsChecked(); 315cdf0e10cSrcweir if( bOneParameterCategory ) 316cdf0e10cSrcweir { 317cdf0e10cSrcweir m_aCbSyncPosNeg.Check(); 318cdf0e10cSrcweir } 319cdf0e10cSrcweir 320cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked()) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir bPosEnabled = true; 323cdf0e10cSrcweir bNegEnabled = false; 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir // all functions except error margin take no arguments 327cdf0e10cSrcweir if( m_aRbFunction.IsChecked() && 328cdf0e10cSrcweir ( m_aLbFunction.GetSelectEntryPos() != CHART_LB_FUNCTION_ERROR_MARGIN )) 329cdf0e10cSrcweir { 330cdf0e10cSrcweir bPosEnabled = false; 331cdf0e10cSrcweir bNegEnabled = false; 332cdf0e10cSrcweir } 333cdf0e10cSrcweir 334cdf0e10cSrcweir // enable/disable pos/neg fields 335cdf0e10cSrcweir m_aFtPositive.Enable( bPosEnabled ); 336cdf0e10cSrcweir m_aFtNegative.Enable( bNegEnabled ); 337cdf0e10cSrcweir if( bShowRange ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir m_aEdRangePositive.Enable( bPosEnabled ); 340cdf0e10cSrcweir m_aIbRangePositive.Enable( bPosEnabled ); 341cdf0e10cSrcweir m_aEdRangeNegative.Enable( bNegEnabled ); 342cdf0e10cSrcweir m_aIbRangeNegative.Enable( bNegEnabled ); 343cdf0e10cSrcweir } 344cdf0e10cSrcweir else 345cdf0e10cSrcweir { 346cdf0e10cSrcweir m_aMfPositive.Enable( bPosEnabled ); 347cdf0e10cSrcweir m_aMfNegative.Enable( bNegEnabled ); 348cdf0e10cSrcweir } 349cdf0e10cSrcweir 350cdf0e10cSrcweir m_aCbSyncPosNeg.Enable( 351cdf0e10cSrcweir !bOneParameterCategory && 352cdf0e10cSrcweir ( bPosEnabled || bNegEnabled )); 353cdf0e10cSrcweir 354cdf0e10cSrcweir // mark invalid entries in the range fields 355cdf0e10cSrcweir if( bShowRange && ! m_bHasInternalDataProvider ) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangePositive ); 358cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangeNegative ); 359cdf0e10cSrcweir } 360cdf0e10cSrcweir } 361cdf0e10cSrcweir 362cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, CategoryChosen, void *, ) 363cdf0e10cSrcweir { 364cdf0e10cSrcweir m_bErrorKindUnique = true; 365cdf0e10cSrcweir SvxChartKindError eOldError = m_eErrorKind; 366cdf0e10cSrcweir 367cdf0e10cSrcweir if( m_aRbNone.IsChecked()) 368cdf0e10cSrcweir m_eErrorKind = CHERROR_NONE; 369cdf0e10cSrcweir else if( m_aRbConst.IsChecked()) 370cdf0e10cSrcweir m_eErrorKind = CHERROR_CONST; 371cdf0e10cSrcweir else if( m_aRbPercent.IsChecked()) 372cdf0e10cSrcweir m_eErrorKind = CHERROR_PERCENT; 373cdf0e10cSrcweir else if( m_aRbRange.IsChecked()) 374cdf0e10cSrcweir m_eErrorKind = CHERROR_RANGE; 375cdf0e10cSrcweir else if( m_aRbFunction.IsChecked()) 376cdf0e10cSrcweir { 377cdf0e10cSrcweir if( m_aLbFunction.GetSelectEntryCount() == 1 ) 378cdf0e10cSrcweir { 379cdf0e10cSrcweir switch( m_aLbFunction.GetSelectEntryPos()) 380cdf0e10cSrcweir { 381cdf0e10cSrcweir case CHART_LB_FUNCTION_STD_ERROR: 382cdf0e10cSrcweir m_eErrorKind = CHERROR_STDERROR; break; 383cdf0e10cSrcweir case CHART_LB_FUNCTION_STD_DEV: 384cdf0e10cSrcweir m_eErrorKind = CHERROR_SIGMA; break; 385cdf0e10cSrcweir case CHART_LB_FUNCTION_VARIANCE: 386cdf0e10cSrcweir m_eErrorKind = CHERROR_VARIANT; break; 387cdf0e10cSrcweir case CHART_LB_FUNCTION_ERROR_MARGIN: 388cdf0e10cSrcweir m_eErrorKind = CHERROR_BIGERROR; break; 389cdf0e10cSrcweir default: 390cdf0e10cSrcweir m_bErrorKindUnique = false; 391cdf0e10cSrcweir } 392cdf0e10cSrcweir } 393cdf0e10cSrcweir else 394cdf0e10cSrcweir m_bErrorKindUnique = false; 395cdf0e10cSrcweir } 396cdf0e10cSrcweir else 397cdf0e10cSrcweir { 398cdf0e10cSrcweir OSL_ENSURE( false, "Unknown category chosen" ); 399cdf0e10cSrcweir m_bErrorKindUnique = false; 400cdf0e10cSrcweir } 401cdf0e10cSrcweir 402cdf0e10cSrcweir // changed to range 403cdf0e10cSrcweir if( m_eErrorKind == CHERROR_RANGE && 404cdf0e10cSrcweir eOldError != CHERROR_RANGE ) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir m_aCbSyncPosNeg.Check( 407cdf0e10cSrcweir (m_aEdRangePositive.GetText().Len() > 0) && 408cdf0e10cSrcweir m_aEdRangePositive.GetText().Equals( 409cdf0e10cSrcweir m_aEdRangeNegative.GetText())); 410cdf0e10cSrcweir } 411cdf0e10cSrcweir // changed from range 412cdf0e10cSrcweir else if( m_eErrorKind != CHERROR_RANGE && 413cdf0e10cSrcweir eOldError == CHERROR_RANGE ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir m_aCbSyncPosNeg.Check( 416cdf0e10cSrcweir m_aMfPositive.GetValue() == m_aMfNegative.GetValue()); 417cdf0e10cSrcweir } 418cdf0e10cSrcweir 419cdf0e10cSrcweir UpdateControlStates(); 420cdf0e10cSrcweir return 0; 421cdf0e10cSrcweir } 422cdf0e10cSrcweir 423cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, SynchronizePosAndNeg, void *, EMPTYARG ) 424cdf0e10cSrcweir { 425cdf0e10cSrcweir UpdateControlStates(); 426cdf0e10cSrcweir PosValueChanged( 0 ); 427cdf0e10cSrcweir return 0; 428cdf0e10cSrcweir } 429cdf0e10cSrcweir 430cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, PosValueChanged, void *, EMPTYARG ) 431cdf0e10cSrcweir { 432cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked()) 433cdf0e10cSrcweir { 434cdf0e10cSrcweir if( m_aRbRange.IsChecked()) 435cdf0e10cSrcweir { 436cdf0e10cSrcweir m_aEdRangeNegative.SetText( m_aEdRangePositive.GetText()); 437cdf0e10cSrcweir m_bRangeNegUnique = m_bRangePosUnique; 438cdf0e10cSrcweir } 439cdf0e10cSrcweir else 440cdf0e10cSrcweir m_aMfNegative.SetValue( m_aMfPositive.GetValue()); 441cdf0e10cSrcweir } 442cdf0e10cSrcweir 443cdf0e10cSrcweir return 0; 444cdf0e10cSrcweir } 445cdf0e10cSrcweir 446cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, IndicatorChanged, void *, EMPTYARG ) 447cdf0e10cSrcweir { 448cdf0e10cSrcweir m_bIndicatorUnique = true; 449cdf0e10cSrcweir if( m_aRbBoth.IsChecked()) 450cdf0e10cSrcweir m_eIndicate = CHINDICATE_BOTH; 451cdf0e10cSrcweir else if( m_aRbPositive.IsChecked()) 452cdf0e10cSrcweir m_eIndicate = CHINDICATE_UP; 453cdf0e10cSrcweir else if( m_aRbNegative.IsChecked()) 454cdf0e10cSrcweir m_eIndicate = CHINDICATE_DOWN; 455cdf0e10cSrcweir else 456cdf0e10cSrcweir m_bIndicatorUnique = false; 457cdf0e10cSrcweir 458cdf0e10cSrcweir UpdateControlStates(); 459cdf0e10cSrcweir return 0; 460cdf0e10cSrcweir } 461cdf0e10cSrcweir 462cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, ChooseRange, RangeSelectionButton *, pButton ) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get()); 465cdf0e10cSrcweir if( ! m_apRangeSelectionHelper.get()) 466cdf0e10cSrcweir return 0; 467cdf0e10cSrcweir OSL_ASSERT( m_pCurrentRangeChoosingField == 0 ); 468cdf0e10cSrcweir 469cdf0e10cSrcweir ::rtl::OUString aUIString; 470cdf0e10cSrcweir if( pButton == &m_aIbRangePositive ) 471cdf0e10cSrcweir { 472cdf0e10cSrcweir m_pCurrentRangeChoosingField = &m_aEdRangePositive; 473cdf0e10cSrcweir aUIString = String( SchResId( STR_DATA_SELECT_RANGE_FOR_POSITIVE_ERRORBARS )); 474cdf0e10cSrcweir } 475cdf0e10cSrcweir else 476cdf0e10cSrcweir { 477cdf0e10cSrcweir m_pCurrentRangeChoosingField = &m_aEdRangeNegative; 478cdf0e10cSrcweir aUIString = String( SchResId( STR_DATA_SELECT_RANGE_FOR_NEGATIVE_ERRORBARS )); 479cdf0e10cSrcweir } 480cdf0e10cSrcweir 481cdf0e10cSrcweir OSL_ASSERT( m_pParentDialog ); 482cdf0e10cSrcweir if( m_pParentDialog ) 483cdf0e10cSrcweir { 484cdf0e10cSrcweir lcl_enableRangeChoosing( true, m_pParentDialog ); 485cdf0e10cSrcweir m_apRangeSelectionHelper->chooseRange( 486cdf0e10cSrcweir m_pCurrentRangeChoosingField->GetText(), 487cdf0e10cSrcweir aUIString, *this ); 488cdf0e10cSrcweir } 489cdf0e10cSrcweir else 490cdf0e10cSrcweir m_pCurrentRangeChoosingField = 0; 491cdf0e10cSrcweir 492cdf0e10cSrcweir return 0; 493cdf0e10cSrcweir } 494cdf0e10cSrcweir 495cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, RangeChanged, Edit *, pEdit ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir if( pEdit == & m_aEdRangePositive ) 498cdf0e10cSrcweir { 499cdf0e10cSrcweir m_bRangePosUnique = true; 500cdf0e10cSrcweir PosValueChanged( 0 ); 501cdf0e10cSrcweir } 502cdf0e10cSrcweir else 503cdf0e10cSrcweir { 504cdf0e10cSrcweir m_bRangeNegUnique = true; 505cdf0e10cSrcweir } 506cdf0e10cSrcweir 507cdf0e10cSrcweir isRangeFieldContentValid( *pEdit ); 508cdf0e10cSrcweir 509cdf0e10cSrcweir return 0; 510cdf0e10cSrcweir } 511cdf0e10cSrcweir 512cdf0e10cSrcweir void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) 513cdf0e10cSrcweir { 514cdf0e10cSrcweir const SfxPoolItem *pPoolItem = NULL; 515cdf0e10cSrcweir SfxItemState aState = SFX_ITEM_UNKNOWN; 516cdf0e10cSrcweir 517cdf0e10cSrcweir // category 518cdf0e10cSrcweir m_eErrorKind = CHERROR_NONE; 519cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_KIND_ERROR, sal_True, &pPoolItem ); 520cdf0e10cSrcweir m_bErrorKindUnique = ( aState != SFX_ITEM_DONTCARE ); 521cdf0e10cSrcweir 522cdf0e10cSrcweir if( aState == SFX_ITEM_SET ) 523cdf0e10cSrcweir m_eErrorKind = ((const SvxChartKindErrorItem*) pPoolItem)->GetValue(); 524cdf0e10cSrcweir 525cdf0e10cSrcweir m_aLbFunction.SelectEntryPos( lcl_getLbEntryPosByErrorKind( m_eErrorKind )); 526cdf0e10cSrcweir 527cdf0e10cSrcweir if( m_bErrorKindUnique ) 528cdf0e10cSrcweir { 529cdf0e10cSrcweir switch( m_eErrorKind ) 530cdf0e10cSrcweir { 531cdf0e10cSrcweir case CHERROR_NONE: 532cdf0e10cSrcweir m_aRbNone.Check(); 533cdf0e10cSrcweir break; 534cdf0e10cSrcweir case CHERROR_PERCENT: 535cdf0e10cSrcweir m_aRbPercent.Check(); 536cdf0e10cSrcweir break; 537cdf0e10cSrcweir case CHERROR_CONST: 538cdf0e10cSrcweir m_aRbConst.Check(); 539cdf0e10cSrcweir break; 540cdf0e10cSrcweir case CHERROR_STDERROR: 541cdf0e10cSrcweir case CHERROR_VARIANT: 542cdf0e10cSrcweir case CHERROR_SIGMA: 543cdf0e10cSrcweir case CHERROR_BIGERROR: 544cdf0e10cSrcweir m_aRbFunction.Check(); 545cdf0e10cSrcweir break; 546cdf0e10cSrcweir case CHERROR_RANGE: 547cdf0e10cSrcweir m_aRbRange.Check(); 548cdf0e10cSrcweir break; 549cdf0e10cSrcweir } 550cdf0e10cSrcweir } 551cdf0e10cSrcweir else 552cdf0e10cSrcweir { 553cdf0e10cSrcweir m_aRbNone.Check( sal_False ); 554cdf0e10cSrcweir m_aRbConst.Check( sal_False ); 555cdf0e10cSrcweir m_aRbPercent.Check( sal_False ); 556cdf0e10cSrcweir m_aRbFunction.Check( sal_False ); 557cdf0e10cSrcweir } 558cdf0e10cSrcweir 559cdf0e10cSrcweir // parameters 560cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTPLUS, sal_True, &pPoolItem ); 561cdf0e10cSrcweir m_bPlusUnique = ( aState != SFX_ITEM_DONTCARE ); 562cdf0e10cSrcweir double fPlusValue = 0.0; 563cdf0e10cSrcweir if( aState == SFX_ITEM_SET ) 564cdf0e10cSrcweir { 565cdf0e10cSrcweir fPlusValue = ((const SvxDoubleItem*) pPoolItem)->GetValue(); 566cdf0e10cSrcweir sal_Int32 nPlusValue = static_cast< sal_Int32 >( fPlusValue * pow(10.0,m_aMfPositive.GetDecimalDigits()) ); 567cdf0e10cSrcweir m_aMfPositive.SetValue( nPlusValue ); 568cdf0e10cSrcweir } 569cdf0e10cSrcweir 570cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTMINUS, sal_True, &pPoolItem ); 571cdf0e10cSrcweir m_bMinusUnique = ( aState != SFX_ITEM_DONTCARE ); 572cdf0e10cSrcweir double fMinusValue = 0.0; 573cdf0e10cSrcweir if( aState == SFX_ITEM_SET ) 574cdf0e10cSrcweir { 575cdf0e10cSrcweir fMinusValue = ((const SvxDoubleItem*) pPoolItem)->GetValue(); 576cdf0e10cSrcweir sal_Int32 nMinusValue = static_cast< sal_Int32 >( fMinusValue * pow(10.0,m_aMfNegative.GetDecimalDigits()) ); 577cdf0e10cSrcweir m_aMfNegative.SetValue( nMinusValue ); 578cdf0e10cSrcweir 579cdf0e10cSrcweir if( m_eErrorKind != CHERROR_RANGE && 580cdf0e10cSrcweir fPlusValue == fMinusValue ) 581cdf0e10cSrcweir m_aCbSyncPosNeg.Check(); 582cdf0e10cSrcweir } 583cdf0e10cSrcweir 584cdf0e10cSrcweir // indicator 585cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_INDICATE, sal_True, &pPoolItem ); 586cdf0e10cSrcweir m_bIndicatorUnique = ( aState != SFX_ITEM_DONTCARE ); 587cdf0e10cSrcweir if( aState == SFX_ITEM_SET) 588cdf0e10cSrcweir m_eIndicate = ((const SvxChartIndicateItem * ) pPoolItem)->GetValue(); 589cdf0e10cSrcweir 590cdf0e10cSrcweir if( m_bIndicatorUnique ) 591cdf0e10cSrcweir { 592cdf0e10cSrcweir switch( m_eIndicate ) 593cdf0e10cSrcweir { 594cdf0e10cSrcweir case CHINDICATE_NONE : 595cdf0e10cSrcweir // no longer used, use both as default 596cdf0e10cSrcweir m_eIndicate = CHINDICATE_BOTH; 597cdf0e10cSrcweir // fall-through intended to BOTH 598cdf0e10cSrcweir case CHINDICATE_BOTH : 599cdf0e10cSrcweir m_aRbBoth.Check(); break; 600cdf0e10cSrcweir case CHINDICATE_UP : 601cdf0e10cSrcweir m_aRbPositive.Check(); break; 602cdf0e10cSrcweir case CHINDICATE_DOWN : 603cdf0e10cSrcweir m_aRbNegative.Check(); break; 604cdf0e10cSrcweir } 605cdf0e10cSrcweir } 606cdf0e10cSrcweir else 607cdf0e10cSrcweir { 608cdf0e10cSrcweir m_aRbBoth.Check( sal_False ); 609cdf0e10cSrcweir m_aRbPositive.Check( sal_False ); 610cdf0e10cSrcweir m_aRbNegative.Check( sal_False ); 611cdf0e10cSrcweir } 612cdf0e10cSrcweir 613cdf0e10cSrcweir // ranges 614cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_POS, sal_True, &pPoolItem ); 615cdf0e10cSrcweir m_bRangePosUnique = ( aState != SFX_ITEM_DONTCARE ); 616cdf0e10cSrcweir if( aState == SFX_ITEM_SET ) 617cdf0e10cSrcweir { 618cdf0e10cSrcweir String sRangePositive = (static_cast< const SfxStringItem * >( pPoolItem ))->GetValue(); 619cdf0e10cSrcweir m_aEdRangePositive.SetText( sRangePositive ); 620cdf0e10cSrcweir } 621cdf0e10cSrcweir 622cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_NEG, sal_True, &pPoolItem ); 623cdf0e10cSrcweir m_bRangeNegUnique = ( aState != SFX_ITEM_DONTCARE ); 624cdf0e10cSrcweir if( aState == SFX_ITEM_SET ) 625cdf0e10cSrcweir { 626cdf0e10cSrcweir String sRangeNegative = (static_cast< const SfxStringItem * >( pPoolItem ))->GetValue(); 627cdf0e10cSrcweir m_aEdRangeNegative.SetText( sRangeNegative ); 628cdf0e10cSrcweir if( m_eErrorKind == CHERROR_RANGE && 629cdf0e10cSrcweir sRangeNegative.Len() > 0 && 630cdf0e10cSrcweir sRangeNegative.Equals( m_aEdRangePositive.GetText())) 631cdf0e10cSrcweir m_aCbSyncPosNeg.Check(); 632cdf0e10cSrcweir } 633cdf0e10cSrcweir 634cdf0e10cSrcweir UpdateControlStates(); 635cdf0e10cSrcweir } 636cdf0e10cSrcweir 637cdf0e10cSrcweir sal_Bool ErrorBarResources::FillItemSet(SfxItemSet& rOutAttrs) const 638cdf0e10cSrcweir { 639cdf0e10cSrcweir if( m_bErrorKindUnique ) 640cdf0e10cSrcweir rOutAttrs.Put( SvxChartKindErrorItem( m_eErrorKind, SCHATTR_STAT_KIND_ERROR )); 641cdf0e10cSrcweir if( m_bIndicatorUnique ) 642cdf0e10cSrcweir rOutAttrs.Put( SvxChartIndicateItem( m_eIndicate, SCHATTR_STAT_INDICATE )); 643cdf0e10cSrcweir 644cdf0e10cSrcweir if( m_bErrorKindUnique ) 645cdf0e10cSrcweir { 646cdf0e10cSrcweir if( m_eErrorKind == CHERROR_RANGE ) 647cdf0e10cSrcweir { 648cdf0e10cSrcweir String aPosRange; 649cdf0e10cSrcweir String aNegRange; 650cdf0e10cSrcweir if( m_bHasInternalDataProvider ) 651cdf0e10cSrcweir { 652cdf0e10cSrcweir // the strings aPosRange/aNegRange have to be set to a non-empty 653cdf0e10cSrcweir // arbitrary string to generate error-bar sequences 654cdf0e10cSrcweir aPosRange.Assign( sal_Unicode('x')); 655cdf0e10cSrcweir aNegRange = aPosRange; 656cdf0e10cSrcweir } 657cdf0e10cSrcweir else 658cdf0e10cSrcweir { 659cdf0e10cSrcweir aPosRange = m_aEdRangePositive.GetText(); 660cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked()) 661cdf0e10cSrcweir aNegRange = aPosRange; 662cdf0e10cSrcweir else 663cdf0e10cSrcweir aNegRange = m_aEdRangeNegative.GetText(); 664cdf0e10cSrcweir } 665cdf0e10cSrcweir 666cdf0e10cSrcweir if( m_bRangePosUnique ) 667cdf0e10cSrcweir rOutAttrs.Put( SfxStringItem( SCHATTR_STAT_RANGE_POS, aPosRange )); 668cdf0e10cSrcweir if( m_bRangeNegUnique ) 669cdf0e10cSrcweir rOutAttrs.Put( SfxStringItem( SCHATTR_STAT_RANGE_NEG, aNegRange )); 670cdf0e10cSrcweir } 671cdf0e10cSrcweir else if( m_eErrorKind == CHERROR_CONST || 672cdf0e10cSrcweir m_eErrorKind == CHERROR_PERCENT || 673cdf0e10cSrcweir m_eErrorKind == CHERROR_BIGERROR ) 674cdf0e10cSrcweir { 675cdf0e10cSrcweir double fPosValue = static_cast< double >( m_aMfPositive.GetValue()) / 676cdf0e10cSrcweir pow( 10.0, m_aMfPositive.GetDecimalDigits()); 677cdf0e10cSrcweir double fNegValue = 0.0; 678cdf0e10cSrcweir 679cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked()) 680cdf0e10cSrcweir fNegValue = fPosValue; 681cdf0e10cSrcweir else 682cdf0e10cSrcweir fNegValue = static_cast< double >( m_aMfNegative.GetValue()) / 683cdf0e10cSrcweir pow( 10.0, m_aMfNegative.GetDecimalDigits()); 684cdf0e10cSrcweir 685cdf0e10cSrcweir rOutAttrs.Put( SvxDoubleItem( fPosValue, SCHATTR_STAT_CONSTPLUS )); 686cdf0e10cSrcweir rOutAttrs.Put( SvxDoubleItem( fNegValue, SCHATTR_STAT_CONSTMINUS )); 687cdf0e10cSrcweir } 688cdf0e10cSrcweir } 689cdf0e10cSrcweir 690cdf0e10cSrcweir return sal_True; 691cdf0e10cSrcweir } 692cdf0e10cSrcweir 693cdf0e10cSrcweir void ErrorBarResources::FillValueSets() 694cdf0e10cSrcweir { 695cdf0e10cSrcweir bool bIsHighContrast = ( true && m_aRbConst.GetSettings().GetStyleSettings().GetHighContrastMode() ); 696cdf0e10cSrcweir 697cdf0e10cSrcweir // do not scale images, show then centered 698cdf0e10cSrcweir // m_aFiPositive.SetStyle( (m_aFiPositive.GetStyle() & (~WB_SCALE)) | WB_CENTER ); 699cdf0e10cSrcweir // m_aFiNegative.SetStyle( (m_aFiNegative.GetStyle() & (~WB_SCALE)) | WB_CENTER ); 700cdf0e10cSrcweir // m_aFiBoth.SetStyle( (m_aFiBoth.GetStyle() & (~WB_SCALE)) | WB_CENTER ); 701cdf0e10cSrcweir 702cdf0e10cSrcweir if( m_eErrorBarType == ERROR_BAR_Y ) 703cdf0e10cSrcweir { 704cdf0e10cSrcweir m_aFiNegative.SetImage( SELECT_IMAGE( BMP_INDICATE_DOWN )); 705cdf0e10cSrcweir m_aFiPositive.SetImage( SELECT_IMAGE( BMP_INDICATE_UP )); 706cdf0e10cSrcweir m_aFiBoth.SetImage( SELECT_IMAGE( BMP_INDICATE_BOTH_VERTI )); 707cdf0e10cSrcweir } 708cdf0e10cSrcweir else if( m_eErrorBarType == ERROR_BAR_X ) 709cdf0e10cSrcweir { 710cdf0e10cSrcweir m_aFiNegative.SetImage( SELECT_IMAGE( BMP_INDICATE_LEFT )); 711cdf0e10cSrcweir m_aFiPositive.SetImage( SELECT_IMAGE( BMP_INDICATE_RIGHT )); 712cdf0e10cSrcweir m_aFiBoth.SetImage( SELECT_IMAGE( BMP_INDICATE_BOTH_HORI )); 713cdf0e10cSrcweir } 714cdf0e10cSrcweir } 715cdf0e10cSrcweir 716cdf0e10cSrcweir void ErrorBarResources::listeningFinished( 717cdf0e10cSrcweir const ::rtl::OUString & rNewRange ) 718cdf0e10cSrcweir { 719cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get()); 720cdf0e10cSrcweir if( ! m_apRangeSelectionHelper.get()) 721cdf0e10cSrcweir return; 722cdf0e10cSrcweir 723cdf0e10cSrcweir // rNewRange becomes invalid after removing the listener 724cdf0e10cSrcweir ::rtl::OUString aRange( rNewRange ); 725cdf0e10cSrcweir 726cdf0e10cSrcweir // m_rDialogModel.startControllerLockTimer(); 727cdf0e10cSrcweir 728cdf0e10cSrcweir // stop listening 729cdf0e10cSrcweir m_apRangeSelectionHelper->stopRangeListening(); 730cdf0e10cSrcweir 731cdf0e10cSrcweir // change edit field 732cdf0e10cSrcweir if( m_pParentWindow ) 733cdf0e10cSrcweir { 734cdf0e10cSrcweir m_pParentWindow->ToTop(); 735cdf0e10cSrcweir m_pParentWindow->GrabFocus(); 736cdf0e10cSrcweir } 737cdf0e10cSrcweir 738cdf0e10cSrcweir if( m_pCurrentRangeChoosingField ) 739cdf0e10cSrcweir { 740cdf0e10cSrcweir m_pCurrentRangeChoosingField->SetText( String( aRange )); 741cdf0e10cSrcweir m_pCurrentRangeChoosingField->GrabFocus(); 742cdf0e10cSrcweir PosValueChanged( 0 ); 743cdf0e10cSrcweir } 744cdf0e10cSrcweir 745cdf0e10cSrcweir m_pCurrentRangeChoosingField = 0; 746cdf0e10cSrcweir 747cdf0e10cSrcweir UpdateControlStates(); 748cdf0e10cSrcweir OSL_ASSERT( m_pParentDialog ); 749cdf0e10cSrcweir if( m_pParentDialog ) 750cdf0e10cSrcweir lcl_enableRangeChoosing( false, m_pParentDialog ); 751cdf0e10cSrcweir } 752cdf0e10cSrcweir 753cdf0e10cSrcweir void ErrorBarResources::disposingRangeSelection() 754cdf0e10cSrcweir { 755cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get()); 756cdf0e10cSrcweir if( m_apRangeSelectionHelper.get()) 757cdf0e10cSrcweir m_apRangeSelectionHelper->stopRangeListening( false ); 758cdf0e10cSrcweir } 759cdf0e10cSrcweir 760cdf0e10cSrcweir bool ErrorBarResources::isRangeFieldContentValid( Edit & rEdit ) 761cdf0e10cSrcweir { 762cdf0e10cSrcweir ::rtl::OUString aRange( rEdit.GetText()); 763cdf0e10cSrcweir bool bIsValid = ( aRange.getLength() == 0 ) || 764cdf0e10cSrcweir ( m_apRangeSelectionHelper.get() && 765cdf0e10cSrcweir m_apRangeSelectionHelper->verifyCellRange( aRange )); 766cdf0e10cSrcweir 767cdf0e10cSrcweir if( bIsValid || !rEdit.IsEnabled()) 768cdf0e10cSrcweir { 769cdf0e10cSrcweir rEdit.SetControlForeground(); 770cdf0e10cSrcweir rEdit.SetControlBackground(); 771cdf0e10cSrcweir } 772cdf0e10cSrcweir else 773cdf0e10cSrcweir { 774cdf0e10cSrcweir rEdit.SetControlBackground( RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR ); 775cdf0e10cSrcweir rEdit.SetControlForeground( RANGE_SELECTION_INVALID_RANGE_FOREGROUND_COLOR ); 776cdf0e10cSrcweir } 777cdf0e10cSrcweir 778cdf0e10cSrcweir return bIsValid; 779cdf0e10cSrcweir } 780cdf0e10cSrcweir 781cdf0e10cSrcweir //............................................................................. 782cdf0e10cSrcweir } //namespace chart 783cdf0e10cSrcweir //............................................................................. 784