1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sd.hxx" 26 27 28 #include "fuoaprms.hxx" 29 30 #include "sdattr.hxx" 31 #include <svx/svdpagv.hxx> 32 #include <editeng/colritem.hxx> 33 #include <svx/svdundo.hxx> 34 #include <vcl/group.hxx> 35 #include <vcl/fixed.hxx> 36 #include <sfx2/objsh.hxx> 37 #include <sfx2/request.hxx> 38 #include <sfx2/viewfrm.hxx> 39 #ifndef _MSGBOX_HXX //autogen 40 #include <vcl/msgbox.hxx> 41 #endif 42 #include <svl/aeitem.hxx> 43 #include "svx/xtable.hxx" 44 45 #include "strings.hrc" 46 #include "glob.hrc" 47 #include "drawdoc.hxx" 48 #include "ViewShell.hxx" 49 #include "anminfo.hxx" 50 #include "unoaprms.hxx" // Undo-Action 51 #include "sdundogr.hxx" // Undo Gruppe 52 #include "View.hxx" 53 #include "sdabstdlg.hxx" 54 #include "sdresid.hxx" 55 #include <vcl/salbtype.hxx> // FRound 56 #include <basegfx/polygon/b2dpolygon.hxx> 57 58 using namespace ::com::sun::star; 59 60 namespace sd { 61 62 TYPEINIT1( FuObjectAnimationParameters, FuPoor ); 63 64 #define ATTR_MISSING 0 // Attribut nicht verfuegbar 65 #define ATTR_MIXED 1 // Attribut uneindeutig (bei Mehrfachselektion) 66 #define ATTR_SET 2 // Attribut eindeutig 67 68 /************************************************************************* 69 |* 70 |* Konstruktor 71 |* 72 \************************************************************************/ 73 74 FuObjectAnimationParameters::FuObjectAnimationParameters ( 75 ViewShell* pViewSh, 76 ::sd::Window* pWin, 77 ::sd::View* pView, 78 SdDrawDocument* pDoc, 79 SfxRequest& rReq) 80 : FuPoor(pViewSh, pWin, pView, pDoc, rReq) 81 { 82 } 83 84 FunctionReference FuObjectAnimationParameters::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) 85 { 86 FunctionReference xFunc( new FuObjectAnimationParameters( pViewSh, pWin, pView, pDoc, rReq ) ); 87 xFunc->DoExecute(rReq); 88 return xFunc; 89 } 90 91 void FuObjectAnimationParameters::DoExecute( SfxRequest& rReq ) 92 { 93 ::svl::IUndoManager* pUndoMgr = mpViewShell->GetViewFrame()->GetObjectShell()->GetUndoManager(); 94 95 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); 96 sal_uLong nCount = rMarkList.GetMarkCount(); 97 sal_uLong nObject = 0; 98 99 short nAnimationSet = ATTR_MISSING; 100 short nEffectSet = ATTR_MISSING; 101 short nTextEffectSet = ATTR_MISSING; 102 short nSpeedSet = ATTR_MISSING; 103 short nFadeColorSet = ATTR_MISSING; 104 short nFadeOutSet = ATTR_MISSING; 105 short nInvisibleSet = ATTR_MISSING; 106 short nSoundOnSet = ATTR_MISSING; 107 short nSoundFileSet = ATTR_MISSING; 108 short nPlayFullSet = ATTR_MISSING; 109 short nClickActionSet = ATTR_MISSING; 110 short nBookmarkSet = ATTR_MISSING; 111 112 short nSecondEffectSet = ATTR_MISSING; 113 short nSecondSpeedSet = ATTR_MISSING; 114 short nSecondSoundOnSet = ATTR_MISSING; 115 short nSecondPlayFullSet = ATTR_MISSING; 116 117 118 119 // sal_Bool bDontKnow = sal_False; 120 121 // defaulten (fuer Undo-Aktion) 122 presentation::AnimationEffect eEffect = presentation::AnimationEffect_NONE; 123 presentation::AnimationEffect eTextEffect = presentation::AnimationEffect_NONE; 124 presentation::AnimationSpeed eSpeed = presentation::AnimationSpeed_MEDIUM; 125 sal_Bool bActive = sal_False; 126 sal_Bool bFadeOut = sal_False; 127 Color aFadeColor = COL_LIGHTGRAY; 128 sal_Bool bInvisible = sal_False; 129 sal_Bool bSoundOn = sal_False; 130 String aSound; 131 sal_Bool bPlayFull = sal_False; 132 presentation::ClickAction eClickAction = presentation::ClickAction_NONE; 133 String aBookmark; 134 135 presentation::AnimationEffect eSecondEffect = presentation::AnimationEffect_NONE; 136 presentation::AnimationSpeed eSecondSpeed = presentation::AnimationSpeed_MEDIUM; 137 sal_Bool bSecondSoundOn = sal_False; 138 sal_Bool bSecondPlayFull = sal_False; 139 140 141 SdAnimationInfo* pInfo; 142 SdrMark* pMark; 143 144 // das erste Objekt untersuchen 145 pMark = rMarkList.GetMark(0); 146 pInfo = mpDoc->GetAnimationInfo(pMark->GetMarkedSdrObj()); 147 if( pInfo ) 148 { 149 bActive = pInfo->mbActive; 150 nAnimationSet = ATTR_SET; 151 152 eEffect = pInfo->meEffect; 153 nEffectSet = ATTR_SET; 154 155 eTextEffect = pInfo->meTextEffect; 156 nTextEffectSet = ATTR_SET; 157 158 eSpeed = pInfo->meSpeed; 159 nSpeedSet = ATTR_SET; 160 161 bFadeOut = pInfo->mbDimPrevious; 162 nFadeOutSet = ATTR_SET; 163 164 aFadeColor = pInfo->maDimColor; 165 nFadeColorSet = ATTR_SET; 166 167 bInvisible = pInfo->mbDimHide; 168 nInvisibleSet = ATTR_SET; 169 170 bSoundOn = pInfo->mbSoundOn; 171 nSoundOnSet = ATTR_SET; 172 173 aSound = pInfo->maSoundFile; 174 nSoundFileSet = ATTR_SET; 175 176 bPlayFull = pInfo->mbPlayFull; 177 nPlayFullSet = ATTR_SET; 178 179 eClickAction = pInfo->meClickAction; 180 nClickActionSet = ATTR_SET; 181 182 aBookmark = pInfo->GetBookmark(); 183 nBookmarkSet = ATTR_SET; 184 185 eSecondEffect = pInfo->meSecondEffect; 186 nSecondEffectSet = ATTR_SET; 187 188 eSecondSpeed = pInfo->meSecondSpeed; 189 nSecondSpeedSet = ATTR_SET; 190 191 bSecondSoundOn = pInfo->mbSecondSoundOn; 192 nSecondSoundOnSet = ATTR_SET; 193 194 bSecondPlayFull = pInfo->mbSecondPlayFull; 195 nSecondPlayFullSet = ATTR_SET; 196 } 197 198 // ggfs. weitere Objekte untersuchen 199 for( nObject = 1; nObject < nCount; nObject++ ) 200 { 201 pMark = rMarkList.GetMark( nObject ); 202 SdrObject* pObject = pMark->GetMarkedSdrObj(); 203 pInfo = mpDoc->GetAnimationInfo(pObject); 204 if( pInfo ) 205 { 206 if( bActive != pInfo->mbActive ) 207 nAnimationSet = ATTR_MIXED; 208 209 if( eEffect != pInfo->meEffect ) 210 nEffectSet = ATTR_MIXED; 211 212 if( eTextEffect != pInfo->meTextEffect ) 213 nTextEffectSet = ATTR_MIXED; 214 215 if( eSpeed != pInfo->meSpeed ) 216 nSpeedSet = ATTR_MIXED; 217 218 if( bFadeOut != pInfo->mbDimPrevious ) 219 nFadeOutSet = ATTR_MIXED; 220 221 if( aFadeColor != pInfo->maDimColor ) 222 nFadeColorSet = ATTR_MIXED; 223 224 if( bInvisible != pInfo->mbDimHide ) 225 nInvisibleSet = ATTR_MIXED; 226 227 if( bSoundOn != pInfo->mbSoundOn ) 228 nSoundOnSet = ATTR_MIXED; 229 230 if( aSound != pInfo->maSoundFile ) 231 nSoundFileSet = ATTR_MIXED; 232 233 if( bPlayFull != pInfo->mbPlayFull ) 234 nPlayFullSet = ATTR_MIXED; 235 236 if( eClickAction != pInfo->meClickAction ) 237 nClickActionSet = ATTR_MIXED; 238 239 if( aBookmark != pInfo->GetBookmark() ) 240 nBookmarkSet = ATTR_MIXED; 241 242 if( eSecondEffect != pInfo->meSecondEffect ) 243 nSecondEffectSet = ATTR_MIXED; 244 245 if( eSecondSpeed != pInfo->meSecondSpeed ) 246 nSecondSpeedSet = ATTR_MIXED; 247 248 if( bSecondSoundOn != pInfo->mbSecondSoundOn ) 249 nSecondSoundOnSet = ATTR_MIXED; 250 251 if( bSecondPlayFull != pInfo->mbSecondPlayFull ) 252 nSecondPlayFullSet = ATTR_MIXED; 253 } 254 else 255 { 256 if (nAnimationSet == ATTR_SET && bActive == sal_True) 257 nAnimationSet = ATTR_MIXED; 258 259 if (nEffectSet == ATTR_SET && eEffect != presentation::AnimationEffect_NONE) 260 nEffectSet = ATTR_MIXED; 261 262 if (nTextEffectSet == ATTR_SET && eTextEffect != presentation::AnimationEffect_NONE) 263 nTextEffectSet = ATTR_MIXED; 264 265 if (nSpeedSet == ATTR_SET) 266 nSpeedSet = ATTR_MIXED; 267 268 if (nFadeOutSet == ATTR_SET && bFadeOut == sal_True) 269 nFadeOutSet = ATTR_MIXED; 270 271 if (nFadeColorSet == ATTR_SET) 272 nFadeColorSet = ATTR_MIXED; 273 274 if (nInvisibleSet == ATTR_SET && bInvisible == sal_True) 275 nInvisibleSet = ATTR_MIXED; 276 277 if (nSoundOnSet == ATTR_SET && bSoundOn == sal_True) 278 nSoundOnSet = ATTR_MIXED; 279 280 if (nSoundFileSet == ATTR_SET) 281 nSoundFileSet = ATTR_MIXED; 282 283 if (nPlayFullSet == ATTR_SET && bPlayFull == sal_True) 284 nPlayFullSet = ATTR_MIXED; 285 286 if (nClickActionSet == ATTR_SET && eClickAction != presentation::ClickAction_NONE) 287 nClickActionSet = ATTR_MIXED; 288 289 if (nBookmarkSet == ATTR_SET) 290 nBookmarkSet = ATTR_MIXED; 291 292 if (nSecondEffectSet == ATTR_SET && eSecondEffect != presentation::AnimationEffect_NONE) 293 nSecondEffectSet = ATTR_MIXED; 294 295 if (nSecondSpeedSet == ATTR_SET) 296 nSecondSpeedSet = ATTR_MIXED; 297 298 if (nSecondSoundOnSet == ATTR_SET && bSecondSoundOn == sal_True) 299 nSecondSoundOnSet = ATTR_MIXED; 300 301 if (nSecondPlayFullSet == ATTR_SET && bSecondPlayFull == sal_True) 302 nSecondPlayFullSet = ATTR_MIXED; 303 } 304 } 305 306 // Genau zwei Objekte mit Pfadeffekt? Dann gilt nur die Animationsinfo 307 // am bewegten Objekt. 308 if (nCount == 2) 309 { 310 SdrObject* pObject1 = rMarkList.GetMark(0)->GetMarkedSdrObj(); 311 SdrObject* pObject2 = rMarkList.GetMark(1)->GetMarkedSdrObj(); 312 SdrObjKind eKind1 = (SdrObjKind)pObject1->GetObjIdentifier(); 313 SdrObjKind eKind2 = (SdrObjKind)pObject2->GetObjIdentifier(); 314 SdAnimationInfo* pInfo1 = mpDoc->GetAnimationInfo(pObject1); 315 SdAnimationInfo* pInfo2 = mpDoc->GetAnimationInfo(pObject2); 316 pInfo = NULL; 317 318 if (pObject1->GetObjInventor() == SdrInventor && 319 ((eKind1 == OBJ_LINE) || // 2-Punkt-Linie 320 (eKind1 == OBJ_PLIN) || // Polygon 321 (eKind1 == OBJ_PATHLINE)) && // Bezier-Kurve 322 (pInfo2 && pInfo2->meEffect == presentation::AnimationEffect_PATH)) 323 { 324 pInfo = pInfo2; 325 } 326 327 if (pObject2->GetObjInventor() == SdrInventor && 328 ((eKind2 == OBJ_LINE) || // 2-Punkt-Linie 329 (eKind2 == OBJ_PLIN) || // Polygon 330 (eKind2 == OBJ_PATHLINE)) && // Bezier-Kurve 331 (pInfo1 && pInfo1->meEffect == presentation::AnimationEffect_PATH)) 332 { 333 pInfo = pInfo1; 334 } 335 336 if (pInfo) 337 { 338 bActive = pInfo->mbActive; nAnimationSet = ATTR_SET; 339 eEffect = pInfo->meEffect; nEffectSet = ATTR_SET; 340 eTextEffect = pInfo->meTextEffect; nTextEffectSet = ATTR_SET; 341 eSpeed = pInfo->meSpeed; nSpeedSet = ATTR_SET; 342 bFadeOut = pInfo->mbDimPrevious; nFadeOutSet = ATTR_SET; 343 aFadeColor = pInfo->maDimColor; nFadeColorSet = ATTR_SET; 344 bInvisible = pInfo->mbDimHide; nInvisibleSet = ATTR_SET; 345 bSoundOn = pInfo->mbSoundOn; nSoundOnSet = ATTR_SET; 346 aSound = pInfo->maSoundFile; nSoundFileSet = ATTR_SET; 347 bPlayFull = pInfo->mbPlayFull; nPlayFullSet = ATTR_SET; 348 eClickAction = pInfo->meClickAction; nClickActionSet = ATTR_SET; 349 aBookmark = pInfo->GetBookmark(); nBookmarkSet = ATTR_SET; 350 eSecondEffect = pInfo->meSecondEffect; nSecondEffectSet = ATTR_SET; 351 eSecondSpeed = pInfo->meSecondSpeed; nSecondSpeedSet = ATTR_SET; 352 bSecondSoundOn = pInfo->mbSecondSoundOn; nSecondSoundOnSet = ATTR_SET; 353 bSecondPlayFull = pInfo->mbSecondPlayFull; nSecondPlayFullSet = ATTR_SET; 354 } 355 } 356 357 const SfxItemSet* pArgs = rReq.GetArgs(); 358 359 if(!pArgs) 360 { 361 // ItemSet fuer Dialog fuellen 362 SfxItemSet aSet(mpDoc->GetPool(), ATTR_ANIMATION_START, ATTR_ACTION_END); 363 364 // das Set besetzen 365 if (nAnimationSet == ATTR_SET) 366 aSet.Put( SfxBoolItem( ATTR_ANIMATION_ACTIVE, bActive)); 367 else if (nAnimationSet == ATTR_MIXED) 368 aSet.InvalidateItem(ATTR_ANIMATION_ACTIVE); 369 else 370 aSet.Put(SfxBoolItem(ATTR_ANIMATION_ACTIVE, sal_False)); 371 372 if (nEffectSet == ATTR_SET) 373 aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_EFFECT, (sal_uInt16)eEffect)); 374 else if (nEffectSet == ATTR_MIXED) 375 aSet.InvalidateItem( ATTR_ANIMATION_EFFECT ); 376 else 377 aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_EFFECT, presentation::AnimationEffect_NONE)); 378 379 if (nTextEffectSet == ATTR_SET) 380 aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_TEXTEFFECT, (sal_uInt16)eTextEffect)); 381 else if (nTextEffectSet == ATTR_MIXED) 382 aSet.InvalidateItem( ATTR_ANIMATION_TEXTEFFECT ); 383 else 384 aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_TEXTEFFECT, presentation::AnimationEffect_NONE)); 385 386 if (nSpeedSet == ATTR_SET) 387 aSet.Put(SfxAllEnumItem(ATTR_ANIMATION_SPEED, (sal_uInt16)eSpeed)); 388 else 389 aSet.InvalidateItem(ATTR_ANIMATION_SPEED); 390 391 if (nFadeOutSet == ATTR_SET) 392 aSet.Put(SfxBoolItem(ATTR_ANIMATION_FADEOUT, bFadeOut)); 393 else if (nFadeOutSet == ATTR_MIXED) 394 aSet.InvalidateItem(ATTR_ANIMATION_FADEOUT); 395 else 396 aSet.Put(SfxBoolItem(ATTR_ANIMATION_FADEOUT, sal_False)); 397 398 if (nFadeColorSet == ATTR_SET) 399 aSet.Put(SvxColorItem(aFadeColor, ATTR_ANIMATION_COLOR)); 400 else if (nFadeColorSet == ATTR_MIXED) 401 aSet.InvalidateItem(ATTR_ANIMATION_COLOR); 402 else 403 aSet.Put(SvxColorItem(RGB_Color(COL_LIGHTGRAY), ATTR_ANIMATION_COLOR)); 404 405 if (nInvisibleSet == ATTR_SET) 406 aSet.Put(SfxBoolItem(ATTR_ANIMATION_INVISIBLE, bInvisible)); 407 else if (nInvisibleSet == ATTR_MIXED) 408 aSet.InvalidateItem(ATTR_ANIMATION_INVISIBLE); 409 else 410 aSet.Put(SfxBoolItem(ATTR_ANIMATION_INVISIBLE, sal_False)); 411 412 if (nSoundOnSet == ATTR_SET) 413 aSet.Put(SfxBoolItem(ATTR_ANIMATION_SOUNDON, bSoundOn)); 414 else if (nSoundOnSet == ATTR_MIXED) 415 aSet.InvalidateItem(ATTR_ANIMATION_SOUNDON); 416 else 417 aSet.Put(SfxBoolItem(ATTR_ANIMATION_SOUNDON, sal_False)); 418 419 if (nSoundFileSet == ATTR_SET) 420 aSet.Put(SfxStringItem(ATTR_ANIMATION_SOUNDFILE, aSound)); 421 else 422 aSet.InvalidateItem(ATTR_ANIMATION_SOUNDFILE); 423 424 if (nPlayFullSet == ATTR_SET) 425 aSet.Put(SfxBoolItem(ATTR_ANIMATION_PLAYFULL, bPlayFull)); 426 else if (nPlayFullSet == ATTR_MIXED) 427 aSet.InvalidateItem(ATTR_ANIMATION_PLAYFULL); 428 else 429 aSet.Put(SfxBoolItem(ATTR_ANIMATION_PLAYFULL, sal_False)); 430 431 if (nClickActionSet == ATTR_SET) 432 aSet.Put(SfxAllEnumItem(ATTR_ACTION, (sal_uInt16)eClickAction)); 433 else if (nClickActionSet == ATTR_MIXED) 434 aSet.InvalidateItem(ATTR_ACTION); 435 else 436 aSet.Put(SfxAllEnumItem(ATTR_ACTION, presentation::ClickAction_NONE)); 437 438 if (nBookmarkSet == ATTR_SET) 439 aSet.Put(SfxStringItem(ATTR_ACTION_FILENAME, aBookmark)); 440 else 441 aSet.InvalidateItem(ATTR_ACTION_FILENAME); 442 443 if (nSecondEffectSet == ATTR_SET) 444 aSet.Put(SfxAllEnumItem(ATTR_ACTION_EFFECT, (sal_uInt16)eSecondEffect)); 445 else if (nSecondEffectSet == ATTR_MIXED) 446 aSet.InvalidateItem( ATTR_ACTION_EFFECT ); 447 else 448 aSet.Put(SfxAllEnumItem(ATTR_ACTION_EFFECT, presentation::AnimationEffect_NONE)); 449 450 if (nSecondSpeedSet == ATTR_SET) 451 aSet.Put(SfxAllEnumItem(ATTR_ACTION_EFFECTSPEED, (sal_uInt16)eSecondSpeed)); 452 else 453 aSet.InvalidateItem(ATTR_ACTION_EFFECTSPEED); 454 455 if (nSecondSoundOnSet == ATTR_SET) 456 aSet.Put(SfxBoolItem(ATTR_ACTION_SOUNDON, bSecondSoundOn)); 457 else if (nSecondSoundOnSet == ATTR_MIXED) 458 aSet.InvalidateItem(ATTR_ACTION_SOUNDON); 459 else 460 aSet.Put(SfxBoolItem(ATTR_ACTION_SOUNDON, sal_False)); 461 462 if (nSecondPlayFullSet == ATTR_SET) 463 aSet.Put(SfxBoolItem(ATTR_ACTION_PLAYFULL, bSecondPlayFull)); 464 else if (nPlayFullSet == ATTR_MIXED) 465 aSet.InvalidateItem(ATTR_ACTION_PLAYFULL); 466 else 467 aSet.Put(SfxBoolItem(ATTR_ACTION_PLAYFULL, sal_False)); 468 469 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); 470 SfxAbstractDialog* pDlg = pFact ? pFact->CreatSdActionDialog( NULL, &aSet, mpView ) : 0; 471 472 sal_uInt16 nResult = pDlg ? pDlg->Execute() : RET_CANCEL; 473 474 if( nResult == RET_OK ) 475 { 476 rReq.Done( *( pDlg->GetOutputItemSet() ) ); 477 pArgs = rReq.GetArgs(); 478 } 479 480 delete pDlg; 481 482 if( nResult != RET_OK ) 483 return; 484 } 485 486 // Auswertung des ItemSets 487 if (pArgs->GetItemState(ATTR_ANIMATION_ACTIVE) == SFX_ITEM_SET) 488 { 489 bActive = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_ACTIVE)).GetValue(); 490 nAnimationSet = ATTR_SET; 491 } 492 else 493 nAnimationSet = ATTR_MISSING; 494 495 if (pArgs->GetItemState(ATTR_ANIMATION_EFFECT) == SFX_ITEM_SET) 496 { 497 eEffect = (presentation::AnimationEffect)((SfxAllEnumItem&) pArgs-> 498 Get(ATTR_ANIMATION_EFFECT)).GetValue(); 499 nEffectSet = ATTR_SET; 500 } 501 else 502 nEffectSet = ATTR_MISSING; 503 504 if (pArgs->GetItemState(ATTR_ANIMATION_TEXTEFFECT) == SFX_ITEM_SET) 505 { 506 eTextEffect = (presentation::AnimationEffect)((SfxAllEnumItem&) pArgs-> 507 Get(ATTR_ANIMATION_TEXTEFFECT)).GetValue(); 508 nTextEffectSet = ATTR_SET; 509 } 510 else 511 nTextEffectSet = ATTR_MISSING; 512 513 if (pArgs->GetItemState(ATTR_ANIMATION_SPEED) == SFX_ITEM_SET) 514 { 515 eSpeed = (presentation::AnimationSpeed)((SfxAllEnumItem&) pArgs-> 516 Get(ATTR_ANIMATION_SPEED)).GetValue(); 517 nSpeedSet = ATTR_SET; 518 } 519 else 520 nSpeedSet = ATTR_MISSING; 521 522 if (pArgs->GetItemState(ATTR_ANIMATION_FADEOUT) == SFX_ITEM_SET) 523 { 524 bFadeOut = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_FADEOUT)).GetValue(); 525 nFadeOutSet = ATTR_SET; 526 } 527 else 528 nFadeOutSet = ATTR_MISSING; 529 530 if (pArgs->GetItemState(ATTR_ANIMATION_INVISIBLE) == SFX_ITEM_SET) 531 { 532 bInvisible = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_INVISIBLE)).GetValue(); 533 nInvisibleSet = ATTR_SET; 534 } 535 else 536 nInvisibleSet = ATTR_MISSING; 537 538 if (pArgs->GetItemState(ATTR_ANIMATION_SOUNDON) == SFX_ITEM_SET) 539 { 540 bSoundOn = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_SOUNDON)).GetValue(); 541 nSoundOnSet = ATTR_SET; 542 } 543 else 544 nSoundOnSet = ATTR_MISSING; 545 546 if (pArgs->GetItemState(ATTR_ANIMATION_SOUNDFILE) == SFX_ITEM_SET) 547 { 548 aSound = ((SfxStringItem&)pArgs->Get(ATTR_ANIMATION_SOUNDFILE)).GetValue(); 549 nSoundFileSet = ATTR_SET; 550 } 551 else 552 nSoundFileSet = ATTR_MISSING; 553 554 if (pArgs->GetItemState(ATTR_ANIMATION_COLOR) == SFX_ITEM_SET) 555 { 556 aFadeColor = ((SvxColorItem&)pArgs->Get(ATTR_ANIMATION_COLOR)).GetValue(); 557 nFadeColorSet = ATTR_SET; 558 } 559 else 560 nFadeColorSet = ATTR_MISSING; 561 562 if (pArgs->GetItemState(ATTR_ANIMATION_PLAYFULL) == SFX_ITEM_SET) 563 { 564 bPlayFull = ((SfxBoolItem&)pArgs->Get(ATTR_ANIMATION_PLAYFULL)).GetValue(); 565 nPlayFullSet = ATTR_SET; 566 } 567 else 568 nPlayFullSet = ATTR_MISSING; 569 570 if (pArgs->GetItemState(ATTR_ACTION) == SFX_ITEM_SET) 571 { 572 eClickAction = (presentation::ClickAction)((SfxAllEnumItem&)pArgs-> 573 Get(ATTR_ACTION)).GetValue(); 574 nClickActionSet = ATTR_SET; 575 } 576 else 577 nClickActionSet = ATTR_MISSING; 578 579 if (pArgs->GetItemState(ATTR_ACTION_FILENAME) == SFX_ITEM_SET) 580 { 581 aBookmark = ((SfxStringItem&)pArgs-> 582 Get(ATTR_ACTION_FILENAME)).GetValue(); 583 nBookmarkSet = ATTR_SET; 584 } 585 else 586 nBookmarkSet = ATTR_MISSING; 587 588 if (pArgs->GetItemState(ATTR_ACTION_EFFECT) == SFX_ITEM_SET) 589 { 590 eSecondEffect = (presentation::AnimationEffect)((SfxAllEnumItem&) pArgs-> 591 Get(ATTR_ACTION_EFFECT)).GetValue(); 592 nSecondEffectSet = ATTR_SET; 593 } 594 else 595 nSecondEffectSet = ATTR_MISSING; 596 597 if (pArgs->GetItemState(ATTR_ACTION_EFFECTSPEED) == SFX_ITEM_SET) 598 { 599 eSecondSpeed = (presentation::AnimationSpeed)((SfxAllEnumItem&) pArgs-> 600 Get(ATTR_ACTION_EFFECTSPEED)).GetValue(); 601 nSecondSpeedSet = ATTR_SET; 602 } 603 else 604 nSecondSpeedSet = ATTR_MISSING; 605 606 if (pArgs->GetItemState(ATTR_ACTION_SOUNDON) == SFX_ITEM_SET) 607 { 608 bSecondSoundOn = ((SfxBoolItem&)pArgs->Get(ATTR_ACTION_SOUNDON)).GetValue(); 609 nSecondSoundOnSet = ATTR_SET; 610 } 611 else 612 nSecondSoundOnSet = ATTR_MISSING; 613 614 if (pArgs->GetItemState(ATTR_ACTION_PLAYFULL) == SFX_ITEM_SET) 615 { 616 bSecondPlayFull = ((SfxBoolItem&)pArgs->Get(ATTR_ACTION_PLAYFULL)).GetValue(); 617 nSecondPlayFullSet = ATTR_SET; 618 } 619 else 620 nSecondPlayFullSet = ATTR_MISSING; 621 622 // Wenn irgendwelche Attribute ausgewaehlt wurden 623 if (nEffectSet == ATTR_SET || 624 nTextEffectSet == ATTR_SET || 625 nSpeedSet == ATTR_SET || 626 nAnimationSet == ATTR_SET || 627 nFadeOutSet == ATTR_SET || 628 nFadeColorSet == ATTR_SET || 629 nInvisibleSet == ATTR_SET || 630 nSoundOnSet == ATTR_SET || 631 nSoundFileSet == ATTR_SET || 632 nPlayFullSet == ATTR_SET || 633 nClickActionSet == ATTR_SET || 634 nBookmarkSet == ATTR_SET || 635 nSecondEffectSet == ATTR_SET || 636 nSecondSpeedSet == ATTR_SET || 637 nSecondSoundOnSet == ATTR_SET || 638 nSecondPlayFullSet == ATTR_SET) 639 { 640 // String fuer Undo-Group und List-Action 641 String aComment(SdResId(STR_UNDO_ANIMATION)); 642 643 // bei 'an Kurve entlang' gibt's noch eine extra UndoAction, darum 644 // hier klammern 645 pUndoMgr->EnterListAction(aComment, aComment); 646 647 // Undo Gruppe erzeugen 648 SdUndoGroup* pUndoGroup = new SdUndoGroup(mpDoc); 649 pUndoGroup->SetComment(aComment); 650 651 652 // fuer den Pfad-Effekt einige Dinge merken 653 SdrObject* pRunningObj = NULL; 654 SdrPathObj* pPath = NULL; 655 if (eEffect == presentation::AnimationEffect_PATH && nEffectSet == ATTR_SET) 656 { 657 DBG_ASSERT(nCount == 2, "dieser Effekt braucht genau 2 selektierte Objekte"); 658 SdrObject* pObject1 = rMarkList.GetMark(0)->GetMarkedSdrObj(); 659 SdrObject* pObject2 = rMarkList.GetMark(1)->GetMarkedSdrObj(); 660 SdrObjKind eKind1 = (SdrObjKind)pObject1->GetObjIdentifier(); 661 SdrObjKind eKind2 = (SdrObjKind)pObject2->GetObjIdentifier(); 662 663 if (pObject1->GetObjInventor() == SdrInventor && 664 ((eKind1 == OBJ_LINE) || // 2-Punkt-Linie 665 (eKind1 == OBJ_PLIN) || // Polygon 666 (eKind1 == OBJ_PATHLINE))) // Bezier-Kurve 667 { 668 pPath = (SdrPathObj*)pObject1; 669 pRunningObj = pObject2; 670 } 671 672 if (pObject2->GetObjInventor() == SdrInventor && 673 ((eKind2 == OBJ_LINE) || // 2-Punkt-Linie 674 (eKind2 == OBJ_PLIN) || // Polygon 675 (eKind2 == OBJ_PATHLINE))) // Bezier-Kurve 676 { 677 pPath = (SdrPathObj*)pObject2; 678 pRunningObj = pObject1; 679 } 680 681 DBG_ASSERT(pPath, "keine Kurve gefunden"); 682 683 684 // das laufende Objekt auf das Kurvenende schieben 685 Rectangle aCurRect(pRunningObj->GetLogicRect()); 686 Point aCurCenter(aCurRect.Center()); 687 const ::basegfx::B2DPolyPolygon& rPolyPolygon = pPath->GetPathPoly(); 688 sal_uInt32 nNoOfPolygons(rPolyPolygon.count()); 689 const ::basegfx::B2DPolygon aPolygon(rPolyPolygon.getB2DPolygon(nNoOfPolygons - 1L)); 690 sal_uInt32 nPoints(aPolygon.count()); 691 const ::basegfx::B2DPoint aNewB2DCenter(aPolygon.getB2DPoint(nPoints - 1L)); 692 const Point aNewCenter(FRound(aNewB2DCenter.getX()), FRound(aNewB2DCenter.getY())); 693 Size aDistance(aNewCenter.X() - aCurCenter.X(), aNewCenter.Y() - aCurCenter.Y()); 694 pRunningObj->Move(aDistance); 695 696 pUndoMgr->AddUndoAction(mpDoc->GetSdrUndoFactory().CreateUndoMoveObject( *pRunningObj, aDistance)); 697 } 698 699 for (nObject = 0; nObject < nCount; nObject++) 700 { 701 SdrObject* pObject = rMarkList.GetMark(nObject)->GetMarkedSdrObj(); 702 703 pInfo = mpDoc->GetAnimationInfo(pObject); 704 705 sal_Bool bCreated = sal_False; 706 if( !pInfo ) 707 { 708 pInfo = SdDrawDocument::GetShapeUserData(*pObject,true); 709 bCreated = sal_True; 710 } 711 712 // das Pfadobjekt fuer 'an Kurve entlang'? 713 if (eEffect == presentation::AnimationEffect_PATH && pObject == pPath) 714 { 715 SdAnimationPrmsUndoAction* pAction = new SdAnimationPrmsUndoAction 716 (mpDoc, pObject, bCreated); 717 pAction->SetActive(pInfo->mbActive, pInfo->mbActive); 718 pAction->SetEffect(pInfo->meEffect, pInfo->meEffect); 719 pAction->SetTextEffect(pInfo->meTextEffect, pInfo->meTextEffect); 720 pAction->SetSpeed(pInfo->meSpeed, pInfo->meSpeed); 721 pAction->SetDim(pInfo->mbDimPrevious, pInfo->mbDimPrevious); 722 pAction->SetDimColor(pInfo->maDimColor, pInfo->maDimColor); 723 pAction->SetDimHide(pInfo->mbDimHide, pInfo->mbDimHide); 724 pAction->SetSoundOn(pInfo->mbSoundOn, pInfo->mbSoundOn); 725 pAction->SetSound(pInfo->maSoundFile, pInfo->maSoundFile); 726 pAction->SetPlayFull(pInfo->mbPlayFull, pInfo->mbPlayFull); 727 // pAction->SetPathObj(pInfo->mpPathObj, pInfo->mpPathObj); 728 pAction->SetClickAction(pInfo->meClickAction, pInfo->meClickAction); 729 pAction->SetBookmark(pInfo->GetBookmark(), pInfo->GetBookmark()); 730 // pAction->SetInvisibleInPres(pInfo->mbInvisibleInPresentation, sal_True); 731 pAction->SetVerb(pInfo->mnVerb, pInfo->mnVerb); 732 pAction->SetSecondEffect(pInfo->meSecondEffect, pInfo->meSecondEffect); 733 pAction->SetSecondSpeed(pInfo->meSecondSpeed, pInfo->meSecondSpeed); 734 pAction->SetSecondSoundOn(pInfo->mbSecondSoundOn, pInfo->mbSecondSoundOn); 735 pAction->SetSecondPlayFull(pInfo->mbSecondPlayFull, pInfo->mbSecondPlayFull); 736 pUndoGroup->AddAction(pAction); 737 738 // pInfo->mbInvisibleInPresentation = sal_True; 739 } 740 else 741 { 742 743 // Undo-Action mit alten und neuen Groessen erzeugen 744 SdAnimationPrmsUndoAction* pAction = new SdAnimationPrmsUndoAction 745 (mpDoc, pObject, bCreated); 746 pAction->SetActive(pInfo->mbActive, bActive); 747 pAction->SetEffect(pInfo->meEffect, eEffect); 748 pAction->SetTextEffect(pInfo->meTextEffect, eTextEffect); 749 pAction->SetSpeed(pInfo->meSpeed, eSpeed); 750 pAction->SetDim(pInfo->mbDimPrevious, bFadeOut); 751 pAction->SetDimColor(pInfo->maDimColor, aFadeColor); 752 pAction->SetDimHide(pInfo->mbDimHide, bInvisible); 753 pAction->SetSoundOn(pInfo->mbSoundOn, bSoundOn); 754 pAction->SetSound(pInfo->maSoundFile, aSound); 755 pAction->SetPlayFull(pInfo->mbPlayFull, bPlayFull); 756 pAction->SetPathObj(pInfo->mpPathObj, pPath); 757 pAction->SetClickAction(pInfo->meClickAction, eClickAction); 758 pAction->SetBookmark(pInfo->GetBookmark(), aBookmark); 759 // pAction->SetInvisibleInPres(pInfo->mbInvisibleInPresentation, 760 // pInfo->mbInvisibleInPresentation); 761 pAction->SetVerb(pInfo->mnVerb, (sal_uInt16)pInfo->GetBookmark().ToInt32() ); 762 pAction->SetSecondEffect(pInfo->meSecondEffect, eSecondEffect); 763 pAction->SetSecondSpeed(pInfo->meSecondSpeed, eSecondSpeed); 764 pAction->SetSecondSoundOn(pInfo->mbSecondSoundOn, bSecondSoundOn); 765 pAction->SetSecondPlayFull(pInfo->mbSecondPlayFull,bSecondPlayFull); 766 pUndoGroup->AddAction(pAction); 767 768 // neue Werte am Infoblock des Objekts eintragen 769 if (nAnimationSet == ATTR_SET) 770 pInfo->mbActive = bActive; 771 772 if (nEffectSet == ATTR_SET) 773 pInfo->meEffect = eEffect; 774 775 if (nTextEffectSet == ATTR_SET) 776 pInfo->meTextEffect = eTextEffect; 777 778 if (nSpeedSet == ATTR_SET) 779 pInfo->meSpeed = eSpeed; 780 781 if (nFadeOutSet == ATTR_SET) 782 pInfo->mbDimPrevious = bFadeOut; 783 784 if (nFadeColorSet == ATTR_SET) 785 pInfo->maDimColor = aFadeColor; 786 787 if (nInvisibleSet == ATTR_SET) 788 pInfo->mbDimHide = bInvisible; 789 790 if (nSoundOnSet == ATTR_SET) 791 pInfo->mbSoundOn = bSoundOn; 792 793 if (nSoundFileSet == ATTR_SET) 794 pInfo->maSoundFile = aSound; 795 796 if (nPlayFullSet == ATTR_SET) 797 pInfo->mbPlayFull = bPlayFull; 798 799 if (nClickActionSet == ATTR_SET) 800 pInfo->meClickAction = eClickAction; 801 802 if (nBookmarkSet == ATTR_SET) 803 pInfo->SetBookmark( aBookmark ); 804 805 if (nSecondEffectSet == ATTR_SET) 806 pInfo->meSecondEffect = eSecondEffect; 807 808 if (nSecondSpeedSet == ATTR_SET) 809 pInfo->meSecondSpeed = eSecondSpeed; 810 811 if (nSecondSoundOnSet == ATTR_SET) 812 pInfo->mbSecondSoundOn = bSecondSoundOn; 813 814 if (nSecondPlayFullSet == ATTR_SET) 815 pInfo->mbSecondPlayFull = bSecondPlayFull; 816 817 // noch ein paar Spezialitaeten 818 // if (eEffect == presentation::AnimationEffect_PATH && nEffectSet == ATTR_SET) 819 // pInfo->mSetPath(pPath); 820 821 if (eClickAction == presentation::ClickAction_VERB) 822 pInfo->mnVerb = (sal_uInt16)aBookmark.ToInt32(); 823 } 824 } 825 // Undo Gruppe dem Undo Manager uebergeben 826 pUndoMgr->AddUndoAction(pUndoGroup); 827 pUndoMgr->LeaveListAction(); 828 829 // Model geaendert 830 mpDoc->SetChanged(); 831 } 832 // sieht man nicht, also muss an den Bindings nicht invalidiert werden 833 } 834 835 } // end of namespace sd 836