diff options
Diffstat (limited to 'sd/source/ui/func/fuoaprms.cxx')
-rw-r--r-- | sd/source/ui/func/fuoaprms.cxx | 985 |
1 files changed, 985 insertions, 0 deletions
diff --git a/sd/source/ui/func/fuoaprms.cxx b/sd/source/ui/func/fuoaprms.cxx new file mode 100644 index 000000000000..1b618f820ebf --- /dev/null +++ b/sd/source/ui/func/fuoaprms.cxx @@ -0,0 +1,985 @@ +/************************************************************************* + * + * $RCSfile: fuoaprms.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:48:35 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + + + +#include "sdattr.hxx" +#define ITEMID_COLOR ATTR_ANIMATION_COLOR +#ifndef _SVDPAGV_HXX //autogen +#include <svx/svdpagv.hxx> +#endif +#ifndef _SVX_COLRITEM_HXX //autogen +#include <svx/colritem.hxx> +#endif +#ifndef _SVDUNDO_HXX //autogen +#include <svx/svdundo.hxx> +#endif +#ifndef _SV_GROUP_HXX //autogen +#include <vcl/group.hxx> +#endif +#ifndef _SV_FIXED_HXX //autogen +#include <vcl/fixed.hxx> +#endif +#ifndef _SFX_OBJSH_HXX //autogen +#include <sfx2/objsh.hxx> +#endif +#ifndef _SFXREQUEST_HXX //autogen +#include <sfx2/request.hxx> +#endif +#ifndef _SFXVIEWFRM_HXX //autogen +#include <sfx2/viewfrm.hxx> +#endif +#ifndef _MSGBOX_HXX //autogen +#include <vcl/msgbox.hxx> +#endif +#ifndef _AEITEM_HXX //autogen +#include <svtools/aeitem.hxx> +#endif +#include "svx/xtable.hxx" + +#include "strings.hrc" +#include "fuoaprms.hxx" +#include "drawdoc.hxx" +#include "viewshel.hxx" +#include "anminfo.hxx" +#include "unoaprms.hxx" // Undo-Action +#include "sdundogr.hxx" // Undo Gruppe +#include "sdview.hxx" +#include "tpeffect.hxx" +#include "preview.hxx" +#include "prevchld.hxx" + +using namespace ::com::sun::star; + +TYPEINIT1( FuObjectAnimationParameters, FuPoor ); + +#define ATTR_MISSING 0 // Attribut nicht verfuegbar +#define ATTR_MIXED 1 // Attribut uneindeutig (bei Mehrfachselektion) +#define ATTR_SET 2 // Attribut eindeutig + +/************************************************************************* +|* +|* Konstruktor +|* +\************************************************************************/ + +FuObjectAnimationParameters::FuObjectAnimationParameters + (SdViewShell* pViewSh, + SdWindow* pWin, + SdView* pView, + SdDrawDocument* pDoc, + SfxRequest& rReq) + : FuPoor(pViewSh, pWin, pView, pDoc, rReq) +{ + BOOL bOnMaster = pView->GetPageViewPvNum(0)->GetPage()->IsMasterPage(); + SfxUndoManager* pUndoMgr = pViewSh->GetViewFrame()->GetObjectShell()-> + GetUndoManager(); + + const SdrMarkList& rMarkList = pView->GetMarkList(); + ULONG nCount = rMarkList.GetMarkCount(); + ULONG nObject = 0; + + short nAnimationSet = ATTR_MISSING; + short nEffectSet = ATTR_MISSING; + short nTextEffectSet = ATTR_MISSING; + short nSpeedSet = ATTR_MISSING; + short nFadeColorSet = ATTR_MISSING; + short nFadeOutSet = ATTR_MISSING; + short nInvisibleSet = ATTR_MISSING; + short nSoundOnSet = ATTR_MISSING; + short nSoundFileSet = ATTR_MISSING; + short nBlueScreenSet = ATTR_MISSING; + short nPlayFullSet = ATTR_MISSING; + short nClickActionSet = ATTR_MISSING; + short nBookmarkSet = ATTR_MISSING; + + short nSecondEffectSet = ATTR_MISSING; + short nSecondSpeedSet = ATTR_MISSING; + short nSecondSoundOnSet = ATTR_MISSING; + short nSecondPlayFullSet = ATTR_MISSING; + + + +// BOOL bDontKnow = FALSE; + + // defaulten (fuer Undo-Aktion) + presentation::AnimationEffect eEffect = presentation::AnimationEffect_NONE; + presentation::AnimationEffect eTextEffect = presentation::AnimationEffect_NONE; + presentation::AnimationSpeed eSpeed = presentation::AnimationSpeed_MEDIUM; + BOOL bActive = FALSE; + BOOL bFadeOut = FALSE; + Color aFadeColor = COL_LIGHTGRAY; + BOOL bInvisible = FALSE; + Color aBlueScreen = COL_LIGHTMAGENTA; + BOOL bSoundOn = FALSE; + String aSound; + BOOL bPlayFull = FALSE; + presentation::ClickAction eClickAction = presentation::ClickAction_NONE; + String aBookmark; + + presentation::AnimationEffect eSecondEffect = presentation::AnimationEffect_NONE; + presentation::AnimationSpeed eSecondSpeed = presentation::AnimationSpeed_MEDIUM; + BOOL bSecondSoundOn = FALSE; + BOOL bSecondPlayFull = FALSE; + + + SdAnimationInfo* pInfo; + SdrMark* pMark; + + // das erste Objekt untersuchen + pMark = rMarkList.GetMark(0); + SdrObject* pObject = pMark->GetObj(); + pInfo = pDoc->GetAnimationInfo(pObject); + if( pInfo ) + { + bActive = pInfo->bActive; + nAnimationSet = ATTR_SET; + + eEffect = pInfo->eEffect; + nEffectSet = ATTR_SET; + + eTextEffect = pInfo->eTextEffect; + nTextEffectSet = ATTR_SET; + + eSpeed = pInfo->eSpeed; + nSpeedSet = ATTR_SET; + + bFadeOut = pInfo->bDimPrevious; + nFadeOutSet = ATTR_SET; + + aFadeColor = pInfo->aDimColor; + nFadeColorSet = ATTR_SET; + + bInvisible = pInfo->bDimHide; + nInvisibleSet = ATTR_SET; + + bSoundOn = pInfo->bSoundOn; + nSoundOnSet = ATTR_SET; + + aSound = pInfo->aSoundFile; + nSoundFileSet = ATTR_SET; + + aBlueScreen = pInfo->aBlueScreen; + nBlueScreenSet = ATTR_SET; + + bPlayFull = pInfo->bPlayFull; + nPlayFullSet = ATTR_SET; + + eClickAction = pInfo->eClickAction; + nClickActionSet = ATTR_SET; + + aBookmark = pInfo->aBookmark; + nBookmarkSet = ATTR_SET; + + eSecondEffect = pInfo->eSecondEffect; + nSecondEffectSet = ATTR_SET; + + eSecondSpeed = pInfo->eSecondSpeed; + nSecondSpeedSet = ATTR_SET; + + bSecondSoundOn = pInfo->bSecondSoundOn; + nSecondSoundOnSet = ATTR_SET; + + bSecondPlayFull = pInfo->bSecondPlayFull; + nSecondPlayFullSet = ATTR_SET; + } + + // ggfs. weitere Objekte untersuchen + for( nObject = 1; nObject < nCount; nObject++ ) + { + pMark = rMarkList.GetMark( nObject ); + SdrObject* pObject = pMark->GetObj(); + pInfo = pDoc->GetAnimationInfo(pObject); + if( pInfo ) + { + if( bActive != pInfo->bActive ) + nAnimationSet = ATTR_MIXED; + + if( eEffect != pInfo->eEffect ) + nEffectSet = ATTR_MIXED; + + if( eTextEffect != pInfo->eTextEffect ) + nTextEffectSet = ATTR_MIXED; + + if( eSpeed != pInfo->eSpeed ) + nSpeedSet = ATTR_MIXED; + + if( bFadeOut != pInfo->bDimPrevious ) + nFadeOutSet = ATTR_MIXED; + + if( aFadeColor != pInfo->aDimColor ) + nFadeColorSet = ATTR_MIXED; + + if( bInvisible != pInfo->bDimHide ) + nInvisibleSet = ATTR_MIXED; + + if( bSoundOn != pInfo->bSoundOn ) + nSoundOnSet = ATTR_MIXED; + + if( aSound != pInfo->aSoundFile ) + nSoundFileSet = ATTR_MIXED; + + if( aBlueScreen != pInfo->aBlueScreen ) + nBlueScreenSet = ATTR_MIXED; + + if( bPlayFull != pInfo->bPlayFull ) + nPlayFullSet = ATTR_MIXED; + + if( eClickAction != pInfo->eClickAction ) + nClickActionSet = ATTR_MIXED; + + if( aBookmark != pInfo->aBookmark ) + nBookmarkSet = ATTR_MIXED; + + if( eSecondEffect != pInfo->eSecondEffect ) + nSecondEffectSet = ATTR_MIXED; + + if( eSecondSpeed != pInfo->eSecondSpeed ) + nSecondSpeedSet = ATTR_MIXED; + + if( bSecondSoundOn != pInfo->bSecondSoundOn ) + nSecondSoundOnSet = ATTR_MIXED; + + if( bSecondPlayFull != pInfo->bSecondPlayFull ) + nSecondPlayFullSet = ATTR_MIXED; + } + else + { + if (nAnimationSet == ATTR_SET && bActive == TRUE) + nAnimationSet = ATTR_MIXED; + + if (nEffectSet == ATTR_SET && eEffect != presentation::AnimationEffect_NONE) + nEffectSet = ATTR_MIXED; + + if (nTextEffectSet == ATTR_SET && eTextEffect != presentation::AnimationEffect_NONE) + nTextEffectSet = ATTR_MIXED; + + if (nSpeedSet == ATTR_SET) + nSpeedSet = ATTR_MIXED; + + if (nFadeOutSet == ATTR_SET && bFadeOut == TRUE) + nFadeOutSet = ATTR_MIXED; + + if (nFadeColorSet == ATTR_SET) + nFadeColorSet = ATTR_MIXED; + + if (nInvisibleSet == ATTR_SET && bInvisible == TRUE) + nInvisibleSet = ATTR_MIXED; + + if (nSoundOnSet == ATTR_SET && bSoundOn == TRUE) + nSoundOnSet = ATTR_MIXED; + + if (nSoundFileSet == ATTR_SET) + nSoundFileSet = ATTR_MIXED; + + if (nBlueScreenSet == ATTR_SET) + nBlueScreenSet = ATTR_MIXED; + + if (nPlayFullSet == ATTR_SET && bPlayFull == TRUE) + nPlayFullSet = ATTR_MIXED; + + if (nClickActionSet == ATTR_SET && eClickAction != presentation::ClickAction_NONE) + nClickActionSet = ATTR_MIXED; + + if (nBookmarkSet == ATTR_SET) + nBookmarkSet = ATTR_MIXED; + + if (nSecondEffectSet == ATTR_SET && eSecondEffect != presentation::AnimationEffect_NONE) + nSecondEffectSet = ATTR_MIXED; + + if (nSecondSpeedSet == ATTR_SET) + nSecondSpeedSet = ATTR_MIXED; + + if (nSecondSoundOnSet == ATTR_SET && bSecondSoundOn == TRUE) + nSecondSoundOnSet = ATTR_MIXED; + + if (nSecondPlayFullSet == ATTR_SET && bSecondPlayFull == TRUE) + nSecondPlayFullSet = ATTR_MIXED; + } + } + + // Genau zwei Objekte mit Pfadeffekt? Dann gilt nur die Animationsinfo + // am bewegten Objekt. + if (nCount == 2) + { + SdrObject* pObject1 = rMarkList.GetMark(0)->GetObj(); + SdrObject* pObject2 = rMarkList.GetMark(1)->GetObj(); + SdrObjKind eKind1 = (SdrObjKind)pObject1->GetObjIdentifier(); + SdrObjKind eKind2 = (SdrObjKind)pObject2->GetObjIdentifier(); + SdAnimationInfo* pInfo1 = pDoc->GetAnimationInfo(pObject1); + SdAnimationInfo* pInfo2 = pDoc->GetAnimationInfo(pObject2); + SdAnimationInfo* pInfo = NULL; + + if (pObject1->GetObjInventor() == SdrInventor && + ((eKind1 == OBJ_LINE) || // 2-Punkt-Linie + (eKind1 == OBJ_PLIN) || // Polygon + (eKind1 == OBJ_PATHLINE)) && // Bezier-Kurve + (pInfo2 && pInfo2->eEffect == presentation::AnimationEffect_PATH)) + { + pInfo = pInfo2; + } + + if (pObject2->GetObjInventor() == SdrInventor && + ((eKind2 == OBJ_LINE) || // 2-Punkt-Linie + (eKind2 == OBJ_PLIN) || // Polygon + (eKind2 == OBJ_PATHLINE)) && // Bezier-Kurve + (pInfo1 && pInfo1->eEffect == presentation::AnimationEffect_PATH)) + { + pInfo = pInfo1; + } + + if (pInfo) + { + bActive = pInfo->bActive; nAnimationSet = ATTR_SET; + eEffect = pInfo->eEffect; nEffectSet = ATTR_SET; + eTextEffect = pInfo->eTextEffect; nTextEffectSet = ATTR_SET; + eSpeed = pInfo->eSpeed; nSpeedSet = ATTR_SET; + bFadeOut = pInfo->bDimPrevious; nFadeOutSet = ATTR_SET; + aFadeColor = pInfo->aDimColor; nFadeColorSet = ATTR_SET; + bInvisible = pInfo->bDimHide; nInvisibleSet = ATTR_SET; + bSoundOn = pInfo->bSoundOn; nSoundOnSet = ATTR_SET; + aSound = pInfo->aSoundFile; nSoundFileSet = ATTR_SET; + aBlueScreen = pInfo->aBlueScreen; nBlueScreenSet = ATTR_SET; + bPlayFull = pInfo->bPlayFull; nPlayFullSet = ATTR_SET; + eClickAction = pInfo->eClickAction; nClickActionSet = ATTR_SET; + aBookmark = pInfo->aBookmark; nBookmarkSet = ATTR_SET; + eSecondEffect = pInfo->eSecondEffect; nSecondEffectSet = ATTR_SET; + eSecondSpeed = pInfo->eSecondSpeed; nSecondSpeedSet = ATTR_SET; + bSecondSoundOn = pInfo->bSecondSoundOn; nSecondSoundOnSet = ATTR_SET; + bSecondPlayFull = pInfo->bSecondPlayFull; nSecondPlayFullSet = ATTR_SET; + } + } + + const SfxItemSet* pArgs = rReq.GetArgs(); + + if(!pArgs) + { + // ItemSet fuer Dialog fuellen + SfxItemSet aSet(pDoc->GetPool(), ATTR_ANIMATION_START, ATTR_ACTION_END); + + // das Set besetzen + if (nAnimationSet == ATTR_SET) + aSet.Put( SfxBoolItem( ATTR_ANIMATION_ACTIVE, bActive)); + else if (nAnimationSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_ACTIVE); + else + aSet.Put(SfxBoolItem(ATTR_ANIMATION_ACTIVE, FALSE)); + + if (nEffectSet == ATTR_SET) + aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_EFFECT, eEffect)); + else if (nEffectSet == ATTR_MIXED) + aSet.InvalidateItem( ATTR_ANIMATION_EFFECT ); + else + aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_EFFECT, presentation::AnimationEffect_NONE)); + + if (nTextEffectSet == ATTR_SET) + aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_TEXTEFFECT, eTextEffect)); + else if (nTextEffectSet == ATTR_MIXED) + aSet.InvalidateItem( ATTR_ANIMATION_TEXTEFFECT ); + else + aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_TEXTEFFECT, presentation::AnimationEffect_NONE)); + + if (nSpeedSet == ATTR_SET) + aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_SPEED, eSpeed)); + else + aSet.InvalidateItem(ATTR_ANIMATION_SPEED); + + if (nFadeOutSet == ATTR_SET) + aSet.Put(SfxBoolItem(ATTR_ANIMATION_FADEOUT, bFadeOut)); + else if (nFadeOutSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_FADEOUT); + else + aSet.Put(SfxBoolItem(ATTR_ANIMATION_FADEOUT, FALSE)); + + if (nFadeColorSet == ATTR_SET) + aSet.Put(SvxColorItem(aFadeColor, ATTR_ANIMATION_COLOR)); + else if (nFadeColorSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_COLOR); + else + aSet.Put(SvxColorItem(RGB_Color(COL_LIGHTGRAY), ATTR_ANIMATION_COLOR)); + + if (nInvisibleSet == ATTR_SET) + aSet.Put(SfxBoolItem(ATTR_ANIMATION_INVISIBLE, bInvisible)); + else if (nInvisibleSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_INVISIBLE); + else + aSet.Put(SfxBoolItem(ATTR_ANIMATION_INVISIBLE, FALSE)); + + if (nSoundOnSet == ATTR_SET) + aSet.Put(SfxBoolItem(ATTR_ANIMATION_SOUNDON, bSoundOn)); + else if (nSoundOnSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_SOUNDON); + else + aSet.Put(SfxBoolItem(ATTR_ANIMATION_SOUNDON, FALSE)); + + if (nSoundFileSet == ATTR_SET) + aSet.Put(SfxStringItem(ATTR_ANIMATION_SOUNDFILE, aSound)); + else + aSet.InvalidateItem(ATTR_ANIMATION_SOUNDFILE); + + if (nBlueScreenSet == ATTR_SET) + aSet.Put(SvxColorItem(aBlueScreen, ATTR_ANIMATION_TRANSPCOLOR)); + else if (nBlueScreenSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_TRANSPCOLOR); + else + aSet.Put(SvxColorItem(RGB_Color(COL_LIGHTMAGENTA), ATTR_ANIMATION_TRANSPCOLOR)); + + + if (nPlayFullSet == ATTR_SET) + aSet.Put(SfxBoolItem(ATTR_ANIMATION_PLAYFULL, bPlayFull)); + else if (nPlayFullSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ANIMATION_PLAYFULL); + else + aSet.Put(SfxBoolItem(ATTR_ANIMATION_PLAYFULL, FALSE)); + + if (nClickActionSet == ATTR_SET) + aSet.Put(SfxAllEnumItem(ATTR_ACTION, eClickAction)); + else if (nClickActionSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ACTION); + else + aSet.Put(SfxAllEnumItem(ATTR_ACTION, presentation::ClickAction_NONE)); + + if (nBookmarkSet == ATTR_SET) + aSet.Put(SfxStringItem(ATTR_ACTION_FILENAME, aBookmark)); + else + aSet.InvalidateItem(ATTR_ACTION_FILENAME); + + if (nSecondEffectSet == ATTR_SET) + aSet.Put(SfxAllEnumItem(ATTR_ACTION_EFFECT, eSecondEffect)); + else if (nSecondEffectSet == ATTR_MIXED) + aSet.InvalidateItem( ATTR_ACTION_EFFECT ); + else + aSet.Put(SfxAllEnumItem(ATTR_ACTION_EFFECT, presentation::AnimationEffect_NONE)); + + if (nSecondSpeedSet == ATTR_SET) + aSet.Put(SfxAllEnumItem(ATTR_ACTION_EFFECTSPEED, eSecondSpeed)); + else + aSet.InvalidateItem(ATTR_ACTION_EFFECTSPEED); + + if (nSecondSoundOnSet == ATTR_SET) + aSet.Put(SfxBoolItem(ATTR_ACTION_SOUNDON, bSecondSoundOn)); + else if (nSecondSoundOnSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ACTION_SOUNDON); + else + aSet.Put(SfxBoolItem(ATTR_ACTION_SOUNDON, FALSE)); + + if (nSecondPlayFullSet == ATTR_SET) + aSet.Put(SfxBoolItem(ATTR_ACTION_PLAYFULL, bSecondPlayFull)); + else if (nPlayFullSet == ATTR_MIXED) + aSet.InvalidateItem(ATTR_ACTION_PLAYFULL); + else + aSet.Put(SfxBoolItem(ATTR_ACTION_PLAYFULL, FALSE)); + + //USHORT nDlgId = bOnMaster ? TAB_ACTIONSONLY : TAB_ANIMATION; + SdActionDlg* pDlg = new SdActionDlg(NULL, &aSet, pView); + + USHORT nResult = pDlg->Execute(); + + switch( nResult ) + { + case RET_OK: + { + rReq.Done( *( pDlg->GetOutputItemSet() ) ); + pArgs = rReq.GetArgs(); + } + break; + + default: + { + delete( pDlg ); + } + return; // Abbruch + } + delete pDlg; + } + + // Auswertung des ItemSets + if (pArgs->GetItemState(ATTR_ANIMATION_ACTIVE) == SFX_ITEM_SET) + { + bActive = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_ACTIVE)).GetValue(); + nAnimationSet = ATTR_SET; + } + else + nAnimationSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_EFFECT) == SFX_ITEM_SET) + { + eEffect = (presentation::AnimationEffect)((SfxAllEnumItem&) pArgs-> + Get(ATTR_ANIMATION_EFFECT)).GetValue(); + nEffectSet = ATTR_SET; + } + else + nEffectSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_TEXTEFFECT) == SFX_ITEM_SET) + { + eTextEffect = (presentation::AnimationEffect)((SfxAllEnumItem&) pArgs-> + Get(ATTR_ANIMATION_TEXTEFFECT)).GetValue(); + nTextEffectSet = ATTR_SET; + } + else + nTextEffectSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_SPEED) == SFX_ITEM_SET) + { + eSpeed = (presentation::AnimationSpeed)((SfxAllEnumItem&) pArgs-> + Get(ATTR_ANIMATION_SPEED)).GetValue(); + nSpeedSet = ATTR_SET; + } + else + nSpeedSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_FADEOUT) == SFX_ITEM_SET) + { + bFadeOut = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_FADEOUT)).GetValue(); + nFadeOutSet = ATTR_SET; + } + else + nFadeOutSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_INVISIBLE) == SFX_ITEM_SET) + { + bInvisible = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_INVISIBLE)).GetValue(); + nInvisibleSet = ATTR_SET; + } + else + nInvisibleSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_SOUNDON) == SFX_ITEM_SET) + { + bSoundOn = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_SOUNDON)).GetValue(); + nSoundOnSet = ATTR_SET; + } + else + nSoundOnSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_SOUNDFILE) == SFX_ITEM_SET) + { + aSound = ((SfxStringItem&)pArgs->Get(ATTR_ANIMATION_SOUNDFILE)).GetValue(); + nSoundFileSet = ATTR_SET; + } + else + nSoundFileSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_COLOR) == SFX_ITEM_SET) + { + aFadeColor = ((SvxColorItem&)pArgs->Get(ATTR_ANIMATION_COLOR)).GetValue(); + nFadeColorSet = ATTR_SET; + } + else + nFadeColorSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_TRANSPCOLOR) == SFX_ITEM_SET) + { + aBlueScreen = ((SvxColorItem&)pArgs->Get(ATTR_ANIMATION_TRANSPCOLOR)).GetValue(); + nBlueScreenSet = ATTR_SET; + } + else + nBlueScreenSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ANIMATION_PLAYFULL) == SFX_ITEM_SET) + { + bPlayFull = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_PLAYFULL)).GetValue(); + nPlayFullSet = ATTR_SET; + } + else + nPlayFullSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ACTION) == SFX_ITEM_SET) + { + eClickAction = (presentation::ClickAction)((SfxAllEnumItem&)pArgs-> + Get(ATTR_ACTION)).GetValue(); + nClickActionSet = ATTR_SET; + } + else + nClickActionSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ACTION_FILENAME) == SFX_ITEM_SET) + { + aBookmark = ((SfxStringItem&)pArgs-> + Get(ATTR_ACTION_FILENAME)).GetValue(); + nBookmarkSet = ATTR_SET; + } + else + nBookmarkSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ACTION_EFFECT) == SFX_ITEM_SET) + { + eSecondEffect = (presentation::AnimationEffect)((SfxAllEnumItem&) pArgs-> + Get(ATTR_ACTION_EFFECT)).GetValue(); + nSecondEffectSet = ATTR_SET; + } + else + nSecondEffectSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ACTION_EFFECTSPEED) == SFX_ITEM_SET) + { + eSecondSpeed = (presentation::AnimationSpeed)((SfxAllEnumItem&) pArgs-> + Get(ATTR_ACTION_EFFECTSPEED)).GetValue(); + nSecondSpeedSet = ATTR_SET; + } + else + nSecondSpeedSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ACTION_SOUNDON) == SFX_ITEM_SET) + { + bSecondSoundOn = ((SfxBoolItem&)pArgs->Get(ATTR_ACTION_SOUNDON)).GetValue(); + nSecondSoundOnSet = ATTR_SET; + } + else + nSecondSoundOnSet = ATTR_MISSING; + + if (pArgs->GetItemState(ATTR_ACTION_PLAYFULL) == SFX_ITEM_SET) + { + bSecondPlayFull = ((SfxBoolItem&)pArgs->Get(ATTR_ACTION_PLAYFULL)).GetValue(); + nSecondPlayFullSet = ATTR_SET; + } + else + nSecondPlayFullSet = ATTR_MISSING; + + // Wenn irgendwelche Attribute ausgewaehlt wurden + if (nEffectSet == ATTR_SET || + nTextEffectSet == ATTR_SET || + nSpeedSet == ATTR_SET || + nAnimationSet == ATTR_SET || + nFadeOutSet == ATTR_SET || + nFadeColorSet == ATTR_SET || + nInvisibleSet == ATTR_SET || + nSoundOnSet == ATTR_SET || + nSoundFileSet == ATTR_SET || + nBlueScreenSet == ATTR_SET || + nPlayFullSet == ATTR_SET || + nClickActionSet == ATTR_SET || + nBookmarkSet == ATTR_SET || + nSecondEffectSet == ATTR_SET || + nSecondSpeedSet == ATTR_SET || + nSecondSoundOnSet == ATTR_SET || + nSecondPlayFullSet == ATTR_SET) + { + // String fuer Undo-Group und List-Action + String aComment(SdResId(STR_UNDO_ANIMATION)); + + // bei 'an Kurve entlang' gibt's noch eine extra UndoAction, darum + // hier klammern + pUndoMgr->EnterListAction(aComment, aComment); + + // Undo Gruppe erzeugen + SdUndoGroup* pUndoGroup = new SdUndoGroup(pDoc); + pUndoGroup->SetComment(aComment); + + + // fuer den Pfad-Effekt einige Dinge merken + SdrObject* pRunningObj = NULL; + SdrPathObj* pPath = NULL; + if (eEffect == presentation::AnimationEffect_PATH && nEffectSet == ATTR_SET) + { + DBG_ASSERT(nCount == 2, "dieser Effekt braucht genau 2 selektierte Objekte"); + SdrObject* pObject1 = rMarkList.GetMark(0)->GetObj(); + SdrObject* pObject2 = rMarkList.GetMark(1)->GetObj(); + SdrObjKind eKind1 = (SdrObjKind)pObject1->GetObjIdentifier(); + SdrObjKind eKind2 = (SdrObjKind)pObject2->GetObjIdentifier(); + + if (pObject1->GetObjInventor() == SdrInventor && + ((eKind1 == OBJ_LINE) || // 2-Punkt-Linie + (eKind1 == OBJ_PLIN) || // Polygon + (eKind1 == OBJ_PATHLINE))) // Bezier-Kurve + { + pPath = (SdrPathObj*)pObject1; + pRunningObj = pObject2; + } + + if (pObject2->GetObjInventor() == SdrInventor && + ((eKind2 == OBJ_LINE) || // 2-Punkt-Linie + (eKind2 == OBJ_PLIN) || // Polygon + (eKind2 == OBJ_PATHLINE))) // Bezier-Kurve + { + pPath = (SdrPathObj*)pObject2; + pRunningObj = pObject1; + } + + DBG_ASSERT(pPath, "keine Kurve gefunden"); + + + // das laufende Objekt auf das Kurvenende schieben + Rectangle aCurRect(pRunningObj->GetLogicRect()); + Point aCurCenter(aCurRect.Center()); + const XPolyPolygon& rXPP = pPath->GetPathPoly(); + USHORT nNoOfXPoly = rXPP.Count(); + const XPolygon& rXPoly = rXPP.GetObject(nNoOfXPoly - 1); + USHORT nPoints = rXPoly.GetPointCount(); + Point aNewCenter(rXPoly[nPoints - 1]); + Size aDistance(aNewCenter.X() - aCurCenter.X(), + aNewCenter.Y() - aCurCenter.Y()); + pRunningObj->Move(aDistance); + + SdrUndoMoveObj* pUndoAction = new SdrUndoMoveObj(*pRunningObj, + aDistance); + pUndoMgr->AddUndoAction(pUndoAction); + } + + for (nObject = 0; nObject < nCount; nObject++) + { + SdrObject* pObject = rMarkList.GetMark(nObject)->GetObj(); + + pInfo = pDoc->GetAnimationInfo(pObject); + + BOOL bCreated = FALSE; + if( !pInfo ) + { + pInfo = new SdAnimationInfo(pDoc); + pObject->InsertUserData( pInfo ); + bCreated = TRUE; + } + + // das Pfadobjekt fuer 'an Kurve entlang'? + if (eEffect == presentation::AnimationEffect_PATH && pObject == pPath) + { + SdAnimationPrmsUndoAction* pAction = new SdAnimationPrmsUndoAction + (pDoc, pObject, bCreated); + pAction->SetActive(pInfo->bActive, pInfo->bActive); + pAction->SetEffect(pInfo->eEffect, pInfo->eEffect); + pAction->SetTextEffect(pInfo->eTextEffect, pInfo->eTextEffect); + pAction->SetSpeed(pInfo->eSpeed, pInfo->eSpeed); + pAction->SetDim(pInfo->bDimPrevious, pInfo->bDimPrevious); + pAction->SetDimColor(pInfo->aDimColor, pInfo->aDimColor); + pAction->SetDimHide(pInfo->bDimHide, pInfo->bDimHide); + pAction->SetSoundOn(pInfo->bSoundOn, pInfo->bSoundOn); + pAction->SetSound(pInfo->aSoundFile, pInfo->aSoundFile); + pAction->SetBlueScreen(pInfo->aBlueScreen, pInfo->aBlueScreen); + pAction->SetPlayFull(pInfo->bPlayFull, pInfo->bPlayFull); + pAction->SetPathObj(pInfo->pPathObj, pInfo->pPathObj); + pAction->SetClickAction(pInfo->eClickAction, pInfo->eClickAction); + pAction->SetBookmark(pInfo->aBookmark, pInfo->aBookmark); + pAction->SetInvisibleInPres(pInfo->bInvisibleInPresentation, TRUE); + pAction->SetVerb(pInfo->nVerb, pInfo->nVerb); + pAction->SetSecondEffect(pInfo->eSecondEffect, pInfo->eSecondEffect); + pAction->SetSecondSpeed(pInfo->eSecondSpeed, pInfo->eSecondSpeed); + pAction->SetSecondSoundOn(pInfo->bSecondSoundOn, pInfo->bSecondSoundOn); + pAction->SetSecondPlayFull(pInfo->bSecondPlayFull, pInfo->bSecondPlayFull); + pUndoGroup->AddAction(pAction); + + pInfo->bInvisibleInPresentation = TRUE; + } + else + { + + // Undo-Action mit alten und neuen Groessen erzeugen + SdAnimationPrmsUndoAction* pAction = new SdAnimationPrmsUndoAction + (pDoc, pObject, bCreated); + pAction->SetActive(pInfo->bActive, bActive); + pAction->SetEffect(pInfo->eEffect, eEffect); + pAction->SetTextEffect(pInfo->eTextEffect, eTextEffect); + pAction->SetSpeed(pInfo->eSpeed, eSpeed); + pAction->SetDim(pInfo->bDimPrevious, bFadeOut); + pAction->SetDimColor(pInfo->aDimColor, aFadeColor); + pAction->SetDimHide(pInfo->bDimHide, bInvisible); + pAction->SetSoundOn(pInfo->bSoundOn, bSoundOn); + pAction->SetSound(pInfo->aSoundFile, aSound); + pAction->SetBlueScreen(pInfo->aBlueScreen, aBlueScreen); + pAction->SetPlayFull(pInfo->bPlayFull, bPlayFull); + pAction->SetPathObj(pInfo->pPathObj, pPath); + pAction->SetClickAction(pInfo->eClickAction, eClickAction); + pAction->SetBookmark(pInfo->aBookmark, aBookmark); + pAction->SetInvisibleInPres(pInfo->bInvisibleInPresentation, + pInfo->bInvisibleInPresentation); + pAction->SetVerb(pInfo->nVerb, (USHORT)pInfo->aBookmark.ToInt32() ); + pAction->SetSecondEffect(pInfo->eSecondEffect, eSecondEffect); + pAction->SetSecondSpeed(pInfo->eSecondSpeed, eSecondSpeed); + pAction->SetSecondSoundOn(pInfo->bSecondSoundOn, bSecondSoundOn); + pAction->SetSecondPlayFull(pInfo->bSecondPlayFull,bSecondPlayFull); + pUndoGroup->AddAction(pAction); + + // neue Werte am Infoblock des Objekts eintragen + if (nAnimationSet == ATTR_SET) + pInfo->bActive = bActive; + + if (nEffectSet == ATTR_SET) + pInfo->eEffect = eEffect; + + if (nTextEffectSet == ATTR_SET) + pInfo->eTextEffect = eTextEffect; + + if (nSpeedSet == ATTR_SET) + pInfo->eSpeed = eSpeed; + + if (nFadeOutSet == ATTR_SET) + pInfo->bDimPrevious = bFadeOut; + + if (nFadeColorSet == ATTR_SET) + pInfo->aDimColor = aFadeColor; + + if (nInvisibleSet == ATTR_SET) + pInfo->bDimHide = bInvisible; + + if (nSoundOnSet == ATTR_SET) + pInfo->bSoundOn = bSoundOn; + + if (nSoundFileSet == ATTR_SET) + pInfo->aSoundFile = aSound; + + if (nBlueScreenSet == ATTR_SET) + pInfo->aBlueScreen = aBlueScreen; + + if (nPlayFullSet == ATTR_SET) + pInfo->bPlayFull = bPlayFull; + + if (nClickActionSet == ATTR_SET) + pInfo->eClickAction = eClickAction; + + if (nBookmarkSet == ATTR_SET) + pInfo->aBookmark = aBookmark; + + if (nSecondEffectSet == ATTR_SET) + pInfo->eSecondEffect = eSecondEffect; + + if (nSecondSpeedSet == ATTR_SET) + pInfo->eSecondSpeed = eSecondSpeed; + + if (nSecondSoundOnSet == ATTR_SET) + pInfo->bSecondSoundOn = bSecondSoundOn; + + if (nSecondPlayFullSet == ATTR_SET) + pInfo->bSecondPlayFull = bSecondPlayFull; + + // noch ein paar Spezialitaeten + if (eEffect == presentation::AnimationEffect_PATH && nEffectSet == ATTR_SET) + pInfo->SetPath(pPath); + + if (eClickAction == presentation::ClickAction_VERB) + pInfo->nVerb = (USHORT)aBookmark.ToInt32(); + } + } + // Undo Gruppe dem Undo Manager uebergeben + pUndoMgr->AddUndoAction(pUndoGroup); + pUndoMgr->LeaveListAction(); + + // Model geaendert + pDoc->SetChanged(); + + /*************************************************************** + |* ggfs. in Preview anzeigen + \**************************************************************/ + SfxChildWindow* pPreviewChildWindow = + pViewShell->GetViewFrame()->GetChildWindow(SdPreviewChildWindow::GetChildWindowId()); + if (pPreviewChildWindow) + { + SdPreviewWin* pPreviewWin = + (SdPreviewWin*)pPreviewChildWindow->GetWindow(); + if (pPreviewWin && pPreviewWin->GetDoc() == pDoc) + { + for (nObject = 0; nObject < nCount; nObject++) + { + SdrObject* pObject = rMarkList.GetMark(nObject)->GetObj(); + + pInfo = pDoc->GetAnimationInfo(pObject); + if (pInfo) + { + // das Pfadobjekt fuer 'an Kurve entlang'? + if (!(eEffect == presentation::AnimationEffect_PATH && + pObject == pPath)) + { + pPreviewWin->HideAndAnimateObject(pObject); + } + } + } + } + } + } + + // sieht man nicht, also muss an den Bindings nicht invalidiert werden +} + +/************************************************************************* +|* +|* Destruktor +|* +\************************************************************************/ + +FuObjectAnimationParameters::~FuObjectAnimationParameters() +{ +} + +/************************************************************************* +|* +|* Function aktivieren +|* +\************************************************************************/ + +void FuObjectAnimationParameters::Activate() +{ + FuPoor::Activate(); + +} + +/************************************************************************* +|* +|* Function deaktivieren +|* +\************************************************************************/ + +void FuObjectAnimationParameters::Deactivate() +{ + FuPoor::Deactivate(); +} + + |