1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sd.hxx" 30*cdf0e10cSrcweir #include <com/sun/star/animations/XAnimationNode.hpp> 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include "SlideTransitionPane.hxx" 33*cdf0e10cSrcweir #include "SlideTransitionPane.hrc" 34*cdf0e10cSrcweir #include "CustomAnimation.hrc" 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include "TransitionPreset.hxx" 37*cdf0e10cSrcweir #include "sdresid.hxx" 38*cdf0e10cSrcweir #include "ViewShellBase.hxx" 39*cdf0e10cSrcweir #include "DrawDocShell.hxx" 40*cdf0e10cSrcweir #include "SlideSorterViewShell.hxx" 41*cdf0e10cSrcweir #include "drawdoc.hxx" 42*cdf0e10cSrcweir #include "filedlg.hxx" 43*cdf0e10cSrcweir #include "strings.hrc" 44*cdf0e10cSrcweir #include "DrawController.hxx" 45*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir #ifndef _SVT_CONTROLDIMS_HRC_ 48*cdf0e10cSrcweir #include <svtools/controldims.hrc> 49*cdf0e10cSrcweir #endif 50*cdf0e10cSrcweir #include <svx/gallery.hxx> 51*cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 52*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 53*cdf0e10cSrcweir #include <tools/urlobj.hxx> 54*cdf0e10cSrcweir #include "DrawViewShell.hxx" 55*cdf0e10cSrcweir #include "slideshow.hxx" 56*cdf0e10cSrcweir #include "drawview.hxx" 57*cdf0e10cSrcweir #include "sdundogr.hxx" 58*cdf0e10cSrcweir #include "undoanim.hxx" 59*cdf0e10cSrcweir #include "optsitem.hxx" 60*cdf0e10cSrcweir #include "sddll.hxx" 61*cdf0e10cSrcweir #include "framework/FrameworkHelper.hxx" 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir #include "DialogListBox.hxx" 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir #include <algorithm> 66*cdf0e10cSrcweir #include <memory> 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir using namespace ::com::sun::star; 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 72*cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 73*cdf0e10cSrcweir using ::rtl::OUString; 74*cdf0e10cSrcweir using ::com::sun::star::uno::RuntimeException; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir using ::sd::framework::FrameworkHelper; 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir // ____________________________ 79*cdf0e10cSrcweir // 80*cdf0e10cSrcweir // ::sd::impl::TransitionEffect 81*cdf0e10cSrcweir // ____________________________ 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir namespace sd 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir namespace impl 86*cdf0e10cSrcweir { 87*cdf0e10cSrcweir struct TransitionEffect 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir TransitionEffect() : 90*cdf0e10cSrcweir mnType( 0 ), 91*cdf0e10cSrcweir mnSubType( 0 ), 92*cdf0e10cSrcweir mbDirection( sal_True ), 93*cdf0e10cSrcweir mnFadeColor( 0 ) 94*cdf0e10cSrcweir { 95*cdf0e10cSrcweir init(); 96*cdf0e10cSrcweir } 97*cdf0e10cSrcweir explicit TransitionEffect( const ::sd::TransitionPreset & rPreset ) : 98*cdf0e10cSrcweir mnType( rPreset.getTransition()), 99*cdf0e10cSrcweir mnSubType( rPreset.getSubtype()), 100*cdf0e10cSrcweir mbDirection( rPreset.getDirection()), 101*cdf0e10cSrcweir mnFadeColor( rPreset.getFadeColor()) 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir init(); 104*cdf0e10cSrcweir } 105*cdf0e10cSrcweir explicit TransitionEffect( sal_Int16 nType, sal_Int16 nSubType, 106*cdf0e10cSrcweir sal_Bool bDirection, sal_Int32 nFadeColor ) : 107*cdf0e10cSrcweir mnType( nType), 108*cdf0e10cSrcweir mnSubType( nSubType ), 109*cdf0e10cSrcweir mbDirection( bDirection ), 110*cdf0e10cSrcweir mnFadeColor( nFadeColor ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir init(); 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir explicit TransitionEffect( const SdPage & rPage ) : 115*cdf0e10cSrcweir mnType( rPage.getTransitionType() ), 116*cdf0e10cSrcweir mnSubType( rPage.getTransitionSubtype() ), 117*cdf0e10cSrcweir mbDirection( rPage.getTransitionDirection() ), 118*cdf0e10cSrcweir mnFadeColor( rPage.getTransitionFadeColor() ) 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir init(); 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir mfDuration = rPage.getTransitionDuration(); 123*cdf0e10cSrcweir mnTime = rPage.GetTime(); 124*cdf0e10cSrcweir mePresChange = rPage.GetPresChange(); 125*cdf0e10cSrcweir mbSoundOn = rPage.IsSoundOn(); 126*cdf0e10cSrcweir maSound = rPage.GetSoundFile(); 127*cdf0e10cSrcweir mbLoopSound = rPage.IsLoopSound(); 128*cdf0e10cSrcweir mbStopSound = rPage.IsStopSound(); 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir void init() 132*cdf0e10cSrcweir { 133*cdf0e10cSrcweir mfDuration = 2.0; 134*cdf0e10cSrcweir mnTime = 0; 135*cdf0e10cSrcweir mePresChange = PRESCHANGE_MANUAL; 136*cdf0e10cSrcweir mbSoundOn = sal_False; 137*cdf0e10cSrcweir mbLoopSound = sal_False; 138*cdf0e10cSrcweir mbStopSound = sal_False; 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir mbEffectAmbiguous = false; 141*cdf0e10cSrcweir mbDurationAmbiguous = false; 142*cdf0e10cSrcweir mbTimeAmbiguous = false; 143*cdf0e10cSrcweir mbPresChangeAmbiguous = false; 144*cdf0e10cSrcweir mbSoundAmbiguous = false; 145*cdf0e10cSrcweir mbLoopSoundAmbiguous = false; 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir void setAllAmbiguous() 149*cdf0e10cSrcweir { 150*cdf0e10cSrcweir mbEffectAmbiguous = true; 151*cdf0e10cSrcweir mbDurationAmbiguous = true; 152*cdf0e10cSrcweir mbTimeAmbiguous = true; 153*cdf0e10cSrcweir mbPresChangeAmbiguous = true; 154*cdf0e10cSrcweir mbSoundAmbiguous = true; 155*cdf0e10cSrcweir mbLoopSoundAmbiguous = true; 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir bool operator == ( const ::sd::TransitionPreset & rPreset ) const 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir return 161*cdf0e10cSrcweir (mnType == rPreset.getTransition()) && 162*cdf0e10cSrcweir (mnSubType == rPreset.getSubtype()) && 163*cdf0e10cSrcweir (mbDirection == rPreset.getDirection()) && 164*cdf0e10cSrcweir (mnFadeColor == rPreset.getFadeColor()); 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir void applyTo( SdPage & rOutPage ) const 168*cdf0e10cSrcweir { 169*cdf0e10cSrcweir if( ! mbEffectAmbiguous ) 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir rOutPage.setTransitionType( mnType ); 172*cdf0e10cSrcweir rOutPage.setTransitionSubtype( mnSubType ); 173*cdf0e10cSrcweir rOutPage.setTransitionDirection( mbDirection ); 174*cdf0e10cSrcweir rOutPage.setTransitionFadeColor( mnFadeColor ); 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir if( ! mbDurationAmbiguous ) 178*cdf0e10cSrcweir rOutPage.setTransitionDuration( mfDuration ); 179*cdf0e10cSrcweir if( ! mbTimeAmbiguous ) 180*cdf0e10cSrcweir rOutPage.SetTime( mnTime ); 181*cdf0e10cSrcweir if( ! mbPresChangeAmbiguous ) 182*cdf0e10cSrcweir rOutPage.SetPresChange( mePresChange ); 183*cdf0e10cSrcweir if( ! mbSoundAmbiguous ) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir if( mbStopSound ) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir rOutPage.SetStopSound( sal_True ); 188*cdf0e10cSrcweir rOutPage.SetSound( sal_False ); 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir else 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir rOutPage.SetStopSound( sal_False ); 193*cdf0e10cSrcweir rOutPage.SetSound( mbSoundOn ); 194*cdf0e10cSrcweir rOutPage.SetSoundFile( maSound ); 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir if( ! mbLoopSoundAmbiguous ) 198*cdf0e10cSrcweir rOutPage.SetLoopSound( mbLoopSound ); 199*cdf0e10cSrcweir } 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir void compareWith( const SdPage & rPage ) 202*cdf0e10cSrcweir { 203*cdf0e10cSrcweir TransitionEffect aOtherEffect( rPage ); 204*cdf0e10cSrcweir mbEffectAmbiguous = mbEffectAmbiguous || aOtherEffect.mbEffectAmbiguous 205*cdf0e10cSrcweir || (mnType != aOtherEffect.mnType) 206*cdf0e10cSrcweir || (mnSubType != aOtherEffect.mnSubType) 207*cdf0e10cSrcweir || (mbDirection != aOtherEffect.mbDirection) 208*cdf0e10cSrcweir || (mnFadeColor != aOtherEffect.mnFadeColor); 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir mbDurationAmbiguous = mbDurationAmbiguous || aOtherEffect.mbDurationAmbiguous || mfDuration != aOtherEffect.mfDuration; 211*cdf0e10cSrcweir mbTimeAmbiguous = mbTimeAmbiguous || aOtherEffect.mbTimeAmbiguous || mnTime != aOtherEffect.mnTime; 212*cdf0e10cSrcweir mbPresChangeAmbiguous = mbPresChangeAmbiguous || aOtherEffect.mbPresChangeAmbiguous || mePresChange != aOtherEffect.mePresChange; 213*cdf0e10cSrcweir mbSoundAmbiguous = mbSoundAmbiguous || aOtherEffect.mbSoundAmbiguous || mbSoundOn != aOtherEffect.mbSoundOn; 214*cdf0e10cSrcweir (!mbStopSound && !aOtherEffect.mbStopSound && maSound != aOtherEffect.maSound) || (mbStopSound != aOtherEffect.mbStopSound); 215*cdf0e10cSrcweir mbLoopSoundAmbiguous = mbLoopSoundAmbiguous || aOtherEffect.mbLoopSoundAmbiguous || mbLoopSound != aOtherEffect.mbLoopSound; 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir // effect 219*cdf0e10cSrcweir sal_Int16 mnType; 220*cdf0e10cSrcweir sal_Int16 mnSubType; 221*cdf0e10cSrcweir sal_Bool mbDirection; 222*cdf0e10cSrcweir sal_Int32 mnFadeColor; 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir // other settings 225*cdf0e10cSrcweir double mfDuration; 226*cdf0e10cSrcweir sal_uLong mnTime; 227*cdf0e10cSrcweir PresChange mePresChange; 228*cdf0e10cSrcweir sal_Bool mbSoundOn; 229*cdf0e10cSrcweir String maSound; 230*cdf0e10cSrcweir bool mbLoopSound; 231*cdf0e10cSrcweir bool mbStopSound; 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir bool mbEffectAmbiguous; 234*cdf0e10cSrcweir bool mbDurationAmbiguous; 235*cdf0e10cSrcweir bool mbTimeAmbiguous; 236*cdf0e10cSrcweir bool mbPresChangeAmbiguous; 237*cdf0e10cSrcweir bool mbSoundAmbiguous; 238*cdf0e10cSrcweir bool mbLoopSoundAmbiguous; 239*cdf0e10cSrcweir }; 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir } // namespace impl 242*cdf0e10cSrcweir } // namespace sd 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir // ______________________ 245*cdf0e10cSrcweir // 246*cdf0e10cSrcweir // Local Helper Functions 247*cdf0e10cSrcweir // ______________________ 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir namespace 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir void lcl_ApplyToPages( 253*cdf0e10cSrcweir const ::sd::slidesorter::SharedPageSelection& rpPages, 254*cdf0e10cSrcweir const ::sd::impl::TransitionEffect & rEffect ) 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir ::std::vector< SdPage * >::const_iterator aIt( rpPages->begin()); 257*cdf0e10cSrcweir const ::std::vector< SdPage * >::const_iterator aEndIt( rpPages->end()); 258*cdf0e10cSrcweir for( ; aIt != aEndIt; ++aIt ) 259*cdf0e10cSrcweir { 260*cdf0e10cSrcweir rEffect.applyTo( *(*aIt) ); 261*cdf0e10cSrcweir } 262*cdf0e10cSrcweir } 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir void lcl_CreateUndoForPages( 265*cdf0e10cSrcweir const ::sd::slidesorter::SharedPageSelection& rpPages, 266*cdf0e10cSrcweir ::sd::ViewShellBase& rBase ) 267*cdf0e10cSrcweir { 268*cdf0e10cSrcweir ::sd::DrawDocShell* pDocSh = rBase.GetDocShell(); 269*cdf0e10cSrcweir ::svl::IUndoManager* pManager = pDocSh->GetUndoManager(); 270*cdf0e10cSrcweir SdDrawDocument* pDoc = pDocSh->GetDoc(); 271*cdf0e10cSrcweir if( pManager && pDocSh && pDoc ) 272*cdf0e10cSrcweir { 273*cdf0e10cSrcweir String aComment( SdResId(STR_UNDO_SLIDE_PARAMS) ); 274*cdf0e10cSrcweir pManager->EnterListAction(aComment, aComment); 275*cdf0e10cSrcweir SdUndoGroup* pUndoGroup = new SdUndoGroup( pDoc ); 276*cdf0e10cSrcweir pUndoGroup->SetComment( aComment ); 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir ::std::vector< SdPage * >::const_iterator aIt( rpPages->begin()); 279*cdf0e10cSrcweir const ::std::vector< SdPage * >::const_iterator aEndIt( rpPages->end()); 280*cdf0e10cSrcweir for( ; aIt != aEndIt; ++aIt ) 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir pUndoGroup->AddAction( new sd::UndoTransition( pDoc, (*aIt) ) ); 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir pManager->AddUndoAction( pUndoGroup ); 286*cdf0e10cSrcweir pManager->LeaveListAction(); 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir } 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir sal_uInt16 lcl_getTransitionEffectIndex( 291*cdf0e10cSrcweir SdDrawDocument * pDoc, 292*cdf0e10cSrcweir const ::sd::impl::TransitionEffect & rTransition ) 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir // first entry: "<none>" 295*cdf0e10cSrcweir sal_uInt16 nResultIndex = LISTBOX_ENTRY_NOTFOUND; 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir if( pDoc ) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir sal_uInt16 nCurrentIndex = 0; 300*cdf0e10cSrcweir const ::sd::TransitionPresetList & rPresetList = ::sd::TransitionPreset::getTransitionPresetList(); 301*cdf0e10cSrcweir ::sd::TransitionPresetList::const_iterator aIt( rPresetList.begin()); 302*cdf0e10cSrcweir const ::sd::TransitionPresetList::const_iterator aEndIt( rPresetList.end()); 303*cdf0e10cSrcweir for( ; aIt != aEndIt; ++aIt, ++nCurrentIndex ) 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir if( rTransition.operator==( *(*aIt) )) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir nResultIndex = nCurrentIndex; 308*cdf0e10cSrcweir break; 309*cdf0e10cSrcweir } 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir return nResultIndex; 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir ::sd::TransitionPresetPtr lcl_getTransitionPresetByUIName( 317*cdf0e10cSrcweir SdDrawDocument * pDoc, 318*cdf0e10cSrcweir const OUString & rUIName ) 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir ::sd::TransitionPresetPtr pResult; 321*cdf0e10cSrcweir if( pDoc ) 322*cdf0e10cSrcweir { 323*cdf0e10cSrcweir const ::sd::TransitionPresetList& rPresetList = ::sd::TransitionPreset::getTransitionPresetList(); 324*cdf0e10cSrcweir ::sd::TransitionPresetList::const_iterator aIter( rPresetList.begin() ); 325*cdf0e10cSrcweir const ::sd::TransitionPresetList::const_iterator aEnd( rPresetList.end() ); 326*cdf0e10cSrcweir for( ; aIter != aEnd; ++aIter ) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir if( (*aIter)->getUIName().equals( rUIName )) 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir pResult = *aIter; 331*cdf0e10cSrcweir break; 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir } 334*cdf0e10cSrcweir } 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir return pResult; 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir 339*cdf0e10cSrcweir struct lcl_EqualsSoundFileName : public ::std::unary_function< String, bool > 340*cdf0e10cSrcweir { 341*cdf0e10cSrcweir explicit lcl_EqualsSoundFileName( const String & rStr ) : 342*cdf0e10cSrcweir maStr( rStr ) 343*cdf0e10cSrcweir {} 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir bool operator() ( const String & rStr ) const 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir // note: formerly this was a case insensitive search for all 348*cdf0e10cSrcweir // platforms. It seems more sensible to do this platform-dependent 349*cdf0e10cSrcweir #if defined( WNT ) 350*cdf0e10cSrcweir return maStr.EqualsIgnoreCaseAscii( rStr ); 351*cdf0e10cSrcweir #else 352*cdf0e10cSrcweir return maStr.Equals( rStr ); 353*cdf0e10cSrcweir #endif 354*cdf0e10cSrcweir } 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir private: 357*cdf0e10cSrcweir String maStr; 358*cdf0e10cSrcweir }; 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir // returns -1 if no object was found 361*cdf0e10cSrcweir bool lcl_findSoundInList( const ::std::vector< String > & rSoundList, 362*cdf0e10cSrcweir const String & rFileName, 363*cdf0e10cSrcweir ::std::vector< String >::size_type & rOutPosition ) 364*cdf0e10cSrcweir { 365*cdf0e10cSrcweir ::std::vector< String >::const_iterator aIt = 366*cdf0e10cSrcweir ::std::find_if( rSoundList.begin(), rSoundList.end(), 367*cdf0e10cSrcweir lcl_EqualsSoundFileName( rFileName )); 368*cdf0e10cSrcweir if( aIt != rSoundList.end()) 369*cdf0e10cSrcweir { 370*cdf0e10cSrcweir rOutPosition = ::std::distance( rSoundList.begin(), aIt ); 371*cdf0e10cSrcweir return true; 372*cdf0e10cSrcweir } 373*cdf0e10cSrcweir 374*cdf0e10cSrcweir return false; 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir String lcl_getSoundFileURL( 378*cdf0e10cSrcweir const ::std::vector< String > & rSoundList, 379*cdf0e10cSrcweir const ListBox & rListBox ) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir String aResult; 382*cdf0e10cSrcweir 383*cdf0e10cSrcweir if( rListBox.GetSelectEntryCount() > 0 ) 384*cdf0e10cSrcweir { 385*cdf0e10cSrcweir sal_uInt16 nPos = rListBox.GetSelectEntryPos(); 386*cdf0e10cSrcweir // the first three entries are no actual sounds 387*cdf0e10cSrcweir if( nPos >= 3 ) 388*cdf0e10cSrcweir { 389*cdf0e10cSrcweir DBG_ASSERT( (sal_uInt32)(rListBox.GetEntryCount() - 3) == rSoundList.size(), 390*cdf0e10cSrcweir "Sound list-box is not synchronized to sound list" ); 391*cdf0e10cSrcweir nPos -= 3; 392*cdf0e10cSrcweir if( rSoundList.size() > nPos ) 393*cdf0e10cSrcweir aResult = rSoundList[ nPos ]; 394*cdf0e10cSrcweir } 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir 397*cdf0e10cSrcweir return aResult; 398*cdf0e10cSrcweir } 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir struct lcl_AppendSoundToListBox : public ::std::unary_function< String, void > 401*cdf0e10cSrcweir { 402*cdf0e10cSrcweir lcl_AppendSoundToListBox( ListBox & rListBox ) : 403*cdf0e10cSrcweir mrListBox( rListBox ) 404*cdf0e10cSrcweir {} 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir void operator() ( const String & rString ) const 407*cdf0e10cSrcweir { 408*cdf0e10cSrcweir INetURLObject aURL( rString ); 409*cdf0e10cSrcweir mrListBox.InsertEntry( aURL.GetBase(), LISTBOX_APPEND ); 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir private: 413*cdf0e10cSrcweir ListBox & mrListBox; 414*cdf0e10cSrcweir }; 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir void lcl_FillSoundListBox( 417*cdf0e10cSrcweir const ::std::vector< String > & rSoundList, 418*cdf0e10cSrcweir ListBox & rOutListBox ) 419*cdf0e10cSrcweir { 420*cdf0e10cSrcweir sal_uInt16 nCount = rOutListBox.GetEntryCount(); 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir // keep first three entries 423*cdf0e10cSrcweir for( sal_uInt16 i=nCount - 1; i>=3; --i ) 424*cdf0e10cSrcweir rOutListBox.RemoveEntry( i ); 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir ::std::for_each( rSoundList.begin(), rSoundList.end(), 427*cdf0e10cSrcweir lcl_AppendSoundToListBox( rOutListBox )); 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir } // anonymous namespace 431*cdf0e10cSrcweir 432*cdf0e10cSrcweir namespace sd 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir 435*cdf0e10cSrcweir // ___________________ 436*cdf0e10cSrcweir // 437*cdf0e10cSrcweir // SlideTransitionPane 438*cdf0e10cSrcweir // ___________________ 439*cdf0e10cSrcweir 440*cdf0e10cSrcweir SlideTransitionPane::SlideTransitionPane( 441*cdf0e10cSrcweir ::Window * pParent, 442*cdf0e10cSrcweir ViewShellBase & rBase, 443*cdf0e10cSrcweir const Size& rMinSize, 444*cdf0e10cSrcweir SdDrawDocument* pDoc ) : 445*cdf0e10cSrcweir Control( pParent, SdResId( DLG_SLIDE_TRANSITION_PANE ) ), 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir mrBase( rBase ), 448*cdf0e10cSrcweir mpDrawDoc( pDoc ), 449*cdf0e10cSrcweir maMinSize( rMinSize ), 450*cdf0e10cSrcweir maFL_APPLY_TRANSITION( this, SdResId( FL_APPLY_TRANSITION ) ), 451*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS( this, SdResId( LB_SLIDE_TRANSITIONS ) ), 452*cdf0e10cSrcweir maFL_MODIFY_TRANSITION( this, SdResId( FL_MODIFY_TRANSITION ) ), 453*cdf0e10cSrcweir maFT_SPEED( this, SdResId( FT_SPEED ) ), 454*cdf0e10cSrcweir maLB_SPEED( this, SdResId( LB_SPEED ) ), 455*cdf0e10cSrcweir maFT_SOUND( this, SdResId( FT_SOUND ) ), 456*cdf0e10cSrcweir maLB_SOUND( this, SdResId( LB_SOUND ) ), 457*cdf0e10cSrcweir maCB_LOOP_SOUND( this, SdResId( CB_LOOP_SOUND ) ), 458*cdf0e10cSrcweir maFL_ADVANCE_SLIDE( this, SdResId( FL_ADVANCE_SLIDE ) ), 459*cdf0e10cSrcweir maRB_ADVANCE_ON_MOUSE( this, SdResId( RB_ADVANCE_ON_MOUSE ) ), 460*cdf0e10cSrcweir maRB_ADVANCE_AUTO( this, SdResId( RB_ADVANCE_AUTO ) ), 461*cdf0e10cSrcweir maMF_ADVANCE_AUTO_AFTER( this, SdResId( MF_ADVANCE_AUTO_AFTER ) ), 462*cdf0e10cSrcweir maFL_EMPTY1( this, SdResId( FL_EMPTY1 ) ), 463*cdf0e10cSrcweir maPB_APPLY_TO_ALL( this, SdResId( PB_APPLY_TO_ALL ) ), 464*cdf0e10cSrcweir maPB_PLAY( this, SdResId( PB_PLAY ) ), 465*cdf0e10cSrcweir maPB_SLIDE_SHOW( this, SdResId( PB_SLIDE_SHOW ) ), 466*cdf0e10cSrcweir maFL_EMPTY2( this, SdResId( FL_EMPTY2 ) ), 467*cdf0e10cSrcweir maCB_AUTO_PREVIEW( this, SdResId( CB_AUTO_PREVIEW ) ), 468*cdf0e10cSrcweir 469*cdf0e10cSrcweir maSTR_NO_TRANSITION( SdResId( STR_NO_TRANSITION ) ), 470*cdf0e10cSrcweir mbHasSelection( false ), 471*cdf0e10cSrcweir mbUpdatingControls( false ), 472*cdf0e10cSrcweir mbIsMainViewChangePending( false ), 473*cdf0e10cSrcweir maLateInitTimer() 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir // use no resource ids from here on 476*cdf0e10cSrcweir FreeResource(); 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir // use bold font for group headings (same font for all fixed lines): 479*cdf0e10cSrcweir Font font( maFL_APPLY_TRANSITION.GetFont() ); 480*cdf0e10cSrcweir font.SetWeight( WEIGHT_BOLD ); 481*cdf0e10cSrcweir maFL_APPLY_TRANSITION.SetFont( font ); 482*cdf0e10cSrcweir maFL_MODIFY_TRANSITION.SetFont( font ); 483*cdf0e10cSrcweir maFL_ADVANCE_SLIDE.SetFont( font ); 484*cdf0e10cSrcweir 485*cdf0e10cSrcweir if( pDoc ) 486*cdf0e10cSrcweir mxModel.set( pDoc->getUnoModel(), uno::UNO_QUERY ); 487*cdf0e10cSrcweir // TODO: get correct view 488*cdf0e10cSrcweir if( mxModel.is()) 489*cdf0e10cSrcweir mxView.set( mxModel->getCurrentController(), uno::UNO_QUERY ); 490*cdf0e10cSrcweir 491*cdf0e10cSrcweir // fill list box of slide transitions 492*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.InsertEntry( maSTR_NO_TRANSITION ); 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir // set defaults 495*cdf0e10cSrcweir maCB_AUTO_PREVIEW.Check(); // automatic preview on 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir // update control states before adding handlers 498*cdf0e10cSrcweir updateLayout(); 499*cdf0e10cSrcweir // updateSoundList(); 500*cdf0e10cSrcweir updateControls(); 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir // set handlers 503*cdf0e10cSrcweir maPB_APPLY_TO_ALL.SetClickHdl( LINK( this, SlideTransitionPane, ApplyToAllButtonClicked )); 504*cdf0e10cSrcweir maPB_PLAY.SetClickHdl( LINK( this, SlideTransitionPane, PlayButtonClicked )); 505*cdf0e10cSrcweir maPB_SLIDE_SHOW.SetClickHdl( LINK( this, SlideTransitionPane, SlideShowButtonClicked )); 506*cdf0e10cSrcweir 507*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SetSelectHdl( LINK( this, SlideTransitionPane, TransitionSelected )); 508*cdf0e10cSrcweir 509*cdf0e10cSrcweir maLB_SPEED.SetSelectHdl( LINK( this, SlideTransitionPane, SpeedListBoxSelected )); 510*cdf0e10cSrcweir maLB_SOUND.SetSelectHdl( LINK( this, SlideTransitionPane, SoundListBoxSelected )); 511*cdf0e10cSrcweir maCB_LOOP_SOUND.SetClickHdl( LINK( this, SlideTransitionPane, LoopSoundBoxChecked )); 512*cdf0e10cSrcweir 513*cdf0e10cSrcweir maRB_ADVANCE_ON_MOUSE.SetToggleHdl( LINK( this, SlideTransitionPane, AdvanceSlideRadioButtonToggled )); 514*cdf0e10cSrcweir maRB_ADVANCE_AUTO.SetToggleHdl( LINK( this, SlideTransitionPane, AdvanceSlideRadioButtonToggled )); 515*cdf0e10cSrcweir maMF_ADVANCE_AUTO_AFTER.SetModifyHdl( LINK( this, SlideTransitionPane, AdvanceTimeModified )); 516*cdf0e10cSrcweir maCB_AUTO_PREVIEW.SetClickHdl( LINK( this, SlideTransitionPane, AutoPreviewClicked )); 517*cdf0e10cSrcweir addListener(); 518*cdf0e10cSrcweir 519*cdf0e10cSrcweir maLateInitTimer.SetTimeout(200); 520*cdf0e10cSrcweir maLateInitTimer.SetTimeoutHdl(LINK(this, SlideTransitionPane, LateInitCallback)); 521*cdf0e10cSrcweir maLateInitTimer.Start(); 522*cdf0e10cSrcweir } 523*cdf0e10cSrcweir 524*cdf0e10cSrcweir SlideTransitionPane::~SlideTransitionPane() 525*cdf0e10cSrcweir { 526*cdf0e10cSrcweir maLateInitTimer.Stop(); 527*cdf0e10cSrcweir removeListener(); 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir void SlideTransitionPane::Resize() 531*cdf0e10cSrcweir { 532*cdf0e10cSrcweir updateLayout(); 533*cdf0e10cSrcweir } 534*cdf0e10cSrcweir 535*cdf0e10cSrcweir void SlideTransitionPane::onSelectionChanged() 536*cdf0e10cSrcweir { 537*cdf0e10cSrcweir updateControls(); 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir 540*cdf0e10cSrcweir void SlideTransitionPane::onChangeCurrentPage() 541*cdf0e10cSrcweir { 542*cdf0e10cSrcweir updateControls(); 543*cdf0e10cSrcweir } 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir ::sd::slidesorter::SharedPageSelection SlideTransitionPane::getSelectedPages (void) const 546*cdf0e10cSrcweir { 547*cdf0e10cSrcweir ::sd::slidesorter::SlideSorterViewShell * pSlideSorterViewShell 548*cdf0e10cSrcweir = ::sd::slidesorter::SlideSorterViewShell::GetSlideSorter(mrBase); 549*cdf0e10cSrcweir // DBG_ASSERT( pSlideSorterViewShell, "No Slide-Sorter available" ); 550*cdf0e10cSrcweir ::boost::shared_ptr<sd::slidesorter::SlideSorterViewShell::PageSelection> pSelection; 551*cdf0e10cSrcweir 552*cdf0e10cSrcweir if( pSlideSorterViewShell ) 553*cdf0e10cSrcweir { 554*cdf0e10cSrcweir pSelection = pSlideSorterViewShell->GetPageSelection(); 555*cdf0e10cSrcweir } 556*cdf0e10cSrcweir else 557*cdf0e10cSrcweir { 558*cdf0e10cSrcweir pSelection.reset(new sd::slidesorter::SlideSorterViewShell::PageSelection()); 559*cdf0e10cSrcweir if( mxView.is() ) 560*cdf0e10cSrcweir { 561*cdf0e10cSrcweir SdPage* pPage = SdPage::getImplementation( mxView->getCurrentPage() ); 562*cdf0e10cSrcweir if( pPage ) 563*cdf0e10cSrcweir pSelection->push_back(pPage); 564*cdf0e10cSrcweir } 565*cdf0e10cSrcweir } 566*cdf0e10cSrcweir 567*cdf0e10cSrcweir return pSelection; 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir void SlideTransitionPane::updateLayout() 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir ::Size aPaneSize( GetSizePixel() ); 573*cdf0e10cSrcweir if( aPaneSize.Width() < maMinSize.Width() ) 574*cdf0e10cSrcweir aPaneSize.Width() = maMinSize.Width(); 575*cdf0e10cSrcweir 576*cdf0e10cSrcweir if( aPaneSize.Height() < maMinSize.Height() ) 577*cdf0e10cSrcweir aPaneSize.Height() = maMinSize.Height(); 578*cdf0e10cSrcweir 579*cdf0e10cSrcweir // start layouting elements from bottom to top. The remaining space is used 580*cdf0e10cSrcweir // for the topmost list box 581*cdf0e10cSrcweir ::Point aOffset( LogicToPixel( Point( 3, 3 ), MAP_APPFONT ) ); 582*cdf0e10cSrcweir long nOffsetX = aOffset.getX(); 583*cdf0e10cSrcweir long nOffsetY = aOffset.getY(); 584*cdf0e10cSrcweir long nOffsetBtnX = LogicToPixel( Point( 6, 1 ), MAP_APPFONT ).getX(); 585*cdf0e10cSrcweir 586*cdf0e10cSrcweir const long nMinCtrlWidth = LogicToPixel( ::Point( 32, 1 ), MAP_APPFONT ).getX(); 587*cdf0e10cSrcweir const long nTextIndent = LogicToPixel( ::Point( RSC_SP_CHK_TEXTINDENT, 1 ), MAP_APPFONT ).getX(); 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir ::Point aUpperLeft( nOffsetX, aPaneSize.getHeight() - nOffsetY ); 590*cdf0e10cSrcweir long nMaxWidth = aPaneSize.getWidth() - 2 * nOffsetX; 591*cdf0e10cSrcweir 592*cdf0e10cSrcweir // auto preview check-box 593*cdf0e10cSrcweir ::Size aCtrlSize = maCB_AUTO_PREVIEW.GetSizePixel(); 594*cdf0e10cSrcweir aCtrlSize.setWidth( maCB_AUTO_PREVIEW.CalcMinimumSize( nMaxWidth ).getWidth()); 595*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 596*cdf0e10cSrcweir maCB_AUTO_PREVIEW.SetPosSizePixel( aUpperLeft, aCtrlSize ); 597*cdf0e10cSrcweir 598*cdf0e10cSrcweir // fixed line above check-box 599*cdf0e10cSrcweir aCtrlSize = maFL_EMPTY2.GetSizePixel(); 600*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 601*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 602*cdf0e10cSrcweir maFL_EMPTY2.SetPosSizePixel( aUpperLeft, aCtrlSize ); 603*cdf0e10cSrcweir 604*cdf0e10cSrcweir // buttons "Play" and "Slide Show" 605*cdf0e10cSrcweir long nPlayButtonWidth = maPB_PLAY.CalcMinimumSize().getWidth() + 2 * nOffsetBtnX; 606*cdf0e10cSrcweir long nSlideShowButtonWidth = maPB_SLIDE_SHOW.CalcMinimumSize().getWidth() + 2 * nOffsetBtnX; 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir if( (nPlayButtonWidth + nSlideShowButtonWidth + nOffsetX) <= nMaxWidth ) 609*cdf0e10cSrcweir { 610*cdf0e10cSrcweir // place buttons side by side 611*cdf0e10cSrcweir aCtrlSize = maPB_PLAY.GetSizePixel(); 612*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 613*cdf0e10cSrcweir aCtrlSize.setWidth( nPlayButtonWidth ); 614*cdf0e10cSrcweir maPB_PLAY.SetPosSizePixel( aUpperLeft, aCtrlSize ); 615*cdf0e10cSrcweir 616*cdf0e10cSrcweir aUpperLeft.setX( aUpperLeft.getX() + nPlayButtonWidth + nOffsetX ); 617*cdf0e10cSrcweir aCtrlSize.setWidth( nSlideShowButtonWidth ); 618*cdf0e10cSrcweir maPB_SLIDE_SHOW.SetPosSizePixel( aUpperLeft, aCtrlSize ); 619*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX ); 620*cdf0e10cSrcweir } 621*cdf0e10cSrcweir else 622*cdf0e10cSrcweir { 623*cdf0e10cSrcweir // place buttons on top of each other 624*cdf0e10cSrcweir aCtrlSize = maPB_SLIDE_SHOW.GetSizePixel(); 625*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 626*cdf0e10cSrcweir aCtrlSize.setWidth( nSlideShowButtonWidth ); 627*cdf0e10cSrcweir maPB_SLIDE_SHOW.SetPosSizePixel( aUpperLeft, aCtrlSize ); 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir aCtrlSize = maPB_PLAY.GetSizePixel(); 630*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 631*cdf0e10cSrcweir aCtrlSize.setWidth( nPlayButtonWidth ); 632*cdf0e10cSrcweir maPB_PLAY.SetPosSizePixel( aUpperLeft, aCtrlSize ); 633*cdf0e10cSrcweir } 634*cdf0e10cSrcweir 635*cdf0e10cSrcweir // "Apply to All Slides" button 636*cdf0e10cSrcweir aCtrlSize = maPB_APPLY_TO_ALL.GetSizePixel(); 637*cdf0e10cSrcweir aCtrlSize.setWidth( maPB_APPLY_TO_ALL.CalcMinimumSize( nMaxWidth ).getWidth() + 2 * nOffsetBtnX ); 638*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 639*cdf0e10cSrcweir maPB_APPLY_TO_ALL.SetPosSizePixel( aUpperLeft, aCtrlSize ); 640*cdf0e10cSrcweir 641*cdf0e10cSrcweir // fixed line above "Apply to All Slides" button 642*cdf0e10cSrcweir aCtrlSize = maFL_EMPTY1.GetSizePixel(); 643*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 644*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 645*cdf0e10cSrcweir maFL_EMPTY1.SetPosSizePixel( aUpperLeft, aCtrlSize ); 646*cdf0e10cSrcweir 647*cdf0e10cSrcweir // advance automatically after ... seconds 648*cdf0e10cSrcweir long nItemWidth = maRB_ADVANCE_AUTO.CalcMinimumSize().getWidth(); 649*cdf0e10cSrcweir 650*cdf0e10cSrcweir if( (nItemWidth + nMinCtrlWidth + nOffsetX) <= nMaxWidth ) 651*cdf0e10cSrcweir { 652*cdf0e10cSrcweir long nBase = aUpperLeft.getY(); 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir // place controls side by side 655*cdf0e10cSrcweir aCtrlSize = maRB_ADVANCE_AUTO.GetSizePixel(); 656*cdf0e10cSrcweir aUpperLeft.setY( nBase - aCtrlSize.getHeight()); 657*cdf0e10cSrcweir aCtrlSize.setWidth( nItemWidth ); 658*cdf0e10cSrcweir maRB_ADVANCE_AUTO.SetPosSizePixel( aUpperLeft, aCtrlSize ); 659*cdf0e10cSrcweir 660*cdf0e10cSrcweir aCtrlSize = maMF_ADVANCE_AUTO_AFTER.GetSizePixel(); 661*cdf0e10cSrcweir aUpperLeft.setY( nBase - aCtrlSize.getHeight() ); 662*cdf0e10cSrcweir aUpperLeft.setX( aUpperLeft.getX() + nItemWidth + nOffsetX ); 663*cdf0e10cSrcweir aCtrlSize.setWidth( nMinCtrlWidth ); 664*cdf0e10cSrcweir maMF_ADVANCE_AUTO_AFTER.SetPosSizePixel( aUpperLeft, aCtrlSize ); 665*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX ); 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir else 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir // place controls on top of each other 670*cdf0e10cSrcweir aCtrlSize = maMF_ADVANCE_AUTO_AFTER.GetSizePixel(); 671*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX + nTextIndent ); 672*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 673*cdf0e10cSrcweir aCtrlSize.setWidth( nMinCtrlWidth ); 674*cdf0e10cSrcweir maMF_ADVANCE_AUTO_AFTER.SetPosSizePixel( aUpperLeft, aCtrlSize ); 675*cdf0e10cSrcweir 676*cdf0e10cSrcweir aCtrlSize = maRB_ADVANCE_AUTO.GetSizePixel(); 677*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 678*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX ); 679*cdf0e10cSrcweir aCtrlSize.setWidth( nItemWidth ); 680*cdf0e10cSrcweir maRB_ADVANCE_AUTO.SetPosSizePixel( aUpperLeft, aCtrlSize ); 681*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX ); 682*cdf0e10cSrcweir } 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir // check box "On mouse click" 685*cdf0e10cSrcweir aCtrlSize = maRB_ADVANCE_ON_MOUSE.GetSizePixel(); 686*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 687*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 688*cdf0e10cSrcweir maRB_ADVANCE_ON_MOUSE.SetPosSizePixel( aUpperLeft, aCtrlSize ); 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir // fixed line "Advance slide" 691*cdf0e10cSrcweir aCtrlSize = maFL_ADVANCE_SLIDE.GetSizePixel(); 692*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 693*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 694*cdf0e10cSrcweir maFL_ADVANCE_SLIDE.SetPosSizePixel( aUpperLeft, aCtrlSize ); 695*cdf0e10cSrcweir 696*cdf0e10cSrcweir // check box "Loop until next sound" 697*cdf0e10cSrcweir long nFTSpeedWidth = maFT_SPEED.CalcMinimumSize().getWidth() + 2 * nOffsetX; 698*cdf0e10cSrcweir long nFTSoundWidth = maFT_SOUND.CalcMinimumSize().getWidth() + 2 * nOffsetX; 699*cdf0e10cSrcweir long nIndent = ::std::max( nFTSoundWidth, nFTSpeedWidth ); 700*cdf0e10cSrcweir 701*cdf0e10cSrcweir bool bStack = ( (nIndent + nMinCtrlWidth + nOffsetX) > nMaxWidth ); 702*cdf0e10cSrcweir 703*cdf0e10cSrcweir if( bStack ) 704*cdf0e10cSrcweir nIndent = nTextIndent; 705*cdf0e10cSrcweir 706*cdf0e10cSrcweir aCtrlSize = maCB_LOOP_SOUND.GetSizePixel(); 707*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth - nIndent ); 708*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 709*cdf0e10cSrcweir aUpperLeft.setX( nIndent ); 710*cdf0e10cSrcweir maCB_LOOP_SOUND.SetPosSizePixel( aUpperLeft, aCtrlSize ); 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir aCtrlSize = maLB_SOUND.GetSizePixel(); 713*cdf0e10cSrcweir aCtrlSize.setWidth( ::std::max( nMaxWidth - nIndent, nMinCtrlWidth ) ); 714*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 715*cdf0e10cSrcweir maLB_SOUND.SetPosSizePixel( aUpperLeft, aCtrlSize ); 716*cdf0e10cSrcweir maLB_SOUND.SetDropDownLineCount( 8 ); 717*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX ); 718*cdf0e10cSrcweir 719*cdf0e10cSrcweir aCtrlSize = maFT_SOUND.GetSizePixel(); 720*cdf0e10cSrcweir if( bStack ) 721*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 722*cdf0e10cSrcweir aCtrlSize.setWidth( nFTSoundWidth ); 723*cdf0e10cSrcweir maFT_SOUND.SetPosSizePixel( aUpperLeft, aCtrlSize ); 724*cdf0e10cSrcweir 725*cdf0e10cSrcweir aUpperLeft.setX( nIndent ); 726*cdf0e10cSrcweir aCtrlSize = maLB_SPEED.GetSizePixel(); 727*cdf0e10cSrcweir aCtrlSize.setWidth( ::std::max( nMaxWidth - nIndent, nMinCtrlWidth ) ); 728*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 729*cdf0e10cSrcweir maLB_SPEED.SetPosSizePixel( aUpperLeft, aCtrlSize ); 730*cdf0e10cSrcweir maLB_SPEED.SetDropDownLineCount( 3 ); 731*cdf0e10cSrcweir aUpperLeft.setX( nOffsetX ); 732*cdf0e10cSrcweir 733*cdf0e10cSrcweir aCtrlSize = maFT_SPEED.GetSizePixel(); 734*cdf0e10cSrcweir if( bStack ) 735*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight()); 736*cdf0e10cSrcweir aCtrlSize.setWidth( nFTSpeedWidth ); 737*cdf0e10cSrcweir maFT_SPEED.SetPosSizePixel( aUpperLeft, aCtrlSize ); 738*cdf0e10cSrcweir 739*cdf0e10cSrcweir // fixed line "Modify Transition" 740*cdf0e10cSrcweir aCtrlSize = maFL_MODIFY_TRANSITION.GetSizePixel(); 741*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 742*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - nOffsetY ); 743*cdf0e10cSrcweir maFL_MODIFY_TRANSITION.SetPosSizePixel( aUpperLeft, aCtrlSize ); 744*cdf0e10cSrcweir 745*cdf0e10cSrcweir // fixed line "Apply to selected slides" 746*cdf0e10cSrcweir aCtrlSize = maFL_APPLY_TRANSITION.GetSizePixel(); 747*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 748*cdf0e10cSrcweir ::Point aUpperLeftCorner( nOffsetX, nOffsetY ); 749*cdf0e10cSrcweir maFL_APPLY_TRANSITION.SetPosSizePixel( aUpperLeftCorner, aCtrlSize ); 750*cdf0e10cSrcweir aUpperLeftCorner.setY( aUpperLeftCorner.getY() + aCtrlSize.getHeight() + nOffsetY ); 751*cdf0e10cSrcweir aUpperLeft.setY( aUpperLeft.getY() - nOffsetY ); 752*cdf0e10cSrcweir 753*cdf0e10cSrcweir // list box slide transitions 754*cdf0e10cSrcweir aCtrlSize.setWidth( nMaxWidth ); 755*cdf0e10cSrcweir aCtrlSize.setHeight( aUpperLeft.getY() - aUpperLeftCorner.getY() ); 756*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SetPosSizePixel( aUpperLeftCorner, aCtrlSize ); 757*cdf0e10cSrcweir } 758*cdf0e10cSrcweir 759*cdf0e10cSrcweir void SlideTransitionPane::updateControls() 760*cdf0e10cSrcweir { 761*cdf0e10cSrcweir ::sd::slidesorter::SharedPageSelection pSelectedPages(getSelectedPages()); 762*cdf0e10cSrcweir if( pSelectedPages->empty()) 763*cdf0e10cSrcweir { 764*cdf0e10cSrcweir mbHasSelection = false; 765*cdf0e10cSrcweir return; 766*cdf0e10cSrcweir } 767*cdf0e10cSrcweir mbHasSelection = true; 768*cdf0e10cSrcweir 769*cdf0e10cSrcweir DBG_ASSERT( ! mbUpdatingControls, "Multiple Control Updates" ); 770*cdf0e10cSrcweir mbUpdatingControls = true; 771*cdf0e10cSrcweir 772*cdf0e10cSrcweir // get model data for first page 773*cdf0e10cSrcweir SdPage * pFirstPage = pSelectedPages->front(); 774*cdf0e10cSrcweir DBG_ASSERT( pFirstPage, "Invalid Page" ); 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir impl::TransitionEffect aEffect( *pFirstPage ); 777*cdf0e10cSrcweir 778*cdf0e10cSrcweir // merge with other pages 779*cdf0e10cSrcweir ::sd::slidesorter::SlideSorterViewShell::PageSelection::const_iterator aIt( 780*cdf0e10cSrcweir pSelectedPages->begin()); 781*cdf0e10cSrcweir ::sd::slidesorter::SlideSorterViewShell::PageSelection::const_iterator aEndIt( 782*cdf0e10cSrcweir pSelectedPages->end()); 783*cdf0e10cSrcweir 784*cdf0e10cSrcweir // start with second page (note aIt != aEndIt, because ! aSelectedPages.empty()) 785*cdf0e10cSrcweir for( ++aIt ;aIt != aEndIt; ++aIt ) 786*cdf0e10cSrcweir { 787*cdf0e10cSrcweir if( *aIt ) 788*cdf0e10cSrcweir aEffect.compareWith( *(*aIt) ); 789*cdf0e10cSrcweir } 790*cdf0e10cSrcweir 791*cdf0e10cSrcweir // detect current slide effect 792*cdf0e10cSrcweir if( aEffect.mbEffectAmbiguous ) 793*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SetNoSelection(); 794*cdf0e10cSrcweir else 795*cdf0e10cSrcweir { 796*cdf0e10cSrcweir // ToDo: That 0 is "no transition" is documented nowhere except in the 797*cdf0e10cSrcweir // CTOR of sdpage 798*cdf0e10cSrcweir if( aEffect.mnType == 0 ) 799*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SelectEntryPos( 0 ); 800*cdf0e10cSrcweir else 801*cdf0e10cSrcweir { 802*cdf0e10cSrcweir sal_uInt16 nEntry = lcl_getTransitionEffectIndex( mpDrawDoc, aEffect ); 803*cdf0e10cSrcweir if( nEntry == LISTBOX_ENTRY_NOTFOUND ) 804*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SetNoSelection(); 805*cdf0e10cSrcweir else 806*cdf0e10cSrcweir { 807*cdf0e10cSrcweir // first entry in list is "none", so add 1 after translation 808*cdf0e10cSrcweir if( m_aPresetIndexes.find( nEntry ) != m_aPresetIndexes.end()) 809*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SelectEntryPos( m_aPresetIndexes[ nEntry ] + 1 ); 810*cdf0e10cSrcweir else 811*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.SetNoSelection(); 812*cdf0e10cSrcweir } 813*cdf0e10cSrcweir } 814*cdf0e10cSrcweir } 815*cdf0e10cSrcweir 816*cdf0e10cSrcweir if( aEffect.mbDurationAmbiguous ) 817*cdf0e10cSrcweir maLB_SPEED.SetNoSelection(); 818*cdf0e10cSrcweir else 819*cdf0e10cSrcweir maLB_SPEED.SelectEntryPos( 820*cdf0e10cSrcweir (aEffect.mfDuration > 2.0 ) 821*cdf0e10cSrcweir ? 0 : (aEffect.mfDuration < 2.0) 822*cdf0e10cSrcweir ? 2 : 1 ); // else FADE_SPEED_FAST 823*cdf0e10cSrcweir 824*cdf0e10cSrcweir if( aEffect.mbSoundAmbiguous ) 825*cdf0e10cSrcweir { 826*cdf0e10cSrcweir maLB_SOUND.SetNoSelection(); 827*cdf0e10cSrcweir maCurrentSoundFile.Erase(); 828*cdf0e10cSrcweir } 829*cdf0e10cSrcweir else 830*cdf0e10cSrcweir { 831*cdf0e10cSrcweir maCurrentSoundFile.Erase(); 832*cdf0e10cSrcweir if( aEffect.mbStopSound ) 833*cdf0e10cSrcweir { 834*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( 1 ); 835*cdf0e10cSrcweir } 836*cdf0e10cSrcweir else if( aEffect.mbSoundOn && aEffect.maSound.Len() > 0 ) 837*cdf0e10cSrcweir { 838*cdf0e10cSrcweir tSoundListType::size_type nPos = 0; 839*cdf0e10cSrcweir if( lcl_findSoundInList( maSoundList, aEffect.maSound, nPos )) 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir // skip first three entries 842*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( (sal_uInt16)nPos + 3 ); 843*cdf0e10cSrcweir maCurrentSoundFile = aEffect.maSound; 844*cdf0e10cSrcweir } 845*cdf0e10cSrcweir } 846*cdf0e10cSrcweir else 847*cdf0e10cSrcweir { 848*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( 0 ); 849*cdf0e10cSrcweir } 850*cdf0e10cSrcweir } 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir if( aEffect.mbLoopSoundAmbiguous ) 853*cdf0e10cSrcweir { 854*cdf0e10cSrcweir maCB_LOOP_SOUND.SetState( STATE_DONTKNOW ); 855*cdf0e10cSrcweir } 856*cdf0e10cSrcweir else 857*cdf0e10cSrcweir { 858*cdf0e10cSrcweir maCB_LOOP_SOUND.Check( aEffect.mbLoopSound ); 859*cdf0e10cSrcweir } 860*cdf0e10cSrcweir 861*cdf0e10cSrcweir if( aEffect.mbPresChangeAmbiguous ) 862*cdf0e10cSrcweir { 863*cdf0e10cSrcweir maRB_ADVANCE_ON_MOUSE.Check( sal_False ); 864*cdf0e10cSrcweir maRB_ADVANCE_AUTO.Check( sal_False ); 865*cdf0e10cSrcweir } 866*cdf0e10cSrcweir else 867*cdf0e10cSrcweir { 868*cdf0e10cSrcweir maRB_ADVANCE_ON_MOUSE.Check( aEffect.mePresChange == PRESCHANGE_MANUAL ); 869*cdf0e10cSrcweir maRB_ADVANCE_AUTO.Check( aEffect.mePresChange == PRESCHANGE_AUTO ); 870*cdf0e10cSrcweir maMF_ADVANCE_AUTO_AFTER.SetValue( aEffect.mnTime ); 871*cdf0e10cSrcweir } 872*cdf0e10cSrcweir 873*cdf0e10cSrcweir SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); 874*cdf0e10cSrcweir maCB_AUTO_PREVIEW.Check( pOptions->IsPreviewTransitions() == sal_True ); 875*cdf0e10cSrcweir 876*cdf0e10cSrcweir mbUpdatingControls = false; 877*cdf0e10cSrcweir 878*cdf0e10cSrcweir updateControlState(); 879*cdf0e10cSrcweir } 880*cdf0e10cSrcweir 881*cdf0e10cSrcweir void SlideTransitionPane::updateControlState() 882*cdf0e10cSrcweir { 883*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.Enable( mbHasSelection ); 884*cdf0e10cSrcweir maLB_SPEED.Enable( mbHasSelection ); 885*cdf0e10cSrcweir maLB_SOUND.Enable( mbHasSelection ); 886*cdf0e10cSrcweir maCB_LOOP_SOUND.Enable( mbHasSelection && (maLB_SOUND.GetSelectEntryPos() > 2)); 887*cdf0e10cSrcweir maRB_ADVANCE_ON_MOUSE.Enable( mbHasSelection ); 888*cdf0e10cSrcweir maRB_ADVANCE_AUTO.Enable( mbHasSelection ); 889*cdf0e10cSrcweir maMF_ADVANCE_AUTO_AFTER.Enable( mbHasSelection && maRB_ADVANCE_AUTO.IsChecked()); 890*cdf0e10cSrcweir 891*cdf0e10cSrcweir maPB_APPLY_TO_ALL.Enable( mbHasSelection ); 892*cdf0e10cSrcweir maPB_PLAY.Enable( mbHasSelection ); 893*cdf0e10cSrcweir // maPB_SLIDE_SHOW.Enable( sal_True ); 894*cdf0e10cSrcweir maCB_AUTO_PREVIEW.Enable( mbHasSelection ); 895*cdf0e10cSrcweir } 896*cdf0e10cSrcweir 897*cdf0e10cSrcweir void SlideTransitionPane::updateSoundList() 898*cdf0e10cSrcweir { 899*cdf0e10cSrcweir List aSoundList; 900*cdf0e10cSrcweir 901*cdf0e10cSrcweir GalleryExplorer::FillObjList( GALLERY_THEME_SOUNDS, aSoundList ); 902*cdf0e10cSrcweir GalleryExplorer::FillObjList( GALLERY_THEME_USERSOUNDS, aSoundList ); 903*cdf0e10cSrcweir 904*cdf0e10cSrcweir sal_uInt32 nCount = aSoundList.Count(); 905*cdf0e10cSrcweir maSoundList.clear(); 906*cdf0e10cSrcweir maSoundList.reserve( nCount ); 907*cdf0e10cSrcweir for( sal_uInt32 i=0; i<nCount; ++i ) 908*cdf0e10cSrcweir { 909*cdf0e10cSrcweir String * pEntry = reinterpret_cast< String * >( aSoundList.GetObject( i )); 910*cdf0e10cSrcweir if( pEntry ) 911*cdf0e10cSrcweir { 912*cdf0e10cSrcweir // store copy of string in member list 913*cdf0e10cSrcweir maSoundList.push_back( *pEntry ); 914*cdf0e10cSrcweir // delete pointer in temporary List 915*cdf0e10cSrcweir delete pEntry; 916*cdf0e10cSrcweir } 917*cdf0e10cSrcweir } 918*cdf0e10cSrcweir 919*cdf0e10cSrcweir lcl_FillSoundListBox( maSoundList, maLB_SOUND ); 920*cdf0e10cSrcweir } 921*cdf0e10cSrcweir 922*cdf0e10cSrcweir void SlideTransitionPane::openSoundFileDialog() 923*cdf0e10cSrcweir { 924*cdf0e10cSrcweir if( ! maLB_SOUND.IsEnabled()) 925*cdf0e10cSrcweir return; 926*cdf0e10cSrcweir 927*cdf0e10cSrcweir SdOpenSoundFileDialog aFileDialog; 928*cdf0e10cSrcweir 929*cdf0e10cSrcweir String aFile; 930*cdf0e10cSrcweir DBG_ASSERT( maLB_SOUND.GetSelectEntryPos() == 2, 931*cdf0e10cSrcweir "Dialog should only open when \"Other sound\" is selected" ); 932*cdf0e10cSrcweir aFile = SvtPathOptions().GetGraphicPath(); 933*cdf0e10cSrcweir 934*cdf0e10cSrcweir aFileDialog.SetPath( aFile ); 935*cdf0e10cSrcweir 936*cdf0e10cSrcweir bool bValidSoundFile( false ); 937*cdf0e10cSrcweir bool bQuitLoop( false ); 938*cdf0e10cSrcweir 939*cdf0e10cSrcweir while( ! bQuitLoop && 940*cdf0e10cSrcweir aFileDialog.Execute() == ERRCODE_NONE ) 941*cdf0e10cSrcweir { 942*cdf0e10cSrcweir aFile = aFileDialog.GetPath(); 943*cdf0e10cSrcweir tSoundListType::size_type nPos = 0; 944*cdf0e10cSrcweir bValidSoundFile = lcl_findSoundInList( maSoundList, aFile, nPos ); 945*cdf0e10cSrcweir 946*cdf0e10cSrcweir if( bValidSoundFile ) 947*cdf0e10cSrcweir { 948*cdf0e10cSrcweir bQuitLoop = true; 949*cdf0e10cSrcweir } 950*cdf0e10cSrcweir else // not in sound list 951*cdf0e10cSrcweir { 952*cdf0e10cSrcweir // try to insert into gallery 953*cdf0e10cSrcweir if( GalleryExplorer::InsertURL( GALLERY_THEME_USERSOUNDS, aFile, SGA_FORMAT_SOUND ) ) 954*cdf0e10cSrcweir { 955*cdf0e10cSrcweir updateSoundList(); 956*cdf0e10cSrcweir bValidSoundFile = lcl_findSoundInList( maSoundList, aFile, nPos ); 957*cdf0e10cSrcweir DBG_ASSERT( bValidSoundFile, "Adding sound to gallery failed" ); 958*cdf0e10cSrcweir 959*cdf0e10cSrcweir bQuitLoop = true; 960*cdf0e10cSrcweir } 961*cdf0e10cSrcweir else 962*cdf0e10cSrcweir { 963*cdf0e10cSrcweir String aStrWarning(SdResId(STR_WARNING_NOSOUNDFILE)); 964*cdf0e10cSrcweir String aStr( sal_Unicode( '%' )); 965*cdf0e10cSrcweir aStrWarning.SearchAndReplace( aStr , aFile ); 966*cdf0e10cSrcweir WarningBox aWarningBox( NULL, WB_3DLOOK | WB_RETRY_CANCEL, aStrWarning ); 967*cdf0e10cSrcweir aWarningBox.SetModalInputMode (sal_True); 968*cdf0e10cSrcweir bQuitLoop = (aWarningBox.Execute() != RET_RETRY); 969*cdf0e10cSrcweir 970*cdf0e10cSrcweir bValidSoundFile = false; 971*cdf0e10cSrcweir } 972*cdf0e10cSrcweir } 973*cdf0e10cSrcweir 974*cdf0e10cSrcweir if( bValidSoundFile ) 975*cdf0e10cSrcweir // skip first three entries in list 976*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( (sal_uInt16)nPos + 3 ); 977*cdf0e10cSrcweir } 978*cdf0e10cSrcweir 979*cdf0e10cSrcweir if( ! bValidSoundFile ) 980*cdf0e10cSrcweir { 981*cdf0e10cSrcweir if( maCurrentSoundFile.Len() > 0 ) 982*cdf0e10cSrcweir { 983*cdf0e10cSrcweir tSoundListType::size_type nPos = 0; 984*cdf0e10cSrcweir if( lcl_findSoundInList( maSoundList, maCurrentSoundFile, nPos )) 985*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( (sal_uInt16)nPos + 3 ); 986*cdf0e10cSrcweir else 987*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( 0 ); // NONE 988*cdf0e10cSrcweir } 989*cdf0e10cSrcweir else 990*cdf0e10cSrcweir maLB_SOUND.SelectEntryPos( 0 ); // NONE 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir } 993*cdf0e10cSrcweir 994*cdf0e10cSrcweir impl::TransitionEffect SlideTransitionPane::getTransitionEffectFromControls() const 995*cdf0e10cSrcweir { 996*cdf0e10cSrcweir impl::TransitionEffect aResult; 997*cdf0e10cSrcweir aResult.setAllAmbiguous(); 998*cdf0e10cSrcweir 999*cdf0e10cSrcweir // check first (aResult might be overwritten) 1000*cdf0e10cSrcweir if( maLB_SLIDE_TRANSITIONS.IsEnabled() && 1001*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.GetSelectEntryCount() > 0 ) 1002*cdf0e10cSrcweir { 1003*cdf0e10cSrcweir TransitionPresetPtr pPreset = lcl_getTransitionPresetByUIName( 1004*cdf0e10cSrcweir mpDrawDoc, OUString( maLB_SLIDE_TRANSITIONS.GetSelectEntry())); 1005*cdf0e10cSrcweir 1006*cdf0e10cSrcweir if( pPreset.get()) 1007*cdf0e10cSrcweir { 1008*cdf0e10cSrcweir aResult = impl::TransitionEffect( *pPreset ); 1009*cdf0e10cSrcweir aResult.setAllAmbiguous(); 1010*cdf0e10cSrcweir } 1011*cdf0e10cSrcweir else 1012*cdf0e10cSrcweir { 1013*cdf0e10cSrcweir aResult.mnType = 0; 1014*cdf0e10cSrcweir } 1015*cdf0e10cSrcweir aResult.mbEffectAmbiguous = false; 1016*cdf0e10cSrcweir } 1017*cdf0e10cSrcweir 1018*cdf0e10cSrcweir // speed 1019*cdf0e10cSrcweir if( maLB_SPEED.IsEnabled() && 1020*cdf0e10cSrcweir maLB_SPEED.GetSelectEntryCount() > 0 ) 1021*cdf0e10cSrcweir { 1022*cdf0e10cSrcweir sal_uInt16 nPos = maLB_SPEED.GetSelectEntryPos(); 1023*cdf0e10cSrcweir aResult.mfDuration = (nPos == 0) 1024*cdf0e10cSrcweir ? 3.0 1025*cdf0e10cSrcweir : (nPos == 1) 1026*cdf0e10cSrcweir ? 2.0 1027*cdf0e10cSrcweir : 1.0; // nPos == 2 1028*cdf0e10cSrcweir DBG_ASSERT( aResult.mfDuration != 1.0 || nPos == 2, "Invalid Listbox Entry" ); 1029*cdf0e10cSrcweir 1030*cdf0e10cSrcweir aResult.mbDurationAmbiguous = false; 1031*cdf0e10cSrcweir } 1032*cdf0e10cSrcweir 1033*cdf0e10cSrcweir // slide-advance mode 1034*cdf0e10cSrcweir if( maRB_ADVANCE_ON_MOUSE.IsEnabled() && maRB_ADVANCE_AUTO.IsEnabled() && 1035*cdf0e10cSrcweir (maRB_ADVANCE_ON_MOUSE.IsChecked() || maRB_ADVANCE_AUTO.IsChecked())) 1036*cdf0e10cSrcweir { 1037*cdf0e10cSrcweir if( maRB_ADVANCE_ON_MOUSE.IsChecked()) 1038*cdf0e10cSrcweir aResult.mePresChange = PRESCHANGE_MANUAL; 1039*cdf0e10cSrcweir else 1040*cdf0e10cSrcweir { 1041*cdf0e10cSrcweir aResult.mePresChange = PRESCHANGE_AUTO; 1042*cdf0e10cSrcweir if( maMF_ADVANCE_AUTO_AFTER.IsEnabled()) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir // sal_uInt16 nDigits = maMF_ADVANCE_AUTO_AFTER.GetDecimalDigits(); 1045*cdf0e10cSrcweir aResult.mnTime = static_cast<long>(maMF_ADVANCE_AUTO_AFTER.GetValue()); 1046*cdf0e10cSrcweir // / static_cast< sal_uInt16 >( pow( 10.0, static_cast< double >( nDigits ))); 1047*cdf0e10cSrcweir aResult.mbTimeAmbiguous = false; 1048*cdf0e10cSrcweir } 1049*cdf0e10cSrcweir } 1050*cdf0e10cSrcweir 1051*cdf0e10cSrcweir aResult.mbPresChangeAmbiguous = false; 1052*cdf0e10cSrcweir } 1053*cdf0e10cSrcweir 1054*cdf0e10cSrcweir // sound 1055*cdf0e10cSrcweir if( maLB_SOUND.IsEnabled()) 1056*cdf0e10cSrcweir { 1057*cdf0e10cSrcweir maCurrentSoundFile.Erase(); 1058*cdf0e10cSrcweir if( maLB_SOUND.GetSelectEntryCount() > 0 ) 1059*cdf0e10cSrcweir { 1060*cdf0e10cSrcweir sal_uInt16 nPos = maLB_SOUND.GetSelectEntryPos(); 1061*cdf0e10cSrcweir aResult.mbStopSound = nPos == 1; 1062*cdf0e10cSrcweir aResult.mbSoundOn = nPos > 1; 1063*cdf0e10cSrcweir if( aResult.mbStopSound ) 1064*cdf0e10cSrcweir { 1065*cdf0e10cSrcweir aResult.maSound = OUString(); 1066*cdf0e10cSrcweir aResult.mbSoundAmbiguous = false; 1067*cdf0e10cSrcweir } 1068*cdf0e10cSrcweir else 1069*cdf0e10cSrcweir { 1070*cdf0e10cSrcweir aResult.maSound = lcl_getSoundFileURL( maSoundList, maLB_SOUND ); 1071*cdf0e10cSrcweir aResult.mbSoundAmbiguous = false; 1072*cdf0e10cSrcweir maCurrentSoundFile = aResult.maSound; 1073*cdf0e10cSrcweir } 1074*cdf0e10cSrcweir } 1075*cdf0e10cSrcweir } 1076*cdf0e10cSrcweir 1077*cdf0e10cSrcweir // sound loop 1078*cdf0e10cSrcweir if( maCB_LOOP_SOUND.IsEnabled() ) 1079*cdf0e10cSrcweir { 1080*cdf0e10cSrcweir aResult.mbLoopSound = maCB_LOOP_SOUND.IsChecked(); 1081*cdf0e10cSrcweir aResult.mbLoopSoundAmbiguous = false; 1082*cdf0e10cSrcweir } 1083*cdf0e10cSrcweir 1084*cdf0e10cSrcweir return aResult; 1085*cdf0e10cSrcweir } 1086*cdf0e10cSrcweir 1087*cdf0e10cSrcweir void SlideTransitionPane::applyToSelectedPages() 1088*cdf0e10cSrcweir { 1089*cdf0e10cSrcweir if( ! mbUpdatingControls ) 1090*cdf0e10cSrcweir { 1091*cdf0e10cSrcweir ::sd::slidesorter::SharedPageSelection pSelectedPages( getSelectedPages()); 1092*cdf0e10cSrcweir if( ! pSelectedPages->empty()) 1093*cdf0e10cSrcweir { 1094*cdf0e10cSrcweir lcl_CreateUndoForPages( pSelectedPages, mrBase ); 1095*cdf0e10cSrcweir lcl_ApplyToPages( pSelectedPages, getTransitionEffectFromControls() ); 1096*cdf0e10cSrcweir mrBase.GetDocShell()->SetModified(); 1097*cdf0e10cSrcweir } 1098*cdf0e10cSrcweir if( maCB_AUTO_PREVIEW.IsEnabled() && 1099*cdf0e10cSrcweir maCB_AUTO_PREVIEW.IsChecked()) 1100*cdf0e10cSrcweir { 1101*cdf0e10cSrcweir playCurrentEffect(); 1102*cdf0e10cSrcweir } 1103*cdf0e10cSrcweir } 1104*cdf0e10cSrcweir } 1105*cdf0e10cSrcweir 1106*cdf0e10cSrcweir void SlideTransitionPane::playCurrentEffect() 1107*cdf0e10cSrcweir { 1108*cdf0e10cSrcweir if( mxView.is() ) 1109*cdf0e10cSrcweir { 1110*cdf0e10cSrcweir 1111*cdf0e10cSrcweir Reference< ::com::sun::star::animations::XAnimationNode > xNode; 1112*cdf0e10cSrcweir SlideShow::StartPreview( mrBase, mxView->getCurrentPage(), xNode ); 1113*cdf0e10cSrcweir } 1114*cdf0e10cSrcweir } 1115*cdf0e10cSrcweir 1116*cdf0e10cSrcweir void SlideTransitionPane::addListener() 1117*cdf0e10cSrcweir { 1118*cdf0e10cSrcweir Link aLink( LINK(this,SlideTransitionPane,EventMultiplexerListener) ); 1119*cdf0e10cSrcweir mrBase.GetEventMultiplexer()->AddEventListener ( 1120*cdf0e10cSrcweir aLink, 1121*cdf0e10cSrcweir tools::EventMultiplexerEvent::EID_EDIT_VIEW_SELECTION 1122*cdf0e10cSrcweir | tools::EventMultiplexerEvent::EID_SLIDE_SORTER_SELECTION 1123*cdf0e10cSrcweir | tools::EventMultiplexerEvent::EID_CURRENT_PAGE 1124*cdf0e10cSrcweir | tools::EventMultiplexerEvent::EID_MAIN_VIEW_REMOVED 1125*cdf0e10cSrcweir | tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED 1126*cdf0e10cSrcweir | tools::EventMultiplexerEvent::EID_CONFIGURATION_UPDATED); 1127*cdf0e10cSrcweir } 1128*cdf0e10cSrcweir 1129*cdf0e10cSrcweir void SlideTransitionPane::removeListener() 1130*cdf0e10cSrcweir { 1131*cdf0e10cSrcweir Link aLink( LINK(this,SlideTransitionPane,EventMultiplexerListener) ); 1132*cdf0e10cSrcweir mrBase.GetEventMultiplexer()->RemoveEventListener( aLink ); 1133*cdf0e10cSrcweir } 1134*cdf0e10cSrcweir 1135*cdf0e10cSrcweir IMPL_LINK(SlideTransitionPane,EventMultiplexerListener, 1136*cdf0e10cSrcweir tools::EventMultiplexerEvent*,pEvent) 1137*cdf0e10cSrcweir { 1138*cdf0e10cSrcweir switch (pEvent->meEventId) 1139*cdf0e10cSrcweir { 1140*cdf0e10cSrcweir case tools::EventMultiplexerEvent::EID_EDIT_VIEW_SELECTION: 1141*cdf0e10cSrcweir onSelectionChanged(); 1142*cdf0e10cSrcweir break; 1143*cdf0e10cSrcweir 1144*cdf0e10cSrcweir case tools::EventMultiplexerEvent::EID_CURRENT_PAGE: 1145*cdf0e10cSrcweir case tools::EventMultiplexerEvent::EID_SLIDE_SORTER_SELECTION: 1146*cdf0e10cSrcweir onChangeCurrentPage(); 1147*cdf0e10cSrcweir break; 1148*cdf0e10cSrcweir 1149*cdf0e10cSrcweir case tools::EventMultiplexerEvent::EID_MAIN_VIEW_REMOVED: 1150*cdf0e10cSrcweir mxView = Reference<drawing::XDrawView>(); 1151*cdf0e10cSrcweir onSelectionChanged(); 1152*cdf0e10cSrcweir onChangeCurrentPage(); 1153*cdf0e10cSrcweir break; 1154*cdf0e10cSrcweir 1155*cdf0e10cSrcweir case tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED: 1156*cdf0e10cSrcweir mbIsMainViewChangePending = true; 1157*cdf0e10cSrcweir break; 1158*cdf0e10cSrcweir 1159*cdf0e10cSrcweir case tools::EventMultiplexerEvent::EID_CONFIGURATION_UPDATED: 1160*cdf0e10cSrcweir if (mbIsMainViewChangePending) 1161*cdf0e10cSrcweir { 1162*cdf0e10cSrcweir mbIsMainViewChangePending = false; 1163*cdf0e10cSrcweir 1164*cdf0e10cSrcweir // At this moment the controller may not yet been set at 1165*cdf0e10cSrcweir // model or ViewShellBase. Take it from the view shell 1166*cdf0e10cSrcweir // passed with the event. 1167*cdf0e10cSrcweir if (mrBase.GetMainViewShell() != NULL) 1168*cdf0e10cSrcweir { 1169*cdf0e10cSrcweir mxView = Reference<drawing::XDrawView>::query(mrBase.GetController()); 1170*cdf0e10cSrcweir onSelectionChanged(); 1171*cdf0e10cSrcweir onChangeCurrentPage(); 1172*cdf0e10cSrcweir } 1173*cdf0e10cSrcweir } 1174*cdf0e10cSrcweir break; 1175*cdf0e10cSrcweir 1176*cdf0e10cSrcweir default: 1177*cdf0e10cSrcweir break; 1178*cdf0e10cSrcweir } 1179*cdf0e10cSrcweir return 0; 1180*cdf0e10cSrcweir } 1181*cdf0e10cSrcweir 1182*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, ApplyToAllButtonClicked, void *, EMPTYARG ) 1183*cdf0e10cSrcweir { 1184*cdf0e10cSrcweir DBG_ASSERT( mpDrawDoc, "Invalid Draw Document!" ); 1185*cdf0e10cSrcweir if( !mpDrawDoc ) 1186*cdf0e10cSrcweir return 0; 1187*cdf0e10cSrcweir 1188*cdf0e10cSrcweir ::sd::slidesorter::SharedPageSelection pPages ( 1189*cdf0e10cSrcweir new ::sd::slidesorter::SlideSorterViewShell::PageSelection()); 1190*cdf0e10cSrcweir 1191*cdf0e10cSrcweir sal_uInt16 nPageCount = mpDrawDoc->GetSdPageCount( PK_STANDARD ); 1192*cdf0e10cSrcweir pPages->reserve( nPageCount ); 1193*cdf0e10cSrcweir for( sal_uInt16 i=0; i<nPageCount; ++i ) 1194*cdf0e10cSrcweir { 1195*cdf0e10cSrcweir SdPage * pPage = mpDrawDoc->GetSdPage( i, PK_STANDARD ); 1196*cdf0e10cSrcweir if( pPage ) 1197*cdf0e10cSrcweir pPages->push_back( pPage ); 1198*cdf0e10cSrcweir } 1199*cdf0e10cSrcweir 1200*cdf0e10cSrcweir if( ! pPages->empty()) 1201*cdf0e10cSrcweir { 1202*cdf0e10cSrcweir lcl_CreateUndoForPages( pPages, mrBase ); 1203*cdf0e10cSrcweir lcl_ApplyToPages( pPages, getTransitionEffectFromControls() ); 1204*cdf0e10cSrcweir } 1205*cdf0e10cSrcweir 1206*cdf0e10cSrcweir return 0; 1207*cdf0e10cSrcweir } 1208*cdf0e10cSrcweir 1209*cdf0e10cSrcweir 1210*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, PlayButtonClicked, void *, EMPTYARG ) 1211*cdf0e10cSrcweir { 1212*cdf0e10cSrcweir playCurrentEffect(); 1213*cdf0e10cSrcweir return 0; 1214*cdf0e10cSrcweir } 1215*cdf0e10cSrcweir 1216*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, SlideShowButtonClicked, void *, EMPTYARG ) 1217*cdf0e10cSrcweir { 1218*cdf0e10cSrcweir mrBase.StartPresentation(); 1219*cdf0e10cSrcweir return 0; 1220*cdf0e10cSrcweir } 1221*cdf0e10cSrcweir 1222*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, TransitionSelected, void *, EMPTYARG ) 1223*cdf0e10cSrcweir { 1224*cdf0e10cSrcweir applyToSelectedPages(); 1225*cdf0e10cSrcweir return 0; 1226*cdf0e10cSrcweir } 1227*cdf0e10cSrcweir 1228*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, AdvanceSlideRadioButtonToggled, void *, EMPTYARG ) 1229*cdf0e10cSrcweir { 1230*cdf0e10cSrcweir updateControlState(); 1231*cdf0e10cSrcweir applyToSelectedPages(); 1232*cdf0e10cSrcweir return 0; 1233*cdf0e10cSrcweir } 1234*cdf0e10cSrcweir 1235*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, AdvanceTimeModified, void *, EMPTYARG ) 1236*cdf0e10cSrcweir { 1237*cdf0e10cSrcweir applyToSelectedPages(); 1238*cdf0e10cSrcweir return 0; 1239*cdf0e10cSrcweir } 1240*cdf0e10cSrcweir 1241*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, SpeedListBoxSelected, void *, EMPTYARG ) 1242*cdf0e10cSrcweir { 1243*cdf0e10cSrcweir applyToSelectedPages(); 1244*cdf0e10cSrcweir return 0; 1245*cdf0e10cSrcweir } 1246*cdf0e10cSrcweir 1247*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, SoundListBoxSelected, void *, EMPTYARG ) 1248*cdf0e10cSrcweir { 1249*cdf0e10cSrcweir if( maLB_SOUND.GetSelectEntryCount() ) 1250*cdf0e10cSrcweir { 1251*cdf0e10cSrcweir sal_uInt16 nPos = maLB_SOUND.GetSelectEntryPos(); 1252*cdf0e10cSrcweir if( nPos == 2 ) 1253*cdf0e10cSrcweir { 1254*cdf0e10cSrcweir // other sound ... 1255*cdf0e10cSrcweir openSoundFileDialog(); 1256*cdf0e10cSrcweir } 1257*cdf0e10cSrcweir } 1258*cdf0e10cSrcweir updateControlState(); 1259*cdf0e10cSrcweir applyToSelectedPages(); 1260*cdf0e10cSrcweir return 0; 1261*cdf0e10cSrcweir } 1262*cdf0e10cSrcweir 1263*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, LoopSoundBoxChecked, void *, EMPTYARG ) 1264*cdf0e10cSrcweir { 1265*cdf0e10cSrcweir applyToSelectedPages(); 1266*cdf0e10cSrcweir return 0; 1267*cdf0e10cSrcweir } 1268*cdf0e10cSrcweir 1269*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, AutoPreviewClicked, void *, EMPTYARG ) 1270*cdf0e10cSrcweir { 1271*cdf0e10cSrcweir SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); 1272*cdf0e10cSrcweir pOptions->SetPreviewTransitions( maCB_AUTO_PREVIEW.IsChecked() ? sal_True : sal_False ); 1273*cdf0e10cSrcweir return 0; 1274*cdf0e10cSrcweir } 1275*cdf0e10cSrcweir 1276*cdf0e10cSrcweir IMPL_LINK( SlideTransitionPane, LateInitCallback, Timer*, EMPTYARG ) 1277*cdf0e10cSrcweir { 1278*cdf0e10cSrcweir const TransitionPresetList& rPresetList = TransitionPreset::getTransitionPresetList(); 1279*cdf0e10cSrcweir TransitionPresetList::const_iterator aIter( rPresetList.begin() ); 1280*cdf0e10cSrcweir const TransitionPresetList::const_iterator aEnd( rPresetList.end() ); 1281*cdf0e10cSrcweir sal_uInt16 nIndex = 0; 1282*cdf0e10cSrcweir ::std::size_t nUIIndex = 0; 1283*cdf0e10cSrcweir while( aIter != aEnd ) 1284*cdf0e10cSrcweir { 1285*cdf0e10cSrcweir TransitionPresetPtr pPreset = (*aIter++); 1286*cdf0e10cSrcweir const OUString aUIName( pPreset->getUIName() ); 1287*cdf0e10cSrcweir if( aUIName.getLength() ) 1288*cdf0e10cSrcweir { 1289*cdf0e10cSrcweir maLB_SLIDE_TRANSITIONS.InsertEntry( aUIName ); 1290*cdf0e10cSrcweir m_aPresetIndexes[ nIndex ] = (sal_uInt16)nUIIndex; 1291*cdf0e10cSrcweir ++nUIIndex; 1292*cdf0e10cSrcweir } 1293*cdf0e10cSrcweir ++nIndex; 1294*cdf0e10cSrcweir } 1295*cdf0e10cSrcweir 1296*cdf0e10cSrcweir updateSoundList(); 1297*cdf0e10cSrcweir updateControls(); 1298*cdf0e10cSrcweir 1299*cdf0e10cSrcweir return 0; 1300*cdf0e10cSrcweir } 1301*cdf0e10cSrcweir 1302*cdf0e10cSrcweir ::Window * createSlideTransitionPanel( ::Window* pParent, ViewShellBase& rBase ) 1303*cdf0e10cSrcweir { 1304*cdf0e10cSrcweir DialogListBox* pWindow = 0; 1305*cdf0e10cSrcweir 1306*cdf0e10cSrcweir DrawDocShell* pDocSh = rBase.GetDocShell(); 1307*cdf0e10cSrcweir if( pDocSh ) 1308*cdf0e10cSrcweir { 1309*cdf0e10cSrcweir pWindow = new DialogListBox( pParent, WB_CLIPCHILDREN|WB_TABSTOP|WB_AUTOHSCROLL ); 1310*cdf0e10cSrcweir 1311*cdf0e10cSrcweir Size aMinSize( pWindow->LogicToPixel( Size( 72, 216 ), MAP_APPFONT ) ); 1312*cdf0e10cSrcweir ::Window* pPaneWindow = new SlideTransitionPane( pWindow, rBase, aMinSize, pDocSh->GetDoc() ); 1313*cdf0e10cSrcweir pWindow->SetChildWindow( pPaneWindow, aMinSize ); 1314*cdf0e10cSrcweir pWindow->SetText( pPaneWindow->GetText() ); 1315*cdf0e10cSrcweir } 1316*cdf0e10cSrcweir 1317*cdf0e10cSrcweir return pWindow; 1318*cdf0e10cSrcweir } 1319*cdf0e10cSrcweir 1320*cdf0e10cSrcweir 1321*cdf0e10cSrcweir } // namespace sd 1322