/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include #include #include #include #include #ifndef _SVX_TEXTANIM_CXX #define _SVX_TEXTANIM_CXX #endif #include "textanim.hxx" #include "textanim.hrc" #include "textattr.hxx" #include #include "svx/dlgutil.hxx" static sal_uInt16 pRanges[] = { SDRATTR_TEXT_ANIKIND, SDRATTR_TEXT_ANIAMOUNT, 0 }; /************************************************************************* |* |* constructor of the tab dialog: adds pages to the dialog |* \************************************************************************/ SvxTextTabDialog::SvxTextTabDialog( Window* pParent, const SfxItemSet* pAttr, const SdrView* pSdrView ) : SfxTabDialog ( pParent, CUI_RES( RID_SVXDLG_TEXT ), pAttr ), pView ( pSdrView ) { FreeResource(); AddTabPage( RID_SVXPAGE_TEXTATTR, SvxTextAttrPage::Create, 0); AddTabPage( RID_SVXPAGE_TEXTANIMATION, SvxTextAnimationPage::Create, 0); } /************************************************************************* |* |* PageCreated() |* \************************************************************************/ void SvxTextTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) { switch( nId ) { case RID_SVXPAGE_TEXTATTR: { ( (SvxTextAttrPage&) rPage ).SetView( pView ); ( (SvxTextAttrPage&) rPage ).Construct(); } break; case RID_SVXPAGE_TEXTANIMATION: break; default: break; } } /************************************************************************* |* |* Page |* \************************************************************************/ SvxTextAnimationPage::SvxTextAnimationPage( Window* pWindow, const SfxItemSet& rInAttrs ) : SfxTabPage ( pWindow, CUI_RES( RID_SVXPAGE_TEXTANIMATION ), rInAttrs ), aFlEffect ( this, CUI_RES(FL_EFFECT)), aFtEffects ( this, CUI_RES(FT_EFFECTS)), aLbEffect ( this, CUI_RES( LB_EFFECT ) ), //aCtlEffect ( this, CUI_RES( CTL_EFFECT ) ), aFtDirection ( this, CUI_RES(FT_DIRECTION) ), aBtnUp ( this, CUI_RES( BTN_UP ) ), aBtnLeft ( this, CUI_RES( BTN_LEFT ) ), aBtnRight ( this, CUI_RES( BTN_RIGHT ) ), aBtnDown ( this, CUI_RES( BTN_DOWN ) ), aFlProperties ( this, CUI_RES(FL_PROPERTIES)), aTsbStartInside ( this, CUI_RES( TSB_START_INSIDE ) ), aTsbStopInside ( this, CUI_RES( TSB_STOP_INSIDE ) ), aFtCount ( this, CUI_RES(FT_COUNT)), aTsbEndless ( this, CUI_RES( TSB_ENDLESS ) ), aNumFldCount ( this, CUI_RES( NUM_FLD_COUNT ) ), aFtAmount ( this, CUI_RES(FT_AMOUNT)), aTsbPixel ( this, CUI_RES( TSB_PIXEL ) ), aMtrFldAmount ( this, CUI_RES( MTR_FLD_AMOUNT ) ), aFtDelay ( this, CUI_RES(FT_DELAY)), aTsbAuto ( this, CUI_RES( TSB_AUTO ) ), aMtrFldDelay ( this, CUI_RES( MTR_FLD_DELAY ) ), rOutAttrs ( rInAttrs ), eAniKind ( SDRTEXTANI_NONE ) { FreeResource(); eFUnit = GetModuleFieldUnit( rInAttrs ); SfxItemPool* pPool = rOutAttrs.GetPool(); DBG_ASSERT( pPool, "Wo ist der Pool" ); eUnit = pPool->GetMetric( SDRATTR_TEXT_LEFTDIST ); Construct(); aLbEffect.SetSelectHdl( LINK( this, SvxTextAnimationPage, SelectEffectHdl_Impl ) ); aTsbEndless.SetClickHdl( LINK( this, SvxTextAnimationPage, ClickEndlessHdl_Impl ) ); aTsbAuto.SetClickHdl( LINK( this, SvxTextAnimationPage, ClickAutoHdl_Impl ) ); aTsbPixel.SetClickHdl( LINK( this, SvxTextAnimationPage, ClickPixelHdl_Impl ) ); Link aLink( LINK( this, SvxTextAnimationPage, ClickDirectionHdl_Impl ) ); aBtnUp.SetClickHdl( aLink ); aBtnLeft.SetClickHdl( aLink ); aBtnRight.SetClickHdl( aLink ); aBtnDown.SetClickHdl( aLink ); aNumFldCount.SetAccessibleRelationLabeledBy( &aTsbEndless ); aMtrFldAmount.SetAccessibleRelationLabeledBy( &aTsbPixel ); aMtrFldDelay.SetAccessibleRelationLabeledBy( &aTsbAuto ); aBtnUp.SetAccessibleRelationLabeledBy( &aFtDirection ); aBtnLeft.SetAccessibleRelationLabeledBy( &aFtDirection ); aBtnRight.SetAccessibleRelationLabeledBy( &aFtDirection ); aBtnDown.SetAccessibleRelationLabeledBy( &aFtDirection ); aBtnUp.SetAccessibleRelationMemberOf( &aFlEffect ); aBtnLeft.SetAccessibleRelationMemberOf( &aFlEffect ); aBtnRight.SetAccessibleRelationMemberOf( &aFlEffect ); aBtnDown.SetAccessibleRelationMemberOf( &aFlEffect ); aTsbEndless.SetAccessibleRelationLabeledBy( &aFtCount ); aTsbPixel.SetAccessibleRelationLabeledBy( &aFtAmount ); aTsbAuto.SetAccessibleRelationLabeledBy( &aFtDelay ); } /************************************************************************* |* |* Dtor |* \************************************************************************/ SvxTextAnimationPage::~SvxTextAnimationPage() { } /************************************************************************* |* |* reads the passed item set |* \************************************************************************/ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs ) { const SfxItemPool* pPool = rAttrs.GetPool(); // animation type const SfxPoolItem* pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIKIND ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANIKIND ); if( pItem ) { eAniKind = ( ( const SdrTextAniKindItem* )pItem )->GetValue(); aLbEffect.SelectEntryPos( sal::static_int_cast< sal_uInt16 >(eAniKind) ); } else aLbEffect.SetNoSelection(); aLbEffect.SaveValue(); // animation direction pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIDIRECTION ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANIDIRECTION ); if( pItem ) { SdrTextAniDirection eValue = ( ( const SdrTextAniDirectionItem* )pItem )->GetValue(); SelectDirection( eValue ); } else { aBtnUp.Check( sal_False ); aBtnLeft.Check( sal_False ); aBtnRight.Check( sal_False ); aBtnDown.Check( sal_False ); } aBtnUp.SaveValue(); aBtnLeft.SaveValue(); aBtnRight.SaveValue(); aBtnDown.SaveValue(); // Start inside pItem = GetItem( rAttrs, SDRATTR_TEXT_ANISTARTINSIDE ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANISTARTINSIDE ); if( pItem ) { aTsbStartInside.EnableTriState( sal_False ); sal_Bool bValue = ( ( const SdrTextAniStartInsideItem* )pItem )->GetValue(); if( bValue ) aTsbStartInside.SetState( STATE_CHECK ); else aTsbStartInside.SetState( STATE_NOCHECK ); } else aTsbStartInside.SetState( STATE_DONTKNOW ); aTsbStartInside.SaveValue(); // Stop inside pItem = GetItem( rAttrs, SDRATTR_TEXT_ANISTOPINSIDE ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANISTOPINSIDE ); if( pItem ) { aTsbStopInside.EnableTriState( sal_False ); sal_Bool bValue = ( ( const SdrTextAniStopInsideItem* )pItem )->GetValue(); if( bValue ) aTsbStopInside.SetState( STATE_CHECK ); else aTsbStopInside.SetState( STATE_NOCHECK ); } else aTsbStopInside.SetState( STATE_DONTKNOW ); aTsbStopInside.SaveValue(); // quantity pItem = GetItem( rAttrs, SDRATTR_TEXT_ANICOUNT ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANICOUNT ); if( pItem ) { aTsbEndless.EnableTriState( sal_False ); long nValue = (long) ( ( const SdrTextAniCountItem* )pItem )->GetValue(); aNumFldCount.SetValue( nValue ); if( nValue == 0 ) { if( eAniKind == SDRTEXTANI_SLIDE ) { aTsbEndless.SetState( STATE_NOCHECK ); aTsbEndless.Enable( sal_False ); } else { aTsbEndless.SetState( STATE_CHECK ); aNumFldCount.SetEmptyFieldValue(); } } else aTsbEndless.SetState( STATE_NOCHECK ); } else { aNumFldCount.SetEmptyFieldValue(); aTsbEndless.SetState( STATE_DONTKNOW ); } aTsbEndless.SaveValue(); aNumFldCount.SaveValue(); // delay pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIDELAY ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANIDELAY ); if( pItem ) { aTsbAuto.EnableTriState( sal_False ); long nValue = (long) ( ( const SdrTextAniDelayItem* )pItem )->GetValue(); aMtrFldDelay.SetValue( nValue ); if( nValue == 0 ) { aTsbAuto.SetState( STATE_CHECK ); aMtrFldDelay.SetEmptyFieldValue(); } else aTsbAuto.SetState( STATE_NOCHECK ); } else { aMtrFldDelay.SetEmptyFieldValue(); aTsbAuto.SetState( STATE_DONTKNOW ); } aTsbAuto.SaveValue(); aMtrFldDelay.SaveValue(); // step size pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIAMOUNT ); if( !pItem ) pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANIAMOUNT ); if( pItem ) { aTsbPixel.EnableTriState( sal_False ); long nValue = (long) ( ( const SdrTextAniAmountItem* )pItem )->GetValue(); if( nValue <= 0 ) { aTsbPixel.SetState( STATE_CHECK ); nValue = -nValue; if( nValue == 0 ) nValue++; aMtrFldAmount.SetUnit( FUNIT_CUSTOM ); aMtrFldAmount.SetDecimalDigits( 0 ); aMtrFldAmount.SetSpinSize( 1 ); aMtrFldAmount.SetMin( 1 ); aMtrFldAmount.SetFirst( 1 ); aMtrFldAmount.SetMax( 100 ); aMtrFldAmount.SetLast( 100 ); aMtrFldAmount.SetValue( nValue ); } else { aTsbPixel.SetState( STATE_NOCHECK ); aMtrFldAmount.SetUnit( eFUnit ); aMtrFldAmount.SetDecimalDigits( 2 ); aMtrFldAmount.SetSpinSize( 10 ); aMtrFldAmount.SetMin( 1 ); aMtrFldAmount.SetFirst( 1 ); aMtrFldAmount.SetMax( 10000 ); aMtrFldAmount.SetLast( 10000 ); SetMetricValue( aMtrFldAmount, nValue, eUnit ); } } else { aMtrFldAmount.Disable(); aMtrFldAmount.SetEmptyFieldValue(); aTsbPixel.SetState( STATE_DONTKNOW ); } aTsbPixel.SaveValue(); aMtrFldAmount.SaveValue(); SelectEffectHdl_Impl( NULL ); ClickEndlessHdl_Impl( NULL ); ClickAutoHdl_Impl( NULL ); //ClickPixelHdl_Impl( NULL ); } /************************************************************************* |* |* fills the passed item set with dialog box attributes |* \************************************************************************/ sal_Bool SvxTextAnimationPage::FillItemSet( SfxItemSet& rAttrs) { sal_Bool bModified = sal_False; sal_uInt16 nPos; TriState eState; // animation type nPos = aLbEffect.GetSelectEntryPos(); if( nPos != LISTBOX_ENTRY_NOTFOUND && nPos != aLbEffect.GetSavedValue() ) { rAttrs.Put( SdrTextAniKindItem( (SdrTextAniKind) nPos ) ); bModified = sal_True; } // animation direction if( aBtnUp.GetSavedValue() != aBtnUp.IsChecked() || aBtnLeft.GetSavedValue() != aBtnLeft.IsChecked() || aBtnRight.GetSavedValue() != aBtnRight.IsChecked() || aBtnDown.GetSavedValue() != aBtnDown.IsChecked() ) { SdrTextAniDirection eValue = (SdrTextAniDirection) GetSelectedDirection(); rAttrs.Put( SdrTextAniDirectionItem( eValue ) ); bModified = sal_True; } // Start inside eState = aTsbStartInside.GetState(); if( eState != aTsbStartInside.GetSavedValue() ) { rAttrs.Put( SdrTextAniStartInsideItem( (sal_Bool) STATE_CHECK == eState ) ); bModified = sal_True; } // Stop inside eState = aTsbStopInside.GetState(); if( eState != aTsbStopInside.GetSavedValue() ) { rAttrs.Put( SdrTextAniStopInsideItem( (sal_Bool) STATE_CHECK == eState ) ); bModified = sal_True; } // quantity eState = aTsbEndless.GetState(); String aStr = aNumFldCount.GetText(); if( eState != aTsbEndless.GetSavedValue() || aStr != aNumFldCount.GetSavedValue() ) { sal_Int64 nValue = 0; if( eState == STATE_CHECK /*#89844#*/ && aTsbEndless.IsEnabled()) bModified = sal_True; else { if( aStr != aNumFldCount.GetSavedValue() ) { nValue = aNumFldCount.GetValue(); bModified = sal_True; } } if( bModified ) rAttrs.Put( SdrTextAniCountItem( (sal_uInt16) nValue ) ); } // delay eState = aTsbAuto.GetState(); aStr = aMtrFldDelay.GetText(); if( eState != aTsbAuto.GetSavedValue() || aStr != aMtrFldDelay.GetSavedValue() ) { sal_Int64 nValue = 0; if( eState == STATE_CHECK ) bModified = sal_True; else { if( aStr != aMtrFldDelay.GetSavedValue() ) { nValue = aMtrFldDelay.GetValue(); bModified = sal_True; } } if( bModified ) rAttrs.Put( SdrTextAniDelayItem( (sal_uInt16) nValue ) ); } // step size eState = aTsbPixel.GetState(); aStr = aMtrFldAmount.GetText(); if( eState != aTsbPixel.GetSavedValue() || aStr != aMtrFldAmount.GetSavedValue() ) { sal_Int64 nValue = 0; if( eState == STATE_CHECK ) { nValue = aMtrFldAmount.GetValue(); nValue = -nValue; } else { nValue = GetCoreValue( aMtrFldAmount, eUnit ); } rAttrs.Put( SdrTextAniAmountItem( (sal_Int16) nValue ) ); bModified = sal_True; } return( bModified ); } void SvxTextAnimationPage::Construct() { } sal_uInt16* SvxTextAnimationPage::GetRanges() { return( pRanges ); } /************************************************************************* |* |* creates the page |* \************************************************************************/ SfxTabPage* SvxTextAnimationPage::Create( Window* pWindow, const SfxItemSet& rAttrs ) { return( new SvxTextAnimationPage( pWindow, rAttrs ) ); } IMPL_LINK_NOARG(SvxTextAnimationPage, SelectEffectHdl_Impl) { sal_uInt16 nPos = aLbEffect.GetSelectEntryPos(); if( nPos != LISTBOX_ENTRY_NOTFOUND ) { eAniKind = (SdrTextAniKind) nPos; switch( eAniKind ) { case SDRTEXTANI_NONE: { aFtDirection.Disable(); aBtnUp.Disable(); aBtnLeft.Disable(); aBtnRight.Disable(); aBtnDown.Disable(); aTsbStartInside.Disable(); aTsbStopInside.Disable(); aTsbEndless.Disable(); aNumFldCount.Disable(); aFtCount.Disable(); aTsbAuto.Disable(); aMtrFldDelay.Disable(); aFtDelay.Disable(); aTsbPixel.Disable(); aMtrFldAmount.Disable(); aFtAmount.Disable(); } break; case SDRTEXTANI_BLINK: case SDRTEXTANI_SCROLL: case SDRTEXTANI_ALTERNATE: case SDRTEXTANI_SLIDE: { if( eAniKind == SDRTEXTANI_SLIDE ) { aTsbStartInside.Disable(); aTsbStopInside.Disable(); aTsbEndless.Disable(); aNumFldCount.Enable(); aNumFldCount.SetValue( aNumFldCount.GetValue() ); } else { aTsbStartInside.Enable(); aTsbStopInside.Enable(); aTsbEndless.Enable(); ClickEndlessHdl_Impl( NULL ); } aFtCount.Enable(); aTsbAuto.Enable(); aFtDelay.Enable(); ClickAutoHdl_Impl( NULL ); if( eAniKind == SDRTEXTANI_BLINK ) { aFtDirection.Disable(); aBtnUp.Disable(); aBtnLeft.Disable(); aBtnRight.Disable(); aBtnDown.Disable(); aTsbPixel.Disable(); aMtrFldAmount.Disable(); aFtAmount.Disable(); } else { aFtDirection.Enable(); aBtnUp.Enable(); aBtnLeft.Enable(); aBtnRight.Enable(); aBtnDown.Enable(); aTsbPixel.Enable(); aMtrFldAmount.Enable(); aFtAmount.Enable(); } } break; } } return( 0L ); } IMPL_LINK_NOARG(SvxTextAnimationPage, ClickEndlessHdl_Impl) { if( eAniKind != SDRTEXTANI_SLIDE ) { TriState eState = aTsbEndless.GetState(); if( eState != STATE_NOCHECK ) { aNumFldCount.Disable(); aNumFldCount.SetEmptyFieldValue(); } else { aNumFldCount.Enable(); aNumFldCount.SetValue( aNumFldCount.GetValue() ); } } return( 0L ); } IMPL_LINK_NOARG(SvxTextAnimationPage, ClickAutoHdl_Impl) { TriState eState = aTsbAuto.GetState(); if( eState != STATE_NOCHECK ) { aMtrFldDelay.Disable(); aMtrFldDelay.SetEmptyFieldValue(); } else { aMtrFldDelay.Enable(); aMtrFldDelay.SetValue( aMtrFldDelay.GetValue() ); } return( 0L ); } IMPL_LINK_NOARG(SvxTextAnimationPage, ClickPixelHdl_Impl) { TriState eState = aTsbPixel.GetState(); if( eState == STATE_CHECK ) { sal_Int64 nValue = aMtrFldAmount.GetValue() / 10; aMtrFldAmount.Enable(); aMtrFldAmount.SetUnit( FUNIT_CUSTOM ); //SetFieldUnit( aMtrFldAmount, FUNIT_CUSTOM ); aMtrFldAmount.SetDecimalDigits( 0 ); aMtrFldAmount.SetSpinSize( 1 ); aMtrFldAmount.SetMin( 1 ); aMtrFldAmount.SetFirst( 1 ); aMtrFldAmount.SetMax( 100 ); aMtrFldAmount.SetLast( 100 ); aMtrFldAmount.SetValue( nValue ); } else if( eState == STATE_NOCHECK ) { sal_Int64 nValue = aMtrFldAmount.GetValue() * 10; aMtrFldAmount.Enable(); aMtrFldAmount.SetUnit( eFUnit ); //SetFieldUnit( aMtrFldAmount, eFUnit ); aMtrFldAmount.SetDecimalDigits( 2 ); aMtrFldAmount.SetSpinSize( 10 ); aMtrFldAmount.SetMin( 1 ); aMtrFldAmount.SetFirst( 1 ); aMtrFldAmount.SetMax( 10000 ); aMtrFldAmount.SetLast( 10000 ); aMtrFldAmount.SetValue( nValue ); } return( 0L ); } IMPL_LINK( SvxTextAnimationPage, ClickDirectionHdl_Impl, ImageButton *, pBtn ) { aBtnUp.Check( pBtn == &aBtnUp ); aBtnLeft.Check( pBtn == &aBtnLeft ); aBtnRight.Check( pBtn == &aBtnRight ); aBtnDown.Check( pBtn == &aBtnDown ); return( 0L ); } void SvxTextAnimationPage::SelectDirection( SdrTextAniDirection nValue ) { aBtnUp.Check( nValue == SDRTEXTANI_UP ); aBtnLeft.Check( nValue == SDRTEXTANI_LEFT ); aBtnRight.Check( nValue == SDRTEXTANI_RIGHT ); aBtnDown.Check( nValue == SDRTEXTANI_DOWN ); } sal_uInt16 SvxTextAnimationPage::GetSelectedDirection() { sal_uInt16 nValue = 0; if( aBtnUp.IsChecked() ) nValue = SDRTEXTANI_UP; else if( aBtnLeft.IsChecked() ) nValue = SDRTEXTANI_LEFT; else if( aBtnRight.IsChecked() ) nValue = SDRTEXTANI_RIGHT; else if( aBtnDown.IsChecked() ) nValue = SDRTEXTANI_DOWN; return( nValue ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */