Convert text animations tab page to widget UI

(src file will be deleted in a forthcomming patch)

Change-Id: Iabb77ae70e536afe0ba24b8922be98ea87441f3f
Reviewed-on: https://gerrit.libreoffice.org/5485
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/UIConfig_cui.mk b/cui/UIConfig_cui.mk
index 9796018..2d93b34 100644
--- a/cui/UIConfig_cui.mk
+++ b/cui/UIConfig_cui.mk
@@ -108,6 +108,7 @@ $(eval $(call gb_UIConfig_add_uifiles,cui,\
	cui/uiconfig/ui/storedwebconnectiondialog \
	cui/uiconfig/ui/swpossizepage \
	cui/uiconfig/ui/textattrtabpage \
	cui/uiconfig/ui/textanimtabpage \
	cui/uiconfig/ui/textflowpage \
	cui/uiconfig/ui/thesaurus \
	cui/uiconfig/ui/transparencytabpage \
diff --git a/cui/source/inc/textanim.hxx b/cui/source/inc/textanim.hxx
index 317bf05..e70f20b 100644
--- a/cui/source/inc/textanim.hxx
+++ b/cui/source/inc/textanim.hxx
@@ -37,30 +37,26 @@ class SdrView;
class SvxTextAnimationPage : public SfxTabPage
{
private:
    FixedLine           aFlEffect;
    FixedText           aFtEffects;
    ListBox             aLbEffect;
    FixedText           aFtDirection;
    ImageButton         aBtnUp;
    ImageButton         aBtnLeft;
    ImageButton         aBtnRight;
    ImageButton         aBtnDown;
    ListBox*             m_pLbEffect;
    VclBox*              m_pBoxDirection;
    PushButton*          m_pBtnUp;
    PushButton*          m_pBtnLeft;
    PushButton*          m_pBtnRight;
    PushButton*          m_pBtnDown;

    FixedLine           aFlProperties;
    TriStateBox         aTsbStartInside;
    TriStateBox         aTsbStopInside;
    VclFrame*            m_pFlProperties;
    TriStateBox*         m_pTsbStartInside;
    TriStateBox*         m_pTsbStopInside;

    FixedText           aFtCount;
    TriStateBox         aTsbEndless;
    NumericField        aNumFldCount;
    VclBox*              m_pBoxCount;
    TriStateBox*         m_pTsbEndless;
    NumericField*        m_pNumFldCount;

    FixedText           aFtAmount;
    TriStateBox         aTsbPixel;
    MetricField         aMtrFldAmount;
    TriStateBox*         m_pTsbPixel;
    MetricField*         m_pMtrFldAmount;

    FixedText           aFtDelay;
    TriStateBox         aTsbAuto;
    MetricField         aMtrFldDelay;
    TriStateBox*         m_pTsbAuto;
    MetricField*         m_pMtrFldDelay;

    const SfxItemSet&   rOutAttrs;
    SdrTextAniKind      eAniKind;
diff --git a/cui/source/tabpages/textanim.cxx b/cui/source/tabpages/textanim.cxx
index b678ed3..5334071 100644
--- a/cui/source/tabpages/textanim.cxx
+++ b/cui/source/tabpages/textanim.cxx
@@ -25,7 +25,6 @@
#include <svx/dialogs.hrc>

#include "textanim.hxx"
#include "textanim.hrc"
#include "textattr.hxx"
#include <dialmgr.hxx>
#include "svx/dlgutil.hxx"
@@ -88,78 +87,49 @@ void SvxTextTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage )
\************************************************************************/

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 ) ),

                SfxTabPage      ( pWindow
                                  ,"TextAnimation"
                                  ,"cui/ui/textanimtabpage.ui"
                                  ,rInAttrs ),
                rOutAttrs       ( rInAttrs ),
                eAniKind        ( SDRTEXTANI_NONE )
{
    FreeResource();
    get(m_pLbEffect, "LB_EFFECT");
    get(m_pBoxDirection,"boxDIRECTION");
    get(m_pBtnUp, "BTN_UP");
    get(m_pBtnLeft, "BTN_LEFT");
    get(m_pBtnRight, "BTN_RIGHT");
    get(m_pBtnDown, "BTN_DOWN");

    get(m_pFlProperties, "FL_PROPERTIES");
    get(m_pTsbStartInside, "TSB_START_INSIDE");
    get(m_pTsbStopInside, "TSB_STOP_INSIDE");

    get(m_pBoxCount, "boxCOUNT");
    get(m_pTsbEndless,"TSB_ENDLESS");
    get(m_pNumFldCount,"NUM_FLD_COUNT");

    get(m_pTsbPixel, "TSB_PIXEL");
    get(m_pMtrFldAmount, "MTR_FLD_AMOUNT");

    get(m_pTsbAuto, "TSB_AUTO");
    get(m_pMtrFldDelay, "MTR_FLD_DELAY");

    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 ) );
    m_pLbEffect->SetSelectHdl( LINK( this, SvxTextAnimationPage, SelectEffectHdl_Impl ) );
    m_pTsbEndless->SetClickHdl( LINK( this, SvxTextAnimationPage, ClickEndlessHdl_Impl ) );
    m_pTsbAuto->SetClickHdl( LINK( this, SvxTextAnimationPage, ClickAutoHdl_Impl ) );
    m_pTsbPixel->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 );
    m_pBtnUp->SetClickHdl( aLink );
    m_pBtnLeft->SetClickHdl( aLink );
    m_pBtnRight->SetClickHdl( aLink );
    m_pBtnDown->SetClickHdl( aLink );
}

/*************************************************************************
@@ -190,11 +160,11 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
    if( pItem )
    {
        eAniKind = ( ( const SdrTextAniKindItem* )pItem )->GetValue();
        aLbEffect.SelectEntryPos( sal::static_int_cast< sal_uInt16 >(eAniKind) );
        m_pLbEffect->SelectEntryPos( sal::static_int_cast< sal_uInt16 >(eAniKind) );
    }
    else
        aLbEffect.SetNoSelection();
    aLbEffect.SaveValue();
        m_pLbEffect->SetNoSelection();
    m_pLbEffect->SaveValue();

    // animation direction
    pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIDIRECTION );
@@ -207,15 +177,15 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
    }
    else
    {
        aBtnUp.Check( sal_False );
        aBtnLeft.Check( sal_False );
        aBtnRight.Check( sal_False );
        aBtnDown.Check( sal_False );
        m_pBtnUp->Check( sal_False );
        m_pBtnLeft->Check( sal_False );
        m_pBtnRight->Check( sal_False );
        m_pBtnDown->Check( sal_False );
    }
    aBtnUp.SaveValue();
    aBtnLeft.SaveValue();
    aBtnRight.SaveValue();
    aBtnDown.SaveValue();
    m_pBtnUp->SaveValue();
    m_pBtnLeft->SaveValue();
    m_pBtnRight->SaveValue();
    m_pBtnDown->SaveValue();

    // Start inside
    pItem = GetItem( rAttrs, SDRATTR_TEXT_ANISTARTINSIDE );
@@ -223,16 +193,16 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
        pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANISTARTINSIDE );
    if( pItem )
    {
        aTsbStartInside.EnableTriState( sal_False );
        m_pTsbStartInside->EnableTriState( sal_False );
        sal_Bool bValue = ( ( const SdrTextAniStartInsideItem* )pItem )->GetValue();
        if( bValue )
            aTsbStartInside.SetState( STATE_CHECK );
            m_pTsbStartInside->SetState( STATE_CHECK );
        else
            aTsbStartInside.SetState( STATE_NOCHECK );
            m_pTsbStartInside->SetState( STATE_NOCHECK );
    }
    else
        aTsbStartInside.SetState( STATE_DONTKNOW );
    aTsbStartInside.SaveValue();
        m_pTsbStartInside->SetState( STATE_DONTKNOW );
    m_pTsbStartInside->SaveValue();

    // Stop inside
    pItem = GetItem( rAttrs, SDRATTR_TEXT_ANISTOPINSIDE );
@@ -240,16 +210,16 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
        pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANISTOPINSIDE );
    if( pItem )
    {
        aTsbStopInside.EnableTriState( sal_False );
        m_pTsbStopInside->EnableTriState( sal_False );
        sal_Bool bValue = ( ( const SdrTextAniStopInsideItem* )pItem )->GetValue();
        if( bValue )
            aTsbStopInside.SetState( STATE_CHECK );
            m_pTsbStopInside->SetState( STATE_CHECK );
        else
            aTsbStopInside.SetState( STATE_NOCHECK );
            m_pTsbStopInside->SetState( STATE_NOCHECK );
    }
    else
        aTsbStopInside.SetState( STATE_DONTKNOW );
    aTsbStopInside.SaveValue();
        m_pTsbStopInside->SetState( STATE_DONTKNOW );
    m_pTsbStopInside->SaveValue();

    // quantity
    pItem = GetItem( rAttrs, SDRATTR_TEXT_ANICOUNT );
@@ -257,32 +227,32 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
        pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANICOUNT );
    if( pItem )
    {
        aTsbEndless.EnableTriState( sal_False );
        m_pTsbEndless->EnableTriState( sal_False );
        long nValue = (long) ( ( const SdrTextAniCountItem* )pItem )->GetValue();
        aNumFldCount.SetValue( nValue );
        m_pNumFldCount->SetValue( nValue );
        if( nValue == 0 )
        {
            if( eAniKind == SDRTEXTANI_SLIDE )
            {
                aTsbEndless.SetState( STATE_NOCHECK );
                aTsbEndless.Enable( sal_False );
                m_pTsbEndless->SetState( STATE_NOCHECK );
                m_pTsbEndless->Enable( sal_False );
            }
            else
            {
                aTsbEndless.SetState( STATE_CHECK );
                aNumFldCount.SetEmptyFieldValue();
                m_pTsbEndless->SetState( STATE_CHECK );
                m_pNumFldCount->SetEmptyFieldValue();
            }
        }
        else
            aTsbEndless.SetState( STATE_NOCHECK );
            m_pTsbEndless->SetState( STATE_NOCHECK );
    }
    else
    {
        aNumFldCount.SetEmptyFieldValue();
        aTsbEndless.SetState( STATE_DONTKNOW );
        m_pNumFldCount->SetEmptyFieldValue();
        m_pTsbEndless->SetState( STATE_DONTKNOW );
    }
    aTsbEndless.SaveValue();
    aNumFldCount.SaveValue();
    m_pTsbEndless->SaveValue();
    m_pNumFldCount->SaveValue();

    // delay
    pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIDELAY );
@@ -290,24 +260,24 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
        pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANIDELAY );
    if( pItem )
    {
        aTsbAuto.EnableTriState( sal_False );
        m_pTsbAuto->EnableTriState( sal_False );
        long nValue = (long) ( ( const SdrTextAniDelayItem* )pItem )->GetValue();
        aMtrFldDelay.SetValue( nValue );
        m_pMtrFldDelay->SetValue( nValue );
        if( nValue == 0 )
        {
            aTsbAuto.SetState( STATE_CHECK );
            aMtrFldDelay.SetEmptyFieldValue();
            m_pTsbAuto->SetState( STATE_CHECK );
            m_pMtrFldDelay->SetEmptyFieldValue();
        }
        else
            aTsbAuto.SetState( STATE_NOCHECK );
            m_pTsbAuto->SetState( STATE_NOCHECK );
    }
    else
    {
        aMtrFldDelay.SetEmptyFieldValue();
        aTsbAuto.SetState( STATE_DONTKNOW );
        m_pMtrFldDelay->SetEmptyFieldValue();
        m_pTsbAuto->SetState( STATE_DONTKNOW );
    }
    aTsbAuto.SaveValue();
    aMtrFldDelay.SaveValue();
    m_pTsbAuto->SaveValue();
    m_pMtrFldDelay->SaveValue();

    // step size
    pItem = GetItem( rAttrs, SDRATTR_TEXT_ANIAMOUNT );
@@ -315,48 +285,48 @@ void SvxTextAnimationPage::Reset( const SfxItemSet& rAttrs )
        pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_ANIAMOUNT );
    if( pItem )
    {
        aTsbPixel.EnableTriState( sal_False );
        m_pTsbPixel->EnableTriState( sal_False );
        long nValue = (long) ( ( const SdrTextAniAmountItem* )pItem )->GetValue();
        if( nValue <= 0 )
        {
            aTsbPixel.SetState( STATE_CHECK );
            m_pTsbPixel->SetState( STATE_CHECK );
            nValue = -nValue;
            if( nValue == 0 )
                nValue++;
            aMtrFldAmount.SetUnit( FUNIT_CUSTOM );
            aMtrFldAmount.SetDecimalDigits( 0 );
            m_pMtrFldAmount->SetUnit( FUNIT_CUSTOM );
            m_pMtrFldAmount->SetDecimalDigits( 0 );

            aMtrFldAmount.SetSpinSize( 1 );
            aMtrFldAmount.SetMin( 1 );
            aMtrFldAmount.SetFirst( 1 );
            aMtrFldAmount.SetMax( 100 );
            aMtrFldAmount.SetLast( 100 );
            m_pMtrFldAmount->SetSpinSize( 1 );
            m_pMtrFldAmount->SetMin( 1 );
            m_pMtrFldAmount->SetFirst( 1 );
            m_pMtrFldAmount->SetMax( 100 );
            m_pMtrFldAmount->SetLast( 100 );

            aMtrFldAmount.SetValue( nValue );
            m_pMtrFldAmount->SetValue( nValue );
        }
        else
        {
            aTsbPixel.SetState( STATE_NOCHECK );
            aMtrFldAmount.SetUnit( eFUnit );
            aMtrFldAmount.SetDecimalDigits( 2 );
            m_pTsbPixel->SetState( STATE_NOCHECK );
            m_pMtrFldAmount->SetUnit( eFUnit );
            m_pMtrFldAmount->SetDecimalDigits( 2 );

            aMtrFldAmount.SetSpinSize( 10 );
            aMtrFldAmount.SetMin( 1 );
            aMtrFldAmount.SetFirst( 1 );
            aMtrFldAmount.SetMax( 10000 );
            aMtrFldAmount.SetLast( 10000 );
            m_pMtrFldAmount->SetSpinSize( 10 );
            m_pMtrFldAmount->SetMin( 1 );
            m_pMtrFldAmount->SetFirst( 1 );
            m_pMtrFldAmount->SetMax( 10000 );
            m_pMtrFldAmount->SetLast( 10000 );

            SetMetricValue( aMtrFldAmount, nValue, eUnit );
            SetMetricValue( *m_pMtrFldAmount, nValue, eUnit );
        }
    }
    else
    {
        aMtrFldAmount.Disable();
        aMtrFldAmount.SetEmptyFieldValue();
        aTsbPixel.SetState( STATE_DONTKNOW );
        m_pMtrFldAmount->Disable();
        m_pMtrFldAmount->SetEmptyFieldValue();
        m_pTsbPixel->SetState( STATE_DONTKNOW );
    }
    aTsbPixel.SaveValue();
    aMtrFldAmount.SaveValue();
    m_pTsbPixel->SaveValue();
    m_pMtrFldAmount->SaveValue();


    SelectEffectHdl_Impl( NULL );
@@ -378,19 +348,19 @@ sal_Bool SvxTextAnimationPage::FillItemSet( SfxItemSet& rAttrs)
    TriState eState;

    // animation type
    nPos = aLbEffect.GetSelectEntryPos();
    nPos = m_pLbEffect->GetSelectEntryPos();
    if( nPos != LISTBOX_ENTRY_NOTFOUND &&
        nPos != aLbEffect.GetSavedValue() )
        nPos != m_pLbEffect->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() )
    if( m_pBtnUp->GetSavedValue() != m_pBtnUp->IsChecked() ||
        m_pBtnLeft->GetSavedValue() != m_pBtnLeft->IsChecked() ||
        m_pBtnRight->GetSavedValue() != m_pBtnRight->IsChecked() ||
        m_pBtnDown->GetSavedValue() != m_pBtnDown->IsChecked() )
    {
        SdrTextAniDirection eValue = (SdrTextAniDirection) GetSelectedDirection();
        rAttrs.Put( SdrTextAniDirectionItem( eValue ) );
@@ -398,35 +368,35 @@ sal_Bool SvxTextAnimationPage::FillItemSet( SfxItemSet& rAttrs)
    }

    // Start inside
    eState = aTsbStartInside.GetState();
    if( eState != aTsbStartInside.GetSavedValue() )
    eState = m_pTsbStartInside->GetState();
    if( eState != m_pTsbStartInside->GetSavedValue() )
    {
        rAttrs.Put( SdrTextAniStartInsideItem( (sal_Bool) STATE_CHECK == eState ) );
        bModified = sal_True;
    }

    // Stop inside
    eState = aTsbStopInside.GetState();
    if( eState != aTsbStopInside.GetSavedValue() )
    eState = m_pTsbStopInside->GetState();
    if( eState != m_pTsbStopInside->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() )
    eState = m_pTsbEndless->GetState();
    String aStr = m_pNumFldCount->GetText();
    if( eState != m_pTsbEndless->GetSavedValue() ||
        aStr != m_pNumFldCount->GetSavedValue() )
    {
        sal_Int64 nValue = 0;
        if( eState == STATE_CHECK /*#89844#*/ && aTsbEndless.IsEnabled())
        if( eState == STATE_CHECK /*#89844#*/ && m_pTsbEndless->IsEnabled())
            bModified = sal_True;
        else
        {
            if( aStr != aNumFldCount.GetSavedValue() )
            if( aStr != m_pNumFldCount->GetSavedValue() )
            {
                nValue = aNumFldCount.GetValue();
                nValue = m_pNumFldCount->GetValue();
                bModified = sal_True;
            }
        }
