diff options
author | Olivier Hallot <olivier.hallot@edx.srv.br> | 2013-12-25 14:39:59 -0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-12-27 20:20:35 +0000 |
commit | acf3949da96d678239e83df5b47c2f20014ca71f (patch) | |
tree | 71e40dbe5c9d98688ee1fc3eab8a0ffae615c630 /chart2/source/controller/dialogs/res_ErrorBar.cxx | |
parent | 6a59fbefbfbc90d6febd43e689773f88deaf36b3 (diff) |
Convert chart error bars tab page to widget UI
Change-Id: I9f3cb1fb3186e77b5c5ee57ff3e6086022c80bfd
Note: kept old resouce to allow dialog to be called by dlg_InsertErrorBars, util we find a way to have a dialog to call a tab page and access the resources. Once a solution is found, old- resources can be deleted, RangeEdit and RangeSelectionHelper can be nuked too.
Reviewed-on: https://gerrit.libreoffice.org/7198
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'chart2/source/controller/dialogs/res_ErrorBar.cxx')
-rw-r--r-- | chart2/source/controller/dialogs/res_ErrorBar.cxx | 731 |
1 files changed, 698 insertions, 33 deletions
diff --git a/chart2/source/controller/dialogs/res_ErrorBar.cxx b/chart2/source/controller/dialogs/res_ErrorBar.cxx index 38da2fe96c61..e622fb903046 100644 --- a/chart2/source/controller/dialogs/res_ErrorBar.cxx +++ b/chart2/source/controller/dialogs/res_ErrorBar.cxx @@ -76,7 +76,672 @@ sal_uInt16 lcl_getLbEntryPosByErrorKind( SvxChartKindError eErrorKind ) namespace chart { -ErrorBarResources::ErrorBarResources( Window* pParent, Dialog * pParentDialog, +ErrorBarResources::ErrorBarResources( SfxTabPage* pParent, Dialog * pParentDialog, + const SfxItemSet& rInAttrs, bool bNoneAvailable, + tErrorBarType eType /* = ERROR_BAR_Y */ ) : + m_eErrorKind( CHERROR_NONE ), + m_eIndicate( CHINDICATE_BOTH ), + m_bErrorKindUnique( true ), + m_bIndicatorUnique( true ), + m_bPlusUnique( true ), + m_bMinusUnique( true ), + m_bRangePosUnique( true ), + m_bRangeNegUnique( true ), + m_bNoneAvailable( bNoneAvailable ), + m_eErrorBarType( eType ), + m_nConstDecimalDigits( 1 ), + m_nConstSpinSize( 1 ), + m_pParentWindow( pParent ), + m_pParentDialog( pParentDialog ), + m_pCurrentRangeChoosingField( 0 ), + m_bHasInternalDataProvider( true ), + m_bDisableDataTableDialog( false ) +{ + pParent->get(m_pRbNone,"RB_NONE"); + pParent->get(m_pRbConst, "RB_CONST"); + pParent->get(m_pRbPercent, "RB_PERCENT"); + pParent->get(m_pRbFunction, "RB_FUNCTION"); + pParent->get(m_pRbRange, "RB_RANGE"); + pParent->get(m_pLbFunction, "LB_FUNCTION"); + + pParent->get(m_pFlParameters, "framePARAMETERS"); + pParent->get(m_pBxPositive, "boxPOSITIVE"); + pParent->get(m_pMfPositive, "MF_POSITIVE"); + pParent->get(m_pEdRangePositive, "ED_RANGE_POSITIVE"); + pParent->get(m_pIbRangePositive, "IB_RANGE_POSITIVE"); + pParent->get(m_pBxNegative, "boxNEGATIVE"); + pParent->get(m_pMfNegative, "MF_NEGATIVE"); + pParent->get(m_pEdRangeNegative, "ED_RANGE_NEGATIVE"); + pParent->get(m_pIbRangeNegative, "IB_RANGE_NEGATIVE"); + pParent->get(m_pCbSyncPosNeg, "CB_SYN_POS_NEG"); + + pParent->get(m_pRbBoth, "RB_BOTH"); + pParent->get(m_pRbPositive, "RB_POSITIVE"); + pParent->get(m_pRbNegative, "RB_NEGATIVE"); + pParent->get(m_pFiBoth, "FI_BOTH"); + pParent->get(m_pFiPositive, "FI_POSITIVE"); + pParent->get(m_pFiNegative, "FI_NEGATIVE"); + +//TODO: ohallot: Remove these strings from .src files + pParent->get(m_pUIStringPos, "STR_DATA_SELECT_RANGE_FOR_POSITIVE_ERRORBARS"); + pParent->get(m_pUIStringNeg, "STR_DATA_SELECT_RANGE_FOR_NEGATIVE_ERRORBARS"); + pParent->get(m_pUIStringRbRange, "STR_CONTROLTEXT_ERROR_BARS_FROM_DATA"); + + if( m_bNoneAvailable ) + m_pRbNone->SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); + else + m_pRbNone->Hide(); + + m_pRbConst->SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); + m_pRbPercent->SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); + m_pRbFunction->SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); + m_pRbRange->SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); + m_pLbFunction->SetSelectHdl( LINK( this, ErrorBarResources, CategoryChosen )); + + m_pCbSyncPosNeg->Check( sal_False ); + m_pCbSyncPosNeg->SetToggleHdl( LINK( this, ErrorBarResources, SynchronizePosAndNeg )); + + m_pMfPositive->SetModifyHdl( LINK( this, ErrorBarResources, PosValueChanged )); + m_pEdRangePositive->SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged )); + m_pEdRangeNegative->SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged )); + + m_pRbPositive->SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); + m_pRbNegative->SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); + m_pRbBoth->SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); + + m_pIbRangePositive->SetClickHdl( LINK( this, ErrorBarResources, ChooseRange )); + m_pIbRangeNegative->SetClickHdl( LINK( this, ErrorBarResources, ChooseRange )); + + FillValueSets(); + Reset( rInAttrs ); +} + +ErrorBarResources::~ErrorBarResources() +{ +} + +void ErrorBarResources::SetErrorBarType( tErrorBarType eNewType ) +{ + if( m_eErrorBarType != eNewType ) + { + m_eErrorBarType = eNewType; + FillValueSets(); + } +} + +void ErrorBarResources::SetChartDocumentForRangeChoosing( + const uno::Reference< chart2::XChartDocument > & xChartDocument ) +{ + if( xChartDocument.is()) + { + m_bHasInternalDataProvider = xChartDocument->hasInternalDataProvider(); + uno::Reference< beans::XPropertySet > xProps( xChartDocument, uno::UNO_QUERY ); + if ( xProps.is() ) + { + try + { + xProps->getPropertyValue( "DisableDataTableDialog" ) >>= m_bDisableDataTableDialog; + } + catch( const uno::Exception& e ) + { + ASSERT_EXCEPTION( e ); + } + } + } + m_apRangeSelectionHelper.reset( new RangeSelectionHelper( xChartDocument )); + + // has internal data provider => rename "cell range" to "from data" + OSL_ASSERT( m_apRangeSelectionHelper.get()); + if( m_bHasInternalDataProvider ) + { + m_pRbRange->SetText(m_pUIStringRbRange->GetText()); + } + + if( m_pRbRange->IsChecked()) + { + isRangeFieldContentValid( *m_pEdRangePositive ); + isRangeFieldContentValid( *m_pEdRangeNegative ); + } +} + +void ErrorBarResources::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth ) +{ + if( fMinorStepWidth < 0 ) + fMinorStepWidth = -fMinorStepWidth; + + sal_Int32 nExponent = static_cast< sal_Int32 >( ::rtl::math::approxFloor( log10( fMinorStepWidth ))); + if( nExponent <= 0 ) + { + // one digit precision more + m_nConstDecimalDigits = static_cast< sal_uInt16 >( (-nExponent) + 1 ); + m_nConstSpinSize = 10; + } + else + { + m_nConstDecimalDigits = 0; + m_nConstSpinSize = static_cast< sal_Int64 >( pow( 10.0, (int)nExponent )); + } +} + +void ErrorBarResources::UpdateControlStates() +{ + // function + bool bIsFunction = m_pRbFunction->IsChecked(); + m_pLbFunction->Enable( bIsFunction ); + + // range buttons + m_pRbRange->Enable( !m_bHasInternalDataProvider || !m_bDisableDataTableDialog ); + bool bShowRange = ( m_pRbRange->IsChecked()); + bool bCanChooseRange = + ( bShowRange && + m_apRangeSelectionHelper.get() && + m_apRangeSelectionHelper->hasRangeSelection()); + + m_pMfPositive->Show( ! bShowRange ); + m_pMfNegative->Show( ! bShowRange ); + + // use range but without range chooser => hide controls + m_pEdRangePositive->Show( bShowRange && ! m_bHasInternalDataProvider ); + m_pIbRangePositive->Show( bCanChooseRange ); + m_pEdRangeNegative->Show( bShowRange && ! m_bHasInternalDataProvider ); + m_pIbRangeNegative->Show( bCanChooseRange ); + + bool bShowPosNegAndSync = ! (bShowRange && m_bHasInternalDataProvider); + m_pFlParameters->Show( bShowPosNegAndSync ); + + // unit for metric fields + bool bIsErrorMargin( + ( m_pRbFunction->IsChecked()) && + ( m_pLbFunction->GetSelectEntryPos() == CHART_LB_FUNCTION_ERROR_MARGIN )); + bool bIsPercentage( m_pRbPercent->IsChecked() || bIsErrorMargin ); + OUString aCustomUnit; + + if( bIsPercentage ) + { + aCustomUnit = " %"; + m_pMfPositive->SetDecimalDigits( 1 ); + m_pMfPositive->SetSpinSize( 10 ); + m_pMfNegative->SetDecimalDigits( 1 ); + m_pMfNegative->SetSpinSize( 10 ); + } + else + { + m_pMfPositive->SetDecimalDigits( m_nConstDecimalDigits ); + m_pMfPositive->SetSpinSize( m_nConstSpinSize ); + m_pMfNegative->SetDecimalDigits( m_nConstDecimalDigits ); + m_pMfNegative->SetSpinSize( m_nConstSpinSize ); + } + m_pMfPositive->SetCustomUnitText( aCustomUnit ); + m_pMfNegative->SetCustomUnitText( aCustomUnit ); + + // positive and negative value fields + bool bPosEnabled = ( m_pRbPositive->IsChecked() || m_pRbBoth->IsChecked()); + bool bNegEnabled = ( m_pRbNegative->IsChecked() || m_pRbBoth->IsChecked()); + if( !( bPosEnabled || bNegEnabled )) + { + // all three controls are not checked -> ambiguous state + bPosEnabled = true; + bNegEnabled = true; + } + + // functions with only one parameter + bool bOneParameterCategory = + bIsErrorMargin || m_pRbPercent->IsChecked(); + if( bOneParameterCategory ) + { + m_pCbSyncPosNeg->Check(); + } + + if( m_pCbSyncPosNeg->IsChecked()) + { + bPosEnabled = true; + bNegEnabled = false; + } + + // all functions except error margin take no arguments + if( m_pRbFunction->IsChecked() && ( m_pLbFunction->GetSelectEntryPos() != CHART_LB_FUNCTION_ERROR_MARGIN )) + { + bPosEnabled = false; + bNegEnabled = false; + } + + // enable/disable pos/neg fields + m_pBxPositive->Enable( bPosEnabled ); + m_pBxNegative->Enable( bNegEnabled ); + if( bShowRange ) + { + m_pEdRangePositive->Enable( bPosEnabled ); + m_pIbRangePositive->Enable( bPosEnabled ); + m_pEdRangeNegative->Enable( bNegEnabled ); + m_pIbRangeNegative->Enable( bNegEnabled ); + } + else + { + m_pMfPositive->Enable( bPosEnabled ); + m_pMfNegative->Enable( bNegEnabled ); + } + + m_pCbSyncPosNeg->Enable( !bOneParameterCategory && ( bPosEnabled || bNegEnabled )); + + // mark invalid entries in the range fields + if( bShowRange && ! m_bHasInternalDataProvider ) + { + isRangeFieldContentValid( *m_pEdRangePositive ); + isRangeFieldContentValid( *m_pEdRangeNegative ); + } +} + +IMPL_LINK( ErrorBarResources, CategoryChosen, void *, ) +{ + m_bErrorKindUnique = true; + SvxChartKindError eOldError = m_eErrorKind; + + if( m_pRbNone->IsChecked()) + m_eErrorKind = CHERROR_NONE; + else if( m_pRbConst->IsChecked()) + m_eErrorKind = CHERROR_CONST; + else if( m_pRbPercent->IsChecked()) + m_eErrorKind = CHERROR_PERCENT; + else if( m_pRbRange->IsChecked()) + m_eErrorKind = CHERROR_RANGE; + else if( m_pRbFunction->IsChecked()) + { + if( m_pLbFunction->GetSelectEntryCount() == 1 ) + { + switch( m_pLbFunction->GetSelectEntryPos()) + { + case CHART_LB_FUNCTION_STD_ERROR: + m_eErrorKind = CHERROR_STDERROR; break; + case CHART_LB_FUNCTION_STD_DEV: + m_eErrorKind = CHERROR_SIGMA; break; + case CHART_LB_FUNCTION_VARIANCE: + m_eErrorKind = CHERROR_VARIANT; break; + case CHART_LB_FUNCTION_ERROR_MARGIN: + m_eErrorKind = CHERROR_BIGERROR; break; + default: + m_bErrorKindUnique = false; + } + } + else + m_bErrorKindUnique = false; + } + else + { + OSL_FAIL( "Unknown category chosen" ); + m_bErrorKindUnique = false; + } + + // changed to range + if( m_eErrorKind == CHERROR_RANGE && + eOldError != CHERROR_RANGE ) + { + m_pCbSyncPosNeg->Check( + (!m_pEdRangePositive->GetText().isEmpty()) && + m_pEdRangePositive->GetText() == m_pEdRangeNegative->GetText()); + } + // changed from range + else if( m_eErrorKind != CHERROR_RANGE && + eOldError == CHERROR_RANGE ) + { + m_pCbSyncPosNeg->Check( m_pMfPositive->GetValue() == m_pMfNegative->GetValue()); + } + + UpdateControlStates(); + return 0; +} + +IMPL_LINK_NOARG(ErrorBarResources, SynchronizePosAndNeg) +{ + UpdateControlStates(); + PosValueChanged( 0 ); + return 0; +} + +IMPL_LINK_NOARG(ErrorBarResources, PosValueChanged) +{ + if( m_pCbSyncPosNeg->IsChecked()) + { + if( m_pRbRange->IsChecked()) + { + m_pEdRangeNegative->SetText( m_pEdRangePositive->GetText()); + m_bRangeNegUnique = m_bRangePosUnique; + } + else + m_pMfNegative->SetValue( m_pMfPositive->GetValue()); + } + + return 0; +} + +IMPL_LINK_NOARG(ErrorBarResources, IndicatorChanged) +{ + m_bIndicatorUnique = true; + if( m_pRbBoth->IsChecked()) + m_eIndicate = CHINDICATE_BOTH; + else if( m_pRbPositive->IsChecked()) + m_eIndicate = CHINDICATE_UP; + else if( m_pRbNegative->IsChecked()) + m_eIndicate = CHINDICATE_DOWN; + else + m_bIndicatorUnique = false; + + UpdateControlStates(); + return 0; +} + +IMPL_LINK( ErrorBarResources, ChooseRange, RangeSelectionButton *, pButton ) +{ + OSL_ASSERT( m_apRangeSelectionHelper.get()); + if( ! m_apRangeSelectionHelper.get()) + return 0; + OSL_ASSERT( m_pCurrentRangeChoosingField == 0 ); + + OUString aUIString; + + if( pButton == m_pIbRangePositive ) + { + m_pCurrentRangeChoosingField = m_pEdRangePositive; + aUIString = m_pUIStringPos->GetText(); + } + else + { + m_pCurrentRangeChoosingField = m_pEdRangeNegative; + aUIString = m_pUIStringNeg->GetText(); + } + + assert( m_pParentDialog ); + if( m_pParentDialog ) + { + lcl_enableRangeChoosing( true, m_pParentDialog ); + m_apRangeSelectionHelper->chooseRange( + m_pCurrentRangeChoosingField->GetText(), + aUIString, *this ); + } + else + m_pCurrentRangeChoosingField = 0; + + return 0; +} + +IMPL_LINK( ErrorBarResources, RangeChanged, Edit *, pEdit ) +{ + if( pEdit == m_pEdRangePositive ) + { + m_bRangePosUnique = true; + PosValueChanged( 0 ); + } + else + { + m_bRangeNegUnique = true; + } + + isRangeFieldContentValid( *pEdit ); + + return 0; +} + +void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) +{ + const SfxPoolItem *pPoolItem = NULL; + SfxItemState aState = SFX_ITEM_UNKNOWN; + + // category + m_eErrorKind = CHERROR_NONE; + aState = rInAttrs.GetItemState( SCHATTR_STAT_KIND_ERROR, sal_True, &pPoolItem ); + m_bErrorKindUnique = ( aState != SFX_ITEM_DONTCARE ); + + if( aState == SFX_ITEM_SET ) + m_eErrorKind = ((const SvxChartKindErrorItem*) pPoolItem)->GetValue(); + + m_pLbFunction->SelectEntryPos( lcl_getLbEntryPosByErrorKind( m_eErrorKind )); + + if( m_bErrorKindUnique ) + { + switch( m_eErrorKind ) + { + case CHERROR_NONE: + m_pRbNone->Check(); + break; + case CHERROR_PERCENT: + m_pRbPercent->Check(); + break; + case CHERROR_CONST: + m_pRbConst->Check(); + break; + case CHERROR_STDERROR: + case CHERROR_VARIANT: + case CHERROR_SIGMA: + case CHERROR_BIGERROR: + m_pRbFunction->Check(); + break; + case CHERROR_RANGE: + m_pRbRange->Check(); + break; + } + } + else + { + m_pRbNone->Check( sal_False ); + m_pRbConst->Check( sal_False ); + m_pRbPercent->Check( sal_False ); + m_pRbFunction->Check( sal_False ); + } + + // parameters + aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTPLUS, sal_True, &pPoolItem ); + m_bPlusUnique = ( aState != SFX_ITEM_DONTCARE ); + double fPlusValue = 0.0; + if( aState == SFX_ITEM_SET ) + { + fPlusValue = ((const SvxDoubleItem*) pPoolItem)->GetValue(); + sal_Int32 nPlusValue = static_cast< sal_Int32 >( fPlusValue * pow(10.0,m_pMfPositive->GetDecimalDigits()) ); + m_pMfPositive->SetValue( nPlusValue ); + } + + aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTMINUS, sal_True, &pPoolItem ); + m_bMinusUnique = ( aState != SFX_ITEM_DONTCARE ); + if( aState == SFX_ITEM_SET ) + { + double fMinusValue = ((const SvxDoubleItem*) pPoolItem)->GetValue(); + sal_Int32 nMinusValue = static_cast< sal_Int32 >( fMinusValue * pow(10.0,m_pMfNegative->GetDecimalDigits()) ); + m_pMfNegative->SetValue( nMinusValue ); + + if( m_eErrorKind != CHERROR_RANGE && + fPlusValue == fMinusValue ) + m_pCbSyncPosNeg->Check(); + } + + // indicator + aState = rInAttrs.GetItemState( SCHATTR_STAT_INDICATE, sal_True, &pPoolItem ); + m_bIndicatorUnique = ( aState != SFX_ITEM_DONTCARE ); + if( aState == SFX_ITEM_SET) + m_eIndicate = ((const SvxChartIndicateItem * ) pPoolItem)->GetValue(); + + if( m_bIndicatorUnique ) + { + switch( m_eIndicate ) + { + case CHINDICATE_NONE : + // no longer used, use both as default + m_eIndicate = CHINDICATE_BOTH; + // fall-through intended to BOTH + case CHINDICATE_BOTH : + m_pRbBoth->Check(); break; + case CHINDICATE_UP : + m_pRbPositive->Check(); break; + case CHINDICATE_DOWN : + m_pRbNegative->Check(); break; + } + } + else + { + m_pRbBoth->Check( sal_False ); + m_pRbPositive->Check( sal_False ); + m_pRbNegative->Check( sal_False ); + } + + // ranges + aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_POS, sal_True, &pPoolItem ); + m_bRangePosUnique = ( aState != SFX_ITEM_DONTCARE ); + if( aState == SFX_ITEM_SET ) + { + OUString sRangePositive = (static_cast< const SfxStringItem * >( pPoolItem ))->GetValue(); + m_pEdRangePositive->SetText( sRangePositive ); + } + + aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_NEG, sal_True, &pPoolItem ); + m_bRangeNegUnique = ( aState != SFX_ITEM_DONTCARE ); + if( aState == SFX_ITEM_SET ) + { + OUString sRangeNegative = (static_cast< const SfxStringItem * >( pPoolItem ))->GetValue(); + m_pEdRangeNegative->SetText( sRangeNegative ); + if( m_eErrorKind == CHERROR_RANGE && + !sRangeNegative.isEmpty() && + sRangeNegative == m_pEdRangePositive->GetText() ) + m_pCbSyncPosNeg->Check(); + } + + UpdateControlStates(); +} + +sal_Bool ErrorBarResources::FillItemSet(SfxItemSet& rOutAttrs) const +{ + if( m_bErrorKindUnique ) + rOutAttrs.Put( SvxChartKindErrorItem( m_eErrorKind, SCHATTR_STAT_KIND_ERROR )); + if( m_bIndicatorUnique ) + rOutAttrs.Put( SvxChartIndicateItem( m_eIndicate, SCHATTR_STAT_INDICATE )); + + if( m_bErrorKindUnique ) + { + if( m_eErrorKind == CHERROR_RANGE ) + { + OUString aPosRange; + OUString aNegRange; + if( m_bHasInternalDataProvider ) + { + // the strings aPosRange/aNegRange have to be set to a non-empty + // arbitrary string to generate error-bar sequences + aPosRange = "x"; + aNegRange = aPosRange; + } + else + { + aPosRange = m_pEdRangePositive->GetText(); + if( m_pCbSyncPosNeg->IsChecked()) + aNegRange = aPosRange; + else + aNegRange = m_pEdRangeNegative->GetText(); + } + + if( m_bRangePosUnique ) + rOutAttrs.Put( SfxStringItem( SCHATTR_STAT_RANGE_POS, aPosRange )); + if( m_bRangeNegUnique ) + rOutAttrs.Put( SfxStringItem( SCHATTR_STAT_RANGE_NEG, aNegRange )); + } + else if( m_eErrorKind == CHERROR_CONST || + m_eErrorKind == CHERROR_PERCENT || + m_eErrorKind == CHERROR_BIGERROR ) + { + double fPosValue = static_cast< double >( m_pMfPositive->GetValue()) / + pow( 10.0, m_pMfPositive->GetDecimalDigits()); + double fNegValue = 0.0; + + if( m_pCbSyncPosNeg->IsChecked()) + fNegValue = fPosValue; + else + fNegValue = static_cast< double >( m_pMfNegative->GetValue()) / + pow( 10.0, m_pMfNegative->GetDecimalDigits()); + + rOutAttrs.Put( SvxDoubleItem( fPosValue, SCHATTR_STAT_CONSTPLUS )); + rOutAttrs.Put( SvxDoubleItem( fNegValue, SCHATTR_STAT_CONSTMINUS )); + } + } + + rOutAttrs.Put( SfxBoolItem( SCHATTR_STAT_ERRORBAR_TYPE , m_eErrorBarType == ERROR_BAR_Y )); + + return sal_True; +} + +void ErrorBarResources::FillValueSets() +{ + if( m_eErrorBarType == ERROR_BAR_Y ) + { + m_pFiNegative->SetImage( Image( SchResId( BMP_INDICATE_DOWN ) ) ); + m_pFiPositive->SetImage( Image( SchResId( BMP_INDICATE_UP ) ) ); + m_pFiBoth->SetImage( Image( SchResId( BMP_INDICATE_BOTH_VERTI ) ) ); + } + else if( m_eErrorBarType == ERROR_BAR_X ) + { + m_pFiNegative->SetImage( Image( SchResId( BMP_INDICATE_LEFT ) ) ); + m_pFiPositive->SetImage( Image( SchResId( BMP_INDICATE_RIGHT ) ) ); + m_pFiBoth->SetImage( Image( SchResId( BMP_INDICATE_BOTH_HORI ) ) ); + } +} + +void ErrorBarResources::listeningFinished( + const OUString & rNewRange ) +{ + OSL_ASSERT( m_apRangeSelectionHelper.get()); + if( ! m_apRangeSelectionHelper.get()) + return; + + // rNewRange becomes invalid after removing the listener + OUString aRange( rNewRange ); + + // stop listening + m_apRangeSelectionHelper->stopRangeListening(); + + // change edit field + if( m_pParentWindow ) + { + m_pParentWindow->ToTop(); + m_pParentWindow->GrabFocus(); + } + + if( m_pCurrentRangeChoosingField ) + { + m_pCurrentRangeChoosingField->SetText( aRange ); + m_pCurrentRangeChoosingField->GrabFocus(); + PosValueChanged( 0 ); + } + + m_pCurrentRangeChoosingField = 0; + + UpdateControlStates(); + OSL_ASSERT( m_pParentDialog ); + if( m_pParentDialog ) + lcl_enableRangeChoosing( false, m_pParentDialog ); +} + +void ErrorBarResources::disposingRangeSelection() +{ + OSL_ASSERT( m_apRangeSelectionHelper.get()); + if( m_apRangeSelectionHelper.get()) + m_apRangeSelectionHelper->stopRangeListening( false ); +} + +bool ErrorBarResources::isRangeFieldContentValid( Edit & rEdit ) +{ + OUString aRange( rEdit.GetText()); + bool bIsValid = ( aRange.isEmpty() ) || + ( m_apRangeSelectionHelper.get() && + m_apRangeSelectionHelper->verifyCellRange( aRange )); + + if( bIsValid || !rEdit.IsEnabled()) + { + rEdit.SetControlForeground(); + rEdit.SetControlBackground(); + } + else + { + rEdit.SetControlBackground( RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR ); + rEdit.SetControlForeground( RANGE_SELECTION_INVALID_RANGE_FOREGROUND_COLOR ); + } + + return bIsValid; +} + +oldErrorBarResources::oldErrorBarResources( Window* pParent, Dialog * pParentDialog, const SfxItemSet& rInAttrs, bool bNoneAvailable, tErrorBarType eType /* = ERROR_BAR_Y */ ) : @@ -126,29 +791,29 @@ ErrorBarResources::ErrorBarResources( Window* pParent, Dialog * pParentDialog, m_bDisableDataTableDialog( false ) { if( m_bNoneAvailable ) - m_aRbNone.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); + m_aRbNone.SetClickHdl( LINK( this, oldErrorBarResources, CategoryChosen )); else m_aRbNone.Hide(); - m_aRbConst.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); - m_aRbPercent.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); - m_aRbFunction.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); - m_aRbRange.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen )); - m_aLbFunction.SetSelectHdl( LINK( this, ErrorBarResources, CategoryChosen )); + m_aRbConst.SetClickHdl( LINK( this, oldErrorBarResources, CategoryChosen )); + m_aRbPercent.SetClickHdl( LINK( this, oldErrorBarResources, CategoryChosen )); + m_aRbFunction.SetClickHdl( LINK( this, oldErrorBarResources, CategoryChosen )); + m_aRbRange.SetClickHdl( LINK( this, oldErrorBarResources, CategoryChosen )); + m_aLbFunction.SetSelectHdl( LINK( this, oldErrorBarResources, CategoryChosen )); m_aCbSyncPosNeg.Check( sal_False ); - m_aCbSyncPosNeg.SetToggleHdl( LINK( this, ErrorBarResources, SynchronizePosAndNeg )); + m_aCbSyncPosNeg.SetToggleHdl( LINK( this, oldErrorBarResources, SynchronizePosAndNeg )); - m_aMfPositive.SetModifyHdl( LINK( this, ErrorBarResources, PosValueChanged )); - m_aEdRangePositive.SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged )); - m_aEdRangeNegative.SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged )); + m_aMfPositive.SetModifyHdl( LINK( this, oldErrorBarResources, PosValueChanged )); + m_aEdRangePositive.SetModifyHdl( LINK( this, oldErrorBarResources, RangeChanged )); + m_aEdRangeNegative.SetModifyHdl( LINK( this, oldErrorBarResources, RangeChanged )); - m_aRbPositive.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); - m_aRbNegative.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); - m_aRbBoth.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged )); + m_aRbPositive.SetClickHdl( LINK( this, oldErrorBarResources, IndicatorChanged )); + m_aRbNegative.SetClickHdl( LINK( this, oldErrorBarResources, IndicatorChanged )); + m_aRbBoth.SetClickHdl( LINK( this, oldErrorBarResources, IndicatorChanged )); - m_aIbRangePositive.SetClickHdl( LINK( this, ErrorBarResources, ChooseRange )); - m_aIbRangeNegative.SetClickHdl( LINK( this, ErrorBarResources, ChooseRange )); + m_aIbRangePositive.SetClickHdl( LINK( this, oldErrorBarResources, ChooseRange )); + m_aIbRangeNegative.SetClickHdl( LINK( this, oldErrorBarResources, ChooseRange )); m_aIbRangePositive.SetQuickHelpText(SCH_RESSTR(STR_TIP_SELECT_RANGE)); m_aIbRangeNegative.SetQuickHelpText(SCH_RESSTR(STR_TIP_SELECT_RANGE)); @@ -156,11 +821,11 @@ ErrorBarResources::ErrorBarResources( Window* pParent, Dialog * pParentDialog, Reset( rInAttrs ); } -ErrorBarResources::~ErrorBarResources() +oldErrorBarResources::~oldErrorBarResources() { } -void ErrorBarResources::SetErrorBarType( tErrorBarType eNewType ) +void oldErrorBarResources::SetErrorBarType( tErrorBarType eNewType ) { if( m_eErrorBarType != eNewType ) { @@ -169,7 +834,7 @@ void ErrorBarResources::SetErrorBarType( tErrorBarType eNewType ) } } -void ErrorBarResources::SetChartDocumentForRangeChoosing( +void oldErrorBarResources::SetChartDocumentForRangeChoosing( const uno::Reference< chart2::XChartDocument > & xChartDocument ) { if( xChartDocument.is()) @@ -204,7 +869,7 @@ void ErrorBarResources::SetChartDocumentForRangeChoosing( } } -void ErrorBarResources::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth ) +void oldErrorBarResources::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth ) { if( fMinorStepWidth < 0 ) fMinorStepWidth = -fMinorStepWidth; @@ -223,7 +888,7 @@ void ErrorBarResources::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorS } } -void ErrorBarResources::UpdateControlStates() +void oldErrorBarResources::UpdateControlStates() { // function bool bIsFunction = m_aRbFunction.IsChecked(); @@ -337,7 +1002,7 @@ void ErrorBarResources::UpdateControlStates() } } -IMPL_LINK( ErrorBarResources, CategoryChosen, void *, ) +IMPL_LINK( oldErrorBarResources, CategoryChosen, void *, ) { m_bErrorKindUnique = true; SvxChartKindError eOldError = m_eErrorKind; @@ -397,14 +1062,14 @@ IMPL_LINK( ErrorBarResources, CategoryChosen, void *, ) return 0; } -IMPL_LINK_NOARG(ErrorBarResources, SynchronizePosAndNeg) +IMPL_LINK_NOARG(oldErrorBarResources, SynchronizePosAndNeg) { UpdateControlStates(); PosValueChanged( 0 ); return 0; } -IMPL_LINK_NOARG(ErrorBarResources, PosValueChanged) +IMPL_LINK_NOARG(oldErrorBarResources, PosValueChanged) { if( m_aCbSyncPosNeg.IsChecked()) { @@ -420,7 +1085,7 @@ IMPL_LINK_NOARG(ErrorBarResources, PosValueChanged) return 0; } -IMPL_LINK_NOARG(ErrorBarResources, IndicatorChanged) +IMPL_LINK_NOARG(oldErrorBarResources, IndicatorChanged) { m_bIndicatorUnique = true; if( m_aRbBoth.IsChecked()) @@ -436,7 +1101,7 @@ IMPL_LINK_NOARG(ErrorBarResources, IndicatorChanged) return 0; } -IMPL_LINK( ErrorBarResources, ChooseRange, RangeSelectionButton *, pButton ) +IMPL_LINK( oldErrorBarResources, ChooseRange, RangeSelectionButton *, pButton ) { OSL_ASSERT( m_apRangeSelectionHelper.get()); if( ! m_apRangeSelectionHelper.get()) @@ -469,7 +1134,7 @@ IMPL_LINK( ErrorBarResources, ChooseRange, RangeSelectionButton *, pButton ) return 0; } -IMPL_LINK( ErrorBarResources, RangeChanged, Edit *, pEdit ) +IMPL_LINK( oldErrorBarResources, RangeChanged, Edit *, pEdit ) { if( pEdit == & m_aEdRangePositive ) { @@ -486,7 +1151,7 @@ IMPL_LINK( ErrorBarResources, RangeChanged, Edit *, pEdit ) return 0; } -void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) +void oldErrorBarResources::Reset(const SfxItemSet& rInAttrs) { const SfxPoolItem *pPoolItem = NULL; SfxItemState aState = SFX_ITEM_UNKNOWN; @@ -610,7 +1275,7 @@ void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) UpdateControlStates(); } -sal_Bool ErrorBarResources::FillItemSet(SfxItemSet& rOutAttrs) const +sal_Bool oldErrorBarResources::FillItemSet(SfxItemSet& rOutAttrs) const { if( m_bErrorKindUnique ) rOutAttrs.Put( SvxChartKindErrorItem( m_eErrorKind, SCHATTR_STAT_KIND_ERROR )); @@ -668,7 +1333,7 @@ sal_Bool ErrorBarResources::FillItemSet(SfxItemSet& rOutAttrs) const return sal_True; } -void ErrorBarResources::FillValueSets() +void oldErrorBarResources::FillValueSets() { if( m_eErrorBarType == ERROR_BAR_Y ) { @@ -684,7 +1349,7 @@ void ErrorBarResources::FillValueSets() } } -void ErrorBarResources::listeningFinished( +void oldErrorBarResources::listeningFinished( const OUString & rNewRange ) { OSL_ASSERT( m_apRangeSelectionHelper.get()); @@ -719,14 +1384,14 @@ void ErrorBarResources::listeningFinished( lcl_enableRangeChoosing( false, m_pParentDialog ); } -void ErrorBarResources::disposingRangeSelection() +void oldErrorBarResources::disposingRangeSelection() { OSL_ASSERT( m_apRangeSelectionHelper.get()); if( m_apRangeSelectionHelper.get()) m_apRangeSelectionHelper->stopRangeListening( false ); } -bool ErrorBarResources::isRangeFieldContentValid( Edit & rEdit ) +bool oldErrorBarResources::isRangeFieldContentValid( Edit & rEdit ) { OUString aRange( rEdit.GetText()); bool bIsValid = ( aRange.isEmpty() ) || |