@@ -435,19 +405,19 @@ sal_Bool SvxTextAnimationPage::FillItemSet( SfxItemSet& rAttrs)
    }

    // delay
    eState = aTsbAuto.GetState();
    aStr = aMtrFldDelay.GetText();
    if( eState != aTsbAuto.GetSavedValue() ||
        aStr != aMtrFldDelay.GetSavedValue() )
    eState = m_pTsbAuto->GetState();
    aStr = m_pMtrFldDelay->GetText();
    if( eState != m_pTsbAuto->GetSavedValue() ||
        aStr != m_pMtrFldDelay->GetSavedValue() )
    {
        sal_Int64 nValue = 0;
        if( eState == STATE_CHECK )
            bModified = sal_True;
        else
        {
            if( aStr != aMtrFldDelay.GetSavedValue() )
            if( aStr != m_pMtrFldDelay->GetSavedValue() )
            {
                nValue = aMtrFldDelay.GetValue();
                nValue = m_pMtrFldDelay->GetValue();
                bModified = sal_True;
            }
        }
@@ -456,20 +426,20 @@ sal_Bool SvxTextAnimationPage::FillItemSet( SfxItemSet& rAttrs)
    }

    // step size
    eState = aTsbPixel.GetState();
    aStr = aMtrFldAmount.GetText();
    if( eState != aTsbPixel.GetSavedValue() ||
        aStr != aMtrFldAmount.GetSavedValue() )
    eState = m_pTsbPixel->GetState();
    aStr = m_pMtrFldAmount->GetText();
    if( eState != m_pTsbPixel->GetSavedValue() ||
        aStr != m_pMtrFldAmount->GetSavedValue() )
    {
        sal_Int64 nValue = 0;
        if( eState == STATE_CHECK )
        {
            nValue = aMtrFldAmount.GetValue();
            nValue = m_pMtrFldAmount->GetValue();
            nValue = -nValue;
        }
        else
        {
            nValue = GetCoreValue( aMtrFldAmount, eUnit );
            nValue = GetCoreValue( *m_pMtrFldAmount, eUnit );
        }
        rAttrs.Put( SdrTextAniAmountItem( (sal_Int16) nValue ) );

@@ -479,10 +449,6 @@ sal_Bool SvxTextAnimationPage::FillItemSet( SfxItemSet& rAttrs)
    return( bModified );
}

void SvxTextAnimationPage::Construct()
{
}

sal_uInt16* SvxTextAnimationPage::GetRanges()
{
    return( pRanges );
@@ -502,7 +468,7 @@ SfxTabPage* SvxTextAnimationPage::Create( Window* pWindow,

IMPL_LINK_NOARG(SvxTextAnimationPage, SelectEffectHdl_Impl)
{
    sal_uInt16 nPos = aLbEffect.GetSelectEntryPos();
    sal_uInt16 nPos = m_pLbEffect->GetSelectEntryPos();
    if( nPos != LISTBOX_ENTRY_NOTFOUND )
    {
        eAniKind = (SdrTextAniKind) nPos;
@@ -510,25 +476,8 @@ IMPL_LINK_NOARG(SvxTextAnimationPage, SelectEffectHdl_Impl)
        {
            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();
                m_pBoxDirection->Disable();
                m_pFlProperties->Disable();
            }
            break;

@@ -537,52 +486,35 @@ IMPL_LINK_NOARG(SvxTextAnimationPage, SelectEffectHdl_Impl)
            case SDRTEXTANI_ALTERNATE:
            case SDRTEXTANI_SLIDE:
            {
                m_pFlProperties->Enable();
                if( eAniKind == SDRTEXTANI_SLIDE )
                {
                    aTsbStartInside.Disable();
                    aTsbStopInside.Disable();

                    aTsbEndless.Disable();
                    aNumFldCount.Enable();
                    aNumFldCount.SetValue( aNumFldCount.GetValue() );
                    m_pTsbStartInside->Disable();
                    m_pTsbStopInside->Disable();
                    m_pTsbEndless->Disable();
                    m_pNumFldCount->Enable();
                    m_pNumFldCount->SetValue( m_pNumFldCount->GetValue() );
                }
                else
                {
                    aTsbStartInside.Enable();
                    aTsbStopInside.Enable();

                    aTsbEndless.Enable();
                    m_pTsbStartInside->Enable();
                    m_pTsbStopInside->Enable();
                    m_pTsbEndless->Enable();
                    ClickEndlessHdl_Impl( NULL );
                }
                aFtCount.Enable();

                aTsbAuto.Enable();
                aFtDelay.Enable();
                m_pTsbAuto->Enable();
                ClickAutoHdl_Impl( NULL );

                if( eAniKind == SDRTEXTANI_BLINK )
                {
                    aFtDirection.Disable();
                    aBtnUp.Disable();
                    aBtnLeft.Disable();
                    aBtnRight.Disable();
                    aBtnDown.Disable();

                    aTsbPixel.Disable();
                    aMtrFldAmount.Disable();
                    aFtAmount.Disable();
                    m_pBoxDirection->Disable();
                    m_pBoxCount->Disable();
                }
                else
                {
                    aFtDirection.Enable();
                    aBtnUp.Enable();
                    aBtnLeft.Enable();
                    aBtnRight.Enable();
                    aBtnDown.Enable();

                    aTsbPixel.Enable();
                    aMtrFldAmount.Enable();
                    aFtAmount.Enable();
                    m_pBoxDirection->Enable();
                    m_pBoxCount->Enable();
                }
            }
            break;
@@ -597,16 +529,16 @@ IMPL_LINK_NOARG(SvxTextAnimationPage, ClickEndlessHdl_Impl)

    if( eAniKind != SDRTEXTANI_SLIDE )
    {
        TriState eState = aTsbEndless.GetState();
        TriState eState = m_pTsbEndless->GetState();
        if( eState != STATE_NOCHECK )
        {
            aNumFldCount.Disable();
            aNumFldCount.SetEmptyFieldValue();
            m_pNumFldCount->Disable();
            m_pNumFldCount->SetEmptyFieldValue();
        }
        else
        {
            aNumFldCount.Enable();
            aNumFldCount.SetValue( aNumFldCount.GetValue() );
            m_pNumFldCount->Enable();
            m_pNumFldCount->SetValue( m_pNumFldCount->GetValue() );
        }
    }
    return( 0L );
@@ -614,16 +546,16 @@ IMPL_LINK_NOARG(SvxTextAnimationPage, ClickEndlessHdl_Impl)

IMPL_LINK_NOARG(SvxTextAnimationPage, ClickAutoHdl_Impl)
{
    TriState eState = aTsbAuto.GetState();
    TriState eState = m_pTsbAuto->GetState();
    if( eState != STATE_NOCHECK )
    {
        aMtrFldDelay.Disable();
        aMtrFldDelay.SetEmptyFieldValue();
        m_pMtrFldDelay->Disable();
        m_pMtrFldDelay->SetEmptyFieldValue();
    }
    else
    {
        aMtrFldDelay.Enable();
        aMtrFldDelay.SetValue( aMtrFldDelay.GetValue() );
        m_pMtrFldDelay->Enable();
        m_pMtrFldDelay->SetValue( m_pMtrFldDelay->GetValue() );
    }

    return( 0L );
@@ -631,38 +563,38 @@ IMPL_LINK_NOARG(SvxTextAnimationPage, ClickAutoHdl_Impl)

IMPL_LINK_NOARG(SvxTextAnimationPage, ClickPixelHdl_Impl)
{
    TriState eState = aTsbPixel.GetState();
    TriState eState = m_pTsbPixel->GetState();
    if( eState == STATE_CHECK )
    {
        sal_Int64 nValue = aMtrFldAmount.GetValue() / 10;
        aMtrFldAmount.Enable();
        aMtrFldAmount.SetUnit( FUNIT_CUSTOM );
        sal_Int64 nValue = m_pMtrFldAmount->GetValue() / 10;
        m_pMtrFldAmount->Enable();
        m_pMtrFldAmount->SetUnit( FUNIT_CUSTOM );
        //SetFieldUnit( aMtrFldAmount, FUNIT_CUSTOM );
        aMtrFldAmount.SetDecimalDigits( 0 );
        m_pMtrFldAmount->SetDecimalDigits( 0 );

        aMtrFldAmount.SetSpinSize( 1 );
        aMtrFldAmount.SetMin( 1 );
        aMtrFldAmount.SetFirst( 1 );
        aMtrFldAmount.SetMax( 100 );
        aMtrFldAmount.SetLast( 100 );
        m_pMtrFldAmount->SetSpinSize( 1 );
        m_pMtrFldAmount->SetMin( 1 );
        m_pMtrFldAmount->SetFirst( 1 );
        m_pMtrFldAmount->SetMax( 100 );
        m_pMtrFldAmount->SetLast( 100 );

        aMtrFldAmount.SetValue( nValue );
        m_pMtrFldAmount->SetValue( nValue );
    }
    else if( eState == STATE_NOCHECK )
    {
        sal_Int64 nValue = aMtrFldAmount.GetValue() * 10;
        aMtrFldAmount.Enable();
        aMtrFldAmount.SetUnit( eFUnit );
        sal_Int64 nValue = m_pMtrFldAmount->GetValue() * 10;
        m_pMtrFldAmount->Enable();
        m_pMtrFldAmount->SetUnit( eFUnit );
        //SetFieldUnit( aMtrFldAmount, eFUnit );
        aMtrFldAmount.SetDecimalDigits( 2 );
        m_pMtrFldAmount->SetDecimalDigits( 2 );

        aMtrFldAmount.SetSpinSize( 10 );
        aMtrFldAmount.SetMin( 1 );
        aMtrFldAmount.SetFirst( 1 );
        aMtrFldAmount.SetMax( 10000 );
        aMtrFldAmount.SetLast( 10000 );
        m_pMtrFldAmount->SetSpinSize( 10 );
        m_pMtrFldAmount->SetMin( 1 );
        m_pMtrFldAmount->SetFirst( 1 );
        m_pMtrFldAmount->SetMax( 10000 );
        m_pMtrFldAmount->SetLast( 10000 );

        aMtrFldAmount.SetValue( nValue );
        m_pMtrFldAmount->SetValue( nValue );
    }

    return( 0L );
@@ -670,33 +602,33 @@ IMPL_LINK_NOARG(SvxTextAnimationPage, ClickPixelHdl_Impl)

IMPL_LINK( SvxTextAnimationPage, ClickDirectionHdl_Impl, ImageButton *, pBtn )
{
    aBtnUp.Check( pBtn == &aBtnUp );
    aBtnLeft.Check( pBtn == &aBtnLeft );
    aBtnRight.Check( pBtn == &aBtnRight );
    aBtnDown.Check( pBtn == &aBtnDown );
    m_pBtnUp->Check( pBtn == m_pBtnUp );
    m_pBtnLeft->Check( pBtn == m_pBtnLeft );
    m_pBtnRight->Check( pBtn == m_pBtnRight );
    m_pBtnDown->Check( pBtn == m_pBtnDown );

    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 );
    m_pBtnUp->Check( nValue == SDRTEXTANI_UP );
    m_pBtnLeft->Check( nValue == SDRTEXTANI_LEFT );
    m_pBtnRight->Check( nValue == SDRTEXTANI_RIGHT );
    m_pBtnDown->Check( nValue == SDRTEXTANI_DOWN );
}

sal_uInt16 SvxTextAnimationPage::GetSelectedDirection()
{
    sal_uInt16 nValue = 0;

    if( aBtnUp.IsChecked() )
    if( m_pBtnUp->IsChecked() )
        nValue = SDRTEXTANI_UP;
    else if( aBtnLeft.IsChecked() )
    else if( m_pBtnLeft->IsChecked() )
        nValue = SDRTEXTANI_LEFT;
    else if( aBtnRight.IsChecked() )
    else if( m_pBtnRight->IsChecked() )
        nValue = SDRTEXTANI_RIGHT;
    else if( aBtnDown.IsChecked() )
    else if( m_pBtnDown->IsChecked() )
        nValue = SDRTEXTANI_DOWN;

    return( nValue );
diff --git a/cui/source/tabpages/textanim.hrc b/cui/source/tabpages/textanim.hrc
deleted file mode 100644
index fee187b..0000000
--- a/cui/source/tabpages/textanim.hrc
+++ /dev/null
@@ -1,41 +0,0 @@
/* -*- 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 .
 */
#define LB_EFFECT 1
#define CTL_EFFECT 1
#define TSB_START_INSIDE 1
#define TSB_STOP_INSIDE 2
#define FL_EFFECT 1
#define FT_EFFECTS 1
#define FT_DIRECTION 2
#define FL_PROPERTIES 2
#define FT_COUNT 3
#define TSB_ENDLESS 3
#define NUM_FLD_COUNT 1
#define FT_AMOUNT 4
#define MTR_FLD_AMOUNT 1
#define FT_DELAY 5
#define MTR_FLD_DELAY 2
#define TSB_PIXEL 4
#define TSB_AUTO 5
#define BTN_UP 1
#define BTN_LEFT 2
#define BTN_RIGHT 3
#define BTN_DOWN 4

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/tabpages/textanim.src b/cui/source/tabpages/textanim.src
index d2bef5b..41ea9b7 100644
--- a/cui/source/tabpages/textanim.src
+++ b/cui/source/tabpages/textanim.src
@@ -19,7 +19,6 @@

#include <svtools/controldims.hrc>
#include <cuires.hrc>
#include "textanim.hrc"
#include <svx/dialogs.hrc>

// direction image buttons
@@ -55,216 +54,6 @@
#define MA_EFFECTLIST_WIDTH             95


 // RID_SVXPAGE_TEXTANIMATION ---------------------------------------------
TabPage RID_SVXPAGE_TEXTANIMATION
{
    HelpID = "cui:TabPage:RID_SVXPAGE_TEXTANIMATION";
    SVLook = TRUE ;
    Hide = TRUE ;
    Size = MAP_APPFONT ( MA_TOTAL_WIDTH , 185 ) ;
    Text [ en-US ] = "Animation" ;
    FixedLine FL_EFFECT
    {
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT, RSC_SP_TBPG_INNERBORDER_TOP  ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT, RSC_CD_FIXEDLINE_HEIGHT ) ;
        Text [ en-US ] = "Text animation effects" ;
    };
#define MA_CURR_Y       RSC_SP_TBPG_INNERBORDER_TOP + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP + MA_BUTTON_HEIGHT
    FixedText FT_EFFECTS
    {
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT, MA_CURR_Y + 3 ) ;
        Size = MAP_APPFONT ( MA_EFFECTLIST_X - RSC_SP_CTRL_DESC_X - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_FLGR_INNERBORDER_LEFT,
                             RSC_CD_FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "E~ffect" ;
    };
    ListBox LB_EFFECT
    {
        HelpID = "cui:ListBox:RID_SVXPAGE_TEXTANIMATION:LB_EFFECT";
        Border = TRUE ;
        Pos = MAP_APPFONT ( MA_EFFECTLIST_X, MA_CURR_Y + 1 ) ;
        Size = MAP_APPFONT ( MA_EFFECTLIST_WIDTH , 57 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
        StringList [ en-US ] =
        {
            < "No Effect" ; Default ; > ;
            < "Blink" ; Default ; > ;
            < "Scroll Through" ; Default ; > ;
            < "Scroll Back and Forth" ; Default ; > ;
            < "Scroll In" ; Default ; > ;
        };
    };
    FixedText FT_DIRECTION
    {
        Pos = MAP_APPFONT ( MA_EFFECTLIST_X + MA_EFFECTLIST_WIDTH + RSC_SP_CTRL_X, MA_CURR_Y + 3 ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH -
                             (MA_MOVEBUT_GRACE_X + 3*MA_BUTTON_WIDTH + RSC_SP_TBPG_INNERBORDER_RIGHT + RSC_SP_FLGR_INNERBORDER_RIGHT) -
                             (MA_EFFECTLIST_X + MA_EFFECTLIST_WIDTH + RSC_SP_CTRL_X + RSC_SP_CTRL_DESC_X + 6),
                             RSC_CD_FIXEDTEXT_HEIGHT ) ;
        Right = TRUE;
        Text [ en-US ] = "Direction" ;
    };
    ImageButton BTN_UP
    {
        HelpID = "cui:ImageButton:RID_SVXPAGE_TEXTANIMATION:BTN_UP";
        Pos = MAP_APPFONT ( MA_TOTAL_WIDTH - MA_MOVEBUT_GRACE_X - 2*MA_BUTTON_WIDTH - RSC_SP_TBPG_INNERBORDER_RIGHT - RSC_SP_FLGR_INNERBORDER_RIGHT,
                            RSC_SP_TBPG_INNERBORDER_TOP + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP );
        Size = BUTTON_SIZE ;
        Symbol = IMAGEBUTTON_ARROW_UP ;
        QuickHelpText [ en-US ] = "To Top" ;
    };
    ImageButton BTN_LEFT
    {
        HelpID = "cui:ImageButton:RID_SVXPAGE_TEXTANIMATION:BTN_LEFT";
        Pos = MAP_APPFONT ( MA_TOTAL_WIDTH - MA_MOVEBUT_GRACE_X - 3*MA_BUTTON_WIDTH - RSC_SP_TBPG_INNERBORDER_RIGHT - RSC_SP_FLGR_INNERBORDER_RIGHT,
                            RSC_SP_TBPG_INNERBORDER_TOP + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP + MA_BUTTON_HEIGHT);
        Size = BUTTON_SIZE ;
        Symbol = IMAGEBUTTON_ARROW_LEFT ;
        QuickHelpText [ en-US ] = "To Left" ;
    };
    ImageButton BTN_RIGHT
    {
        HelpID = "cui:ImageButton:RID_SVXPAGE_TEXTANIMATION:BTN_RIGHT";
        Pos = MAP_APPFONT ( MA_TOTAL_WIDTH - MA_MOVEBUT_GRACE_X - MA_BUTTON_WIDTH - RSC_SP_TBPG_INNERBORDER_RIGHT - RSC_SP_FLGR_INNERBORDER_RIGHT,
                            RSC_SP_TBPG_INNERBORDER_TOP + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP + MA_BUTTON_HEIGHT ) ;
        Size = BUTTON_SIZE ;
        Symbol = IMAGEBUTTON_ARROW_RIGHT ;
        QuickHelpText [ en-US ] = "To Right" ;
    };
    ImageButton BTN_DOWN
    {
        HelpID = "cui:ImageButton:RID_SVXPAGE_TEXTANIMATION:BTN_DOWN";
        Pos = MAP_APPFONT ( MA_TOTAL_WIDTH - MA_MOVEBUT_GRACE_X - 2*MA_BUTTON_WIDTH - RSC_SP_TBPG_INNERBORDER_RIGHT - RSC_SP_FLGR_INNERBORDER_RIGHT,
                            RSC_SP_TBPG_INNERBORDER_TOP + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP + 2*MA_BUTTON_HEIGHT ) ;
        Size = BUTTON_SIZE ;
        Symbol = IMAGEBUTTON_ARROW_DOWN ;
        QuickHelpText [ en-US ] = "To Bottom" ;
    };

    FixedLine FL_PROPERTIES
    {
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT , RSC_SP_TBPG_INNERBORDER_TOP + MA_EFFECTSGROUP_HEIGHT  ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT, RSC_CD_FIXEDLINE_HEIGHT ) ;
        Text [ en-US ] = "Properties" ;
    };
#define MA_CURR_Y2      RSC_SP_TBPG_INNERBORDER_TOP + MA_EFFECTSGROUP_HEIGHT + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
    TriStateBox TSB_START_INSIDE
    {
        HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTANIMATION:TSB_START_INSIDE";
        TabStop = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT, MA_CURR_Y2 ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT - 12, RSC_CD_CHECKBOX_HEIGHT );
        Text [ en-US ] = "S~tart inside" ;
    };
#define MA_CURR_Y3      MA_CURR_Y2 + RSC_CD_CHECKBOX_HEIGHT + RSC_SP_CTRL_GROUP_Y
    TriStateBox TSB_STOP_INSIDE
    {
        HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTANIMATION:TSB_STOP_INSIDE";
        TabStop = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT, MA_CURR_Y3 ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT - 12, RSC_CD_CHECKBOX_HEIGHT );
        Text [ en-US ] = "Text visible when exiting" ;
    };
#define MA_CURR_Y4      MA_CURR_Y3 + RSC_CD_CHECKBOX_HEIGHT + RSC_SP_CTRL_GROUP_Y
    FixedText FT_COUNT
    {
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT, MA_CURR_Y4 ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT - 12,
                             RSC_CD_FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Animation cycles" ;
    };
#define MA_CURR_Y5      MA_CURR_Y4 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
    TriStateBox TSB_ENDLESS
    {
        HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTANIMATION:TSB_ENDLESS";
        TabStop = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT + 9 , MA_CURR_Y5 + 2 ) ;
        Size = MAP_APPFONT ( 71 , RSC_CD_CHECKBOX_HEIGHT ) ;
        Text [ en-US ] = "~Continuous" ;
    };
    NumericField NUM_FLD_COUNT
    {
        HelpID = "cui:NumericField:RID_SVXPAGE_TEXTANIMATION:NUM_FLD_COUNT";
        Border = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT + 80 + RSC_SP_CTRL_GROUP_X,
                            MA_CURR_Y5 ) ;
        Size = MAP_APPFONT ( 50 , RSC_CD_TEXTBOX_HEIGHT ) ;
        TabStop = TRUE ;
        Repeat = TRUE ;
        Spin = TRUE ;
        Minimum = 1 ;
        First = 1 ;
    };
#define MA_CURR_Y6      MA_CURR_Y5 + RSC_CD_TEXTBOX_HEIGHT + RSC_SP_CTRL_GROUP_Y
    FixedText FT_AMOUNT
    {
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT, MA_CURR_Y6 ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT - 12,
                             RSC_CD_FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Increment" ;
    };
#define MA_CURR_Y7      MA_CURR_Y6 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
    TriStateBox TSB_PIXEL
    {
        HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTANIMATION:TSB_PIXEL";
        TabStop = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT + 9 , MA_CURR_Y7 + 2 ) ;
        Size = MAP_APPFONT ( 71 , RSC_CD_CHECKBOX_HEIGHT ) ;
        Text [ en-US ] = "~Pixels" ;
    };
    MetricField MTR_FLD_AMOUNT
    {
        HelpID = "cui:MetricField:RID_SVXPAGE_TEXTANIMATION:MTR_FLD_AMOUNT";
        Border = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT + 80 + RSC_SP_CTRL_GROUP_X,
                            MA_CURR_Y7 ) ;
        Size = MAP_APPFONT ( 50 , RSC_CD_TEXTBOX_HEIGHT ) ;
        TabStop = TRUE ;
        Repeat = TRUE ;
        Spin = TRUE ;
        StrictFormat = TRUE ;
        Unit = FUNIT_CUSTOM ;
        CustomUnitText [ en-US ] = " Pixel" ;
        Minimum = 1 ;
        First = 1 ;
        Maximum = 10000 ;
        Last = 10000 ;
    };
#define MA_CURR_Y8      MA_CURR_Y7 + RSC_CD_TEXTBOX_HEIGHT + RSC_SP_CTRL_GROUP_Y
    FixedText FT_DELAY
    {
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT, MA_CURR_Y8 ) ;
        Size = MAP_APPFONT ( MA_TOTAL_WIDTH - RSC_SP_TBPG_INNERBORDER_LEFT - RSC_SP_TBPG_INNERBORDER_RIGHT - 12,
                             RSC_CD_FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Delay" ;
    };
#define MA_CURR_Y9      MA_CURR_Y8 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
    TriStateBox TSB_AUTO
    {
        HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTANIMATION:TSB_AUTO";
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT + 9 , MA_CURR_Y9 + 2 ) ;
        Size = MAP_APPFONT ( 71 , RSC_CD_CHECKBOX_HEIGHT ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Automatic" ;
    };
    MetricField MTR_FLD_DELAY
    {
        HelpID = "cui:MetricField:RID_SVXPAGE_TEXTANIMATION:MTR_FLD_DELAY";
        Border = TRUE ;
        Pos = MAP_APPFONT ( RSC_SP_TBPG_INNERBORDER_LEFT + RSC_SP_FLGR_INNERBORDER_LEFT + 80 + RSC_SP_CTRL_GROUP_X,
                            MA_CURR_Y9 ) ;
        Size = MAP_APPFONT ( 50 , RSC_CD_TEXTBOX_HEIGHT ) ;
        TabStop = TRUE ;
        Repeat = TRUE ;
        Spin = TRUE ;
        Spinsize = 50 ;
        StrictFormat = TRUE ;
        Unit = FUNIT_CUSTOM ;
        CustomUnitText [ en-US ] = " ms" ;
        Maximum = 30000 ;
        Last = 30000 ;
    };
};
 // RID_SVXDLG_TEXT -------------------------------------------------------
TabDialog RID_SVXDLG_TEXT
{
diff --git a/cui/uiconfig/ui/textanimtabpage.ui b/cui/uiconfig/ui/textanimtabpage.ui
new file mode 100644
index 0000000..249d920
--- /dev/null
+++ b/cui/uiconfig/ui/textanimtabpage.ui
@@ -0,0 +1,511 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkBox" id="TextAnimation">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="border_width">6</property>
    <property name="orientation">vertical</property>
    <property name="spacing">6</property>
    <child>
      <object class="GtkFrame" id="FL_EFFECT">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label_xalign">0</property>
        <property name="shadow_type">none</property>
        <child>
          <object class="GtkAlignment" id="alignment1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="top_padding">6</property>
            <property name="left_padding">12</property>
            <child>
              <object class="GtkBox" id="box2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="spacing">12</property>
                <child>
                  <object class="GtkLabel" id="FT_EFFECTS">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="label" translatable="yes">E_ffect:</property>
                    <property name="use_underline">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkComboBox" id="LB_EFFECT">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="valign">center</property>
                    <property name="model">liststoreEFFECT</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkBox" id="boxDIRECTION">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="spacing">12</property>
                    <child>
                      <object class="GtkLabel" id="FT_DIRECTION">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes">Direction:</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkGrid" id="grid1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="row_spacing">6</property>
                        <property name="column_spacing">6</property>
                        <child>
                          <object class="GtkButton" id="BTN_UP">
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">True</property>
                            <property name="has_tooltip">True</property>
                            <property name="tooltip_markup" translatable="yes">To top</property>
                            <property name="tooltip_text" translatable="yes">To top</property>
                            <property name="halign">center</property>
                            <property name="hexpand">True</property>
                            <property name="image">imageUP</property>
                          </object>
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">0</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkButton" id="BTN_RIGHT">
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">True</property>
                            <property name="has_tooltip">True</property>
                            <property name="tooltip_markup" translatable="yes">To right</property>
                            <property name="tooltip_text" translatable="yes">To right</property>
                            <property name="halign">center</property>
                            <property name="hexpand">True</property>
                            <property name="image">imageRIGHT</property>
                          </object>
                          <packing>
                            <property name="left_attach">2</property>
                            <property name="top_attach">1</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkButton" id="BTN_LEFT">
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">True</property>
                            <property name="has_tooltip">True</property>
                            <property name="tooltip_markup" translatable="yes">To left</property>
                            <property name="tooltip_text" translatable="yes">To left</property>
                            <property name="halign">center</property>
                            <property name="hexpand">True</property>
                            <property name="image">imageLEFT</property>
                          </object>
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">1</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <placeholder/>
                        </child>
                        <child>
                          <placeholder/>
                        </child>
                        <child>
                          <placeholder/>
                        </child>
                        <child>
                          <placeholder/>
                        </child>
                        <child>
                          <placeholder/>
                        </child>
                        <child>
                          <object class="GtkButton" id="BTN_DOWN">
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">True</property>
                            <property name="has_tooltip">True</property>
                            <property name="tooltip_markup" translatable="yes">To bottom</property>
                            <property name="tooltip_text" translatable="yes">To bottom</property>
                            <property name="halign">center</property>
                            <property name="hexpand">True</property>
                            <property name="image">imageDOWN</property>
                          </object>
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">2</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">2</property>
                  </packing>
                </child>
              </object>
            </child>
          </object>
        </child>
        <child type="label">
          <object class="GtkLabel" id="label1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes">Text animation effects</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
          </object>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">0</property>
      </packing>
    </child>
    <child>
      <object class="GtkFrame" id="FL_PROPERTIES">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label_xalign">0</property>
        <property name="shadow_type">none</property>
        <child>
          <object class="GtkAlignment" id="alignment2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="top_padding">6</property>
            <property name="left_padding">12</property>
            <child>
              <object class="GtkBox" id="box4">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="orientation">vertical</property>
                <property name="spacing">6</property>
                <child>
                  <object class="GtkCheckButton" id="TSB_START_INSIDE">
                    <property name="label" translatable="yes">S_tart inside</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                    <property name="inconsistent">True</property>
                    <property name="draw_indicator">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkCheckButton" id="TSB_STOP_INSIDE">
                    <property name="label" translatable="yes">Text _visible when exiting</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                    <property name="inconsistent">True</property>
                    <property name="draw_indicator">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkLabel" id="FT_COUNT">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes">Animation cycles:</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">2</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkBox" id="boxCOUNT">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="margin_left">24</property>
                    <property name="spacing">6</property>
                    <property name="homogeneous">True</property>
                    <child>
                      <object class="GtkCheckButton" id="TSB_ENDLESS">
                        <property name="label" translatable="yes">_Continuous</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
                        <property name="inconsistent">True</property>
                        <property name="draw_indicator">True</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkSpinButton" id="NUM_FLD_COUNT">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="invisible_char">•</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">3</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkLabel" id="FT_AMOUNT">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes">Increment:</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">4</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkBox" id="boxAMOUNT">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="margin_left">24</property>
                    <property name="spacing">6</property>
                    <property name="homogeneous">True</property>
                    <child>
                      <object class="GtkCheckButton" id="TSB_PIXEL">
                        <property name="label" translatable="yes">_Pixels</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
                        <property name="inconsistent">True</property>
                        <property name="draw_indicator">True</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkSpinButton" id="MTR_FLD_AMOUNT:0Pixels">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="invisible_char">•</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">5</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkLabel" id="FT_DELAY">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes">Delay:</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">6</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkBox" id="boxDELAY">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="margin_left">24</property>
                    <property name="spacing">6</property>
                    <property name="homogeneous">True</property>
                    <child>
                      <object class="GtkCheckButton" id="TSB_AUTO">
                        <property name="label" translatable="yes">_Automatic</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
                        <property name="inconsistent">True</property>
                        <property name="draw_indicator">True</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkSpinButton" id="MTR_FLD_DELAY:0,00ms">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="invisible_char">•</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">7</property>
                  </packing>
                </child>
              </object>
            </child>
          </object>
        </child>
        <child type="label">
          <object class="GtkLabel" id="label2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes">Properties</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
          </object>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">1</property>
      </packing>
    </child>
  </object>
  <object class="GtkAdjustment" id="adjustmentAMOUNT">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustmentCOUNT">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustmentDELAY">
    <property name="upper">300</property>
    <property name="step_increment">1</property>
    <property name="page_increment">50</property>
  </object>
  <object class="GtkImage" id="imageDOWN">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="stock">gtk-go-down</property>
  </object>
  <object class="GtkImage" id="imageLEFT">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="stock">gtk-go-back</property>
  </object>
  <object class="GtkImage" id="imageRIGHT">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="stock">gtk-go-forward</property>
  </object>
  <object class="GtkImage" id="imageUP">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="stock">gtk-go-up</property>
  </object>
  <object class="GtkListStore" id="liststoreEFFECT">
    <columns>
      <!-- column-name gchararray1 -->
      <column type="gchararray"/>
      <!-- column-name guint1 -->
      <column type="guint"/>
    </columns>
    <data>
      <row>
        <col id="0" translatable="yes">No Effect</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes">Blink</col>
        <col id="1">1</col>
      </row>
      <row>
        <col id="0" translatable="yes">Scroll Through</col>
        <col id="1">2</col>
      </row>
      <row>
        <col id="0" translatable="yes">Scroll Back and Forth</col>
        <col id="1">3</col>
      </row>
      <row>
        <col id="0" translatable="yes">Scroll In</col>
        <col id="1">4</col>
      </row>
    </data>
  </object>
</interface>