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 29*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 30*cdf0e10cSrcweir #include "precompiled_sd.hxx" 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include <boost/scoped_ptr.hpp> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include "com/sun/star/frame/XComponentLoader.hpp" 35*cdf0e10cSrcweir #include <com/sun/star/lang/XInitialization.hpp> 36*cdf0e10cSrcweir #include <com/sun/star/document/XEventsSupplier.hpp> 37*cdf0e10cSrcweir #include <com/sun/star/drawing/XMasterPageTarget.hpp> 38*cdf0e10cSrcweir #include <com/sun/star/container/XNameReplace.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp> 41*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 42*cdf0e10cSrcweir #include <com/sun/star/awt/SystemPointer.hpp> 43*cdf0e10cSrcweir #include <com/sun/star/util/XURLTransformer.hpp> 44*cdf0e10cSrcweir #include <com/sun/star/frame/XDispatch.hpp> 45*cdf0e10cSrcweir #include <com/sun/star/frame/XLayoutManager.hpp> 46*cdf0e10cSrcweir #include <vos/process.hxx> 47*cdf0e10cSrcweir #include <svl/aeitem.hxx> 48*cdf0e10cSrcweir #include <svl/urihelper.hxx> 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir #include <toolkit/unohlp.hxx> 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir #include <sfx2/imagemgr.hxx> 53*cdf0e10cSrcweir #include <sfx2/request.hxx> 54*cdf0e10cSrcweir #include <sfx2/docfile.hxx> 55*cdf0e10cSrcweir #include <sfx2/app.hxx> 56*cdf0e10cSrcweir #include <svx/unoapi.hxx> 57*cdf0e10cSrcweir #include <svx/svdoole2.hxx> 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir // for child window ids 60*cdf0e10cSrcweir #include <sfx2/templdlg.hxx> 61*cdf0e10cSrcweir #include <svx/f3dchild.hxx> 62*cdf0e10cSrcweir #include <svx/imapdlg.hxx> 63*cdf0e10cSrcweir #include <svx/fontwork.hxx> 64*cdf0e10cSrcweir #include <svx/colrctrl.hxx> 65*cdf0e10cSrcweir #include <svx/bmpmask.hxx> 66*cdf0e10cSrcweir #include <svx/srchdlg.hxx> 67*cdf0e10cSrcweir #include <svx/hyprlink.hxx> 68*cdf0e10cSrcweir #include <svx/hyperdlg.hxx> 69*cdf0e10cSrcweir #include <svx/galbrws.hxx> 70*cdf0e10cSrcweir #include "NavigatorChildWindow.hxx" 71*cdf0e10cSrcweir #include "AnimationChildWindow.hxx" 72*cdf0e10cSrcweir #include <slideshowimpl.hxx> 73*cdf0e10cSrcweir #include <slideshowviewimpl.hxx> 74*cdf0e10cSrcweir #include <pgjump.hxx> 75*cdf0e10cSrcweir #include "PaneHider.hxx" 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir #include "glob.hrc" 78*cdf0e10cSrcweir #include "res_bmp.hrc" 79*cdf0e10cSrcweir #include "sdresid.hxx" 80*cdf0e10cSrcweir #include "vcl/canvastools.hxx" 81*cdf0e10cSrcweir #include "comphelper/anytostring.hxx" 82*cdf0e10cSrcweir #include "cppuhelper/exc_hlp.hxx" 83*cdf0e10cSrcweir #include "rtl/ref.hxx" 84*cdf0e10cSrcweir #include "slideshow.hrc" 85*cdf0e10cSrcweir #include "canvas/elapsedtime.hxx" 86*cdf0e10cSrcweir #include "canvas/prioritybooster.hxx" 87*cdf0e10cSrcweir #include "avmedia/mediawindow.hxx" 88*cdf0e10cSrcweir #include "svtools/colrdlg.hxx" 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir #include <boost/noncopyable.hpp> 91*cdf0e10cSrcweir #include <boost/bind.hpp> 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir using ::rtl::OUString; 94*cdf0e10cSrcweir using ::rtl::OString; 95*cdf0e10cSrcweir using ::cppu::OInterfaceContainerHelper; 96*cdf0e10cSrcweir using ::comphelper::ImplementationReference; 97*cdf0e10cSrcweir using ::com::sun::star::animations::XAnimationNode; 98*cdf0e10cSrcweir using ::com::sun::star::animations::XAnimationListener; 99*cdf0e10cSrcweir using ::com::sun::star::awt::XWindow; 100*cdf0e10cSrcweir using namespace ::com::sun::star; 101*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 102*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 103*cdf0e10cSrcweir using namespace ::com::sun::star::drawing; 104*cdf0e10cSrcweir using namespace ::com::sun::star::container; 105*cdf0e10cSrcweir using namespace ::com::sun::star::document; 106*cdf0e10cSrcweir using namespace ::com::sun::star::presentation; 107*cdf0e10cSrcweir using namespace ::com::sun::star::drawing; 108*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir extern void NotifyDocumentEvent( SdDrawDocument* pDocument, const rtl::OUString& rEventName ); 111*cdf0e10cSrcweir extern String getUiNameFromPageApiNameImpl( const OUString& rApiName ); 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir namespace sd 114*cdf0e10cSrcweir { 115*cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////// 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir // Slots, welche im Sfx verwaltet werden und in der SlideShow disabled 118*cdf0e10cSrcweir // werden sollen (muss in Reihenfolge der SIDs geordnet sein) 119*cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA pAllowed[] = 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir SID_OPENDOC , // 5501 // damit interne Spruenge klappen 122*cdf0e10cSrcweir SID_JUMPTOMARK , // 5598 123*cdf0e10cSrcweir // SID_SHOWPOPUPS , // 5929 124*cdf0e10cSrcweir // SID_GALLERY , // 5960 125*cdf0e10cSrcweir SID_OPENHYPERLINK , // 6676 126*cdf0e10cSrcweir // SID_GALLERY_FORMATS , // 10280 127*cdf0e10cSrcweir SID_NAVIGATOR , // 10366 128*cdf0e10cSrcweir // SID_FM_DESIGN_MODE , // 10629 129*cdf0e10cSrcweir SID_PRESENTATION_END , // 27218 130*cdf0e10cSrcweir SID_NAVIGATOR_PAGENAME , // 27287 131*cdf0e10cSrcweir SID_NAVIGATOR_STATE , // 27288 132*cdf0e10cSrcweir SID_NAVIGATOR_INIT , // 27289 133*cdf0e10cSrcweir SID_NAVIGATOR_PEN , // 27291 134*cdf0e10cSrcweir SID_NAVIGATOR_PAGE , // 27292 135*cdf0e10cSrcweir SID_NAVIGATOR_OBJECT // 27293 136*cdf0e10cSrcweir }; 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////// 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////// 141*cdf0e10cSrcweir // AnimationSlideController 142*cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////// 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir class AnimationSlideController 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir public: 147*cdf0e10cSrcweir enum Mode { ALL, FROM, CUSTOM, PREVIEW }; 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir public: 150*cdf0e10cSrcweir AnimationSlideController( Reference< XIndexAccess > xSlides, Mode eMode ); 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir void setStartSlideNumber( sal_Int32 nSlideNumber ) { mnStartSlideNumber = nSlideNumber; } 153*cdf0e10cSrcweir sal_Int32 getStartSlideIndex() const; 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir sal_Int32 getCurrentSlideNumber() const; 156*cdf0e10cSrcweir sal_Int32 getCurrentSlideIndex() const; 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir sal_Int32 getSlideIndexCount() const { return maSlideNumbers.size(); } 159*cdf0e10cSrcweir sal_Int32 getSlideNumberCount() const { return mnSlideCount; } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir sal_Int32 getSlideNumber( sal_Int32 nSlideIndex ) const; 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir void insertSlideNumber( sal_Int32 nSlideNumber, bool bVisible = true ); 164*cdf0e10cSrcweir void setPreviewNode( const Reference< XAnimationNode >& xPreviewNode ); 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir bool jumpToSlideIndex( sal_Int32 nNewSlideIndex ); 167*cdf0e10cSrcweir bool jumpToSlideNumber( sal_Int32 nNewSlideIndex ); 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir bool nextSlide(); 170*cdf0e10cSrcweir bool previousSlide(); 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir void displayCurrentSlide( const Reference< XSlideShow >& xShow, 173*cdf0e10cSrcweir const Reference< XDrawPagesSupplier>& xDrawPages, 174*cdf0e10cSrcweir const bool bSkipAllMainSequenceEffects ); 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir sal_Int32 getNextSlideIndex() const; 177*cdf0e10cSrcweir sal_Int32 getPreviousSlideIndex() const; 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir bool isVisibleSlideNumber( sal_Int32 nSlideNumber ) const; 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir Reference< XDrawPage > getSlideByNumber( sal_Int32 nSlideNumber ) const; 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir sal_Int32 getNextSlideNumber() const; 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir bool hasSlides() const { return !maSlideNumbers.empty(); } 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir private: 188*cdf0e10cSrcweir bool getSlideAPI( sal_Int32 nSlideNumber, Reference< XDrawPage >& xSlide, Reference< XAnimationNode >& xAnimNode ); 189*cdf0e10cSrcweir sal_Int32 findSlideIndex( sal_Int32 nSlideNumber ) const; 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir bool isValidIndex( sal_Int32 nIndex ) const { return (nIndex >= 0) && (nIndex < (sal_Int32)maSlideNumbers.size()); } 192*cdf0e10cSrcweir bool isValidSlideNumber( sal_Int32 nSlideNumber ) const { return (nSlideNumber >= 0) && (nSlideNumber < mnSlideCount); } 193*cdf0e10cSrcweir 194*cdf0e10cSrcweir private: 195*cdf0e10cSrcweir Mode meMode; 196*cdf0e10cSrcweir sal_Int32 mnStartSlideNumber; 197*cdf0e10cSrcweir std::vector< sal_Int32 > maSlideNumbers; 198*cdf0e10cSrcweir std::vector< bool > maSlideVisible; 199*cdf0e10cSrcweir std::vector< bool > maSlideVisited; 200*cdf0e10cSrcweir Reference< XAnimationNode > mxPreviewNode; 201*cdf0e10cSrcweir sal_Int32 mnSlideCount; 202*cdf0e10cSrcweir sal_Int32 mnCurrentSlideIndex; 203*cdf0e10cSrcweir sal_Int32 mnHiddenSlideNumber; 204*cdf0e10cSrcweir Reference< XIndexAccess > mxSlides; 205*cdf0e10cSrcweir }; 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir Reference< XDrawPage > AnimationSlideController::getSlideByNumber( sal_Int32 nSlideNumber ) const 208*cdf0e10cSrcweir { 209*cdf0e10cSrcweir Reference< XDrawPage > xSlide; 210*cdf0e10cSrcweir if( mxSlides.is() && (nSlideNumber >= 0) && (nSlideNumber < mxSlides->getCount()) ) 211*cdf0e10cSrcweir mxSlides->getByIndex( nSlideNumber ) >>= xSlide; 212*cdf0e10cSrcweir return xSlide; 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir bool AnimationSlideController::isVisibleSlideNumber( sal_Int32 nSlideNumber ) const 216*cdf0e10cSrcweir { 217*cdf0e10cSrcweir sal_Int32 nIndex = findSlideIndex( nSlideNumber ); 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir if( nIndex != -1 ) 220*cdf0e10cSrcweir return maSlideVisible[ nIndex ]; 221*cdf0e10cSrcweir else 222*cdf0e10cSrcweir return false; 223*cdf0e10cSrcweir } 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir void AnimationSlideController::setPreviewNode( const Reference< XAnimationNode >& xPreviewNode ) 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir mxPreviewNode = xPreviewNode; 229*cdf0e10cSrcweir } 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir AnimationSlideController::AnimationSlideController( Reference< XIndexAccess > xSlides, Mode eMode ) 232*cdf0e10cSrcweir : meMode( eMode ) 233*cdf0e10cSrcweir , mnStartSlideNumber(-1) 234*cdf0e10cSrcweir , mnSlideCount( 0 ) 235*cdf0e10cSrcweir , mnCurrentSlideIndex(0) 236*cdf0e10cSrcweir , mnHiddenSlideNumber( -1 ) 237*cdf0e10cSrcweir , mxSlides( xSlides ) 238*cdf0e10cSrcweir { 239*cdf0e10cSrcweir if( mxSlides.is() ) 240*cdf0e10cSrcweir mnSlideCount = xSlides->getCount(); 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getStartSlideIndex() const 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir if( mnStartSlideNumber >= 0 ) 246*cdf0e10cSrcweir { 247*cdf0e10cSrcweir sal_Int32 nIndex; 248*cdf0e10cSrcweir const sal_Int32 nCount = maSlideNumbers.size(); 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir for( nIndex = 0; nIndex < nCount; nIndex++ ) 251*cdf0e10cSrcweir { 252*cdf0e10cSrcweir if( maSlideNumbers[nIndex] == mnStartSlideNumber ) 253*cdf0e10cSrcweir return nIndex; 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir return 0; 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getCurrentSlideNumber() const 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir if( mnHiddenSlideNumber != -1 ) 263*cdf0e10cSrcweir return mnHiddenSlideNumber; 264*cdf0e10cSrcweir else if( !maSlideNumbers.empty() ) 265*cdf0e10cSrcweir return maSlideNumbers[mnCurrentSlideIndex]; 266*cdf0e10cSrcweir else 267*cdf0e10cSrcweir return 0; 268*cdf0e10cSrcweir } 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getCurrentSlideIndex() const 271*cdf0e10cSrcweir { 272*cdf0e10cSrcweir if( mnHiddenSlideNumber != -1 ) 273*cdf0e10cSrcweir return -1; 274*cdf0e10cSrcweir else 275*cdf0e10cSrcweir return mnCurrentSlideIndex; 276*cdf0e10cSrcweir } 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir bool AnimationSlideController::jumpToSlideIndex( sal_Int32 nNewSlideIndex ) 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir if( isValidIndex( nNewSlideIndex ) ) 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir mnCurrentSlideIndex = nNewSlideIndex; 283*cdf0e10cSrcweir mnHiddenSlideNumber = -1; 284*cdf0e10cSrcweir maSlideVisited[mnCurrentSlideIndex] = true; 285*cdf0e10cSrcweir return true; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir else 288*cdf0e10cSrcweir { 289*cdf0e10cSrcweir return false; 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir bool AnimationSlideController::jumpToSlideNumber( sal_Int32 nNewSlideNumber ) 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir sal_Int32 nIndex = findSlideIndex( nNewSlideNumber ); 296*cdf0e10cSrcweir if( isValidIndex( nIndex ) ) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir return jumpToSlideIndex( nIndex ); 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir else if( (nNewSlideNumber >= 0) && (nNewSlideNumber < mnSlideCount) ) 301*cdf0e10cSrcweir { 302*cdf0e10cSrcweir // jump to a hidden slide 303*cdf0e10cSrcweir mnHiddenSlideNumber = nNewSlideNumber; 304*cdf0e10cSrcweir return true; 305*cdf0e10cSrcweir } 306*cdf0e10cSrcweir else 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir return false; 309*cdf0e10cSrcweir } 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getSlideNumber( sal_Int32 nSlideIndex ) const 313*cdf0e10cSrcweir { 314*cdf0e10cSrcweir if( isValidIndex( nSlideIndex ) ) 315*cdf0e10cSrcweir return maSlideNumbers[nSlideIndex]; 316*cdf0e10cSrcweir else 317*cdf0e10cSrcweir return -1; 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir void AnimationSlideController::insertSlideNumber( sal_Int32 nSlideNumber, bool bVisible /* = true */ ) 321*cdf0e10cSrcweir { 322*cdf0e10cSrcweir DBG_ASSERT( isValidSlideNumber( nSlideNumber ), "sd::AnimationSlideController::insertSlideNumber(), illegal index" ); 323*cdf0e10cSrcweir if( isValidSlideNumber( nSlideNumber ) ) 324*cdf0e10cSrcweir { 325*cdf0e10cSrcweir maSlideNumbers.push_back( nSlideNumber ); 326*cdf0e10cSrcweir maSlideVisible.push_back( bVisible ); 327*cdf0e10cSrcweir maSlideVisited.push_back( false ); 328*cdf0e10cSrcweir } 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir bool AnimationSlideController::getSlideAPI( sal_Int32 nSlideNumber, Reference< XDrawPage >& xSlide, Reference< XAnimationNode >& xAnimNode ) 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir if( isValidSlideNumber( nSlideNumber ) ) try 334*cdf0e10cSrcweir { 335*cdf0e10cSrcweir xSlide = Reference< XDrawPage >( mxSlides->getByIndex(nSlideNumber), UNO_QUERY_THROW ); 336*cdf0e10cSrcweir 337*cdf0e10cSrcweir if( meMode == PREVIEW ) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir xAnimNode = mxPreviewNode; 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir else 342*cdf0e10cSrcweir { 343*cdf0e10cSrcweir Reference< animations::XAnimationNodeSupplier > xAnimNodeSupplier( xSlide, UNO_QUERY_THROW ); 344*cdf0e10cSrcweir xAnimNode = xAnimNodeSupplier->getAnimationNode(); 345*cdf0e10cSrcweir } 346*cdf0e10cSrcweir 347*cdf0e10cSrcweir return true; 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir catch( Exception& e ) 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir (void)e; 352*cdf0e10cSrcweir DBG_ERROR( 353*cdf0e10cSrcweir (OString("sd::AnimationSlideController::getSlideAPI(), " 354*cdf0e10cSrcweir "exception caught: ") + 355*cdf0e10cSrcweir rtl::OUStringToOString( 356*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 357*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir } 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir return false; 362*cdf0e10cSrcweir } 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir sal_Int32 AnimationSlideController::findSlideIndex( sal_Int32 nSlideNumber ) const 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir sal_Int32 nIndex; 367*cdf0e10cSrcweir const sal_Int32 nCount = maSlideNumbers.size(); 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir for( nIndex = 0; nIndex < nCount; nIndex++ ) 370*cdf0e10cSrcweir { 371*cdf0e10cSrcweir if( maSlideNumbers[nIndex] == nSlideNumber ) 372*cdf0e10cSrcweir return nIndex; 373*cdf0e10cSrcweir } 374*cdf0e10cSrcweir 375*cdf0e10cSrcweir return -1; 376*cdf0e10cSrcweir } 377*cdf0e10cSrcweir 378*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getNextSlideIndex() const 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir switch( meMode ) 381*cdf0e10cSrcweir { 382*cdf0e10cSrcweir case ALL: 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir sal_Int32 nNewSlideIndex = mnCurrentSlideIndex + 1; 385*cdf0e10cSrcweir if( isValidIndex( nNewSlideIndex ) ) 386*cdf0e10cSrcweir { 387*cdf0e10cSrcweir // if the current slide is not excluded, make sure the 388*cdf0e10cSrcweir // next slide is also not excluded. 389*cdf0e10cSrcweir // if the current slide is excluded, we want to go 390*cdf0e10cSrcweir // to the next slide, even if this is also excluded. 391*cdf0e10cSrcweir if( maSlideVisible[mnCurrentSlideIndex] ) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir while( isValidIndex( nNewSlideIndex ) ) 394*cdf0e10cSrcweir { 395*cdf0e10cSrcweir if( maSlideVisible[nNewSlideIndex] ) 396*cdf0e10cSrcweir break; 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir nNewSlideIndex++; 399*cdf0e10cSrcweir } 400*cdf0e10cSrcweir } 401*cdf0e10cSrcweir } 402*cdf0e10cSrcweir return isValidIndex( nNewSlideIndex ) ? nNewSlideIndex : -1; 403*cdf0e10cSrcweir } 404*cdf0e10cSrcweir 405*cdf0e10cSrcweir case FROM: 406*cdf0e10cSrcweir case CUSTOM: 407*cdf0e10cSrcweir return mnHiddenSlideNumber == -1 ? mnCurrentSlideIndex + 1 : mnCurrentSlideIndex; 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir default: 410*cdf0e10cSrcweir case PREVIEW: 411*cdf0e10cSrcweir return -1; 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir } 414*cdf0e10cSrcweir } 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getNextSlideNumber() const 417*cdf0e10cSrcweir { 418*cdf0e10cSrcweir sal_Int32 nNextSlideIndex = getNextSlideIndex(); 419*cdf0e10cSrcweir if( isValidIndex( nNextSlideIndex ) ) 420*cdf0e10cSrcweir { 421*cdf0e10cSrcweir return maSlideNumbers[nNextSlideIndex]; 422*cdf0e10cSrcweir } 423*cdf0e10cSrcweir else 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir return -1; 426*cdf0e10cSrcweir } 427*cdf0e10cSrcweir } 428*cdf0e10cSrcweir 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir bool AnimationSlideController::nextSlide() 431*cdf0e10cSrcweir { 432*cdf0e10cSrcweir return jumpToSlideIndex( getNextSlideIndex() ); 433*cdf0e10cSrcweir } 434*cdf0e10cSrcweir 435*cdf0e10cSrcweir sal_Int32 AnimationSlideController::getPreviousSlideIndex() const 436*cdf0e10cSrcweir { 437*cdf0e10cSrcweir sal_Int32 nNewSlideIndex = mnCurrentSlideIndex - 1; 438*cdf0e10cSrcweir 439*cdf0e10cSrcweir switch( meMode ) 440*cdf0e10cSrcweir { 441*cdf0e10cSrcweir case ALL: 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir // make sure the previous slide is visible 444*cdf0e10cSrcweir // or was already visited 445*cdf0e10cSrcweir while( isValidIndex( nNewSlideIndex ) ) 446*cdf0e10cSrcweir { 447*cdf0e10cSrcweir if( maSlideVisible[nNewSlideIndex] || maSlideVisited[nNewSlideIndex] ) 448*cdf0e10cSrcweir break; 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir nNewSlideIndex--; 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir break; 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir case PREVIEW: 457*cdf0e10cSrcweir return -1; 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir default: 460*cdf0e10cSrcweir break; 461*cdf0e10cSrcweir } 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir return nNewSlideIndex; 464*cdf0e10cSrcweir } 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir bool AnimationSlideController::previousSlide() 467*cdf0e10cSrcweir { 468*cdf0e10cSrcweir return jumpToSlideIndex( getPreviousSlideIndex() ); 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir void AnimationSlideController::displayCurrentSlide( const Reference< XSlideShow >& xShow, 472*cdf0e10cSrcweir const Reference< XDrawPagesSupplier>& xDrawPages, 473*cdf0e10cSrcweir const bool bSkipAllMainSequenceEffects ) 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir const sal_Int32 nCurrentSlideNumber = getCurrentSlideNumber(); 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir if( xShow.is() && (nCurrentSlideNumber != -1 ) ) 478*cdf0e10cSrcweir { 479*cdf0e10cSrcweir Reference< XDrawPage > xSlide; 480*cdf0e10cSrcweir Reference< XAnimationNode > xAnimNode; 481*cdf0e10cSrcweir ::std::vector<PropertyValue> aProperties; 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir const sal_Int32 nNextSlideNumber = getNextSlideNumber(); 484*cdf0e10cSrcweir if( getSlideAPI( nNextSlideNumber, xSlide, xAnimNode ) ) 485*cdf0e10cSrcweir { 486*cdf0e10cSrcweir Sequence< Any > aValue(2); 487*cdf0e10cSrcweir aValue[0] <<= xSlide; 488*cdf0e10cSrcweir aValue[1] <<= xAnimNode; 489*cdf0e10cSrcweir aProperties.push_back( 490*cdf0e10cSrcweir PropertyValue( 491*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM( "Prefetch" ) ), 492*cdf0e10cSrcweir -1, 493*cdf0e10cSrcweir Any(aValue), 494*cdf0e10cSrcweir PropertyState_DIRECT_VALUE)); 495*cdf0e10cSrcweir } 496*cdf0e10cSrcweir if (bSkipAllMainSequenceEffects) 497*cdf0e10cSrcweir { 498*cdf0e10cSrcweir // Add one property that prevents the slide transition from being 499*cdf0e10cSrcweir // shown (to speed up the transition to the previous slide) and 500*cdf0e10cSrcweir // one to show all main sequence effects so that the user can 501*cdf0e10cSrcweir // continue to undo effects. 502*cdf0e10cSrcweir aProperties.push_back( 503*cdf0e10cSrcweir PropertyValue( 504*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("SkipAllMainSequenceEffects")), 505*cdf0e10cSrcweir -1, 506*cdf0e10cSrcweir Any(sal_True), 507*cdf0e10cSrcweir PropertyState_DIRECT_VALUE)); 508*cdf0e10cSrcweir aProperties.push_back( 509*cdf0e10cSrcweir PropertyValue( 510*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("SkipSlideTransition")), 511*cdf0e10cSrcweir -1, 512*cdf0e10cSrcweir Any(sal_True), 513*cdf0e10cSrcweir PropertyState_DIRECT_VALUE)); 514*cdf0e10cSrcweir } 515*cdf0e10cSrcweir 516*cdf0e10cSrcweir // Convert vector into uno Sequence. 517*cdf0e10cSrcweir Sequence< PropertyValue > aPropertySequence (aProperties.size()); 518*cdf0e10cSrcweir for (int nIndex=0,nCount=aProperties.size();nIndex<nCount; ++nIndex) 519*cdf0e10cSrcweir aPropertySequence[nIndex] = aProperties[nIndex]; 520*cdf0e10cSrcweir 521*cdf0e10cSrcweir if( getSlideAPI( nCurrentSlideNumber, xSlide, xAnimNode ) ) 522*cdf0e10cSrcweir xShow->displaySlide( xSlide, xDrawPages, xAnimNode, aPropertySequence ); 523*cdf0e10cSrcweir } 524*cdf0e10cSrcweir } 525*cdf0e10cSrcweir 526*cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////// 527*cdf0e10cSrcweir // class SlideshowImpl 528*cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////// 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir SlideshowImpl::SlideshowImpl( const Reference< XPresentation2 >& xPresentation, ViewShell* pViewSh, ::sd::View* pView, SdDrawDocument* pDoc, ::Window* pParentWindow ) 531*cdf0e10cSrcweir : SlideshowImplBase( m_aMutex ) 532*cdf0e10cSrcweir , mxModel(pDoc->getUnoModel(),UNO_QUERY_THROW) 533*cdf0e10cSrcweir , mpView(pView) 534*cdf0e10cSrcweir , mpViewShell(pViewSh) 535*cdf0e10cSrcweir , mpDocSh(pDoc->GetDocSh()) 536*cdf0e10cSrcweir , mpDoc(pDoc) 537*cdf0e10cSrcweir , mpNewAttr(0) 538*cdf0e10cSrcweir , mpParentWindow(pParentWindow) 539*cdf0e10cSrcweir , mpShowWindow(0) 540*cdf0e10cSrcweir , mpTimeButton(0) 541*cdf0e10cSrcweir , mnRestoreSlide(0) 542*cdf0e10cSrcweir , maPresSize( -1, -1 ) 543*cdf0e10cSrcweir , meAnimationMode(ANIMATIONMODE_SHOW) 544*cdf0e10cSrcweir , mpOldActiveWindow(0) 545*cdf0e10cSrcweir , mnChildMask( 0 ) 546*cdf0e10cSrcweir , mbGridVisible(false) 547*cdf0e10cSrcweir , mbBordVisible(false) 548*cdf0e10cSrcweir , mbSlideBorderVisible(false) 549*cdf0e10cSrcweir , mbSetOnlineSpelling(false) 550*cdf0e10cSrcweir , mbDisposed(false) 551*cdf0e10cSrcweir , mbRehearseTimings(false) 552*cdf0e10cSrcweir , mbDesignMode(false) 553*cdf0e10cSrcweir , mbIsPaused(false) 554*cdf0e10cSrcweir , mbInputFreeze(false) 555*cdf0e10cSrcweir , mbActive(sal_False) 556*cdf0e10cSrcweir , maPresSettings( pDoc->getPresentationSettings() ) 557*cdf0e10cSrcweir , mnUserPaintColor( 0x80ff0000L ) 558*cdf0e10cSrcweir , mbUsePen(false) 559*cdf0e10cSrcweir , mdUserPaintStrokeWidth ( 150.0 ) 560*cdf0e10cSrcweir #ifdef ENABLE_ERASER_UI 561*cdf0e10cSrcweir , mbSwitchEraserMode(false) 562*cdf0e10cSrcweir , mnEraseInkSize(100) 563*cdf0e10cSrcweir #endif 564*cdf0e10cSrcweir , mnEntryCounter(0) 565*cdf0e10cSrcweir , mnLastSlideNumber(-1) 566*cdf0e10cSrcweir , msOnClick( RTL_CONSTASCII_USTRINGPARAM("OnClick") ) 567*cdf0e10cSrcweir , msBookmark( RTL_CONSTASCII_USTRINGPARAM("Bookmark") ) 568*cdf0e10cSrcweir , msVerb( RTL_CONSTASCII_USTRINGPARAM("Verb") ) 569*cdf0e10cSrcweir , mnEndShowEvent(0) 570*cdf0e10cSrcweir , mnContextMenuEvent(0) 571*cdf0e10cSrcweir , mnUpdateEvent(0) 572*cdf0e10cSrcweir , mxPresentation( xPresentation ) 573*cdf0e10cSrcweir { 574*cdf0e10cSrcweir if( mpViewShell ) 575*cdf0e10cSrcweir mpOldActiveWindow = mpViewShell->GetActiveWindow(); 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir maUpdateTimer.SetTimeoutHdl(LINK(this, SlideshowImpl, updateHdl)); 578*cdf0e10cSrcweir 579*cdf0e10cSrcweir maDeactivateTimer.SetTimeoutHdl(LINK(this, SlideshowImpl, deactivateHdl)); 580*cdf0e10cSrcweir maDeactivateTimer.SetTimeout( 20 ); 581*cdf0e10cSrcweir 582*cdf0e10cSrcweir maInputFreezeTimer.SetTimeoutHdl( LINK( this, SlideshowImpl, ReadyForNextInputHdl ) ); 583*cdf0e10cSrcweir maInputFreezeTimer.SetTimeout( 20 ); 584*cdf0e10cSrcweir 585*cdf0e10cSrcweir SvtSaveOptions aOptions; 586*cdf0e10cSrcweir 587*cdf0e10cSrcweir // no autosave during show 588*cdf0e10cSrcweir if( aOptions.IsAutoSave() ) 589*cdf0e10cSrcweir mbAutoSaveWasOn = true; 590*cdf0e10cSrcweir 591*cdf0e10cSrcweir Application::AddEventListener( LINK( this, SlideshowImpl, EventListenerHdl ) ); 592*cdf0e10cSrcweir 593*cdf0e10cSrcweir mbUsePen = maPresSettings.mbMouseAsPen; 594*cdf0e10cSrcweir 595*cdf0e10cSrcweir SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); 596*cdf0e10cSrcweir if( pOptions ) 597*cdf0e10cSrcweir { 598*cdf0e10cSrcweir mnUserPaintColor = pOptions->GetPresentationPenColor(); 599*cdf0e10cSrcweir mdUserPaintStrokeWidth = pOptions->GetPresentationPenWidth(); 600*cdf0e10cSrcweir } 601*cdf0e10cSrcweir } 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir SlideshowImpl::~SlideshowImpl() 604*cdf0e10cSrcweir { 605*cdf0e10cSrcweir SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS); 606*cdf0e10cSrcweir if( pOptions ) 607*cdf0e10cSrcweir { 608*cdf0e10cSrcweir pOptions->SetPresentationPenColor(mnUserPaintColor); 609*cdf0e10cSrcweir pOptions->SetPresentationPenWidth(mdUserPaintStrokeWidth); 610*cdf0e10cSrcweir } 611*cdf0e10cSrcweir 612*cdf0e10cSrcweir Application::RemoveEventListener( LINK( this, SlideshowImpl, EventListenerHdl ) ); 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir maDeactivateTimer.Stop(); 615*cdf0e10cSrcweir 616*cdf0e10cSrcweir if( !mbDisposed ) 617*cdf0e10cSrcweir { 618*cdf0e10cSrcweir DBG_ERROR("SlideshowImpl::~SlideshowImpl(), component was not disposed!"); 619*cdf0e10cSrcweir disposing(); 620*cdf0e10cSrcweir } 621*cdf0e10cSrcweir } 622*cdf0e10cSrcweir 623*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::disposing() 624*cdf0e10cSrcweir { 625*cdf0e10cSrcweir if( mxShow.is() && mpDoc ) 626*cdf0e10cSrcweir NotifyDocumentEvent( mpDoc, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("OnEndPresentation") ) ); 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir if( mbAutoSaveWasOn ) 629*cdf0e10cSrcweir setAutoSaveState( true ); 630*cdf0e10cSrcweir 631*cdf0e10cSrcweir if( mnEndShowEvent ) 632*cdf0e10cSrcweir Application::RemoveUserEvent( mnEndShowEvent ); 633*cdf0e10cSrcweir if( mnContextMenuEvent ) 634*cdf0e10cSrcweir Application::RemoveUserEvent( mnContextMenuEvent ); 635*cdf0e10cSrcweir 636*cdf0e10cSrcweir maInputFreezeTimer.Stop(); 637*cdf0e10cSrcweir 638*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 639*cdf0e10cSrcweir 640*cdf0e10cSrcweir if( !mxShow.is() ) 641*cdf0e10cSrcweir return; 642*cdf0e10cSrcweir 643*cdf0e10cSrcweir if( mxPresentation.is() ) 644*cdf0e10cSrcweir mxPresentation->end(); 645*cdf0e10cSrcweir 646*cdf0e10cSrcweir maUpdateTimer.Stop(); 647*cdf0e10cSrcweir 648*cdf0e10cSrcweir if( mnUpdateEvent ) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir Application::RemoveUserEvent( mnUpdateEvent ); 651*cdf0e10cSrcweir mnUpdateEvent = 0; 652*cdf0e10cSrcweir } 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir removeShapeEvents(); 655*cdf0e10cSrcweir 656*cdf0e10cSrcweir if( mxListenerProxy.is() ) 657*cdf0e10cSrcweir mxListenerProxy->removeAsSlideShowListener(); 658*cdf0e10cSrcweir 659*cdf0e10cSrcweir try 660*cdf0e10cSrcweir { 661*cdf0e10cSrcweir if( mxView.is() ) 662*cdf0e10cSrcweir mxShow->removeView( mxView.getRef() ); 663*cdf0e10cSrcweir 664*cdf0e10cSrcweir Reference< XComponent > xComponent( mxShow, UNO_QUERY ); 665*cdf0e10cSrcweir if( xComponent.is() ) 666*cdf0e10cSrcweir xComponent->dispose(); 667*cdf0e10cSrcweir 668*cdf0e10cSrcweir if( mxView.is() ) 669*cdf0e10cSrcweir mxView->dispose(); 670*cdf0e10cSrcweir } 671*cdf0e10cSrcweir catch( Exception& e ) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir static_cast<void>(e); 674*cdf0e10cSrcweir DBG_ERROR( 675*cdf0e10cSrcweir (OString("sd::SlideshowImpl::stop(), " 676*cdf0e10cSrcweir "exception caught: ") + 677*cdf0e10cSrcweir rtl::OUStringToOString( 678*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 679*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 680*cdf0e10cSrcweir 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir mxShow.clear(); 684*cdf0e10cSrcweir mxView.reset(); 685*cdf0e10cSrcweir mxListenerProxy.clear(); 686*cdf0e10cSrcweir mpSlideController.reset(); 687*cdf0e10cSrcweir 688*cdf0e10cSrcweir // der DrawView das Praesentationfenster wegnehmen und ihr dafuer ihre alten Fenster wiedergeben 689*cdf0e10cSrcweir if( mpShowWindow && mpView ) 690*cdf0e10cSrcweir mpView->DeleteWindowFromPaintView( mpShowWindow ); 691*cdf0e10cSrcweir 692*cdf0e10cSrcweir if( mpView ) 693*cdf0e10cSrcweir mpView->SetAnimationPause( sal_False ); 694*cdf0e10cSrcweir 695*cdf0e10cSrcweir if( mpViewShell ) 696*cdf0e10cSrcweir { 697*cdf0e10cSrcweir mpViewShell->SetActiveWindow(mpOldActiveWindow); 698*cdf0e10cSrcweir mpShowWindow->SetViewShell( NULL ); 699*cdf0e10cSrcweir } 700*cdf0e10cSrcweir 701*cdf0e10cSrcweir if( mpView ) 702*cdf0e10cSrcweir mpView->InvalidateAllWin(); 703*cdf0e10cSrcweir 704*cdf0e10cSrcweir if( maPresSettings.mbFullScreen ) 705*cdf0e10cSrcweir { 706*cdf0e10cSrcweir // restore StarBASICErrorHdl 707*cdf0e10cSrcweir StarBASIC::SetGlobalErrorHdl(maStarBASICGlobalErrorHdl); 708*cdf0e10cSrcweir maStarBASICGlobalErrorHdl = Link(); 709*cdf0e10cSrcweir } 710*cdf0e10cSrcweir else 711*cdf0e10cSrcweir { 712*cdf0e10cSrcweir if( mpShowWindow ) 713*cdf0e10cSrcweir mpShowWindow->Hide(); 714*cdf0e10cSrcweir } 715*cdf0e10cSrcweir 716*cdf0e10cSrcweir if( meAnimationMode == ANIMATIONMODE_SHOW ) 717*cdf0e10cSrcweir { 718*cdf0e10cSrcweir mpDocSh->SetSlotFilter(); 719*cdf0e10cSrcweir mpDocSh->ApplySlotFilter(); 720*cdf0e10cSrcweir 721*cdf0e10cSrcweir Help::EnableContextHelp(); 722*cdf0e10cSrcweir Help::EnableExtHelp(); 723*cdf0e10cSrcweir 724*cdf0e10cSrcweir showChildWindows(); 725*cdf0e10cSrcweir mnChildMask = 0UL; 726*cdf0e10cSrcweir } 727*cdf0e10cSrcweir 728*cdf0e10cSrcweir // aktuelle Fenster wieder einblenden 729*cdf0e10cSrcweir if( mpViewShell && !mpViewShell->ISA(PresentationViewShell)) 730*cdf0e10cSrcweir { 731*cdf0e10cSrcweir if( meAnimationMode == ANIMATIONMODE_SHOW ) 732*cdf0e10cSrcweir { 733*cdf0e10cSrcweir mpViewShell->GetViewShellBase().ShowUIControls (true); 734*cdf0e10cSrcweir mpPaneHider.reset(); 735*cdf0e10cSrcweir } 736*cdf0e10cSrcweir else if( meAnimationMode == ANIMATIONMODE_PREVIEW ) 737*cdf0e10cSrcweir { 738*cdf0e10cSrcweir mpViewShell->ShowUIControls (true); 739*cdf0e10cSrcweir } 740*cdf0e10cSrcweir } 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir if( mpTimeButton ) 743*cdf0e10cSrcweir { 744*cdf0e10cSrcweir mpTimeButton->Hide(); 745*cdf0e10cSrcweir delete mpTimeButton; 746*cdf0e10cSrcweir mpTimeButton = 0; 747*cdf0e10cSrcweir } 748*cdf0e10cSrcweir 749*cdf0e10cSrcweir if( mpShowWindow ) 750*cdf0e10cSrcweir mpShowWindow->Hide(); 751*cdf0e10cSrcweir 752*cdf0e10cSrcweir if ( mpViewShell ) 753*cdf0e10cSrcweir { 754*cdf0e10cSrcweir if( meAnimationMode == ANIMATIONMODE_SHOW ) 755*cdf0e10cSrcweir { 756*cdf0e10cSrcweir ::sd::Window* pActWin = mpViewShell->GetActiveWindow(); 757*cdf0e10cSrcweir 758*cdf0e10cSrcweir if (pActWin) 759*cdf0e10cSrcweir { 760*cdf0e10cSrcweir Size aVisSizePixel = pActWin->GetOutputSizePixel(); 761*cdf0e10cSrcweir Rectangle aVisAreaWin = pActWin->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); 762*cdf0e10cSrcweir mpViewShell->VisAreaChanged(aVisAreaWin); 763*cdf0e10cSrcweir mpView->VisAreaChanged(pActWin); 764*cdf0e10cSrcweir pActWin->GrabFocus(); 765*cdf0e10cSrcweir } 766*cdf0e10cSrcweir } 767*cdf0e10cSrcweir 768*cdf0e10cSrcweir // restart the custom show dialog if he started us 769*cdf0e10cSrcweir if( mpViewShell->IsStartShowWithDialog() && getDispatcher() ) 770*cdf0e10cSrcweir { 771*cdf0e10cSrcweir mpViewShell->SetStartShowWithDialog( sal_False ); 772*cdf0e10cSrcweir getDispatcher()->Execute( SID_CUSTOMSHOW_DLG, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD ); 773*cdf0e10cSrcweir } 774*cdf0e10cSrcweir 775*cdf0e10cSrcweir mpViewShell->GetViewShellBase().UpdateBorder(true); 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir 778*cdf0e10cSrcweir if( mpShowWindow ) 779*cdf0e10cSrcweir { 780*cdf0e10cSrcweir delete mpShowWindow; 781*cdf0e10cSrcweir mpShowWindow = 0; 782*cdf0e10cSrcweir } 783*cdf0e10cSrcweir 784*cdf0e10cSrcweir setActiveXToolbarsVisible( sal_True ); 785*cdf0e10cSrcweir 786*cdf0e10cSrcweir Application::EnableNoYieldMode(false); 787*cdf0e10cSrcweir Application::RemovePostYieldListener(LINK(this, SlideshowImpl, PostYieldListener)); 788*cdf0e10cSrcweir 789*cdf0e10cSrcweir mbDisposed = true; 790*cdf0e10cSrcweir } 791*cdf0e10cSrcweir 792*cdf0e10cSrcweir bool SlideshowImpl::startPreview( 793*cdf0e10cSrcweir const Reference< XDrawPage >& xDrawPage, 794*cdf0e10cSrcweir const Reference< XAnimationNode >& xAnimationNode, 795*cdf0e10cSrcweir ::Window* pParent ) 796*cdf0e10cSrcweir { 797*cdf0e10cSrcweir bool bRet = false; 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir try 800*cdf0e10cSrcweir { 801*cdf0e10cSrcweir const Reference<lang::XServiceInfo> xServiceInfo( xDrawPage, UNO_QUERY ); 802*cdf0e10cSrcweir if (xServiceInfo.is()) { 803*cdf0e10cSrcweir const Sequence<OUString> supportedServices( 804*cdf0e10cSrcweir xServiceInfo->getSupportedServiceNames() ); 805*cdf0e10cSrcweir for ( sal_Int32 pos = supportedServices.getLength(); pos--; ) { 806*cdf0e10cSrcweir if (supportedServices[pos].equalsAsciiL( 807*cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( 808*cdf0e10cSrcweir "com.sun.star.drawing.MasterPage") )) { 809*cdf0e10cSrcweir DBG_ERROR("sd::SlideshowImpl::startPreview() " 810*cdf0e10cSrcweir "not allowed on master page!"); 811*cdf0e10cSrcweir return false; 812*cdf0e10cSrcweir } 813*cdf0e10cSrcweir } 814*cdf0e10cSrcweir } 815*cdf0e10cSrcweir 816*cdf0e10cSrcweir mxPreviewDrawPage = xDrawPage; 817*cdf0e10cSrcweir mxPreviewAnimationNode = xAnimationNode; 818*cdf0e10cSrcweir meAnimationMode = ANIMATIONMODE_PREVIEW; 819*cdf0e10cSrcweir 820*cdf0e10cSrcweir maPresSettings.mbAll = sal_False; 821*cdf0e10cSrcweir maPresSettings.mbEndless = sal_False; 822*cdf0e10cSrcweir maPresSettings.mbCustomShow = sal_False; 823*cdf0e10cSrcweir maPresSettings.mbManual = sal_False; 824*cdf0e10cSrcweir maPresSettings.mbMouseVisible = sal_False; 825*cdf0e10cSrcweir maPresSettings.mbMouseAsPen = sal_False; 826*cdf0e10cSrcweir maPresSettings.mbLockedPages = sal_False; 827*cdf0e10cSrcweir maPresSettings.mbAlwaysOnTop = sal_False; 828*cdf0e10cSrcweir maPresSettings.mbFullScreen = sal_False; 829*cdf0e10cSrcweir maPresSettings.mbAnimationAllowed = sal_True; 830*cdf0e10cSrcweir maPresSettings.mnPauseTimeout = 0; 831*cdf0e10cSrcweir maPresSettings.mbShowPauseLogo = sal_False; 832*cdf0e10cSrcweir maPresSettings.mbStartWithNavigator = sal_False; 833*cdf0e10cSrcweir 834*cdf0e10cSrcweir Reference< XDrawPagesSupplier > xDrawPages( mpDoc->getUnoModel(), UNO_QUERY_THROW ); 835*cdf0e10cSrcweir Reference< XIndexAccess > xSlides( xDrawPages->getDrawPages(), UNO_QUERY_THROW ); 836*cdf0e10cSrcweir mpSlideController.reset( new AnimationSlideController( xSlides, AnimationSlideController::PREVIEW ) ); 837*cdf0e10cSrcweir 838*cdf0e10cSrcweir sal_Int32 nSlideNumber = 0; 839*cdf0e10cSrcweir Reference< XPropertySet > xSet( mxPreviewDrawPage, UNO_QUERY_THROW ); 840*cdf0e10cSrcweir xSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Number" ) ) ) >>= nSlideNumber; 841*cdf0e10cSrcweir mpSlideController->insertSlideNumber( nSlideNumber-1 ); 842*cdf0e10cSrcweir mpSlideController->setPreviewNode( xAnimationNode ); 843*cdf0e10cSrcweir 844*cdf0e10cSrcweir mpShowWindow = new ShowWindow( this, ((pParent == 0) && mpViewShell) ? mpParentWindow : pParent ); 845*cdf0e10cSrcweir if( mpViewShell ) 846*cdf0e10cSrcweir { 847*cdf0e10cSrcweir mpViewShell->SetActiveWindow( mpShowWindow ); 848*cdf0e10cSrcweir mpShowWindow->SetViewShell (mpViewShell); 849*cdf0e10cSrcweir mpViewShell->ShowUIControls (false); 850*cdf0e10cSrcweir } 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir if( mpView ) 853*cdf0e10cSrcweir { 854*cdf0e10cSrcweir mpView->AddWindowToPaintView( mpShowWindow ); 855*cdf0e10cSrcweir mpView->SetAnimationPause( sal_True ); 856*cdf0e10cSrcweir } 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir // call resize handler 859*cdf0e10cSrcweir if( pParent ) 860*cdf0e10cSrcweir { 861*cdf0e10cSrcweir maPresSize = pParent->GetSizePixel(); 862*cdf0e10cSrcweir } 863*cdf0e10cSrcweir else if( mpViewShell ) 864*cdf0e10cSrcweir { 865*cdf0e10cSrcweir Rectangle aContentRect (mpViewShell->GetViewShellBase().getClientRectangle()); 866*cdf0e10cSrcweir if (Application::GetSettings().GetLayoutRTL()) 867*cdf0e10cSrcweir { 868*cdf0e10cSrcweir aContentRect.nLeft = aContentRect.nRight; 869*cdf0e10cSrcweir aContentRect.nRight += aContentRect.nRight; 870*cdf0e10cSrcweir } 871*cdf0e10cSrcweir maPresSize = aContentRect.GetSize(); 872*cdf0e10cSrcweir mpShowWindow->SetPosPixel( aContentRect.TopLeft() ); 873*cdf0e10cSrcweir } 874*cdf0e10cSrcweir else 875*cdf0e10cSrcweir { 876*cdf0e10cSrcweir DBG_ERROR("sd::SlideshowImpl::startPreview(), I need either a parent window or a viewshell!"); 877*cdf0e10cSrcweir } 878*cdf0e10cSrcweir resize( maPresSize ); 879*cdf0e10cSrcweir 880*cdf0e10cSrcweir sal_Int32 nPropertyCount = 1; 881*cdf0e10cSrcweir if( mxPreviewAnimationNode.is() ) 882*cdf0e10cSrcweir nPropertyCount++; 883*cdf0e10cSrcweir 884*cdf0e10cSrcweir Sequence< beans::PropertyValue > aProperties(nPropertyCount); 885*cdf0e10cSrcweir aProperties[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM("AutomaticAdvancement") ); 886*cdf0e10cSrcweir aProperties[0].Value = uno::makeAny( (double)1.0 ); // one second timeout 887*cdf0e10cSrcweir 888*cdf0e10cSrcweir if( mxPreviewAnimationNode.is() ) 889*cdf0e10cSrcweir { 890*cdf0e10cSrcweir aProperties[1].Name = OUString( RTL_CONSTASCII_USTRINGPARAM("NoSlideTransitions") ); 891*cdf0e10cSrcweir aProperties[1].Value = uno::makeAny( sal_True ); 892*cdf0e10cSrcweir } 893*cdf0e10cSrcweir 894*cdf0e10cSrcweir bRet = startShowImpl( aProperties ); 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir if( mpShowWindow != 0 && meAnimationMode == ANIMATIONMODE_PREVIEW ) 897*cdf0e10cSrcweir mpShowWindow->SetPreviewMode(); 898*cdf0e10cSrcweir 899*cdf0e10cSrcweir } 900*cdf0e10cSrcweir catch( Exception& e ) 901*cdf0e10cSrcweir { 902*cdf0e10cSrcweir (void)e; 903*cdf0e10cSrcweir DBG_ERROR( 904*cdf0e10cSrcweir (OString("sd::SlideshowImpl::startPreview(), " 905*cdf0e10cSrcweir "exception caught: ") + 906*cdf0e10cSrcweir rtl::OUStringToOString( 907*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 908*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 909*cdf0e10cSrcweir bRet = false; 910*cdf0e10cSrcweir } 911*cdf0e10cSrcweir 912*cdf0e10cSrcweir return bRet; 913*cdf0e10cSrcweir } 914*cdf0e10cSrcweir 915*cdf0e10cSrcweir bool SlideshowImpl::startShow( PresentationSettingsEx* pPresSettings ) 916*cdf0e10cSrcweir { 917*cdf0e10cSrcweir const rtl::Reference<SlideshowImpl> this_(this); 918*cdf0e10cSrcweir 919*cdf0e10cSrcweir DBG_ASSERT( !mxShow.is(), "sd::SlideshowImpl::startShow(), called twice!" ); 920*cdf0e10cSrcweir if( mxShow.is() ) 921*cdf0e10cSrcweir return true; 922*cdf0e10cSrcweir DBG_ASSERT( mpParentWindow!=NULL, "sd::SlideshowImpl::startShow() called without parent window" ); 923*cdf0e10cSrcweir if (mpParentWindow == NULL) 924*cdf0e10cSrcweir return false; 925*cdf0e10cSrcweir 926*cdf0e10cSrcweir bool bRet = false; 927*cdf0e10cSrcweir 928*cdf0e10cSrcweir try 929*cdf0e10cSrcweir { 930*cdf0e10cSrcweir if( pPresSettings ) 931*cdf0e10cSrcweir { 932*cdf0e10cSrcweir maPresSettings = *pPresSettings; 933*cdf0e10cSrcweir mbRehearseTimings = pPresSettings->mbRehearseTimings; 934*cdf0e10cSrcweir } 935*cdf0e10cSrcweir 936*cdf0e10cSrcweir // --- 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir String aPresSlide( maPresSettings.maPresPage ); 939*cdf0e10cSrcweir SdPage* pStartPage = mpViewShell ? mpViewShell->GetActualPage() : 0; 940*cdf0e10cSrcweir bool bStartWithActualSlide = pStartPage && 941*cdf0e10cSrcweir ( (meAnimationMode != ANIMATIONMODE_SHOW) || 942*cdf0e10cSrcweir SD_MOD()->GetSdOptions( mpDoc->GetDocumentType() )->IsStartWithActualPage() ); 943*cdf0e10cSrcweir 944*cdf0e10cSrcweir // sollen Zeiten gestoppt werden? 945*cdf0e10cSrcweir if( mbRehearseTimings ) 946*cdf0e10cSrcweir { 947*cdf0e10cSrcweir maPresSettings.mbEndless = sal_False; 948*cdf0e10cSrcweir maPresSettings.mbManual = sal_True; 949*cdf0e10cSrcweir maPresSettings.mbMouseVisible = sal_True; 950*cdf0e10cSrcweir maPresSettings.mbMouseAsPen = sal_False; 951*cdf0e10cSrcweir maPresSettings.mnPauseTimeout = 0; 952*cdf0e10cSrcweir maPresSettings.mbShowPauseLogo = sal_False; 953*cdf0e10cSrcweir maPresSettings.mbStartWithNavigator = sal_False; 954*cdf0e10cSrcweir } 955*cdf0e10cSrcweir 956*cdf0e10cSrcweir if( pStartPage ) 957*cdf0e10cSrcweir { 958*cdf0e10cSrcweir if( pStartPage->GetPageKind() == PK_NOTES ) 959*cdf0e10cSrcweir { 960*cdf0e10cSrcweir // we are in notes page mode, so get 961*cdf0e10cSrcweir // the corresponding draw page 962*cdf0e10cSrcweir const sal_uInt16 nPgNum = ( pStartPage->GetPageNum() - 2 ) >> 1; 963*cdf0e10cSrcweir pStartPage = mpDoc->GetSdPage( nPgNum, PK_STANDARD ); 964*cdf0e10cSrcweir } 965*cdf0e10cSrcweir } 966*cdf0e10cSrcweir 967*cdf0e10cSrcweir if( bStartWithActualSlide ) 968*cdf0e10cSrcweir { 969*cdf0e10cSrcweir if( meAnimationMode != ANIMATIONMODE_SHOW ) 970*cdf0e10cSrcweir { 971*cdf0e10cSrcweir if( pStartPage->GetPageKind() == PK_STANDARD ) 972*cdf0e10cSrcweir { 973*cdf0e10cSrcweir aPresSlide = pStartPage->GetName(); 974*cdf0e10cSrcweir maPresSettings.mbAll = false; 975*cdf0e10cSrcweir } 976*cdf0e10cSrcweir else 977*cdf0e10cSrcweir { 978*cdf0e10cSrcweir bStartWithActualSlide = false; 979*cdf0e10cSrcweir } 980*cdf0e10cSrcweir } 981*cdf0e10cSrcweir } 982*cdf0e10cSrcweir else 983*cdf0e10cSrcweir { 984*cdf0e10cSrcweir if( pStartPage->GetPageKind() != PK_STANDARD ) 985*cdf0e10cSrcweir { 986*cdf0e10cSrcweir bStartWithActualSlide = false; 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir } 989*cdf0e10cSrcweir 990*cdf0e10cSrcweir // build page list 991*cdf0e10cSrcweir createSlideList( maPresSettings.mbAll, false, aPresSlide ); 992*cdf0e10cSrcweir 993*cdf0e10cSrcweir if( bStartWithActualSlide ) 994*cdf0e10cSrcweir { 995*cdf0e10cSrcweir sal_Int32 nSlideNum = ( pStartPage->GetPageNum() - 1 ) >> 1; 996*cdf0e10cSrcweir 997*cdf0e10cSrcweir if( !maPresSettings.mbAll && !maPresSettings.mbCustomShow ) 998*cdf0e10cSrcweir { 999*cdf0e10cSrcweir // its start from dia, find out if it is located before our current Slide 1000*cdf0e10cSrcweir const sal_Int32 nSlideCount = mpDoc->GetSdPageCount( PK_STANDARD ); 1001*cdf0e10cSrcweir sal_Int32 nSlide; 1002*cdf0e10cSrcweir for( nSlide = 0; (nSlide < nSlideCount); nSlide++ ) 1003*cdf0e10cSrcweir { 1004*cdf0e10cSrcweir if( mpDoc->GetSdPage( (sal_uInt16) nSlide, PK_STANDARD )->GetName() == aPresSlide ) 1005*cdf0e10cSrcweir break; 1006*cdf0e10cSrcweir } 1007*cdf0e10cSrcweir 1008*cdf0e10cSrcweir if( nSlide > nSlideNum ) 1009*cdf0e10cSrcweir nSlideNum = -1; 1010*cdf0e10cSrcweir } 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir if( nSlideNum != -1 ) 1013*cdf0e10cSrcweir mpSlideController->setStartSlideNumber( nSlideNum ); 1014*cdf0e10cSrcweir } 1015*cdf0e10cSrcweir 1016*cdf0e10cSrcweir // remember Slide number from where the show was started 1017*cdf0e10cSrcweir if( pStartPage ) 1018*cdf0e10cSrcweir mnRestoreSlide = ( pStartPage->GetPageNum() - 1 ) / 2; 1019*cdf0e10cSrcweir 1020*cdf0e10cSrcweir if( mpSlideController->hasSlides() ) 1021*cdf0e10cSrcweir { 1022*cdf0e10cSrcweir // hide child windows 1023*cdf0e10cSrcweir hideChildWindows(); 1024*cdf0e10cSrcweir 1025*cdf0e10cSrcweir mpShowWindow = new ShowWindow( this, mpParentWindow ); 1026*cdf0e10cSrcweir mpShowWindow->SetMouseAutoHide( !maPresSettings.mbMouseVisible ); 1027*cdf0e10cSrcweir if( mpViewShell ) 1028*cdf0e10cSrcweir { 1029*cdf0e10cSrcweir mpViewShell->SetActiveWindow( mpShowWindow ); 1030*cdf0e10cSrcweir mpShowWindow->SetViewShell (mpViewShell); 1031*cdf0e10cSrcweir mpViewShell->GetViewShellBase().ShowUIControls (false); 1032*cdf0e10cSrcweir // Hide the side panes for in-place presentations. 1033*cdf0e10cSrcweir if ( ! maPresSettings.mbFullScreen) 1034*cdf0e10cSrcweir mpPaneHider.reset(new PaneHider(*mpViewShell,this)); 1035*cdf0e10cSrcweir 1036*cdf0e10cSrcweir if( getViewFrame() ) 1037*cdf0e10cSrcweir getViewFrame()->SetChildWindow( SID_NAVIGATOR, maPresSettings.mbStartWithNavigator ); 1038*cdf0e10cSrcweir } 1039*cdf0e10cSrcweir 1040*cdf0e10cSrcweir // these Slots are forbiden in other views for this document 1041*cdf0e10cSrcweir if( mpDocSh ) 1042*cdf0e10cSrcweir { 1043*cdf0e10cSrcweir mpDocSh->SetSlotFilter( sal_True, sizeof( pAllowed ) / sizeof( sal_uInt16 ), pAllowed ); 1044*cdf0e10cSrcweir mpDocSh->ApplySlotFilter(); 1045*cdf0e10cSrcweir } 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir Help::DisableContextHelp(); 1048*cdf0e10cSrcweir Help::DisableExtHelp(); 1049*cdf0e10cSrcweir 1050*cdf0e10cSrcweir // mpTimeButton = new PushButton( mpShowWindow, SdResId( RID_TIME_BUTTON ) ); 1051*cdf0e10cSrcweir // maPencil = Pointer( POINTER_PEN ); 1052*cdf0e10cSrcweir // mpTimeButton->Hide(); 1053*cdf0e10cSrcweir 1054*cdf0e10cSrcweir if( maPresSettings.mbFullScreen ) 1055*cdf0e10cSrcweir { 1056*cdf0e10cSrcweir // disable basic ide error handling 1057*cdf0e10cSrcweir maStarBASICGlobalErrorHdl = StarBASIC::GetGlobalErrorHdl(); 1058*cdf0e10cSrcweir StarBASIC::SetGlobalErrorHdl( Link() ); 1059*cdf0e10cSrcweir } 1060*cdf0e10cSrcweir 1061*cdf0e10cSrcweir // call resize handler 1062*cdf0e10cSrcweir maPresSize = mpParentWindow->GetSizePixel(); 1063*cdf0e10cSrcweir if( !maPresSettings.mbFullScreen && mpViewShell ) 1064*cdf0e10cSrcweir { 1065*cdf0e10cSrcweir const Rectangle& aClientRect = mpViewShell->GetViewShellBase().getClientRectangle(); 1066*cdf0e10cSrcweir maPresSize = aClientRect.GetSize(); 1067*cdf0e10cSrcweir mpShowWindow->SetPosPixel( aClientRect.TopLeft() ); 1068*cdf0e10cSrcweir resize( maPresSize ); 1069*cdf0e10cSrcweir } 1070*cdf0e10cSrcweir 1071*cdf0e10cSrcweir // #i41824# 1072*cdf0e10cSrcweir // Note: In FullScreen Mode the OS (window manager) sends a resize to 1073*cdf0e10cSrcweir // the WorkWindow once it actually resized it to full size. The 1074*cdf0e10cSrcweir // WorkWindow propagates the resize to the DrawViewShell which calls 1075*cdf0e10cSrcweir // resize() at the SlideShow (this). Calling resize here results in a 1076*cdf0e10cSrcweir // temporary display of a black window in the window's default size 1077*cdf0e10cSrcweir 1078*cdf0e10cSrcweir /* 1079*cdf0e10cSrcweir if ( mbRehearseTimings ) 1080*cdf0e10cSrcweir { 1081*cdf0e10cSrcweir Size aButtonSizePixel( pTimeButton->GetSizePixel() ); 1082*cdf0e10cSrcweir Point aButtonPosPixel( aButtonSizePixel.Width() >> 1, pShowWindow->GetSizePixel().Height() - aButtonSizePixel.Height() * 5 / 2); 1083*cdf0e10cSrcweir 1084*cdf0e10cSrcweir pTimeButton->SetPosPixel( aButtonPosPixel ); 1085*cdf0e10cSrcweir aTimer.SetTimeoutHdl( LINK( this,FuSlideShow, TimeButtonTimeOutHdl ) ); 1086*cdf0e10cSrcweir pTimeButton->SetClickHdl( LINK( this, FuSlideShow, TimeButtonHdl ) ); 1087*cdf0e10cSrcweir } 1088*cdf0e10cSrcweir */ 1089*cdf0e10cSrcweir 1090*cdf0e10cSrcweir if( mpView ) 1091*cdf0e10cSrcweir { 1092*cdf0e10cSrcweir mpView->AddWindowToPaintView( mpShowWindow ); 1093*cdf0e10cSrcweir mpView->SetAnimationPause( sal_True ); 1094*cdf0e10cSrcweir } 1095*cdf0e10cSrcweir 1096*cdf0e10cSrcweir SfxBindings* pBindings = getBindings(); 1097*cdf0e10cSrcweir if( pBindings ) 1098*cdf0e10cSrcweir { 1099*cdf0e10cSrcweir pBindings->Invalidate( SID_PRESENTATION ); 1100*cdf0e10cSrcweir pBindings->Invalidate( SID_REHEARSE_TIMINGS ); 1101*cdf0e10cSrcweir } 1102*cdf0e10cSrcweir 1103*cdf0e10cSrcweir mpShowWindow->GrabFocus(); 1104*cdf0e10cSrcweir 1105*cdf0e10cSrcweir std::vector<beans::PropertyValue> aProperties; 1106*cdf0e10cSrcweir aProperties.reserve( 4 ); 1107*cdf0e10cSrcweir 1108*cdf0e10cSrcweir aProperties.push_back( 1109*cdf0e10cSrcweir beans::PropertyValue( 1110*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("AdvanceOnClick") ), 1111*cdf0e10cSrcweir -1, Any( ! (maPresSettings.mbLockedPages != sal_False) ), 1112*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1113*cdf0e10cSrcweir 1114*cdf0e10cSrcweir aProperties.push_back( 1115*cdf0e10cSrcweir beans::PropertyValue( 1116*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("ImageAnimationsAllowed") ), 1117*cdf0e10cSrcweir -1, Any( maPresSettings.mbAnimationAllowed != sal_False ), 1118*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1119*cdf0e10cSrcweir 1120*cdf0e10cSrcweir const sal_Bool bZOrderEnabled( 1121*cdf0e10cSrcweir SD_MOD()->GetSdOptions( mpDoc->GetDocumentType() )->IsSlideshowRespectZOrder() ); 1122*cdf0e10cSrcweir aProperties.push_back( 1123*cdf0e10cSrcweir beans::PropertyValue( 1124*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("DisableAnimationZOrder") ), 1125*cdf0e10cSrcweir -1, Any( bZOrderEnabled == sal_False ), 1126*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1127*cdf0e10cSrcweir 1128*cdf0e10cSrcweir /* 1129*cdf0e10cSrcweir aProperties.push_back( 1130*cdf0e10cSrcweir beans::PropertyValue( 1131*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("MouseVisible") ), 1132*cdf0e10cSrcweir -1, Any( maPresSettings.mbMouseVisible != sal_False ), 1133*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1134*cdf0e10cSrcweir */ 1135*cdf0e10cSrcweir aProperties.push_back( 1136*cdf0e10cSrcweir beans::PropertyValue( 1137*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("ForceManualAdvance") ), 1138*cdf0e10cSrcweir -1, Any( maPresSettings.mbManual != sal_False ), 1139*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1140*cdf0e10cSrcweir 1141*cdf0e10cSrcweir if( mbUsePen ) 1142*cdf0e10cSrcweir { 1143*cdf0e10cSrcweir aProperties.push_back( 1144*cdf0e10cSrcweir beans::PropertyValue( 1145*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("UserPaintColor") ), 1146*cdf0e10cSrcweir // User paint color is black by default. 1147*cdf0e10cSrcweir -1, Any( mnUserPaintColor ), 1148*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1149*cdf0e10cSrcweir 1150*cdf0e10cSrcweir aProperties.push_back( 1151*cdf0e10cSrcweir beans::PropertyValue( 1152*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("UserPaintStrokeWidth") ), 1153*cdf0e10cSrcweir // User paint color is black by default. 1154*cdf0e10cSrcweir -1, Any( mdUserPaintStrokeWidth ), 1155*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1156*cdf0e10cSrcweir } 1157*cdf0e10cSrcweir 1158*cdf0e10cSrcweir if (mbRehearseTimings) { 1159*cdf0e10cSrcweir aProperties.push_back( 1160*cdf0e10cSrcweir beans::PropertyValue( 1161*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("RehearseTimings") ), 1162*cdf0e10cSrcweir -1, Any(true), beans::PropertyState_DIRECT_VALUE ) ); 1163*cdf0e10cSrcweir } 1164*cdf0e10cSrcweir 1165*cdf0e10cSrcweir bRet = startShowImpl( Sequence<beans::PropertyValue>( 1166*cdf0e10cSrcweir &aProperties[0], aProperties.size() ) ); 1167*cdf0e10cSrcweir 1168*cdf0e10cSrcweir } 1169*cdf0e10cSrcweir 1170*cdf0e10cSrcweir setActiveXToolbarsVisible( sal_False ); 1171*cdf0e10cSrcweir } 1172*cdf0e10cSrcweir catch( Exception& e ) 1173*cdf0e10cSrcweir { 1174*cdf0e10cSrcweir (void)e; 1175*cdf0e10cSrcweir DBG_ERROR( 1176*cdf0e10cSrcweir (OString("sd::SlideshowImpl::startShow(), " 1177*cdf0e10cSrcweir "exception caught: ") + 1178*cdf0e10cSrcweir rtl::OUStringToOString( 1179*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1180*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1181*cdf0e10cSrcweir bRet = false; 1182*cdf0e10cSrcweir } 1183*cdf0e10cSrcweir 1184*cdf0e10cSrcweir return bRet; 1185*cdf0e10cSrcweir } 1186*cdf0e10cSrcweir 1187*cdf0e10cSrcweir bool SlideshowImpl::startShowImpl( const Sequence< beans::PropertyValue >& aProperties ) 1188*cdf0e10cSrcweir { 1189*cdf0e10cSrcweir try 1190*cdf0e10cSrcweir { 1191*cdf0e10cSrcweir mxShow = Reference< XSlideShow >( createSlideShow(), UNO_QUERY_THROW ); 1192*cdf0e10cSrcweir mxView = mxView.createFromQuery( new SlideShowView( 1193*cdf0e10cSrcweir *mpShowWindow, 1194*cdf0e10cSrcweir mpDoc, 1195*cdf0e10cSrcweir meAnimationMode, 1196*cdf0e10cSrcweir this, 1197*cdf0e10cSrcweir maPresSettings.mbFullScreen) ); 1198*cdf0e10cSrcweir 1199*cdf0e10cSrcweir // try add wait symbol to properties: 1200*cdf0e10cSrcweir const Reference<rendering::XSpriteCanvas> xSpriteCanvas( 1201*cdf0e10cSrcweir mxView->getCanvas() ); 1202*cdf0e10cSrcweir if (xSpriteCanvas.is()) 1203*cdf0e10cSrcweir { 1204*cdf0e10cSrcweir BitmapEx waitSymbolBitmap( SdResId(BMP_WAIT_ICON) ); 1205*cdf0e10cSrcweir const Reference<rendering::XBitmap> xBitmap( 1206*cdf0e10cSrcweir vcl::unotools::xBitmapFromBitmapEx( 1207*cdf0e10cSrcweir xSpriteCanvas->getDevice(), waitSymbolBitmap ) ); 1208*cdf0e10cSrcweir if (xBitmap.is()) 1209*cdf0e10cSrcweir { 1210*cdf0e10cSrcweir mxShow->setProperty( 1211*cdf0e10cSrcweir beans::PropertyValue( 1212*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("WaitSymbolBitmap") ), 1213*cdf0e10cSrcweir -1, 1214*cdf0e10cSrcweir makeAny( xBitmap ), 1215*cdf0e10cSrcweir beans::PropertyState_DIRECT_VALUE ) ); 1216*cdf0e10cSrcweir } 1217*cdf0e10cSrcweir } 1218*cdf0e10cSrcweir 1219*cdf0e10cSrcweir const sal_Int32 nCount = aProperties.getLength(); 1220*cdf0e10cSrcweir sal_Int32 nIndex; 1221*cdf0e10cSrcweir for( nIndex = 0; nIndex < nCount; nIndex++ ) 1222*cdf0e10cSrcweir mxShow->setProperty( aProperties[nIndex] ); 1223*cdf0e10cSrcweir 1224*cdf0e10cSrcweir mxShow->addView( mxView.getRef() ); 1225*cdf0e10cSrcweir 1226*cdf0e10cSrcweir mxListenerProxy.set( new SlideShowListenerProxy( this, mxShow ) ); 1227*cdf0e10cSrcweir mxListenerProxy->addAsSlideShowListener(); 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir 1230*cdf0e10cSrcweir NotifyDocumentEvent( mpDoc, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("OnStartPresentation") ) ); 1231*cdf0e10cSrcweir displaySlideIndex( mpSlideController->getStartSlideIndex() ); 1232*cdf0e10cSrcweir 1233*cdf0e10cSrcweir return true; 1234*cdf0e10cSrcweir } 1235*cdf0e10cSrcweir catch( Exception& e ) 1236*cdf0e10cSrcweir { 1237*cdf0e10cSrcweir (void)e; 1238*cdf0e10cSrcweir DBG_ERROR( 1239*cdf0e10cSrcweir (OString("sd::SlideshowImpl::startShowImpl(), " 1240*cdf0e10cSrcweir "exception caught: ") + 1241*cdf0e10cSrcweir rtl::OUStringToOString( 1242*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1243*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1244*cdf0e10cSrcweir return false; 1245*cdf0e10cSrcweir } 1246*cdf0e10cSrcweir } 1247*cdf0e10cSrcweir 1248*cdf0e10cSrcweir /** called only by the slideshow view when the first paint event occurs. 1249*cdf0e10cSrcweir This actually starts the slideshow. */ 1250*cdf0e10cSrcweir void SlideshowImpl::onFirstPaint() 1251*cdf0e10cSrcweir { 1252*cdf0e10cSrcweir if( mpShowWindow ) 1253*cdf0e10cSrcweir { 1254*cdf0e10cSrcweir /* 1255*cdf0e10cSrcweir mpShowWindow->SetBackground( Wallpaper( Color( COL_BLACK ) ) ); 1256*cdf0e10cSrcweir mpShowWindow->Erase(); 1257*cdf0e10cSrcweir mpShowWindow->SetBackground(); 1258*cdf0e10cSrcweir */ 1259*cdf0e10cSrcweir } 1260*cdf0e10cSrcweir 1261*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1262*cdf0e10cSrcweir maUpdateTimer.SetTimeout( (sal_uLong)100 ); 1263*cdf0e10cSrcweir maUpdateTimer.Start(); 1264*cdf0e10cSrcweir } 1265*cdf0e10cSrcweir 1266*cdf0e10cSrcweir void SlideshowImpl::paint( const Rectangle& /* rRect */ ) 1267*cdf0e10cSrcweir { 1268*cdf0e10cSrcweir if( mxView.is() ) try 1269*cdf0e10cSrcweir { 1270*cdf0e10cSrcweir awt::PaintEvent aEvt; 1271*cdf0e10cSrcweir // aEvt.UpdateRect = TODO 1272*cdf0e10cSrcweir mxView->paint( aEvt ); 1273*cdf0e10cSrcweir } 1274*cdf0e10cSrcweir catch( Exception& e ) 1275*cdf0e10cSrcweir { 1276*cdf0e10cSrcweir static_cast<void>(e); 1277*cdf0e10cSrcweir DBG_ERROR( 1278*cdf0e10cSrcweir (OString("sd::SlideshowImpl::paint(), " 1279*cdf0e10cSrcweir "exception caught: ") + 1280*cdf0e10cSrcweir rtl::OUStringToOString( 1281*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1282*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1283*cdf0e10cSrcweir } 1284*cdf0e10cSrcweir } 1285*cdf0e10cSrcweir 1286*cdf0e10cSrcweir // -------------------------------------------------------------------- 1287*cdf0e10cSrcweir 1288*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::addSlideShowListener( const Reference< XSlideShowListener >& xListener ) throw (RuntimeException) 1289*cdf0e10cSrcweir { 1290*cdf0e10cSrcweir if( mxListenerProxy.is() ) 1291*cdf0e10cSrcweir mxListenerProxy->addSlideShowListener( xListener ); 1292*cdf0e10cSrcweir } 1293*cdf0e10cSrcweir 1294*cdf0e10cSrcweir // -------------------------------------------------------------------- 1295*cdf0e10cSrcweir 1296*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::removeSlideShowListener( const Reference< XSlideShowListener >& xListener ) throw (RuntimeException) 1297*cdf0e10cSrcweir { 1298*cdf0e10cSrcweir if( mxListenerProxy.is() ) 1299*cdf0e10cSrcweir mxListenerProxy->removeSlideShowListener( xListener ); 1300*cdf0e10cSrcweir } 1301*cdf0e10cSrcweir 1302*cdf0e10cSrcweir // --------------------------------------------------------- 1303*cdf0e10cSrcweir 1304*cdf0e10cSrcweir void SlideshowImpl::slideEnded(const bool bReverse) 1305*cdf0e10cSrcweir { 1306*cdf0e10cSrcweir if (bReverse) 1307*cdf0e10cSrcweir gotoPreviousSlide(true); 1308*cdf0e10cSrcweir else 1309*cdf0e10cSrcweir gotoNextSlide(); 1310*cdf0e10cSrcweir } 1311*cdf0e10cSrcweir 1312*cdf0e10cSrcweir // --------------------------------------------------------- 1313*cdf0e10cSrcweir 1314*cdf0e10cSrcweir void SlideshowImpl::removeShapeEvents() 1315*cdf0e10cSrcweir { 1316*cdf0e10cSrcweir if( mxShow.is() && mxListenerProxy.is() ) try 1317*cdf0e10cSrcweir { 1318*cdf0e10cSrcweir WrappedShapeEventImplMap::iterator aIter; 1319*cdf0e10cSrcweir const WrappedShapeEventImplMap::iterator aEnd( maShapeEventMap.end() ); 1320*cdf0e10cSrcweir 1321*cdf0e10cSrcweir for( aIter = maShapeEventMap.begin(); aIter != aEnd; aIter++ ) 1322*cdf0e10cSrcweir { 1323*cdf0e10cSrcweir mxListenerProxy->removeShapeEventListener( (*aIter).first ); 1324*cdf0e10cSrcweir mxShow->setShapeCursor( (*aIter).first, awt::SystemPointer::ARROW ); 1325*cdf0e10cSrcweir } 1326*cdf0e10cSrcweir 1327*cdf0e10cSrcweir maShapeEventMap.clear(); 1328*cdf0e10cSrcweir } 1329*cdf0e10cSrcweir catch( Exception& e ) 1330*cdf0e10cSrcweir { 1331*cdf0e10cSrcweir (void)e; 1332*cdf0e10cSrcweir DBG_ERROR( 1333*cdf0e10cSrcweir (OString("sd::SlideshowImpl::removeShapeEvents(), " 1334*cdf0e10cSrcweir "exception caught: ") + 1335*cdf0e10cSrcweir rtl::OUStringToOString( 1336*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1337*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1338*cdf0e10cSrcweir } 1339*cdf0e10cSrcweir } 1340*cdf0e10cSrcweir 1341*cdf0e10cSrcweir // --------------------------------------------------------- 1342*cdf0e10cSrcweir 1343*cdf0e10cSrcweir void SlideshowImpl::registerShapeEvents(sal_Int32 nSlideNumber) 1344*cdf0e10cSrcweir { 1345*cdf0e10cSrcweir if( nSlideNumber >= 0 ) try 1346*cdf0e10cSrcweir { 1347*cdf0e10cSrcweir Reference< XDrawPagesSupplier > xDrawPages( mxModel, UNO_QUERY_THROW ); 1348*cdf0e10cSrcweir Reference< XIndexAccess > xPages( xDrawPages->getDrawPages(), UNO_QUERY_THROW ); 1349*cdf0e10cSrcweir 1350*cdf0e10cSrcweir Reference< XShapes > xDrawPage; 1351*cdf0e10cSrcweir xPages->getByIndex(nSlideNumber) >>= xDrawPage; 1352*cdf0e10cSrcweir 1353*cdf0e10cSrcweir if( xDrawPage.is() ) 1354*cdf0e10cSrcweir { 1355*cdf0e10cSrcweir Reference< XMasterPageTarget > xMasterPageTarget( xDrawPage, UNO_QUERY ); 1356*cdf0e10cSrcweir if( xMasterPageTarget.is() ) 1357*cdf0e10cSrcweir { 1358*cdf0e10cSrcweir Reference< XShapes > xMasterPage( xMasterPageTarget->getMasterPage(), UNO_QUERY ); 1359*cdf0e10cSrcweir if( xMasterPage.is() ) 1360*cdf0e10cSrcweir registerShapeEvents( xMasterPage ); 1361*cdf0e10cSrcweir } 1362*cdf0e10cSrcweir registerShapeEvents( xDrawPage ); 1363*cdf0e10cSrcweir } 1364*cdf0e10cSrcweir } 1365*cdf0e10cSrcweir catch( Exception& e ) 1366*cdf0e10cSrcweir { 1367*cdf0e10cSrcweir (void)e; 1368*cdf0e10cSrcweir DBG_ERROR( 1369*cdf0e10cSrcweir (OString("sd::SlideshowImpl::registerShapeEvents(), " 1370*cdf0e10cSrcweir "exception caught: ") + 1371*cdf0e10cSrcweir rtl::OUStringToOString( 1372*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1373*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1374*cdf0e10cSrcweir } 1375*cdf0e10cSrcweir } 1376*cdf0e10cSrcweir 1377*cdf0e10cSrcweir // --------------------------------------------------------- 1378*cdf0e10cSrcweir 1379*cdf0e10cSrcweir void SlideshowImpl::registerShapeEvents( Reference< XShapes >& xShapes ) throw( Exception ) 1380*cdf0e10cSrcweir { 1381*cdf0e10cSrcweir try 1382*cdf0e10cSrcweir { 1383*cdf0e10cSrcweir const sal_Int32 nShapeCount = xShapes->getCount(); 1384*cdf0e10cSrcweir sal_Int32 nShape; 1385*cdf0e10cSrcweir for( nShape = 0; nShape < nShapeCount; nShape++ ) 1386*cdf0e10cSrcweir { 1387*cdf0e10cSrcweir Reference< XShape > xShape; 1388*cdf0e10cSrcweir xShapes->getByIndex( nShape ) >>= xShape; 1389*cdf0e10cSrcweir 1390*cdf0e10cSrcweir if( xShape.is() && 1391*cdf0e10cSrcweir xShape->getShapeType().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.GroupShape") ) ) 1392*cdf0e10cSrcweir { 1393*cdf0e10cSrcweir Reference< XShapes > xSubShapes( xShape, UNO_QUERY ); 1394*cdf0e10cSrcweir if( xSubShapes.is() ) 1395*cdf0e10cSrcweir registerShapeEvents( xSubShapes ); 1396*cdf0e10cSrcweir } 1397*cdf0e10cSrcweir 1398*cdf0e10cSrcweir Reference< XPropertySet > xSet( xShape, UNO_QUERY ); 1399*cdf0e10cSrcweir if( !xSet.is() ) 1400*cdf0e10cSrcweir continue; 1401*cdf0e10cSrcweir 1402*cdf0e10cSrcweir Reference< XPropertySetInfo > xSetInfo( xSet->getPropertySetInfo() ); 1403*cdf0e10cSrcweir if( !xSetInfo.is() || !xSetInfo->hasPropertyByName( msOnClick ) ) 1404*cdf0e10cSrcweir continue; 1405*cdf0e10cSrcweir 1406*cdf0e10cSrcweir WrappedShapeEventImplPtr pEvent( new WrappedShapeEventImpl ); 1407*cdf0e10cSrcweir xSet->getPropertyValue( msOnClick ) >>= pEvent->meClickAction; 1408*cdf0e10cSrcweir 1409*cdf0e10cSrcweir switch( pEvent->meClickAction ) 1410*cdf0e10cSrcweir { 1411*cdf0e10cSrcweir case ClickAction_PREVPAGE: 1412*cdf0e10cSrcweir case ClickAction_NEXTPAGE: 1413*cdf0e10cSrcweir case ClickAction_FIRSTPAGE: 1414*cdf0e10cSrcweir case ClickAction_LASTPAGE: 1415*cdf0e10cSrcweir case ClickAction_STOPPRESENTATION: 1416*cdf0e10cSrcweir break; 1417*cdf0e10cSrcweir case ClickAction_BOOKMARK: 1418*cdf0e10cSrcweir if( xSetInfo->hasPropertyByName( msBookmark ) ) 1419*cdf0e10cSrcweir xSet->getPropertyValue( msBookmark ) >>= pEvent->maStrBookmark; 1420*cdf0e10cSrcweir if( getSlideNumberForBookmark( pEvent->maStrBookmark ) == -1 ) 1421*cdf0e10cSrcweir continue; 1422*cdf0e10cSrcweir break; 1423*cdf0e10cSrcweir case ClickAction_DOCUMENT: 1424*cdf0e10cSrcweir case ClickAction_SOUND: 1425*cdf0e10cSrcweir case ClickAction_PROGRAM: 1426*cdf0e10cSrcweir case ClickAction_MACRO: 1427*cdf0e10cSrcweir if( xSetInfo->hasPropertyByName( msBookmark ) ) 1428*cdf0e10cSrcweir xSet->getPropertyValue( msBookmark ) >>= pEvent->maStrBookmark; 1429*cdf0e10cSrcweir break; 1430*cdf0e10cSrcweir case ClickAction_VERB: 1431*cdf0e10cSrcweir if( xSetInfo->hasPropertyByName( msVerb ) ) 1432*cdf0e10cSrcweir xSet->getPropertyValue( msVerb ) >>= pEvent->mnVerb; 1433*cdf0e10cSrcweir break; 1434*cdf0e10cSrcweir default: 1435*cdf0e10cSrcweir continue; // skip all others 1436*cdf0e10cSrcweir } 1437*cdf0e10cSrcweir 1438*cdf0e10cSrcweir maShapeEventMap[ xShape ] = pEvent; 1439*cdf0e10cSrcweir 1440*cdf0e10cSrcweir if( mxListenerProxy.is() ) 1441*cdf0e10cSrcweir mxListenerProxy->addShapeEventListener( xShape ); 1442*cdf0e10cSrcweir mxShow->setShapeCursor( xShape, awt::SystemPointer::REFHAND ); 1443*cdf0e10cSrcweir } 1444*cdf0e10cSrcweir } 1445*cdf0e10cSrcweir catch( Exception& e ) 1446*cdf0e10cSrcweir { 1447*cdf0e10cSrcweir static_cast<void>(e); 1448*cdf0e10cSrcweir DBG_ERROR( 1449*cdf0e10cSrcweir (OString("sd::SlideshowImpl::registerShapeEvents(), " 1450*cdf0e10cSrcweir "exception caught: ") + 1451*cdf0e10cSrcweir rtl::OUStringToOString( 1452*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1453*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1454*cdf0e10cSrcweir } 1455*cdf0e10cSrcweir } 1456*cdf0e10cSrcweir 1457*cdf0e10cSrcweir // --------------------------------------------------------- 1458*cdf0e10cSrcweir 1459*cdf0e10cSrcweir void SlideshowImpl::displayCurrentSlide (const bool bSkipAllMainSequenceEffects) 1460*cdf0e10cSrcweir { 1461*cdf0e10cSrcweir stopSound(); 1462*cdf0e10cSrcweir removeShapeEvents(); 1463*cdf0e10cSrcweir 1464*cdf0e10cSrcweir if( mpSlideController.get() && mxShow.is() ) 1465*cdf0e10cSrcweir { 1466*cdf0e10cSrcweir Reference< XDrawPagesSupplier > xDrawPages( mpDoc->getUnoModel(), 1467*cdf0e10cSrcweir UNO_QUERY_THROW ); 1468*cdf0e10cSrcweir mpSlideController->displayCurrentSlide( mxShow, xDrawPages, bSkipAllMainSequenceEffects ); 1469*cdf0e10cSrcweir registerShapeEvents(mpSlideController->getCurrentSlideNumber()); 1470*cdf0e10cSrcweir update(); 1471*cdf0e10cSrcweir 1472*cdf0e10cSrcweir SfxBindings* pBindings = getBindings(); 1473*cdf0e10cSrcweir if( pBindings ) 1474*cdf0e10cSrcweir { 1475*cdf0e10cSrcweir pBindings->Invalidate( SID_NAVIGATOR_STATE ); 1476*cdf0e10cSrcweir pBindings->Invalidate( SID_NAVIGATOR_PAGENAME ); 1477*cdf0e10cSrcweir } 1478*cdf0e10cSrcweir } 1479*cdf0e10cSrcweir } 1480*cdf0e10cSrcweir 1481*cdf0e10cSrcweir // --------------------------------------------------------- 1482*cdf0e10cSrcweir 1483*cdf0e10cSrcweir void SlideshowImpl::endPresentation() 1484*cdf0e10cSrcweir { 1485*cdf0e10cSrcweir /* 1486*cdf0e10cSrcweir if( maPresSettings.mbMouseAsPen) 1487*cdf0e10cSrcweir { 1488*cdf0e10cSrcweir Reference< XMultiServiceFactory > xDocFactory(mpDoc->getUnoModel(), UNO_QUERY ); 1489*cdf0e10cSrcweir if( xDocFactory.is() ) 1490*cdf0e10cSrcweir mxShow->registerUserPaintPolygons(xDocFactory); 1491*cdf0e10cSrcweir } 1492*cdf0e10cSrcweir */ 1493*cdf0e10cSrcweir if( !mnEndShowEvent ) 1494*cdf0e10cSrcweir mnEndShowEvent = Application::PostUserEvent( LINK(this, SlideshowImpl, endPresentationHdl) ); 1495*cdf0e10cSrcweir } 1496*cdf0e10cSrcweir 1497*cdf0e10cSrcweir // --------------------------------------------------------- 1498*cdf0e10cSrcweir 1499*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, endPresentationHdl, void*, EMPTYARG ) 1500*cdf0e10cSrcweir { 1501*cdf0e10cSrcweir mnEndShowEvent = 0; 1502*cdf0e10cSrcweir 1503*cdf0e10cSrcweir if( mxPresentation.is() ) 1504*cdf0e10cSrcweir mxPresentation->end(); 1505*cdf0e10cSrcweir return 0; 1506*cdf0e10cSrcweir } 1507*cdf0e10cSrcweir 1508*cdf0e10cSrcweir // --------------------------------------------------------- 1509*cdf0e10cSrcweir 1510*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::pause() throw (RuntimeException) 1511*cdf0e10cSrcweir { 1512*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1513*cdf0e10cSrcweir 1514*cdf0e10cSrcweir if( !mbIsPaused ) try 1515*cdf0e10cSrcweir { 1516*cdf0e10cSrcweir mbIsPaused = sal_True; 1517*cdf0e10cSrcweir if( mxShow.is() ) 1518*cdf0e10cSrcweir { 1519*cdf0e10cSrcweir mxShow->pause(sal_True); 1520*cdf0e10cSrcweir 1521*cdf0e10cSrcweir if( mxListenerProxy.is() ) 1522*cdf0e10cSrcweir mxListenerProxy->paused(); 1523*cdf0e10cSrcweir } 1524*cdf0e10cSrcweir } 1525*cdf0e10cSrcweir catch( Exception& e ) 1526*cdf0e10cSrcweir { 1527*cdf0e10cSrcweir static_cast<void>(e); 1528*cdf0e10cSrcweir DBG_ERROR( 1529*cdf0e10cSrcweir (OString("sd::SlideshowImpl::pause(), " 1530*cdf0e10cSrcweir "exception caught: ") + 1531*cdf0e10cSrcweir rtl::OUStringToOString( 1532*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1533*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1534*cdf0e10cSrcweir } 1535*cdf0e10cSrcweir } 1536*cdf0e10cSrcweir 1537*cdf0e10cSrcweir // --------------------------------------------------------- 1538*cdf0e10cSrcweir 1539*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::resume() throw (RuntimeException) 1540*cdf0e10cSrcweir { 1541*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1542*cdf0e10cSrcweir 1543*cdf0e10cSrcweir if( mbIsPaused ) try 1544*cdf0e10cSrcweir { 1545*cdf0e10cSrcweir if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_BLANK ) 1546*cdf0e10cSrcweir { 1547*cdf0e10cSrcweir mpShowWindow->RestartShow(); 1548*cdf0e10cSrcweir } 1549*cdf0e10cSrcweir else 1550*cdf0e10cSrcweir { 1551*cdf0e10cSrcweir mbIsPaused = sal_False;; 1552*cdf0e10cSrcweir if( mxShow.is() ) 1553*cdf0e10cSrcweir { 1554*cdf0e10cSrcweir mxShow->pause(sal_False); 1555*cdf0e10cSrcweir update(); 1556*cdf0e10cSrcweir 1557*cdf0e10cSrcweir if( mxListenerProxy.is() ) 1558*cdf0e10cSrcweir mxListenerProxy->resumed(); 1559*cdf0e10cSrcweir } 1560*cdf0e10cSrcweir } 1561*cdf0e10cSrcweir } 1562*cdf0e10cSrcweir catch( Exception& e ) 1563*cdf0e10cSrcweir { 1564*cdf0e10cSrcweir static_cast<void>(e); 1565*cdf0e10cSrcweir DBG_ERROR( 1566*cdf0e10cSrcweir (OString("sd::SlideshowImpl::resume(), " 1567*cdf0e10cSrcweir "exception caught: ") + 1568*cdf0e10cSrcweir rtl::OUStringToOString( 1569*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1570*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1571*cdf0e10cSrcweir } 1572*cdf0e10cSrcweir } 1573*cdf0e10cSrcweir 1574*cdf0e10cSrcweir // --------------------------------------------------------- 1575*cdf0e10cSrcweir 1576*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::isPaused() throw (RuntimeException) 1577*cdf0e10cSrcweir { 1578*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1579*cdf0e10cSrcweir return mbIsPaused; 1580*cdf0e10cSrcweir } 1581*cdf0e10cSrcweir 1582*cdf0e10cSrcweir // --------------------------------------------------------- 1583*cdf0e10cSrcweir 1584*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::blankScreen( sal_Int32 nColor ) throw (RuntimeException) 1585*cdf0e10cSrcweir { 1586*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1587*cdf0e10cSrcweir 1588*cdf0e10cSrcweir if( mpShowWindow && mpSlideController ) 1589*cdf0e10cSrcweir { 1590*cdf0e10cSrcweir if( mpShowWindow->SetBlankMode( mpSlideController->getCurrentSlideIndex(), nColor ) ) 1591*cdf0e10cSrcweir { 1592*cdf0e10cSrcweir pause(); 1593*cdf0e10cSrcweir } 1594*cdf0e10cSrcweir } 1595*cdf0e10cSrcweir } 1596*cdf0e10cSrcweir 1597*cdf0e10cSrcweir // --------------------------------------------------------- 1598*cdf0e10cSrcweir // XShapeEventListener 1599*cdf0e10cSrcweir // --------------------------------------------------------- 1600*cdf0e10cSrcweir 1601*cdf0e10cSrcweir void SlideshowImpl::click( const Reference< XShape >& xShape, const ::com::sun::star::awt::MouseEvent& /* aOriginalEvent */ ) 1602*cdf0e10cSrcweir { 1603*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1604*cdf0e10cSrcweir 1605*cdf0e10cSrcweir WrappedShapeEventImplPtr pEvent = maShapeEventMap[xShape]; 1606*cdf0e10cSrcweir if( !pEvent.get() ) 1607*cdf0e10cSrcweir return; 1608*cdf0e10cSrcweir 1609*cdf0e10cSrcweir switch( pEvent->meClickAction ) 1610*cdf0e10cSrcweir { 1611*cdf0e10cSrcweir case ClickAction_PREVPAGE: gotoPreviousSlide(); break; 1612*cdf0e10cSrcweir case ClickAction_NEXTPAGE: gotoNextSlide(); break; 1613*cdf0e10cSrcweir case ClickAction_FIRSTPAGE: gotoFirstSlide(); break; 1614*cdf0e10cSrcweir case ClickAction_LASTPAGE: gotoLastSlide(); break; 1615*cdf0e10cSrcweir case ClickAction_STOPPRESENTATION: endPresentation(); break; 1616*cdf0e10cSrcweir case ClickAction_BOOKMARK: 1617*cdf0e10cSrcweir { 1618*cdf0e10cSrcweir gotoBookmark( pEvent->maStrBookmark ); 1619*cdf0e10cSrcweir } 1620*cdf0e10cSrcweir break; 1621*cdf0e10cSrcweir case ClickAction_SOUND: 1622*cdf0e10cSrcweir { 1623*cdf0e10cSrcweir try 1624*cdf0e10cSrcweir { 1625*cdf0e10cSrcweir mxPlayer.set(avmedia::MediaWindow::createPlayer(pEvent->maStrBookmark), uno::UNO_QUERY_THROW ); 1626*cdf0e10cSrcweir mxPlayer->start(); 1627*cdf0e10cSrcweir } 1628*cdf0e10cSrcweir catch( uno::Exception& e ) 1629*cdf0e10cSrcweir { 1630*cdf0e10cSrcweir (void)e; 1631*cdf0e10cSrcweir DBG_ERROR("sd::SlideshowImpl::click(), exception caught!" ); 1632*cdf0e10cSrcweir } 1633*cdf0e10cSrcweir } 1634*cdf0e10cSrcweir break; 1635*cdf0e10cSrcweir 1636*cdf0e10cSrcweir case ClickAction_DOCUMENT: 1637*cdf0e10cSrcweir { 1638*cdf0e10cSrcweir OUString aBookmark( pEvent->maStrBookmark ); 1639*cdf0e10cSrcweir 1640*cdf0e10cSrcweir sal_Int32 nPos = aBookmark.indexOf( sal_Unicode('#') ); 1641*cdf0e10cSrcweir if( nPos >= 0 ) 1642*cdf0e10cSrcweir { 1643*cdf0e10cSrcweir OUString aURL( aBookmark.copy( 0, nPos+1 ) ); 1644*cdf0e10cSrcweir OUString aName( aBookmark.copy( nPos+1 ) ); 1645*cdf0e10cSrcweir aURL += getUiNameFromPageApiNameImpl( aName ); 1646*cdf0e10cSrcweir aBookmark = aURL; 1647*cdf0e10cSrcweir } 1648*cdf0e10cSrcweir 1649*cdf0e10cSrcweir mpDocSh->OpenBookmark( aBookmark ); 1650*cdf0e10cSrcweir } 1651*cdf0e10cSrcweir break; 1652*cdf0e10cSrcweir 1653*cdf0e10cSrcweir case ClickAction_PROGRAM: 1654*cdf0e10cSrcweir { 1655*cdf0e10cSrcweir INetURLObject aURL( 1656*cdf0e10cSrcweir ::URIHelper::SmartRel2Abs( 1657*cdf0e10cSrcweir INetURLObject(mpDocSh->GetMedium()->GetBaseURL()), 1658*cdf0e10cSrcweir pEvent->maStrBookmark, ::URIHelper::GetMaybeFileHdl(), true, 1659*cdf0e10cSrcweir false, INetURLObject::WAS_ENCODED, 1660*cdf0e10cSrcweir INetURLObject::DECODE_UNAMBIGUOUS ) ); 1661*cdf0e10cSrcweir 1662*cdf0e10cSrcweir if( INET_PROT_FILE == aURL.GetProtocol() ) 1663*cdf0e10cSrcweir { 1664*cdf0e10cSrcweir SfxStringItem aUrl( SID_FILE_NAME, aURL.GetMainURL( INetURLObject::NO_DECODE ) ); 1665*cdf0e10cSrcweir SfxBoolItem aBrowsing( SID_BROWSE, sal_True ); 1666*cdf0e10cSrcweir 1667*cdf0e10cSrcweir SfxViewFrame* pViewFrm = SfxViewFrame::Current(); 1668*cdf0e10cSrcweir if (pViewFrm) 1669*cdf0e10cSrcweir pViewFrm->GetDispatcher()->Execute( SID_OPENDOC, 1670*cdf0e10cSrcweir SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, 1671*cdf0e10cSrcweir &aUrl, 1672*cdf0e10cSrcweir &aBrowsing, 1673*cdf0e10cSrcweir 0L ); 1674*cdf0e10cSrcweir } 1675*cdf0e10cSrcweir } 1676*cdf0e10cSrcweir break; 1677*cdf0e10cSrcweir 1678*cdf0e10cSrcweir case presentation::ClickAction_MACRO: 1679*cdf0e10cSrcweir { 1680*cdf0e10cSrcweir const String aMacro( pEvent->maStrBookmark ); 1681*cdf0e10cSrcweir 1682*cdf0e10cSrcweir if ( SfxApplication::IsXScriptURL( aMacro ) ) 1683*cdf0e10cSrcweir { 1684*cdf0e10cSrcweir Any aRet; 1685*cdf0e10cSrcweir Sequence< sal_Int16 > aOutArgsIndex; 1686*cdf0e10cSrcweir Sequence< Any > aOutArgs; 1687*cdf0e10cSrcweir Sequence< Any >* pInArgs = new Sequence< Any >(0); 1688*cdf0e10cSrcweir mpDocSh->CallXScript( aMacro, *pInArgs, aRet, aOutArgsIndex, aOutArgs); 1689*cdf0e10cSrcweir } 1690*cdf0e10cSrcweir else 1691*cdf0e10cSrcweir { 1692*cdf0e10cSrcweir // aMacro has the following syntax: 1693*cdf0e10cSrcweir // "Macroname.Modulname.Libname.Dokumentname" or 1694*cdf0e10cSrcweir // "Macroname.Modulname.Libname.Applikationsname" 1695*cdf0e10cSrcweir String aMacroName = aMacro.GetToken(0, sal_Unicode('.')); 1696*cdf0e10cSrcweir String aModulName = aMacro.GetToken(1, sal_Unicode('.')); 1697*cdf0e10cSrcweir String aLibName = aMacro.GetToken(2, sal_Unicode('.')); 1698*cdf0e10cSrcweir String aDocName = aMacro.GetToken(3, sal_Unicode('.')); 1699*cdf0e10cSrcweir 1700*cdf0e10cSrcweir // todo: is the limitation still given that only 1701*cdf0e10cSrcweir // Modulname+Macroname can be used here? 1702*cdf0e10cSrcweir String aExecMacro(aModulName); 1703*cdf0e10cSrcweir aExecMacro.Append( sal_Unicode('.') ); 1704*cdf0e10cSrcweir aExecMacro.Append( aMacroName ); 1705*cdf0e10cSrcweir mpDocSh->GetBasic()->Call(aExecMacro); 1706*cdf0e10cSrcweir } 1707*cdf0e10cSrcweir } 1708*cdf0e10cSrcweir break; 1709*cdf0e10cSrcweir 1710*cdf0e10cSrcweir case ClickAction_VERB: 1711*cdf0e10cSrcweir { 1712*cdf0e10cSrcweir // todo, better do it async? 1713*cdf0e10cSrcweir SdrObject* pObj = GetSdrObjectFromXShape( xShape ); 1714*cdf0e10cSrcweir SdrOle2Obj* pOleObject = PTR_CAST(SdrOle2Obj, pObj); 1715*cdf0e10cSrcweir if (pOleObject && mpViewShell ) 1716*cdf0e10cSrcweir mpViewShell->ActivateObject(pOleObject, pEvent->mnVerb); 1717*cdf0e10cSrcweir } 1718*cdf0e10cSrcweir break; 1719*cdf0e10cSrcweir default: 1720*cdf0e10cSrcweir break; 1721*cdf0e10cSrcweir } 1722*cdf0e10cSrcweir } 1723*cdf0e10cSrcweir 1724*cdf0e10cSrcweir // --------------------------------------------------------- 1725*cdf0e10cSrcweir 1726*cdf0e10cSrcweir sal_Int32 SlideshowImpl::getSlideNumberForBookmark( const OUString& rStrBookmark ) 1727*cdf0e10cSrcweir { 1728*cdf0e10cSrcweir sal_Bool bIsMasterPage; 1729*cdf0e10cSrcweir OUString aBookmark = getUiNameFromPageApiNameImpl( rStrBookmark ); 1730*cdf0e10cSrcweir sal_uInt16 nPgNum = mpDoc->GetPageByName( aBookmark, bIsMasterPage ); 1731*cdf0e10cSrcweir 1732*cdf0e10cSrcweir if( nPgNum == SDRPAGE_NOTFOUND ) 1733*cdf0e10cSrcweir { 1734*cdf0e10cSrcweir // Ist das Bookmark ein Objekt? 1735*cdf0e10cSrcweir SdrObject* pObj = mpDoc->GetObj( aBookmark ); 1736*cdf0e10cSrcweir 1737*cdf0e10cSrcweir if( pObj ) 1738*cdf0e10cSrcweir { 1739*cdf0e10cSrcweir nPgNum = pObj->GetPage()->GetPageNum(); 1740*cdf0e10cSrcweir bIsMasterPage = (sal_Bool)pObj->GetPage()->IsMasterPage(); 1741*cdf0e10cSrcweir } 1742*cdf0e10cSrcweir } 1743*cdf0e10cSrcweir 1744*cdf0e10cSrcweir if( (nPgNum == SDRPAGE_NOTFOUND) || bIsMasterPage || static_cast<SdPage*>(mpDoc->GetPage(nPgNum))->GetPageKind() != PK_STANDARD ) 1745*cdf0e10cSrcweir return -1; 1746*cdf0e10cSrcweir 1747*cdf0e10cSrcweir return ( nPgNum - 1) >> 1; 1748*cdf0e10cSrcweir } 1749*cdf0e10cSrcweir 1750*cdf0e10cSrcweir // --------------------------------------------------------- 1751*cdf0e10cSrcweir 1752*cdf0e10cSrcweir void SlideshowImpl::hyperLinkClicked( rtl::OUString const& aHyperLink ) throw (RuntimeException) 1753*cdf0e10cSrcweir { 1754*cdf0e10cSrcweir OUString aBookmark( aHyperLink ); 1755*cdf0e10cSrcweir 1756*cdf0e10cSrcweir sal_Int32 nPos = aBookmark.indexOf( sal_Unicode('#') ); 1757*cdf0e10cSrcweir if( nPos >= 0 ) 1758*cdf0e10cSrcweir { 1759*cdf0e10cSrcweir OUString aURL( aBookmark.copy( 0, nPos+1 ) ); 1760*cdf0e10cSrcweir OUString aName( aBookmark.copy( nPos+1 ) ); 1761*cdf0e10cSrcweir aURL += getUiNameFromPageApiNameImpl( aName ); 1762*cdf0e10cSrcweir aBookmark = aURL; 1763*cdf0e10cSrcweir } 1764*cdf0e10cSrcweir 1765*cdf0e10cSrcweir mpDocSh->OpenBookmark( aBookmark ); 1766*cdf0e10cSrcweir } 1767*cdf0e10cSrcweir 1768*cdf0e10cSrcweir // --------------------------------------------------------- 1769*cdf0e10cSrcweir 1770*cdf0e10cSrcweir void SlideshowImpl::displaySlideNumber( sal_Int32 nSlideNumber ) 1771*cdf0e10cSrcweir { 1772*cdf0e10cSrcweir if( mpSlideController.get() ) 1773*cdf0e10cSrcweir { 1774*cdf0e10cSrcweir if( mpSlideController->jumpToSlideNumber( nSlideNumber ) ) 1775*cdf0e10cSrcweir { 1776*cdf0e10cSrcweir displayCurrentSlide(); 1777*cdf0e10cSrcweir } 1778*cdf0e10cSrcweir } 1779*cdf0e10cSrcweir } 1780*cdf0e10cSrcweir 1781*cdf0e10cSrcweir // --------------------------------------------------------- 1782*cdf0e10cSrcweir 1783*cdf0e10cSrcweir /** nSlideIndex == -1 displays current slide again */ 1784*cdf0e10cSrcweir void SlideshowImpl::displaySlideIndex( sal_Int32 nSlideIndex ) 1785*cdf0e10cSrcweir { 1786*cdf0e10cSrcweir if( mpSlideController.get() ) 1787*cdf0e10cSrcweir { 1788*cdf0e10cSrcweir if( (nSlideIndex == -1) || mpSlideController->jumpToSlideIndex( nSlideIndex ) ) 1789*cdf0e10cSrcweir { 1790*cdf0e10cSrcweir displayCurrentSlide(); 1791*cdf0e10cSrcweir } 1792*cdf0e10cSrcweir } 1793*cdf0e10cSrcweir } 1794*cdf0e10cSrcweir 1795*cdf0e10cSrcweir // --------------------------------------------------------- 1796*cdf0e10cSrcweir 1797*cdf0e10cSrcweir void SlideshowImpl::jumpToBookmark( const String& sBookmark ) 1798*cdf0e10cSrcweir { 1799*cdf0e10cSrcweir sal_Int32 nSlideNumber = getSlideNumberForBookmark( sBookmark ); 1800*cdf0e10cSrcweir if( nSlideNumber != -1 ) 1801*cdf0e10cSrcweir displaySlideNumber( nSlideNumber ); 1802*cdf0e10cSrcweir } 1803*cdf0e10cSrcweir 1804*cdf0e10cSrcweir // --------------------------------------------------------- 1805*cdf0e10cSrcweir 1806*cdf0e10cSrcweir sal_Int32 SlideshowImpl::getCurrentSlideNumber() 1807*cdf0e10cSrcweir { 1808*cdf0e10cSrcweir return mpSlideController.get() ? mpSlideController->getCurrentSlideNumber() : -1; 1809*cdf0e10cSrcweir } 1810*cdf0e10cSrcweir 1811*cdf0e10cSrcweir // --------------------------------------------------------- 1812*cdf0e10cSrcweir 1813*cdf0e10cSrcweir sal_Int32 SlideshowImpl::getFirstSlideNumber() 1814*cdf0e10cSrcweir { 1815*cdf0e10cSrcweir sal_Int32 nRet = 0; 1816*cdf0e10cSrcweir if( mpSlideController.get() ) 1817*cdf0e10cSrcweir { 1818*cdf0e10cSrcweir sal_Int32 nSlideIndexCount = mpSlideController->getSlideIndexCount() - 1; 1819*cdf0e10cSrcweir if( nSlideIndexCount >= 0 ) 1820*cdf0e10cSrcweir { 1821*cdf0e10cSrcweir nRet = mpSlideController->getSlideNumber( nSlideIndexCount ); 1822*cdf0e10cSrcweir while( nSlideIndexCount-- ) 1823*cdf0e10cSrcweir { 1824*cdf0e10cSrcweir sal_Int32 nTemp = mpSlideController->getSlideNumber( nSlideIndexCount ); 1825*cdf0e10cSrcweir if( nRet > nTemp ) 1826*cdf0e10cSrcweir nRet = nTemp; 1827*cdf0e10cSrcweir } 1828*cdf0e10cSrcweir } 1829*cdf0e10cSrcweir } 1830*cdf0e10cSrcweir 1831*cdf0e10cSrcweir return nRet; 1832*cdf0e10cSrcweir } 1833*cdf0e10cSrcweir 1834*cdf0e10cSrcweir // --------------------------------------------------------- 1835*cdf0e10cSrcweir 1836*cdf0e10cSrcweir sal_Int32 SlideshowImpl::getLastSlideNumber() 1837*cdf0e10cSrcweir { 1838*cdf0e10cSrcweir sal_Int32 nRet = 0; 1839*cdf0e10cSrcweir if( mpSlideController.get() ) 1840*cdf0e10cSrcweir { 1841*cdf0e10cSrcweir sal_Int32 nSlideIndexCount = mpSlideController->getSlideIndexCount() - 1; 1842*cdf0e10cSrcweir if( nSlideIndexCount >= 0 ) 1843*cdf0e10cSrcweir { 1844*cdf0e10cSrcweir nRet = mpSlideController->getSlideNumber( nSlideIndexCount ); 1845*cdf0e10cSrcweir while( nSlideIndexCount-- ) 1846*cdf0e10cSrcweir { 1847*cdf0e10cSrcweir sal_Int32 nTemp = mpSlideController->getSlideNumber( nSlideIndexCount ); 1848*cdf0e10cSrcweir if( nRet < nTemp ) 1849*cdf0e10cSrcweir nRet = nTemp; 1850*cdf0e10cSrcweir } 1851*cdf0e10cSrcweir } 1852*cdf0e10cSrcweir } 1853*cdf0e10cSrcweir 1854*cdf0e10cSrcweir return nRet; 1855*cdf0e10cSrcweir } 1856*cdf0e10cSrcweir 1857*cdf0e10cSrcweir // --------------------------------------------------------- 1858*cdf0e10cSrcweir 1859*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::isEndless() throw( RuntimeException ) 1860*cdf0e10cSrcweir { 1861*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1862*cdf0e10cSrcweir return maPresSettings.mbEndless; 1863*cdf0e10cSrcweir } 1864*cdf0e10cSrcweir 1865*cdf0e10cSrcweir // --------------------------------------------------------- 1866*cdf0e10cSrcweir 1867*cdf0e10cSrcweir double SlideshowImpl::update() 1868*cdf0e10cSrcweir { 1869*cdf0e10cSrcweir startUpdateTimer(); 1870*cdf0e10cSrcweir return -1; 1871*cdf0e10cSrcweir } 1872*cdf0e10cSrcweir 1873*cdf0e10cSrcweir // --------------------------------------------------------- 1874*cdf0e10cSrcweir 1875*cdf0e10cSrcweir void SlideshowImpl::startUpdateTimer() 1876*cdf0e10cSrcweir { 1877*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 1878*cdf0e10cSrcweir maUpdateTimer.SetTimeout( 0 ); 1879*cdf0e10cSrcweir maUpdateTimer.Start(); 1880*cdf0e10cSrcweir } 1881*cdf0e10cSrcweir 1882*cdf0e10cSrcweir // --------------------------------------------------------- 1883*cdf0e10cSrcweir 1884*cdf0e10cSrcweir /** this timer is called 20ms after a new slide was displayed. 1885*cdf0e10cSrcweir This is used to unfreeze user input that was disabled after 1886*cdf0e10cSrcweir slide change to skip input that was buffered during slide 1887*cdf0e10cSrcweir transition preperation */ 1888*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, ReadyForNextInputHdl, Timer*, EMPTYARG ) 1889*cdf0e10cSrcweir { 1890*cdf0e10cSrcweir mbInputFreeze = false; 1891*cdf0e10cSrcweir return 0; 1892*cdf0e10cSrcweir } 1893*cdf0e10cSrcweir 1894*cdf0e10cSrcweir // --------------------------------------------------------- 1895*cdf0e10cSrcweir 1896*cdf0e10cSrcweir /** if I catch someone someday who calls this method by hand 1897*cdf0e10cSrcweir and not by using the timer, I will personaly punish this 1898*cdf0e10cSrcweir person seriously, even if this person is me. 1899*cdf0e10cSrcweir */ 1900*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, updateHdl, Timer*, EMPTYARG ) 1901*cdf0e10cSrcweir { 1902*cdf0e10cSrcweir mnUpdateEvent = 0; 1903*cdf0e10cSrcweir 1904*cdf0e10cSrcweir return updateSlideShow(); 1905*cdf0e10cSrcweir } 1906*cdf0e10cSrcweir 1907*cdf0e10cSrcweir 1908*cdf0e10cSrcweir 1909*cdf0e10cSrcweir 1910*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, PostYieldListener, void*, EMPTYARG ) 1911*cdf0e10cSrcweir { 1912*cdf0e10cSrcweir Application::EnableNoYieldMode(false); 1913*cdf0e10cSrcweir Application::RemovePostYieldListener(LINK(this, SlideshowImpl, PostYieldListener)); 1914*cdf0e10cSrcweir if (mbDisposed) 1915*cdf0e10cSrcweir return 0; 1916*cdf0e10cSrcweir Application::Reschedule(true); 1917*cdf0e10cSrcweir return updateSlideShow(); 1918*cdf0e10cSrcweir } 1919*cdf0e10cSrcweir 1920*cdf0e10cSrcweir 1921*cdf0e10cSrcweir 1922*cdf0e10cSrcweir 1923*cdf0e10cSrcweir sal_Int32 SlideshowImpl::updateSlideShow (void) 1924*cdf0e10cSrcweir { 1925*cdf0e10cSrcweir // doing some nMagic 1926*cdf0e10cSrcweir const rtl::Reference<SlideshowImpl> this_(this); 1927*cdf0e10cSrcweir 1928*cdf0e10cSrcweir Reference< XSlideShow > xShow( mxShow ); 1929*cdf0e10cSrcweir if ( ! xShow.is()) 1930*cdf0e10cSrcweir return 0; 1931*cdf0e10cSrcweir 1932*cdf0e10cSrcweir try 1933*cdf0e10cSrcweir { 1934*cdf0e10cSrcweir // TODO(Q3): Evaluate under various systems and setups, 1935*cdf0e10cSrcweir // whether this is really necessary. Under WinXP and Matrox 1936*cdf0e10cSrcweir // G550, the frame rates were much more steadier with this 1937*cdf0e10cSrcweir // tweak, although. 1938*cdf0e10cSrcweir 1939*cdf0e10cSrcweir // currently no solution, because this kills sound (at least on Windows) 1940*cdf0e10cSrcweir // // Boost our prio, as long as we're in the render loop 1941*cdf0e10cSrcweir // ::canvas::tools::PriorityBooster aBooster(2); 1942*cdf0e10cSrcweir 1943*cdf0e10cSrcweir double fUpdate = 0.0; 1944*cdf0e10cSrcweir if( !xShow->update(fUpdate) ) 1945*cdf0e10cSrcweir fUpdate = -1.0; 1946*cdf0e10cSrcweir 1947*cdf0e10cSrcweir if (mxShow.is() && (fUpdate >= 0.0)) 1948*cdf0e10cSrcweir { 1949*cdf0e10cSrcweir if (::basegfx::fTools::equalZero(fUpdate)) 1950*cdf0e10cSrcweir { 1951*cdf0e10cSrcweir // Use post yield listener for short update intervalls. 1952*cdf0e10cSrcweir Application::EnableNoYieldMode(true); 1953*cdf0e10cSrcweir Application::AddPostYieldListener(LINK(this, SlideshowImpl, PostYieldListener)); 1954*cdf0e10cSrcweir } 1955*cdf0e10cSrcweir else 1956*cdf0e10cSrcweir { 1957*cdf0e10cSrcweir // Avoid busy loop when the previous call to update() 1958*cdf0e10cSrcweir // returns a small positive number but not 0 (which is 1959*cdf0e10cSrcweir // handled above). Also, make sure that calls to update() 1960*cdf0e10cSrcweir // have a minimum frequency. 1961*cdf0e10cSrcweir // => Allow up to 60 frames per second. Call at least once 1962*cdf0e10cSrcweir // every 4 seconds. 1963*cdf0e10cSrcweir const static sal_Int32 mnMaximumFrameCount (60); 1964*cdf0e10cSrcweir const static double mnMinimumTimeout (1.0 / mnMaximumFrameCount); 1965*cdf0e10cSrcweir const static double mnMaximumTimeout (4.0); 1966*cdf0e10cSrcweir fUpdate = ::basegfx::clamp(fUpdate, mnMinimumTimeout, mnMaximumTimeout); 1967*cdf0e10cSrcweir 1968*cdf0e10cSrcweir // Make sure that the maximum frame count has not been set 1969*cdf0e10cSrcweir // too high (only then conversion to milliseconds and long 1970*cdf0e10cSrcweir // integer may lead to zero value.) 1971*cdf0e10cSrcweir OSL_ASSERT(static_cast<sal_uLong>(fUpdate * 1000.0) > 0); 1972*cdf0e10cSrcweir 1973*cdf0e10cSrcweir Application::EnableNoYieldMode(false); 1974*cdf0e10cSrcweir Application::RemovePostYieldListener(LINK(this, SlideshowImpl, PostYieldListener)); 1975*cdf0e10cSrcweir 1976*cdf0e10cSrcweir // Use a timer for the asynchronous callback. 1977*cdf0e10cSrcweir maUpdateTimer.SetTimeout(static_cast<sal_uLong>(fUpdate * 1000.0)); 1978*cdf0e10cSrcweir maUpdateTimer.Start(); 1979*cdf0e10cSrcweir } 1980*cdf0e10cSrcweir } 1981*cdf0e10cSrcweir } 1982*cdf0e10cSrcweir catch( Exception& e ) 1983*cdf0e10cSrcweir { 1984*cdf0e10cSrcweir static_cast<void>(e); 1985*cdf0e10cSrcweir DBG_ERROR( 1986*cdf0e10cSrcweir (OString("sd::SlideshowImpl::updateSlideShow(), exception caught: ") 1987*cdf0e10cSrcweir + rtl::OUStringToOString( 1988*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 1989*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 1990*cdf0e10cSrcweir } 1991*cdf0e10cSrcweir return 0; 1992*cdf0e10cSrcweir } 1993*cdf0e10cSrcweir 1994*cdf0e10cSrcweir // --------------------------------------------------------- 1995*cdf0e10cSrcweir 1996*cdf0e10cSrcweir bool SlideshowImpl::keyInput(const KeyEvent& rKEvt) 1997*cdf0e10cSrcweir { 1998*cdf0e10cSrcweir if( !mxShow.is() || mbInputFreeze ) 1999*cdf0e10cSrcweir return false; 2000*cdf0e10cSrcweir 2001*cdf0e10cSrcweir bool bRet = true; 2002*cdf0e10cSrcweir 2003*cdf0e10cSrcweir try 2004*cdf0e10cSrcweir { 2005*cdf0e10cSrcweir const int nKeyCode = rKEvt.GetKeyCode().GetCode(); 2006*cdf0e10cSrcweir switch( nKeyCode ) 2007*cdf0e10cSrcweir { 2008*cdf0e10cSrcweir case awt::Key::CONTEXTMENU: 2009*cdf0e10cSrcweir if( !mnContextMenuEvent ) 2010*cdf0e10cSrcweir { 2011*cdf0e10cSrcweir if( mpShowWindow ) 2012*cdf0e10cSrcweir maPopupMousePos = mpShowWindow->GetPointerState().maPos; 2013*cdf0e10cSrcweir mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 2014*cdf0e10cSrcweir } 2015*cdf0e10cSrcweir break; 2016*cdf0e10cSrcweir 2017*cdf0e10cSrcweir // cancel show 2018*cdf0e10cSrcweir case KEY_ESCAPE: 2019*cdf0e10cSrcweir case KEY_SUBTRACT: 2020*cdf0e10cSrcweir // in case the user cancels the presentation, switch to current slide 2021*cdf0e10cSrcweir // in edit mode 2022*cdf0e10cSrcweir if( mpSlideController.get() && (ANIMATIONMODE_SHOW == meAnimationMode) ) 2023*cdf0e10cSrcweir { 2024*cdf0e10cSrcweir if( mpSlideController->getCurrentSlideNumber() != -1 ) 2025*cdf0e10cSrcweir mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 2026*cdf0e10cSrcweir } 2027*cdf0e10cSrcweir endPresentation(); 2028*cdf0e10cSrcweir break; 2029*cdf0e10cSrcweir 2030*cdf0e10cSrcweir // advance show 2031*cdf0e10cSrcweir case KEY_PAGEDOWN: 2032*cdf0e10cSrcweir if(rKEvt.GetKeyCode().IsMod2()) 2033*cdf0e10cSrcweir { 2034*cdf0e10cSrcweir gotoNextSlide(); 2035*cdf0e10cSrcweir break; 2036*cdf0e10cSrcweir } 2037*cdf0e10cSrcweir // warning, fall through! 2038*cdf0e10cSrcweir case KEY_SPACE: 2039*cdf0e10cSrcweir case KEY_RIGHT: 2040*cdf0e10cSrcweir case KEY_DOWN: 2041*cdf0e10cSrcweir case KEY_N: 2042*cdf0e10cSrcweir gotoNextEffect(); 2043*cdf0e10cSrcweir break; 2044*cdf0e10cSrcweir 2045*cdf0e10cSrcweir case KEY_RETURN: 2046*cdf0e10cSrcweir { 2047*cdf0e10cSrcweir if( maCharBuffer.Len() ) 2048*cdf0e10cSrcweir { 2049*cdf0e10cSrcweir if( mpSlideController.get() ) 2050*cdf0e10cSrcweir { 2051*cdf0e10cSrcweir if( mpSlideController->jumpToSlideNumber( maCharBuffer.ToInt32() - 1 ) ) 2052*cdf0e10cSrcweir displayCurrentSlide(); 2053*cdf0e10cSrcweir } 2054*cdf0e10cSrcweir maCharBuffer.Erase(); 2055*cdf0e10cSrcweir } 2056*cdf0e10cSrcweir else 2057*cdf0e10cSrcweir { 2058*cdf0e10cSrcweir gotoNextEffect(); 2059*cdf0e10cSrcweir } 2060*cdf0e10cSrcweir } 2061*cdf0e10cSrcweir break; 2062*cdf0e10cSrcweir 2063*cdf0e10cSrcweir // numeric: add to buffer 2064*cdf0e10cSrcweir case KEY_0: 2065*cdf0e10cSrcweir case KEY_1: 2066*cdf0e10cSrcweir case KEY_2: 2067*cdf0e10cSrcweir case KEY_3: 2068*cdf0e10cSrcweir case KEY_4: 2069*cdf0e10cSrcweir case KEY_5: 2070*cdf0e10cSrcweir case KEY_6: 2071*cdf0e10cSrcweir case KEY_7: 2072*cdf0e10cSrcweir case KEY_8: 2073*cdf0e10cSrcweir case KEY_9: 2074*cdf0e10cSrcweir maCharBuffer.Append( rKEvt.GetCharCode() ); 2075*cdf0e10cSrcweir break; 2076*cdf0e10cSrcweir 2077*cdf0e10cSrcweir case KEY_PAGEUP: 2078*cdf0e10cSrcweir if(rKEvt.GetKeyCode().IsMod2()) 2079*cdf0e10cSrcweir { 2080*cdf0e10cSrcweir gotoPreviousSlide(); 2081*cdf0e10cSrcweir break; 2082*cdf0e10cSrcweir } 2083*cdf0e10cSrcweir // warning, fall through! 2084*cdf0e10cSrcweir case KEY_LEFT: 2085*cdf0e10cSrcweir case KEY_UP: 2086*cdf0e10cSrcweir case KEY_P: 2087*cdf0e10cSrcweir case KEY_BACKSPACE: 2088*cdf0e10cSrcweir gotoPreviousEffect(); 2089*cdf0e10cSrcweir break; 2090*cdf0e10cSrcweir 2091*cdf0e10cSrcweir case KEY_HOME: 2092*cdf0e10cSrcweir gotoFirstSlide(); 2093*cdf0e10cSrcweir break; 2094*cdf0e10cSrcweir 2095*cdf0e10cSrcweir case KEY_END: 2096*cdf0e10cSrcweir gotoLastSlide(); 2097*cdf0e10cSrcweir break; 2098*cdf0e10cSrcweir 2099*cdf0e10cSrcweir case KEY_B: 2100*cdf0e10cSrcweir case KEY_W: 2101*cdf0e10cSrcweir case KEY_POINT: 2102*cdf0e10cSrcweir case KEY_COMMA: 2103*cdf0e10cSrcweir { 2104*cdf0e10cSrcweir blankScreen( ((nKeyCode == KEY_W ) || (nKeyCode == KEY_COMMA)) ? 0x00ffffff : 0x00000000 ); 2105*cdf0e10cSrcweir } 2106*cdf0e10cSrcweir break; 2107*cdf0e10cSrcweir 2108*cdf0e10cSrcweir default: 2109*cdf0e10cSrcweir bRet = false; 2110*cdf0e10cSrcweir break; 2111*cdf0e10cSrcweir } 2112*cdf0e10cSrcweir } 2113*cdf0e10cSrcweir catch( Exception& e ) 2114*cdf0e10cSrcweir { 2115*cdf0e10cSrcweir bRet = false; 2116*cdf0e10cSrcweir static_cast<void>(e); 2117*cdf0e10cSrcweir DBG_ERROR( 2118*cdf0e10cSrcweir (OString("sd::SlideshowImpl::keyInput(), " 2119*cdf0e10cSrcweir "exception caught: ") + 2120*cdf0e10cSrcweir rtl::OUStringToOString( 2121*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 2122*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 2123*cdf0e10cSrcweir } 2124*cdf0e10cSrcweir 2125*cdf0e10cSrcweir return bRet; 2126*cdf0e10cSrcweir } 2127*cdf0e10cSrcweir 2128*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, EventListenerHdl, VclSimpleEvent*, pEvent ) 2129*cdf0e10cSrcweir { 2130*cdf0e10cSrcweir if( !mxShow.is() || mbInputFreeze ) 2131*cdf0e10cSrcweir return 0; 2132*cdf0e10cSrcweir 2133*cdf0e10cSrcweir if( pEvent && (pEvent->GetId() == VCLEVENT_WINDOW_COMMAND) && static_cast<VclWindowEvent*>(pEvent)->GetData() ) 2134*cdf0e10cSrcweir { 2135*cdf0e10cSrcweir const CommandEvent& rEvent = *(const CommandEvent*)static_cast<VclWindowEvent*>(pEvent)->GetData(); 2136*cdf0e10cSrcweir 2137*cdf0e10cSrcweir if( rEvent.GetCommand() == COMMAND_MEDIA ) 2138*cdf0e10cSrcweir { 2139*cdf0e10cSrcweir switch( rEvent.GetMediaCommand() ) 2140*cdf0e10cSrcweir { 2141*cdf0e10cSrcweir #if defined( QUARTZ ) 2142*cdf0e10cSrcweir case MEDIA_COMMAND_MENU: 2143*cdf0e10cSrcweir if( !mnContextMenuEvent ) 2144*cdf0e10cSrcweir { 2145*cdf0e10cSrcweir if( mpShowWindow ) 2146*cdf0e10cSrcweir maPopupMousePos = mpShowWindow->GetPointerState().maPos; 2147*cdf0e10cSrcweir mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 2148*cdf0e10cSrcweir } 2149*cdf0e10cSrcweir break; 2150*cdf0e10cSrcweir case MEDIA_COMMAND_VOLUME_DOWN: 2151*cdf0e10cSrcweir gotoPreviousSlide(); 2152*cdf0e10cSrcweir break; 2153*cdf0e10cSrcweir case MEDIA_COMMAND_VOLUME_UP: 2154*cdf0e10cSrcweir gotoNextEffect(); 2155*cdf0e10cSrcweir break; 2156*cdf0e10cSrcweir #endif 2157*cdf0e10cSrcweir case MEDIA_COMMAND_NEXTTRACK: 2158*cdf0e10cSrcweir gotoNextEffect(); 2159*cdf0e10cSrcweir break; 2160*cdf0e10cSrcweir case MEDIA_COMMAND_PAUSE: 2161*cdf0e10cSrcweir if( !mbIsPaused ) 2162*cdf0e10cSrcweir blankScreen(0); 2163*cdf0e10cSrcweir break; 2164*cdf0e10cSrcweir case MEDIA_COMMAND_PLAY: 2165*cdf0e10cSrcweir if( mbIsPaused ) 2166*cdf0e10cSrcweir resume(); 2167*cdf0e10cSrcweir break; 2168*cdf0e10cSrcweir 2169*cdf0e10cSrcweir case MEDIA_COMMAND_PLAY_PAUSE: 2170*cdf0e10cSrcweir if( mbIsPaused ) 2171*cdf0e10cSrcweir resume(); 2172*cdf0e10cSrcweir else 2173*cdf0e10cSrcweir blankScreen(0); 2174*cdf0e10cSrcweir break; 2175*cdf0e10cSrcweir case MEDIA_COMMAND_PREVIOUSTRACK: 2176*cdf0e10cSrcweir gotoPreviousSlide(); 2177*cdf0e10cSrcweir break; 2178*cdf0e10cSrcweir case MEDIA_COMMAND_NEXTTRACK_HOLD: 2179*cdf0e10cSrcweir gotoLastSlide(); 2180*cdf0e10cSrcweir break; 2181*cdf0e10cSrcweir 2182*cdf0e10cSrcweir case MEDIA_COMMAND_REWIND: 2183*cdf0e10cSrcweir gotoFirstSlide(); 2184*cdf0e10cSrcweir break; 2185*cdf0e10cSrcweir case MEDIA_COMMAND_STOP: 2186*cdf0e10cSrcweir // in case the user cancels the presentation, switch to current slide 2187*cdf0e10cSrcweir // in edit mode 2188*cdf0e10cSrcweir if( mpSlideController.get() && (ANIMATIONMODE_SHOW == meAnimationMode) ) 2189*cdf0e10cSrcweir { 2190*cdf0e10cSrcweir if( mpSlideController->getCurrentSlideNumber() != -1 ) 2191*cdf0e10cSrcweir mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 2192*cdf0e10cSrcweir } 2193*cdf0e10cSrcweir endPresentation(); 2194*cdf0e10cSrcweir break; 2195*cdf0e10cSrcweir } 2196*cdf0e10cSrcweir } 2197*cdf0e10cSrcweir } 2198*cdf0e10cSrcweir 2199*cdf0e10cSrcweir return 0; 2200*cdf0e10cSrcweir } 2201*cdf0e10cSrcweir 2202*cdf0e10cSrcweir // --------------------------------------------------------- 2203*cdf0e10cSrcweir 2204*cdf0e10cSrcweir void SlideshowImpl::mouseButtonUp(const MouseEvent& rMEvt) 2205*cdf0e10cSrcweir { 2206*cdf0e10cSrcweir if( rMEvt.IsRight() && !mnContextMenuEvent ) 2207*cdf0e10cSrcweir { 2208*cdf0e10cSrcweir maPopupMousePos = rMEvt.GetPosPixel(); 2209*cdf0e10cSrcweir mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 2210*cdf0e10cSrcweir } 2211*cdf0e10cSrcweir } 2212*cdf0e10cSrcweir 2213*cdf0e10cSrcweir // --------------------------------------------------------- 2214*cdf0e10cSrcweir 2215*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, ContextMenuHdl, void*, EMPTYARG ) 2216*cdf0e10cSrcweir { 2217*cdf0e10cSrcweir mnContextMenuEvent = 0; 2218*cdf0e10cSrcweir 2219*cdf0e10cSrcweir if( mpSlideController.get() == 0 ) 2220*cdf0e10cSrcweir return 0; 2221*cdf0e10cSrcweir 2222*cdf0e10cSrcweir mbWasPaused = mbIsPaused; 2223*cdf0e10cSrcweir if( !mbWasPaused ) 2224*cdf0e10cSrcweir pause(); 2225*cdf0e10cSrcweir 2226*cdf0e10cSrcweir PopupMenu* pMenu = new PopupMenu( SdResId( RID_SLIDESHOW_CONTEXTMENU ) ); 2227*cdf0e10cSrcweir 2228*cdf0e10cSrcweir // Adding button to display if in Pen mode 2229*cdf0e10cSrcweir pMenu->CheckItem( CM_PEN_MODE, mbUsePen); 2230*cdf0e10cSrcweir 2231*cdf0e10cSrcweir const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 2232*cdf0e10cSrcweir pMenu->EnableItem( CM_NEXT_SLIDE, ( mpSlideController->getNextSlideIndex() != -1 ) ); 2233*cdf0e10cSrcweir pMenu->EnableItem( CM_PREV_SLIDE, ( mpSlideController->getPreviousSlideIndex() != -1 ) || (eMode == SHOWWINDOWMODE_END) || (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ); 2234*cdf0e10cSrcweir 2235*cdf0e10cSrcweir PopupMenu* pPageMenu = pMenu->GetPopupMenu( CM_GOTO ); 2236*cdf0e10cSrcweir 2237*cdf0e10cSrcweir SfxViewFrame* pViewFrame = getViewFrame(); 2238*cdf0e10cSrcweir if( pViewFrame ) 2239*cdf0e10cSrcweir { 2240*cdf0e10cSrcweir Reference< ::com::sun::star::frame::XFrame > xFrame( pViewFrame->GetFrame().GetFrameInterface() ); 2241*cdf0e10cSrcweir if( xFrame.is() ) 2242*cdf0e10cSrcweir { 2243*cdf0e10cSrcweir pMenu->SetItemImage( CM_NEXT_SLIDE, GetImage( xFrame, OUString( RTL_CONSTASCII_USTRINGPARAM( "slot:10617") ), sal_False, sal_False ) ); 2244*cdf0e10cSrcweir pMenu->SetItemImage( CM_PREV_SLIDE, GetImage( xFrame, OUString( RTL_CONSTASCII_USTRINGPARAM( "slot:10618") ), sal_False, sal_False ) ); 2245*cdf0e10cSrcweir 2246*cdf0e10cSrcweir if( pPageMenu ) 2247*cdf0e10cSrcweir { 2248*cdf0e10cSrcweir pPageMenu->SetItemImage( CM_FIRST_SLIDE, GetImage( xFrame, OUString( RTL_CONSTASCII_USTRINGPARAM( "slot:10616") ), sal_False, sal_False ) ); 2249*cdf0e10cSrcweir pPageMenu->SetItemImage( CM_LAST_SLIDE, GetImage( xFrame, OUString( RTL_CONSTASCII_USTRINGPARAM( "slot:10619") ), sal_False, sal_False ) ); 2250*cdf0e10cSrcweir } 2251*cdf0e10cSrcweir } 2252*cdf0e10cSrcweir } 2253*cdf0e10cSrcweir 2254*cdf0e10cSrcweir // populate slide goto list 2255*cdf0e10cSrcweir if( pPageMenu ) 2256*cdf0e10cSrcweir { 2257*cdf0e10cSrcweir const sal_Int32 nPageNumberCount = mpSlideController->getSlideNumberCount(); 2258*cdf0e10cSrcweir if( nPageNumberCount <= 1 ) 2259*cdf0e10cSrcweir { 2260*cdf0e10cSrcweir pMenu->EnableItem( CM_GOTO, sal_False ); 2261*cdf0e10cSrcweir } 2262*cdf0e10cSrcweir else 2263*cdf0e10cSrcweir { 2264*cdf0e10cSrcweir sal_Int32 nCurrentSlideNumber = mpSlideController->getCurrentSlideNumber(); 2265*cdf0e10cSrcweir if( (eMode == SHOWWINDOWMODE_END) || (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 2266*cdf0e10cSrcweir nCurrentSlideNumber = -1; 2267*cdf0e10cSrcweir 2268*cdf0e10cSrcweir pPageMenu->EnableItem( CM_FIRST_SLIDE, ( mpSlideController->getSlideNumber(0) != nCurrentSlideNumber ) ); 2269*cdf0e10cSrcweir pPageMenu->EnableItem( CM_LAST_SLIDE, ( mpSlideController->getSlideNumber( mpSlideController->getSlideIndexCount() - 1) != nCurrentSlideNumber ) ); 2270*cdf0e10cSrcweir 2271*cdf0e10cSrcweir sal_Int32 nPageNumber; 2272*cdf0e10cSrcweir 2273*cdf0e10cSrcweir for( nPageNumber = 0; nPageNumber < nPageNumberCount; nPageNumber++ ) 2274*cdf0e10cSrcweir { 2275*cdf0e10cSrcweir if( mpSlideController->isVisibleSlideNumber( nPageNumber ) ) 2276*cdf0e10cSrcweir { 2277*cdf0e10cSrcweir SdPage* pPage = mpDoc->GetSdPage((sal_uInt16)nPageNumber, PK_STANDARD); 2278*cdf0e10cSrcweir if (pPage) 2279*cdf0e10cSrcweir { 2280*cdf0e10cSrcweir pPageMenu->InsertItem( (sal_uInt16)(CM_SLIDES + nPageNumber), pPage->GetName() ); 2281*cdf0e10cSrcweir if( nPageNumber == nCurrentSlideNumber ) 2282*cdf0e10cSrcweir pPageMenu->CheckItem( (sal_uInt16)(CM_SLIDES + nPageNumber) ); 2283*cdf0e10cSrcweir } 2284*cdf0e10cSrcweir } 2285*cdf0e10cSrcweir } 2286*cdf0e10cSrcweir } 2287*cdf0e10cSrcweir } 2288*cdf0e10cSrcweir 2289*cdf0e10cSrcweir if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_BLANK ) 2290*cdf0e10cSrcweir { 2291*cdf0e10cSrcweir PopupMenu* pBlankMenu = pMenu->GetPopupMenu( CM_SCREEN ); 2292*cdf0e10cSrcweir if( pBlankMenu ) 2293*cdf0e10cSrcweir { 2294*cdf0e10cSrcweir pBlankMenu->CheckItem( ( mpShowWindow->GetBlankColor() == Color( COL_WHITE ) ) ? CM_SCREEN_WHITE : CM_SCREEN_BLACK ); 2295*cdf0e10cSrcweir } 2296*cdf0e10cSrcweir } 2297*cdf0e10cSrcweir 2298*cdf0e10cSrcweir PopupMenu* pWidthMenu = pMenu->GetPopupMenu( CM_WIDTH_PEN); 2299*cdf0e10cSrcweir 2300*cdf0e10cSrcweir // populate color width list 2301*cdf0e10cSrcweir if( pWidthMenu ) 2302*cdf0e10cSrcweir { 2303*cdf0e10cSrcweir sal_Int32 nIterator; 2304*cdf0e10cSrcweir double nWidth; 2305*cdf0e10cSrcweir 2306*cdf0e10cSrcweir nWidth = 4.0; 2307*cdf0e10cSrcweir for( nIterator = 1; nIterator < 6; nIterator++) 2308*cdf0e10cSrcweir { 2309*cdf0e10cSrcweir switch(nIterator) 2310*cdf0e10cSrcweir { 2311*cdf0e10cSrcweir case 1: 2312*cdf0e10cSrcweir nWidth = 4.0; 2313*cdf0e10cSrcweir break; 2314*cdf0e10cSrcweir case 2: 2315*cdf0e10cSrcweir nWidth = 100.0; 2316*cdf0e10cSrcweir break; 2317*cdf0e10cSrcweir case 3: 2318*cdf0e10cSrcweir nWidth = 150.0; 2319*cdf0e10cSrcweir break; 2320*cdf0e10cSrcweir case 4: 2321*cdf0e10cSrcweir nWidth = 200.0; 2322*cdf0e10cSrcweir break; 2323*cdf0e10cSrcweir case 5: 2324*cdf0e10cSrcweir nWidth = 400.0; 2325*cdf0e10cSrcweir break; 2326*cdf0e10cSrcweir default: 2327*cdf0e10cSrcweir break; 2328*cdf0e10cSrcweir } 2329*cdf0e10cSrcweir 2330*cdf0e10cSrcweir pWidthMenu->EnableItem( (sal_uInt16)(CM_WIDTH_PEN + nIterator), sal_True); 2331*cdf0e10cSrcweir if( nWidth == mdUserPaintStrokeWidth) 2332*cdf0e10cSrcweir pWidthMenu->CheckItem( (sal_uInt16)(CM_WIDTH_PEN + nIterator) ); 2333*cdf0e10cSrcweir } 2334*cdf0e10cSrcweir } 2335*cdf0e10cSrcweir 2336*cdf0e10cSrcweir pMenu->SetSelectHdl( LINK( this, SlideshowImpl, ContextMenuSelectHdl ) ); 2337*cdf0e10cSrcweir pMenu->Execute( mpShowWindow, maPopupMousePos ); 2338*cdf0e10cSrcweir delete pMenu; 2339*cdf0e10cSrcweir 2340*cdf0e10cSrcweir if( mxView.is() ) 2341*cdf0e10cSrcweir mxView->ignoreNextMouseReleased(); 2342*cdf0e10cSrcweir 2343*cdf0e10cSrcweir if( !mbWasPaused ) 2344*cdf0e10cSrcweir resume(); 2345*cdf0e10cSrcweir return 0; 2346*cdf0e10cSrcweir } 2347*cdf0e10cSrcweir 2348*cdf0e10cSrcweir // --------------------------------------------------------- 2349*cdf0e10cSrcweir 2350*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, ContextMenuSelectHdl, Menu *, pMenu ) 2351*cdf0e10cSrcweir { 2352*cdf0e10cSrcweir if( pMenu ) 2353*cdf0e10cSrcweir { 2354*cdf0e10cSrcweir sal_uInt16 nMenuId = pMenu->GetCurItemId(); 2355*cdf0e10cSrcweir 2356*cdf0e10cSrcweir switch( nMenuId ) 2357*cdf0e10cSrcweir { 2358*cdf0e10cSrcweir case CM_PREV_SLIDE: 2359*cdf0e10cSrcweir gotoPreviousSlide(); 2360*cdf0e10cSrcweir mbWasPaused = false; 2361*cdf0e10cSrcweir break; 2362*cdf0e10cSrcweir case CM_NEXT_SLIDE: 2363*cdf0e10cSrcweir gotoNextSlide(); 2364*cdf0e10cSrcweir mbWasPaused = false; 2365*cdf0e10cSrcweir break; 2366*cdf0e10cSrcweir case CM_FIRST_SLIDE: 2367*cdf0e10cSrcweir gotoFirstSlide(); 2368*cdf0e10cSrcweir mbWasPaused = false; 2369*cdf0e10cSrcweir break; 2370*cdf0e10cSrcweir case CM_LAST_SLIDE: 2371*cdf0e10cSrcweir gotoLastSlide(); 2372*cdf0e10cSrcweir mbWasPaused = false; 2373*cdf0e10cSrcweir break; 2374*cdf0e10cSrcweir case CM_SCREEN_BLACK: 2375*cdf0e10cSrcweir case CM_SCREEN_WHITE: 2376*cdf0e10cSrcweir { 2377*cdf0e10cSrcweir const Color aBlankColor( (nMenuId == CM_SCREEN_WHITE) ? COL_WHITE : COL_BLACK ); 2378*cdf0e10cSrcweir if( mbWasPaused ) 2379*cdf0e10cSrcweir { 2380*cdf0e10cSrcweir if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_BLANK ) 2381*cdf0e10cSrcweir { 2382*cdf0e10cSrcweir if( mpShowWindow->GetBlankColor() == aBlankColor ) 2383*cdf0e10cSrcweir { 2384*cdf0e10cSrcweir mbWasPaused = false; 2385*cdf0e10cSrcweir mpShowWindow->RestartShow(); 2386*cdf0e10cSrcweir break; 2387*cdf0e10cSrcweir } 2388*cdf0e10cSrcweir } 2389*cdf0e10cSrcweir mpShowWindow->RestartShow(); 2390*cdf0e10cSrcweir } 2391*cdf0e10cSrcweir if( mpShowWindow->SetBlankMode( mpSlideController->getCurrentSlideIndex(), aBlankColor ) ) 2392*cdf0e10cSrcweir { 2393*cdf0e10cSrcweir pause(); 2394*cdf0e10cSrcweir mbWasPaused = true; 2395*cdf0e10cSrcweir } 2396*cdf0e10cSrcweir } 2397*cdf0e10cSrcweir break; 2398*cdf0e10cSrcweir case CM_COLOR_PEN: 2399*cdf0e10cSrcweir { 2400*cdf0e10cSrcweir //Open a color picker based on SvColorDialog 2401*cdf0e10cSrcweir ::Color aColor( mnUserPaintColor ); 2402*cdf0e10cSrcweir SvColorDialog aColorDlg( mpShowWindow); 2403*cdf0e10cSrcweir aColorDlg.SetColor( aColor ); 2404*cdf0e10cSrcweir 2405*cdf0e10cSrcweir if (aColorDlg.Execute() ) 2406*cdf0e10cSrcweir { 2407*cdf0e10cSrcweir aColor = aColorDlg.GetColor(); 2408*cdf0e10cSrcweir setPenColor(aColor.GetColor()); 2409*cdf0e10cSrcweir } 2410*cdf0e10cSrcweir mbWasPaused = false; 2411*cdf0e10cSrcweir } 2412*cdf0e10cSrcweir break; 2413*cdf0e10cSrcweir 2414*cdf0e10cSrcweir case CM_WIDTH_PEN_VERY_THIN: 2415*cdf0e10cSrcweir { 2416*cdf0e10cSrcweir setPenWidth(4.0); 2417*cdf0e10cSrcweir mbWasPaused = false; 2418*cdf0e10cSrcweir } 2419*cdf0e10cSrcweir break; 2420*cdf0e10cSrcweir 2421*cdf0e10cSrcweir case CM_WIDTH_PEN_THIN: 2422*cdf0e10cSrcweir { 2423*cdf0e10cSrcweir setPenWidth(100.0); 2424*cdf0e10cSrcweir mbWasPaused = false; 2425*cdf0e10cSrcweir } 2426*cdf0e10cSrcweir break; 2427*cdf0e10cSrcweir 2428*cdf0e10cSrcweir case CM_WIDTH_PEN_NORMAL: 2429*cdf0e10cSrcweir { 2430*cdf0e10cSrcweir setPenWidth(150.0); 2431*cdf0e10cSrcweir mbWasPaused = false; 2432*cdf0e10cSrcweir } 2433*cdf0e10cSrcweir break; 2434*cdf0e10cSrcweir 2435*cdf0e10cSrcweir case CM_WIDTH_PEN_THICK: 2436*cdf0e10cSrcweir { 2437*cdf0e10cSrcweir setPenWidth(200.0); 2438*cdf0e10cSrcweir mbWasPaused = false; 2439*cdf0e10cSrcweir } 2440*cdf0e10cSrcweir break; 2441*cdf0e10cSrcweir 2442*cdf0e10cSrcweir case CM_WIDTH_PEN_VERY_THICK: 2443*cdf0e10cSrcweir { 2444*cdf0e10cSrcweir setPenWidth(400.0); 2445*cdf0e10cSrcweir mbWasPaused = false; 2446*cdf0e10cSrcweir } 2447*cdf0e10cSrcweir break; 2448*cdf0e10cSrcweir case CM_ERASE_ALLINK: 2449*cdf0e10cSrcweir { 2450*cdf0e10cSrcweir setEraseAllInk(true); 2451*cdf0e10cSrcweir mbWasPaused = false; 2452*cdf0e10cSrcweir } 2453*cdf0e10cSrcweir break; 2454*cdf0e10cSrcweir case CM_PEN_MODE: 2455*cdf0e10cSrcweir { 2456*cdf0e10cSrcweir setUsePen(!mbUsePen); 2457*cdf0e10cSrcweir mbWasPaused = false; 2458*cdf0e10cSrcweir } 2459*cdf0e10cSrcweir break; 2460*cdf0e10cSrcweir case CM_ENDSHOW: 2461*cdf0e10cSrcweir // in case the user cancels the presentation, switch to current slide 2462*cdf0e10cSrcweir // in edit mode 2463*cdf0e10cSrcweir if( mpSlideController.get() && (ANIMATIONMODE_SHOW == meAnimationMode) ) 2464*cdf0e10cSrcweir { 2465*cdf0e10cSrcweir if( mpSlideController->getCurrentSlideNumber() != -1 ) 2466*cdf0e10cSrcweir { 2467*cdf0e10cSrcweir mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 2468*cdf0e10cSrcweir } 2469*cdf0e10cSrcweir } 2470*cdf0e10cSrcweir endPresentation(); 2471*cdf0e10cSrcweir break; 2472*cdf0e10cSrcweir default: 2473*cdf0e10cSrcweir sal_Int32 nPageNumber = nMenuId - CM_SLIDES; 2474*cdf0e10cSrcweir const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 2475*cdf0e10cSrcweir if( (eMode == SHOWWINDOWMODE_END) || (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 2476*cdf0e10cSrcweir { 2477*cdf0e10cSrcweir mpShowWindow->RestartShow( nPageNumber ); 2478*cdf0e10cSrcweir } 2479*cdf0e10cSrcweir else if( nPageNumber != mpSlideController->getCurrentSlideNumber() ) 2480*cdf0e10cSrcweir { 2481*cdf0e10cSrcweir displaySlideNumber( nPageNumber ); 2482*cdf0e10cSrcweir } 2483*cdf0e10cSrcweir mbWasPaused = false; 2484*cdf0e10cSrcweir break; 2485*cdf0e10cSrcweir } 2486*cdf0e10cSrcweir } 2487*cdf0e10cSrcweir 2488*cdf0e10cSrcweir return 0; 2489*cdf0e10cSrcweir } 2490*cdf0e10cSrcweir 2491*cdf0e10cSrcweir // --------------------------------------------------------- 2492*cdf0e10cSrcweir 2493*cdf0e10cSrcweir Reference< XSlideShow > SlideshowImpl::createSlideShow() const 2494*cdf0e10cSrcweir { 2495*cdf0e10cSrcweir Reference< XSlideShow > xShow; 2496*cdf0e10cSrcweir 2497*cdf0e10cSrcweir try 2498*cdf0e10cSrcweir { 2499*cdf0e10cSrcweir Reference< lang::XMultiServiceFactory > xFactory( 2500*cdf0e10cSrcweir ::comphelper::getProcessServiceFactory(), 2501*cdf0e10cSrcweir UNO_QUERY_THROW ); 2502*cdf0e10cSrcweir 2503*cdf0e10cSrcweir Reference< XInterface > xInt( xFactory->createInstance( 2504*cdf0e10cSrcweir OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.SlideShow")) ) ); 2505*cdf0e10cSrcweir 2506*cdf0e10cSrcweir xShow.set( xInt, UNO_QUERY_THROW ); 2507*cdf0e10cSrcweir } 2508*cdf0e10cSrcweir catch( uno::Exception& e ) 2509*cdf0e10cSrcweir { 2510*cdf0e10cSrcweir (void)e; 2511*cdf0e10cSrcweir DBG_ERROR( 2512*cdf0e10cSrcweir (OString("sd::SlideshowImpl::createSlideShow(), " 2513*cdf0e10cSrcweir "exception caught: ") + 2514*cdf0e10cSrcweir rtl::OUStringToOString( 2515*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 2516*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 2517*cdf0e10cSrcweir } 2518*cdf0e10cSrcweir 2519*cdf0e10cSrcweir return xShow; 2520*cdf0e10cSrcweir } 2521*cdf0e10cSrcweir 2522*cdf0e10cSrcweir // --------------------------------------------------------- 2523*cdf0e10cSrcweir 2524*cdf0e10cSrcweir void SlideshowImpl::createSlideList( bool bAll, bool bStartWithActualSlide, const String& rPresSlide ) 2525*cdf0e10cSrcweir { 2526*cdf0e10cSrcweir const long nSlideCount = mpDoc->GetSdPageCount( PK_STANDARD ); 2527*cdf0e10cSrcweir 2528*cdf0e10cSrcweir if( nSlideCount ) 2529*cdf0e10cSrcweir { 2530*cdf0e10cSrcweir SdCustomShow* pCustomShow; 2531*cdf0e10cSrcweir 2532*cdf0e10cSrcweir if( !bStartWithActualSlide && mpDoc->GetCustomShowList() && maPresSettings.mbCustomShow ) 2533*cdf0e10cSrcweir pCustomShow = (SdCustomShow*) mpDoc->GetCustomShowList()->GetCurObject(); 2534*cdf0e10cSrcweir else 2535*cdf0e10cSrcweir pCustomShow = NULL; 2536*cdf0e10cSrcweir 2537*cdf0e10cSrcweir // create animation slide controller 2538*cdf0e10cSrcweir AnimationSlideController::Mode eMode = 2539*cdf0e10cSrcweir ( pCustomShow && pCustomShow->Count() ) ? AnimationSlideController::CUSTOM : 2540*cdf0e10cSrcweir (bAll ? AnimationSlideController::ALL : AnimationSlideController::FROM); 2541*cdf0e10cSrcweir 2542*cdf0e10cSrcweir Reference< XDrawPagesSupplier > xDrawPages( mpDoc->getUnoModel(), UNO_QUERY_THROW ); 2543*cdf0e10cSrcweir Reference< XIndexAccess > xSlides( xDrawPages->getDrawPages(), UNO_QUERY_THROW ); 2544*cdf0e10cSrcweir mpSlideController.reset( new AnimationSlideController( xSlides, eMode ) ); 2545*cdf0e10cSrcweir 2546*cdf0e10cSrcweir if( eMode != AnimationSlideController::CUSTOM ) 2547*cdf0e10cSrcweir { 2548*cdf0e10cSrcweir sal_Int32 nFirstSlide = 0; 2549*cdf0e10cSrcweir 2550*cdf0e10cSrcweir // normale Praesentation 2551*cdf0e10cSrcweir if( eMode == AnimationSlideController::FROM ) 2552*cdf0e10cSrcweir { 2553*cdf0e10cSrcweir if( rPresSlide.Len() ) 2554*cdf0e10cSrcweir { 2555*cdf0e10cSrcweir sal_Int32 nSlide; 2556*cdf0e10cSrcweir sal_Bool bTakeNextAvailable = sal_False; 2557*cdf0e10cSrcweir 2558*cdf0e10cSrcweir for( nSlide = 0, nFirstSlide = -1; ( nSlide < nSlideCount ) && ( -1 == nFirstSlide ); nSlide++ ) 2559*cdf0e10cSrcweir { 2560*cdf0e10cSrcweir SdPage* pTestSlide = mpDoc->GetSdPage( (sal_uInt16)nSlide, PK_STANDARD ); 2561*cdf0e10cSrcweir 2562*cdf0e10cSrcweir if( pTestSlide->GetName() == rPresSlide ) 2563*cdf0e10cSrcweir { 2564*cdf0e10cSrcweir if( pTestSlide->IsExcluded() ) 2565*cdf0e10cSrcweir bTakeNextAvailable = sal_True; 2566*cdf0e10cSrcweir else 2567*cdf0e10cSrcweir nFirstSlide = nSlide; 2568*cdf0e10cSrcweir } 2569*cdf0e10cSrcweir else if( bTakeNextAvailable && !pTestSlide->IsExcluded() ) 2570*cdf0e10cSrcweir nFirstSlide = nSlide; 2571*cdf0e10cSrcweir } 2572*cdf0e10cSrcweir 2573*cdf0e10cSrcweir if( -1 == nFirstSlide ) 2574*cdf0e10cSrcweir nFirstSlide = 0; 2575*cdf0e10cSrcweir } 2576*cdf0e10cSrcweir } 2577*cdf0e10cSrcweir 2578*cdf0e10cSrcweir for( sal_Int32 i = 0; i < nSlideCount; i++ ) 2579*cdf0e10cSrcweir { 2580*cdf0e10cSrcweir bool bVisible = ( mpDoc->GetSdPage( (sal_uInt16)i, PK_STANDARD ) )->IsExcluded() ? false : true; 2581*cdf0e10cSrcweir if( bVisible || (eMode == AnimationSlideController::ALL) ) 2582*cdf0e10cSrcweir mpSlideController->insertSlideNumber( i, bVisible ); 2583*cdf0e10cSrcweir } 2584*cdf0e10cSrcweir 2585*cdf0e10cSrcweir mpSlideController->setStartSlideNumber( nFirstSlide ); 2586*cdf0e10cSrcweir } 2587*cdf0e10cSrcweir else 2588*cdf0e10cSrcweir { 2589*cdf0e10cSrcweir if( meAnimationMode != ANIMATIONMODE_SHOW && rPresSlide.Len() ) 2590*cdf0e10cSrcweir { 2591*cdf0e10cSrcweir sal_Int32 nSlide; 2592*cdf0e10cSrcweir for( nSlide = 0; nSlide < nSlideCount; nSlide++ ) 2593*cdf0e10cSrcweir if( rPresSlide == mpDoc->GetSdPage( (sal_uInt16) nSlide, PK_STANDARD )->GetName() ) 2594*cdf0e10cSrcweir break; 2595*cdf0e10cSrcweir 2596*cdf0e10cSrcweir if( nSlide < nSlideCount ) 2597*cdf0e10cSrcweir mpSlideController->insertSlideNumber( (sal_uInt16) nSlide ); 2598*cdf0e10cSrcweir } 2599*cdf0e10cSrcweir 2600*cdf0e10cSrcweir void* pCustomSlide; 2601*cdf0e10cSrcweir sal_Int32 nSlideIndex; 2602*cdf0e10cSrcweir for( pCustomSlide = pCustomShow->First(),nSlideIndex=0; pCustomSlide; pCustomSlide = pCustomShow->Next(), nSlideIndex++ ) 2603*cdf0e10cSrcweir { 2604*cdf0e10cSrcweir const sal_uInt16 nSdSlide = ( ( (SdPage*) pCustomSlide )->GetPageNum() - 1 ) / 2; 2605*cdf0e10cSrcweir 2606*cdf0e10cSrcweir if( !( mpDoc->GetSdPage( nSdSlide, PK_STANDARD ) )->IsExcluded()) 2607*cdf0e10cSrcweir mpSlideController->insertSlideNumber( nSdSlide ); 2608*cdf0e10cSrcweir } 2609*cdf0e10cSrcweir } 2610*cdf0e10cSrcweir } 2611*cdf0e10cSrcweir } 2612*cdf0e10cSrcweir 2613*cdf0e10cSrcweir // --------------------------------------------------------- 2614*cdf0e10cSrcweir 2615*cdf0e10cSrcweir typedef sal_uInt16 (*FncGetChildWindowId)(); 2616*cdf0e10cSrcweir 2617*cdf0e10cSrcweir FncGetChildWindowId aShowChilds[] = 2618*cdf0e10cSrcweir { 2619*cdf0e10cSrcweir &AnimationChildWindow::GetChildWindowId, 2620*cdf0e10cSrcweir &Svx3DChildWindow::GetChildWindowId, 2621*cdf0e10cSrcweir &SvxFontWorkChildWindow::GetChildWindowId, 2622*cdf0e10cSrcweir &SvxColorChildWindow::GetChildWindowId, 2623*cdf0e10cSrcweir &SvxSearchDialogWrapper::GetChildWindowId, 2624*cdf0e10cSrcweir &SvxBmpMaskChildWindow::GetChildWindowId, 2625*cdf0e10cSrcweir &SvxIMapDlgChildWindow::GetChildWindowId, 2626*cdf0e10cSrcweir &SvxHyperlinkDlgWrapper::GetChildWindowId, 2627*cdf0e10cSrcweir &SvxHlinkDlgWrapper::GetChildWindowId, 2628*cdf0e10cSrcweir &SfxTemplateDialogWrapper::GetChildWindowId, 2629*cdf0e10cSrcweir &GalleryChildWindow::GetChildWindowId 2630*cdf0e10cSrcweir }; 2631*cdf0e10cSrcweir 2632*cdf0e10cSrcweir #define NAVIGATOR_CHILD_MASK 0x80000000UL 2633*cdf0e10cSrcweir 2634*cdf0e10cSrcweir void SlideshowImpl::hideChildWindows() 2635*cdf0e10cSrcweir { 2636*cdf0e10cSrcweir mnChildMask = 0UL; 2637*cdf0e10cSrcweir 2638*cdf0e10cSrcweir if( ANIMATIONMODE_SHOW == meAnimationMode ) 2639*cdf0e10cSrcweir { 2640*cdf0e10cSrcweir SfxViewFrame* pViewFrame = getViewFrame(); 2641*cdf0e10cSrcweir 2642*cdf0e10cSrcweir if( pViewFrame ) 2643*cdf0e10cSrcweir { 2644*cdf0e10cSrcweir if( pViewFrame->GetChildWindow( SID_NAVIGATOR ) != NULL ) 2645*cdf0e10cSrcweir mnChildMask |= NAVIGATOR_CHILD_MASK; 2646*cdf0e10cSrcweir 2647*cdf0e10cSrcweir for( sal_uLong i = 0, nCount = sizeof( aShowChilds ) / sizeof( FncGetChildWindowId ); i < nCount; i++ ) 2648*cdf0e10cSrcweir { 2649*cdf0e10cSrcweir const sal_uInt16 nId = ( *aShowChilds[ i ] )(); 2650*cdf0e10cSrcweir 2651*cdf0e10cSrcweir if( pViewFrame->GetChildWindow( nId ) ) 2652*cdf0e10cSrcweir { 2653*cdf0e10cSrcweir pViewFrame->SetChildWindow( nId, sal_False ); 2654*cdf0e10cSrcweir mnChildMask |= 1 << i; 2655*cdf0e10cSrcweir } 2656*cdf0e10cSrcweir } 2657*cdf0e10cSrcweir } 2658*cdf0e10cSrcweir } 2659*cdf0e10cSrcweir } 2660*cdf0e10cSrcweir 2661*cdf0e10cSrcweir // --------------------------------------------------------- 2662*cdf0e10cSrcweir 2663*cdf0e10cSrcweir void SlideshowImpl::showChildWindows() 2664*cdf0e10cSrcweir { 2665*cdf0e10cSrcweir if( ANIMATIONMODE_SHOW == meAnimationMode ) 2666*cdf0e10cSrcweir { 2667*cdf0e10cSrcweir SfxViewFrame* pViewFrame = getViewFrame(); 2668*cdf0e10cSrcweir if( pViewFrame ) 2669*cdf0e10cSrcweir { 2670*cdf0e10cSrcweir pViewFrame->SetChildWindow( SID_NAVIGATOR, ( mnChildMask & NAVIGATOR_CHILD_MASK ) != 0 ); 2671*cdf0e10cSrcweir 2672*cdf0e10cSrcweir for( sal_uLong i = 0, nCount = sizeof( aShowChilds ) / sizeof( FncGetChildWindowId ); i < nCount; i++ ) 2673*cdf0e10cSrcweir { 2674*cdf0e10cSrcweir if( mnChildMask & ( 1 << i ) ) 2675*cdf0e10cSrcweir pViewFrame->SetChildWindow( ( *aShowChilds[ i ] )(), sal_True ); 2676*cdf0e10cSrcweir } 2677*cdf0e10cSrcweir } 2678*cdf0e10cSrcweir } 2679*cdf0e10cSrcweir } 2680*cdf0e10cSrcweir 2681*cdf0e10cSrcweir // --------------------------------------------------------- 2682*cdf0e10cSrcweir 2683*cdf0e10cSrcweir SfxViewFrame* SlideshowImpl::getViewFrame() const 2684*cdf0e10cSrcweir { 2685*cdf0e10cSrcweir return mpViewShell ? mpViewShell->GetViewFrame() : 0; 2686*cdf0e10cSrcweir } 2687*cdf0e10cSrcweir 2688*cdf0e10cSrcweir // --------------------------------------------------------- 2689*cdf0e10cSrcweir 2690*cdf0e10cSrcweir SfxDispatcher* SlideshowImpl::getDispatcher() const 2691*cdf0e10cSrcweir { 2692*cdf0e10cSrcweir return (mpViewShell && mpViewShell->GetViewFrame()) ? mpViewShell->GetViewFrame()->GetDispatcher() : 0; 2693*cdf0e10cSrcweir } 2694*cdf0e10cSrcweir 2695*cdf0e10cSrcweir // --------------------------------------------------------- 2696*cdf0e10cSrcweir 2697*cdf0e10cSrcweir SfxBindings* SlideshowImpl::getBindings() const 2698*cdf0e10cSrcweir { 2699*cdf0e10cSrcweir return (mpViewShell && mpViewShell->GetViewFrame()) ? &mpViewShell->GetViewFrame()->GetBindings() : 0; 2700*cdf0e10cSrcweir } 2701*cdf0e10cSrcweir 2702*cdf0e10cSrcweir // --------------------------------------------------------- 2703*cdf0e10cSrcweir 2704*cdf0e10cSrcweir void SlideshowImpl::resize( const Size& rSize ) 2705*cdf0e10cSrcweir { 2706*cdf0e10cSrcweir maPresSize = rSize; 2707*cdf0e10cSrcweir 2708*cdf0e10cSrcweir if( mpShowWindow && (ANIMATIONMODE_VIEW != meAnimationMode) ) 2709*cdf0e10cSrcweir { 2710*cdf0e10cSrcweir mpShowWindow->SetSizePixel( maPresSize ); 2711*cdf0e10cSrcweir mpShowWindow->Show(); 2712*cdf0e10cSrcweir 2713*cdf0e10cSrcweir // Call ToTop() to bring the window to top if 2714*cdf0e10cSrcweir // a) the old size is not degenerate (then the window will be closed 2715*cdf0e10cSrcweir // soon) and 2716*cdf0e10cSrcweir // b) the animation mode is not that of a preview (on the one hand 2717*cdf0e10cSrcweir // this leaves the old behaviour for the slide show mode unmodified 2718*cdf0e10cSrcweir // and on the other hand does not move the focus from the document 2719*cdf0e10cSrcweir // to the (preview) window; the ToTop() seems not to be necessary at 2720*cdf0e10cSrcweir // least for the preview). 2721*cdf0e10cSrcweir // if( !aOldSize.Width() && !aOldSize.Height() ) 2722*cdf0e10cSrcweir // mpShowWindow->ToTop(); 2723*cdf0e10cSrcweir } 2724*cdf0e10cSrcweir 2725*cdf0e10cSrcweir if( mxView.is() ) try 2726*cdf0e10cSrcweir { 2727*cdf0e10cSrcweir awt::WindowEvent aEvt; 2728*cdf0e10cSrcweir mxView->windowResized(aEvt); 2729*cdf0e10cSrcweir } 2730*cdf0e10cSrcweir catch( Exception& e ) 2731*cdf0e10cSrcweir { 2732*cdf0e10cSrcweir static_cast<void>(e); 2733*cdf0e10cSrcweir DBG_ERROR( 2734*cdf0e10cSrcweir (OString("sd::SlideshowImpl::resize(), " 2735*cdf0e10cSrcweir "exception caught: ") + 2736*cdf0e10cSrcweir rtl::OUStringToOString( 2737*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 2738*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 2739*cdf0e10cSrcweir } 2740*cdf0e10cSrcweir } 2741*cdf0e10cSrcweir 2742*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2743*cdf0e10cSrcweir 2744*cdf0e10cSrcweir void SlideshowImpl::setActiveXToolbarsVisible( sal_Bool bVisible ) 2745*cdf0e10cSrcweir { 2746*cdf0e10cSrcweir // in case of ActiveX control the toolbars should not be visible if slide show runs in window mode 2747*cdf0e10cSrcweir // actually it runs always in window mode in case of ActiveX control 2748*cdf0e10cSrcweir if ( !maPresSettings.mbFullScreen && mpDocSh && mpDocSh->GetMedium() ) 2749*cdf0e10cSrcweir { 2750*cdf0e10cSrcweir SFX_ITEMSET_ARG( mpDocSh->GetMedium()->GetItemSet(), pItem, SfxBoolItem, SID_VIEWONLY, sal_False ); 2751*cdf0e10cSrcweir if ( pItem && pItem->GetValue() ) 2752*cdf0e10cSrcweir { 2753*cdf0e10cSrcweir // this is a plugin/activex mode, no toolbars should be visible during slide show 2754*cdf0e10cSrcweir // after the end of slide show they should be visible again 2755*cdf0e10cSrcweir SfxViewFrame* pViewFrame = getViewFrame(); 2756*cdf0e10cSrcweir if( pViewFrame ) 2757*cdf0e10cSrcweir { 2758*cdf0e10cSrcweir try 2759*cdf0e10cSrcweir { 2760*cdf0e10cSrcweir Reference< frame::XLayoutManager > xLayoutManager; 2761*cdf0e10cSrcweir Reference< beans::XPropertySet > xFrameProps( pViewFrame->GetFrame().GetTopFrame().GetFrameInterface(), UNO_QUERY_THROW ); 2762*cdf0e10cSrcweir if ( ( xFrameProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" ) ) ) 2763*cdf0e10cSrcweir >>= xLayoutManager ) 2764*cdf0e10cSrcweir && xLayoutManager.is() ) 2765*cdf0e10cSrcweir { 2766*cdf0e10cSrcweir xLayoutManager->setVisible( bVisible ); 2767*cdf0e10cSrcweir } 2768*cdf0e10cSrcweir } 2769*cdf0e10cSrcweir catch( uno::Exception& ) 2770*cdf0e10cSrcweir {} 2771*cdf0e10cSrcweir } 2772*cdf0e10cSrcweir } 2773*cdf0e10cSrcweir } 2774*cdf0e10cSrcweir } 2775*cdf0e10cSrcweir 2776*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2777*cdf0e10cSrcweir 2778*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::activate() throw (RuntimeException) 2779*cdf0e10cSrcweir { 2780*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 2781*cdf0e10cSrcweir 2782*cdf0e10cSrcweir maDeactivateTimer.Stop(); 2783*cdf0e10cSrcweir 2784*cdf0e10cSrcweir if( !mbActive && mxShow.is() ) 2785*cdf0e10cSrcweir { 2786*cdf0e10cSrcweir mbActive = sal_True; 2787*cdf0e10cSrcweir 2788*cdf0e10cSrcweir if( ANIMATIONMODE_SHOW == meAnimationMode ) 2789*cdf0e10cSrcweir { 2790*cdf0e10cSrcweir if( mbAutoSaveWasOn ) 2791*cdf0e10cSrcweir setAutoSaveState( false ); 2792*cdf0e10cSrcweir 2793*cdf0e10cSrcweir if( mpShowWindow ) 2794*cdf0e10cSrcweir { 2795*cdf0e10cSrcweir SfxViewFrame* pViewFrame = getViewFrame(); 2796*cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : 0; 2797*cdf0e10cSrcweir 2798*cdf0e10cSrcweir hideChildWindows(); 2799*cdf0e10cSrcweir 2800*cdf0e10cSrcweir if( pDispatcher ) 2801*cdf0e10cSrcweir { 2802*cdf0e10cSrcweir // filter all forbiden slots 2803*cdf0e10cSrcweir pDispatcher->SetSlotFilter( sal_True, sizeof(pAllowed) / sizeof(sal_uInt16), pAllowed ); 2804*cdf0e10cSrcweir } 2805*cdf0e10cSrcweir 2806*cdf0e10cSrcweir if( getBindings() ) 2807*cdf0e10cSrcweir getBindings()->InvalidateAll(sal_True); 2808*cdf0e10cSrcweir 2809*cdf0e10cSrcweir mpShowWindow->GrabFocus(); 2810*cdf0e10cSrcweir } 2811*cdf0e10cSrcweir } 2812*cdf0e10cSrcweir 2813*cdf0e10cSrcweir resume(); 2814*cdf0e10cSrcweir } 2815*cdf0e10cSrcweir } 2816*cdf0e10cSrcweir 2817*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2818*cdf0e10cSrcweir 2819*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::deactivate() throw (RuntimeException) 2820*cdf0e10cSrcweir { 2821*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 2822*cdf0e10cSrcweir 2823*cdf0e10cSrcweir if( mbActive && mxShow.is() ) 2824*cdf0e10cSrcweir { 2825*cdf0e10cSrcweir maDeactivateTimer.Start(); 2826*cdf0e10cSrcweir } 2827*cdf0e10cSrcweir } 2828*cdf0e10cSrcweir 2829*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2830*cdf0e10cSrcweir 2831*cdf0e10cSrcweir IMPL_LINK( SlideshowImpl, deactivateHdl, Timer*, EMPTYARG ) 2832*cdf0e10cSrcweir { 2833*cdf0e10cSrcweir if( mbActive && mxShow.is() ) 2834*cdf0e10cSrcweir { 2835*cdf0e10cSrcweir mbActive = sal_False; 2836*cdf0e10cSrcweir 2837*cdf0e10cSrcweir pause(); 2838*cdf0e10cSrcweir 2839*cdf0e10cSrcweir if( ANIMATIONMODE_SHOW == meAnimationMode ) 2840*cdf0e10cSrcweir { 2841*cdf0e10cSrcweir if( mbAutoSaveWasOn ) 2842*cdf0e10cSrcweir setAutoSaveState( true ); 2843*cdf0e10cSrcweir 2844*cdf0e10cSrcweir if( mpShowWindow ) 2845*cdf0e10cSrcweir { 2846*cdf0e10cSrcweir showChildWindows(); 2847*cdf0e10cSrcweir } 2848*cdf0e10cSrcweir } 2849*cdf0e10cSrcweir } 2850*cdf0e10cSrcweir return 0; 2851*cdf0e10cSrcweir } 2852*cdf0e10cSrcweir 2853*cdf0e10cSrcweir // --------------------------------------------------------- 2854*cdf0e10cSrcweir 2855*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::isActive() throw (RuntimeException) 2856*cdf0e10cSrcweir { 2857*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 2858*cdf0e10cSrcweir return mbActive; 2859*cdf0e10cSrcweir } 2860*cdf0e10cSrcweir 2861*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2862*cdf0e10cSrcweir 2863*cdf0e10cSrcweir void SlideshowImpl::receiveRequest(SfxRequest& rReq) 2864*cdf0e10cSrcweir { 2865*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 2866*cdf0e10cSrcweir 2867*cdf0e10cSrcweir switch ( rReq.GetSlot() ) 2868*cdf0e10cSrcweir { 2869*cdf0e10cSrcweir case SID_NAVIGATOR_PEN: 2870*cdf0e10cSrcweir setUsePen(!mbUsePen); 2871*cdf0e10cSrcweir break; 2872*cdf0e10cSrcweir 2873*cdf0e10cSrcweir case SID_NAVIGATOR_PAGE: 2874*cdf0e10cSrcweir { 2875*cdf0e10cSrcweir PageJump eJump = (PageJump)((SfxAllEnumItem&) pArgs->Get(SID_NAVIGATOR_PAGE)).GetValue(); 2876*cdf0e10cSrcweir switch( eJump ) 2877*cdf0e10cSrcweir { 2878*cdf0e10cSrcweir case PAGE_FIRST: gotoFirstSlide(); break; 2879*cdf0e10cSrcweir case PAGE_LAST: gotoLastSlide(); break; 2880*cdf0e10cSrcweir case PAGE_NEXT: gotoNextSlide(); break; 2881*cdf0e10cSrcweir case PAGE_PREVIOUS: gotoPreviousSlide(); break; 2882*cdf0e10cSrcweir case PAGE_NONE: break; 2883*cdf0e10cSrcweir } 2884*cdf0e10cSrcweir } 2885*cdf0e10cSrcweir break; 2886*cdf0e10cSrcweir 2887*cdf0e10cSrcweir case SID_NAVIGATOR_OBJECT: 2888*cdf0e10cSrcweir { 2889*cdf0e10cSrcweir const String aTarget( ((SfxStringItem&) pArgs->Get(SID_NAVIGATOR_OBJECT)).GetValue() ); 2890*cdf0e10cSrcweir 2891*cdf0e10cSrcweir // is the bookmark a Slide? 2892*cdf0e10cSrcweir sal_Bool bIsMasterPage; 2893*cdf0e10cSrcweir sal_uInt16 nPgNum = mpDoc->GetPageByName( aTarget, bIsMasterPage ); 2894*cdf0e10cSrcweir SdrObject* pObj = NULL; 2895*cdf0e10cSrcweir 2896*cdf0e10cSrcweir if( nPgNum == SDRPAGE_NOTFOUND ) 2897*cdf0e10cSrcweir { 2898*cdf0e10cSrcweir // is the bookmark an object? 2899*cdf0e10cSrcweir pObj = mpDoc->GetObj( aTarget ); 2900*cdf0e10cSrcweir 2901*cdf0e10cSrcweir if( pObj ) 2902*cdf0e10cSrcweir nPgNum = pObj->GetPage()->GetPageNum(); 2903*cdf0e10cSrcweir } 2904*cdf0e10cSrcweir 2905*cdf0e10cSrcweir if( nPgNum != SDRPAGE_NOTFOUND ) 2906*cdf0e10cSrcweir { 2907*cdf0e10cSrcweir nPgNum = ( nPgNum - 1 ) >> 1; 2908*cdf0e10cSrcweir displaySlideNumber( nPgNum ); 2909*cdf0e10cSrcweir } 2910*cdf0e10cSrcweir } 2911*cdf0e10cSrcweir break; 2912*cdf0e10cSrcweir } 2913*cdf0e10cSrcweir } 2914*cdf0e10cSrcweir 2915*cdf0e10cSrcweir // --------------------------------------------------------- 2916*cdf0e10cSrcweir 2917*cdf0e10cSrcweir void SlideshowImpl::setAutoSaveState( bool bOn) 2918*cdf0e10cSrcweir { 2919*cdf0e10cSrcweir try 2920*cdf0e10cSrcweir { 2921*cdf0e10cSrcweir uno::Reference<lang::XMultiServiceFactory> xFac( ::comphelper::getProcessServiceFactory() ); 2922*cdf0e10cSrcweir 2923*cdf0e10cSrcweir uno::Reference< util::XURLTransformer > xParser( 2924*cdf0e10cSrcweir xFac->createInstance( OUString::createFromAscii("com.sun.star.util.URLTransformer" ) ), 2925*cdf0e10cSrcweir uno::UNO_QUERY_THROW); 2926*cdf0e10cSrcweir util::URL aURL; 2927*cdf0e10cSrcweir aURL.Complete = OUString::createFromAscii("vnd.sun.star.autorecovery:/setAutoSaveState"); 2928*cdf0e10cSrcweir xParser->parseStrict(aURL); 2929*cdf0e10cSrcweir 2930*cdf0e10cSrcweir Sequence< beans::PropertyValue > aArgs(1); 2931*cdf0e10cSrcweir aArgs[0].Name = OUString::createFromAscii("AutoSaveState"); 2932*cdf0e10cSrcweir aArgs[0].Value <<= bOn ? sal_True : sal_False; 2933*cdf0e10cSrcweir 2934*cdf0e10cSrcweir uno::Reference< frame::XDispatch > xAutoSave( 2935*cdf0e10cSrcweir xFac->createInstance(OUString::createFromAscii("com.sun.star.frame.AutoRecovery")), 2936*cdf0e10cSrcweir uno::UNO_QUERY_THROW); 2937*cdf0e10cSrcweir xAutoSave->dispatch(aURL, aArgs); 2938*cdf0e10cSrcweir } 2939*cdf0e10cSrcweir catch( Exception& ) 2940*cdf0e10cSrcweir { 2941*cdf0e10cSrcweir DBG_ERROR("sd::SlideshowImpl::setAutoSaveState(), exception caught!"); 2942*cdf0e10cSrcweir } 2943*cdf0e10cSrcweir } 2944*cdf0e10cSrcweir 2945*cdf0e10cSrcweir // --------------------------------------------------------- 2946*cdf0e10cSrcweir 2947*cdf0e10cSrcweir Reference< XDrawPage > SAL_CALL SlideshowImpl::getCurrentSlide() throw (RuntimeException) 2948*cdf0e10cSrcweir { 2949*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 2950*cdf0e10cSrcweir 2951*cdf0e10cSrcweir Reference< XDrawPage > xSlide; 2952*cdf0e10cSrcweir if( mxShow.is() && mpSlideController.get() ) 2953*cdf0e10cSrcweir { 2954*cdf0e10cSrcweir sal_Int32 nSlide = getCurrentSlideNumber(); 2955*cdf0e10cSrcweir if( (nSlide >= 0) && (nSlide < mpSlideController->getSlideNumberCount() ) ) 2956*cdf0e10cSrcweir xSlide = mpSlideController->getSlideByNumber( nSlide ); 2957*cdf0e10cSrcweir } 2958*cdf0e10cSrcweir 2959*cdf0e10cSrcweir return xSlide; 2960*cdf0e10cSrcweir } 2961*cdf0e10cSrcweir 2962*cdf0e10cSrcweir // --------------------------------------------------------- 2963*cdf0e10cSrcweir 2964*cdf0e10cSrcweir sal_Int32 SAL_CALL SlideshowImpl::getNextSlideIndex() throw (RuntimeException) 2965*cdf0e10cSrcweir { 2966*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 2967*cdf0e10cSrcweir 2968*cdf0e10cSrcweir if( mxShow.is() ) 2969*cdf0e10cSrcweir { 2970*cdf0e10cSrcweir return mpSlideController->getNextSlideIndex(); 2971*cdf0e10cSrcweir } 2972*cdf0e10cSrcweir else 2973*cdf0e10cSrcweir { 2974*cdf0e10cSrcweir return -1; 2975*cdf0e10cSrcweir } 2976*cdf0e10cSrcweir } 2977*cdf0e10cSrcweir 2978*cdf0e10cSrcweir // --------------------------------------------------------- 2979*cdf0e10cSrcweir 2980*cdf0e10cSrcweir sal_Int32 SAL_CALL SlideshowImpl::getCurrentSlideIndex() throw (RuntimeException) 2981*cdf0e10cSrcweir { 2982*cdf0e10cSrcweir return mpSlideController.get() ? mpSlideController->getCurrentSlideIndex() : -1; 2983*cdf0e10cSrcweir } 2984*cdf0e10cSrcweir 2985*cdf0e10cSrcweir // -------------------------------------------------------------------- 2986*cdf0e10cSrcweir // ::com::sun::star::presentation::XSlideShowController: 2987*cdf0e10cSrcweir // -------------------------------------------------------------------- 2988*cdf0e10cSrcweir 2989*cdf0e10cSrcweir ::sal_Int32 SAL_CALL SlideshowImpl::getSlideCount() throw (RuntimeException) 2990*cdf0e10cSrcweir { 2991*cdf0e10cSrcweir return mpSlideController.get() ? mpSlideController->getSlideIndexCount() : 0; 2992*cdf0e10cSrcweir } 2993*cdf0e10cSrcweir 2994*cdf0e10cSrcweir // -------------------------------------------------------------------- 2995*cdf0e10cSrcweir 2996*cdf0e10cSrcweir Reference< XDrawPage > SAL_CALL SlideshowImpl::getSlideByIndex(::sal_Int32 Index) throw (RuntimeException, css::lang::IndexOutOfBoundsException) 2997*cdf0e10cSrcweir { 2998*cdf0e10cSrcweir if( (mpSlideController.get() == 0 ) || (Index < 0) || (Index >= mpSlideController->getSlideIndexCount() ) ) 2999*cdf0e10cSrcweir throw IndexOutOfBoundsException(); 3000*cdf0e10cSrcweir 3001*cdf0e10cSrcweir return mpSlideController->getSlideByNumber( mpSlideController->getSlideNumber( Index ) ); 3002*cdf0e10cSrcweir } 3003*cdf0e10cSrcweir 3004*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::getAlwaysOnTop() throw (RuntimeException) 3005*cdf0e10cSrcweir { 3006*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3007*cdf0e10cSrcweir return maPresSettings.mbAlwaysOnTop; 3008*cdf0e10cSrcweir } 3009*cdf0e10cSrcweir 3010*cdf0e10cSrcweir // -------------------------------------------------------------------- 3011*cdf0e10cSrcweir 3012*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setAlwaysOnTop( sal_Bool bAlways ) throw (RuntimeException) 3013*cdf0e10cSrcweir { 3014*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3015*cdf0e10cSrcweir if( maPresSettings.mbAlwaysOnTop != bAlways ) 3016*cdf0e10cSrcweir { 3017*cdf0e10cSrcweir maPresSettings.mbAlwaysOnTop = bAlways; 3018*cdf0e10cSrcweir // todo, can this be changed while running? 3019*cdf0e10cSrcweir } 3020*cdf0e10cSrcweir } 3021*cdf0e10cSrcweir 3022*cdf0e10cSrcweir // -------------------------------------------------------------------- 3023*cdf0e10cSrcweir 3024*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::isFullScreen() throw (RuntimeException) 3025*cdf0e10cSrcweir { 3026*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3027*cdf0e10cSrcweir return maPresSettings.mbFullScreen; 3028*cdf0e10cSrcweir } 3029*cdf0e10cSrcweir 3030*cdf0e10cSrcweir // -------------------------------------------------------------------- 3031*cdf0e10cSrcweir 3032*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::getMouseVisible() throw (RuntimeException) 3033*cdf0e10cSrcweir { 3034*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3035*cdf0e10cSrcweir return maPresSettings.mbMouseVisible; 3036*cdf0e10cSrcweir } 3037*cdf0e10cSrcweir 3038*cdf0e10cSrcweir // -------------------------------------------------------------------- 3039*cdf0e10cSrcweir 3040*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setMouseVisible( sal_Bool bVisible ) throw (RuntimeException) 3041*cdf0e10cSrcweir { 3042*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3043*cdf0e10cSrcweir if( maPresSettings.mbMouseVisible != bVisible ) 3044*cdf0e10cSrcweir { 3045*cdf0e10cSrcweir maPresSettings.mbMouseVisible = bVisible; 3046*cdf0e10cSrcweir if( mpShowWindow ) 3047*cdf0e10cSrcweir mpShowWindow->SetMouseAutoHide( !maPresSettings.mbMouseVisible ); 3048*cdf0e10cSrcweir } 3049*cdf0e10cSrcweir } 3050*cdf0e10cSrcweir 3051*cdf0e10cSrcweir // -------------------------------------------------------------------- 3052*cdf0e10cSrcweir 3053*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::getUsePen() throw (RuntimeException) 3054*cdf0e10cSrcweir { 3055*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3056*cdf0e10cSrcweir return mbUsePen; 3057*cdf0e10cSrcweir } 3058*cdf0e10cSrcweir 3059*cdf0e10cSrcweir // -------------------------------------------------------------------- 3060*cdf0e10cSrcweir 3061*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setUsePen( sal_Bool bMouseAsPen ) throw (RuntimeException) 3062*cdf0e10cSrcweir { 3063*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3064*cdf0e10cSrcweir mbUsePen = bMouseAsPen; 3065*cdf0e10cSrcweir if( mxShow.is() ) try 3066*cdf0e10cSrcweir { 3067*cdf0e10cSrcweir // For Pencolor; 3068*cdf0e10cSrcweir Any aValue; 3069*cdf0e10cSrcweir if( mbUsePen ) 3070*cdf0e10cSrcweir aValue <<= mnUserPaintColor; 3071*cdf0e10cSrcweir beans::PropertyValue aPenProp; 3072*cdf0e10cSrcweir aPenProp.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "UserPaintColor" )); 3073*cdf0e10cSrcweir aPenProp.Value = aValue; 3074*cdf0e10cSrcweir mxShow->setProperty( aPenProp ); 3075*cdf0e10cSrcweir 3076*cdf0e10cSrcweir //for StrokeWidth : 3077*cdf0e10cSrcweir if( mbUsePen ) 3078*cdf0e10cSrcweir { 3079*cdf0e10cSrcweir beans::PropertyValue aPenPropWidth; 3080*cdf0e10cSrcweir aPenPropWidth.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "UserPaintStrokeWidth" )); 3081*cdf0e10cSrcweir aPenPropWidth.Value <<= mdUserPaintStrokeWidth; 3082*cdf0e10cSrcweir mxShow->setProperty( aPenPropWidth ); 3083*cdf0e10cSrcweir 3084*cdf0e10cSrcweir // for Pen Mode 3085*cdf0e10cSrcweir beans::PropertyValue aPenPropSwitchPenMode; 3086*cdf0e10cSrcweir aPenPropSwitchPenMode.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "SwitchPenMode" )); 3087*cdf0e10cSrcweir aPenPropSwitchPenMode.Value <<= sal_True; 3088*cdf0e10cSrcweir mxShow->setProperty( aPenPropSwitchPenMode ); 3089*cdf0e10cSrcweir } 3090*cdf0e10cSrcweir } 3091*cdf0e10cSrcweir catch( Exception& e ) 3092*cdf0e10cSrcweir { 3093*cdf0e10cSrcweir static_cast<void>(e); 3094*cdf0e10cSrcweir DBG_ERROR( 3095*cdf0e10cSrcweir (OString("sd::SlideshowImpl::setUsePen(), " 3096*cdf0e10cSrcweir "exception caught: ") + 3097*cdf0e10cSrcweir rtl::OUStringToOString( 3098*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 3099*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 3100*cdf0e10cSrcweir } 3101*cdf0e10cSrcweir } 3102*cdf0e10cSrcweir 3103*cdf0e10cSrcweir // -------------------------------------------------------------------- 3104*cdf0e10cSrcweir 3105*cdf0e10cSrcweir double SAL_CALL SlideshowImpl::getPenWidth() throw (RuntimeException) 3106*cdf0e10cSrcweir { 3107*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3108*cdf0e10cSrcweir return mdUserPaintStrokeWidth; 3109*cdf0e10cSrcweir } 3110*cdf0e10cSrcweir 3111*cdf0e10cSrcweir // -------------------------------------------------------------------- 3112*cdf0e10cSrcweir 3113*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setPenWidth( double dStrokeWidth ) throw (RuntimeException) 3114*cdf0e10cSrcweir { 3115*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3116*cdf0e10cSrcweir mdUserPaintStrokeWidth = dStrokeWidth; 3117*cdf0e10cSrcweir setUsePen( true ); // enable pen mode, update color and width 3118*cdf0e10cSrcweir } 3119*cdf0e10cSrcweir 3120*cdf0e10cSrcweir // -------------------------------------------------------------------- 3121*cdf0e10cSrcweir 3122*cdf0e10cSrcweir sal_Int32 SAL_CALL SlideshowImpl::getPenColor() throw (RuntimeException) 3123*cdf0e10cSrcweir { 3124*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3125*cdf0e10cSrcweir return mnUserPaintColor; 3126*cdf0e10cSrcweir } 3127*cdf0e10cSrcweir 3128*cdf0e10cSrcweir // -------------------------------------------------------------------- 3129*cdf0e10cSrcweir 3130*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setPenColor( sal_Int32 nColor ) throw (RuntimeException) 3131*cdf0e10cSrcweir { 3132*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3133*cdf0e10cSrcweir mnUserPaintColor = nColor; 3134*cdf0e10cSrcweir setUsePen( true ); // enable pen mode, update color 3135*cdf0e10cSrcweir } 3136*cdf0e10cSrcweir 3137*cdf0e10cSrcweir // -------------------------------------------------------------------- 3138*cdf0e10cSrcweir 3139*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setUseEraser( ::sal_Bool /*_usepen*/ ) throw (css::uno::RuntimeException) 3140*cdf0e10cSrcweir { 3141*cdf0e10cSrcweir } 3142*cdf0e10cSrcweir 3143*cdf0e10cSrcweir // -------------------------------------------------------------------- 3144*cdf0e10cSrcweir 3145*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setPenMode( bool bSwitchPenMode ) throw (RuntimeException) 3146*cdf0e10cSrcweir { 3147*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3148*cdf0e10cSrcweir setUsePen( bSwitchPenMode ); // SwitchPen Mode 3149*cdf0e10cSrcweir 3150*cdf0e10cSrcweir } 3151*cdf0e10cSrcweir 3152*cdf0e10cSrcweir // -------------------------------------------------------------------- 3153*cdf0e10cSrcweir 3154*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setEraseAllInk(bool bEraseAllInk) throw (RuntimeException) 3155*cdf0e10cSrcweir { 3156*cdf0e10cSrcweir if( bEraseAllInk ) 3157*cdf0e10cSrcweir { 3158*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3159*cdf0e10cSrcweir if( mxShow.is() ) try 3160*cdf0e10cSrcweir { 3161*cdf0e10cSrcweir beans::PropertyValue aPenPropEraseAllInk; 3162*cdf0e10cSrcweir aPenPropEraseAllInk.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "EraseAllInk" )); 3163*cdf0e10cSrcweir aPenPropEraseAllInk.Value <<= bEraseAllInk; 3164*cdf0e10cSrcweir mxShow->setProperty( aPenPropEraseAllInk ); 3165*cdf0e10cSrcweir } 3166*cdf0e10cSrcweir catch( Exception& e ) 3167*cdf0e10cSrcweir { 3168*cdf0e10cSrcweir static_cast<void>(e); 3169*cdf0e10cSrcweir DBG_ERROR( 3170*cdf0e10cSrcweir (OString("sd::SlideshowImpl::setEraseAllInk(), " 3171*cdf0e10cSrcweir "exception caught: ") + 3172*cdf0e10cSrcweir rtl::OUStringToOString( 3173*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 3174*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 3175*cdf0e10cSrcweir } 3176*cdf0e10cSrcweir } 3177*cdf0e10cSrcweir } 3178*cdf0e10cSrcweir 3179*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setEraseInk( sal_Int32 /*nEraseInkSize*/ ) throw (css::uno::RuntimeException) 3180*cdf0e10cSrcweir { 3181*cdf0e10cSrcweir } 3182*cdf0e10cSrcweir 3183*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::setEraserMode( bool /*bSwitchEraserMode*/ ) throw (css::uno::RuntimeException) 3184*cdf0e10cSrcweir { 3185*cdf0e10cSrcweir } 3186*cdf0e10cSrcweir 3187*cdf0e10cSrcweir // -------------------------------------------------------------------- 3188*cdf0e10cSrcweir // XSlideShowController Methods 3189*cdf0e10cSrcweir // -------------------------------------------------------------------- 3190*cdf0e10cSrcweir 3191*cdf0e10cSrcweir sal_Bool SAL_CALL SlideshowImpl::isRunning( ) throw (RuntimeException) 3192*cdf0e10cSrcweir { 3193*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3194*cdf0e10cSrcweir return mxShow.is(); 3195*cdf0e10cSrcweir } 3196*cdf0e10cSrcweir 3197*cdf0e10cSrcweir // -------------------------------------------------------------------- 3198*cdf0e10cSrcweir 3199*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoNextEffect( ) throw (RuntimeException) 3200*cdf0e10cSrcweir { 3201*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3202*cdf0e10cSrcweir 3203*cdf0e10cSrcweir if( mxShow.is() && mpSlideController.get() && mpShowWindow ) 3204*cdf0e10cSrcweir { 3205*cdf0e10cSrcweir if( mbIsPaused ) 3206*cdf0e10cSrcweir resume(); 3207*cdf0e10cSrcweir 3208*cdf0e10cSrcweir const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 3209*cdf0e10cSrcweir if( eMode == SHOWWINDOWMODE_END ) 3210*cdf0e10cSrcweir { 3211*cdf0e10cSrcweir endPresentation(); 3212*cdf0e10cSrcweir } 3213*cdf0e10cSrcweir else if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 3214*cdf0e10cSrcweir { 3215*cdf0e10cSrcweir mpShowWindow->RestartShow(); 3216*cdf0e10cSrcweir } 3217*cdf0e10cSrcweir else 3218*cdf0e10cSrcweir { 3219*cdf0e10cSrcweir mxShow->nextEffect(); 3220*cdf0e10cSrcweir update(); 3221*cdf0e10cSrcweir } 3222*cdf0e10cSrcweir } 3223*cdf0e10cSrcweir } 3224*cdf0e10cSrcweir 3225*cdf0e10cSrcweir // -------------------------------------------------------------------- 3226*cdf0e10cSrcweir 3227*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoPreviousEffect( ) throw (RuntimeException) 3228*cdf0e10cSrcweir { 3229*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3230*cdf0e10cSrcweir 3231*cdf0e10cSrcweir if( mxShow.is() && mpSlideController.get() && mpShowWindow ) 3232*cdf0e10cSrcweir { 3233*cdf0e10cSrcweir if( mbIsPaused ) 3234*cdf0e10cSrcweir resume(); 3235*cdf0e10cSrcweir 3236*cdf0e10cSrcweir const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 3237*cdf0e10cSrcweir if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 3238*cdf0e10cSrcweir { 3239*cdf0e10cSrcweir mpShowWindow->RestartShow(); 3240*cdf0e10cSrcweir } 3241*cdf0e10cSrcweir else 3242*cdf0e10cSrcweir { 3243*cdf0e10cSrcweir mxShow->previousEffect(); 3244*cdf0e10cSrcweir update(); 3245*cdf0e10cSrcweir } 3246*cdf0e10cSrcweir } 3247*cdf0e10cSrcweir } 3248*cdf0e10cSrcweir 3249*cdf0e10cSrcweir // -------------------------------------------------------------------- 3250*cdf0e10cSrcweir 3251*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoFirstSlide( ) throw (RuntimeException) 3252*cdf0e10cSrcweir { 3253*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3254*cdf0e10cSrcweir 3255*cdf0e10cSrcweir if( mpShowWindow && mpSlideController.get() ) 3256*cdf0e10cSrcweir { 3257*cdf0e10cSrcweir if( mbIsPaused ) 3258*cdf0e10cSrcweir resume(); 3259*cdf0e10cSrcweir 3260*cdf0e10cSrcweir if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_END ) 3261*cdf0e10cSrcweir { 3262*cdf0e10cSrcweir if( mpSlideController->getSlideIndexCount() ) 3263*cdf0e10cSrcweir mpShowWindow->RestartShow( 0); 3264*cdf0e10cSrcweir } 3265*cdf0e10cSrcweir else 3266*cdf0e10cSrcweir { 3267*cdf0e10cSrcweir displaySlideIndex( 0 ); 3268*cdf0e10cSrcweir } 3269*cdf0e10cSrcweir } 3270*cdf0e10cSrcweir } 3271*cdf0e10cSrcweir 3272*cdf0e10cSrcweir // -------------------------------------------------------------------- 3273*cdf0e10cSrcweir 3274*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoNextSlide( ) throw (RuntimeException) 3275*cdf0e10cSrcweir { 3276*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3277*cdf0e10cSrcweir 3278*cdf0e10cSrcweir if( mbIsPaused ) 3279*cdf0e10cSrcweir resume(); 3280*cdf0e10cSrcweir 3281*cdf0e10cSrcweir const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 3282*cdf0e10cSrcweir if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 3283*cdf0e10cSrcweir { 3284*cdf0e10cSrcweir mpShowWindow->RestartShow(); 3285*cdf0e10cSrcweir } 3286*cdf0e10cSrcweir else 3287*cdf0e10cSrcweir { 3288*cdf0e10cSrcweir // if this is a show, ignore user inputs and 3289*cdf0e10cSrcweir // start 20ms timer to reenable inputs to fiter 3290*cdf0e10cSrcweir // buffered inputs during slide transition 3291*cdf0e10cSrcweir if( meAnimationMode == ANIMATIONMODE_SHOW ) 3292*cdf0e10cSrcweir { 3293*cdf0e10cSrcweir mbInputFreeze = true; 3294*cdf0e10cSrcweir maInputFreezeTimer.Start(); 3295*cdf0e10cSrcweir } 3296*cdf0e10cSrcweir 3297*cdf0e10cSrcweir if( mpSlideController.get() ) 3298*cdf0e10cSrcweir { 3299*cdf0e10cSrcweir if( mpSlideController->nextSlide() ) 3300*cdf0e10cSrcweir { 3301*cdf0e10cSrcweir displayCurrentSlide(); 3302*cdf0e10cSrcweir } 3303*cdf0e10cSrcweir else 3304*cdf0e10cSrcweir { 3305*cdf0e10cSrcweir stopSound(); 3306*cdf0e10cSrcweir 3307*cdf0e10cSrcweir if( meAnimationMode == ANIMATIONMODE_PREVIEW ) 3308*cdf0e10cSrcweir { 3309*cdf0e10cSrcweir endPresentation(); 3310*cdf0e10cSrcweir } 3311*cdf0e10cSrcweir else if( maPresSettings.mbEndless ) 3312*cdf0e10cSrcweir { 3313*cdf0e10cSrcweir if( maPresSettings.mnPauseTimeout ) 3314*cdf0e10cSrcweir { 3315*cdf0e10cSrcweir if( mpShowWindow ) 3316*cdf0e10cSrcweir { 3317*cdf0e10cSrcweir Graphic aGraphic( SfxApplication::GetApplicationLogo().GetBitmapEx() ); 3318*cdf0e10cSrcweir mpShowWindow->SetPauseMode( 0, maPresSettings.mnPauseTimeout, &aGraphic ); 3319*cdf0e10cSrcweir } 3320*cdf0e10cSrcweir } 3321*cdf0e10cSrcweir else 3322*cdf0e10cSrcweir { 3323*cdf0e10cSrcweir displaySlideIndex( 0 ); 3324*cdf0e10cSrcweir } 3325*cdf0e10cSrcweir } 3326*cdf0e10cSrcweir else 3327*cdf0e10cSrcweir { 3328*cdf0e10cSrcweir if( mpShowWindow ) 3329*cdf0e10cSrcweir { 3330*cdf0e10cSrcweir mpShowWindow->SetEndMode(); 3331*cdf0e10cSrcweir pause(); 3332*cdf0e10cSrcweir } 3333*cdf0e10cSrcweir } 3334*cdf0e10cSrcweir } 3335*cdf0e10cSrcweir } 3336*cdf0e10cSrcweir } 3337*cdf0e10cSrcweir } 3338*cdf0e10cSrcweir 3339*cdf0e10cSrcweir // -------------------------------------------------------------------- 3340*cdf0e10cSrcweir 3341*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoPreviousSlide( ) throw (RuntimeException) 3342*cdf0e10cSrcweir { 3343*cdf0e10cSrcweir gotoPreviousSlide(false); 3344*cdf0e10cSrcweir } 3345*cdf0e10cSrcweir 3346*cdf0e10cSrcweir void SlideshowImpl::gotoPreviousSlide (const bool bSkipAllMainSequenceEffects) 3347*cdf0e10cSrcweir { 3348*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3349*cdf0e10cSrcweir 3350*cdf0e10cSrcweir if( mxShow.is() && mpSlideController.get() ) try 3351*cdf0e10cSrcweir { 3352*cdf0e10cSrcweir if( mbIsPaused ) 3353*cdf0e10cSrcweir resume(); 3354*cdf0e10cSrcweir 3355*cdf0e10cSrcweir const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 3356*cdf0e10cSrcweir if( eMode == SHOWWINDOWMODE_END ) 3357*cdf0e10cSrcweir { 3358*cdf0e10cSrcweir const sal_Int32 nLastSlideIndex = mpSlideController->getSlideIndexCount() - 1; 3359*cdf0e10cSrcweir if( nLastSlideIndex >= 0 ) 3360*cdf0e10cSrcweir mpShowWindow->RestartShow( nLastSlideIndex ); 3361*cdf0e10cSrcweir } 3362*cdf0e10cSrcweir else if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 3363*cdf0e10cSrcweir { 3364*cdf0e10cSrcweir mpShowWindow->RestartShow(); 3365*cdf0e10cSrcweir } 3366*cdf0e10cSrcweir else 3367*cdf0e10cSrcweir { 3368*cdf0e10cSrcweir if( mpSlideController->previousSlide()) 3369*cdf0e10cSrcweir displayCurrentSlide(bSkipAllMainSequenceEffects); 3370*cdf0e10cSrcweir else if (bSkipAllMainSequenceEffects) 3371*cdf0e10cSrcweir { 3372*cdf0e10cSrcweir // We could not go to the previous slide (probably because 3373*cdf0e10cSrcweir // the current slide is already the first one). We still 3374*cdf0e10cSrcweir // have to call displayCurrentSlide because the calling 3375*cdf0e10cSrcweir // slideshow can not determine whether there is a previous 3376*cdf0e10cSrcweir // slide or not and has already prepared for a slide change. 3377*cdf0e10cSrcweir // This slide change has to be completed now, even when 3378*cdf0e10cSrcweir // changing to the same slide. 3379*cdf0e10cSrcweir // Note that in this special case we do NOT pass 3380*cdf0e10cSrcweir // bSkipAllMainSequenceEffects because we display the same 3381*cdf0e10cSrcweir // slide as before and do not want to show all its effects. 3382*cdf0e10cSrcweir displayCurrentSlide(false); 3383*cdf0e10cSrcweir } 3384*cdf0e10cSrcweir } 3385*cdf0e10cSrcweir } 3386*cdf0e10cSrcweir catch( Exception& e ) 3387*cdf0e10cSrcweir { 3388*cdf0e10cSrcweir static_cast<void>(e); 3389*cdf0e10cSrcweir DBG_ERROR( 3390*cdf0e10cSrcweir (OString("sd::SlideshowImpl::gotoPreviousSlide(), " 3391*cdf0e10cSrcweir "exception caught: ") + 3392*cdf0e10cSrcweir rtl::OUStringToOString( 3393*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 3394*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 3395*cdf0e10cSrcweir } 3396*cdf0e10cSrcweir } 3397*cdf0e10cSrcweir 3398*cdf0e10cSrcweir // -------------------------------------------------------------------- 3399*cdf0e10cSrcweir 3400*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoLastSlide() throw (RuntimeException) 3401*cdf0e10cSrcweir { 3402*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3403*cdf0e10cSrcweir 3404*cdf0e10cSrcweir if( mpSlideController.get() ) 3405*cdf0e10cSrcweir { 3406*cdf0e10cSrcweir if( mbIsPaused ) 3407*cdf0e10cSrcweir resume(); 3408*cdf0e10cSrcweir 3409*cdf0e10cSrcweir const sal_Int32 nLastSlideIndex = mpSlideController->getSlideIndexCount() - 1; 3410*cdf0e10cSrcweir if( nLastSlideIndex >= 0 ) 3411*cdf0e10cSrcweir { 3412*cdf0e10cSrcweir if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_END ) 3413*cdf0e10cSrcweir { 3414*cdf0e10cSrcweir mpShowWindow->RestartShow( nLastSlideIndex ); 3415*cdf0e10cSrcweir } 3416*cdf0e10cSrcweir else 3417*cdf0e10cSrcweir { 3418*cdf0e10cSrcweir displaySlideIndex( nLastSlideIndex ); 3419*cdf0e10cSrcweir } 3420*cdf0e10cSrcweir } 3421*cdf0e10cSrcweir } 3422*cdf0e10cSrcweir } 3423*cdf0e10cSrcweir 3424*cdf0e10cSrcweir // -------------------------------------------------------------------- 3425*cdf0e10cSrcweir 3426*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoBookmark( const OUString& rBookmark ) throw (RuntimeException) 3427*cdf0e10cSrcweir { 3428*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3429*cdf0e10cSrcweir 3430*cdf0e10cSrcweir if( mbIsPaused ) 3431*cdf0e10cSrcweir resume(); 3432*cdf0e10cSrcweir 3433*cdf0e10cSrcweir sal_Int32 nSlideNumber = getSlideNumberForBookmark( rBookmark ); 3434*cdf0e10cSrcweir if( nSlideNumber != -1 ) 3435*cdf0e10cSrcweir displaySlideNumber( nSlideNumber ); 3436*cdf0e10cSrcweir } 3437*cdf0e10cSrcweir 3438*cdf0e10cSrcweir // -------------------------------------------------------------------- 3439*cdf0e10cSrcweir 3440*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoSlide( const Reference< XDrawPage >& xSlide ) 3441*cdf0e10cSrcweir throw(IllegalArgumentException, RuntimeException) 3442*cdf0e10cSrcweir { 3443*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3444*cdf0e10cSrcweir 3445*cdf0e10cSrcweir if( mpSlideController.get() && xSlide.is() ) 3446*cdf0e10cSrcweir { 3447*cdf0e10cSrcweir if( mbIsPaused ) 3448*cdf0e10cSrcweir resume(); 3449*cdf0e10cSrcweir 3450*cdf0e10cSrcweir const sal_Int32 nSlideCount = mpSlideController->getSlideNumberCount(); 3451*cdf0e10cSrcweir for( sal_Int32 nSlide = 0; nSlide < nSlideCount; nSlide++ ) 3452*cdf0e10cSrcweir { 3453*cdf0e10cSrcweir if( mpSlideController->getSlideByNumber( nSlide ) == xSlide ) 3454*cdf0e10cSrcweir { 3455*cdf0e10cSrcweir displaySlideNumber( nSlide ); 3456*cdf0e10cSrcweir } 3457*cdf0e10cSrcweir } 3458*cdf0e10cSrcweir } 3459*cdf0e10cSrcweir } 3460*cdf0e10cSrcweir 3461*cdf0e10cSrcweir // -------------------------------------------------------------------- 3462*cdf0e10cSrcweir 3463*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::gotoSlideIndex( sal_Int32 nIndex ) throw (RuntimeException) 3464*cdf0e10cSrcweir { 3465*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3466*cdf0e10cSrcweir 3467*cdf0e10cSrcweir if( mbIsPaused ) 3468*cdf0e10cSrcweir resume(); 3469*cdf0e10cSrcweir 3470*cdf0e10cSrcweir displaySlideIndex( nIndex ); 3471*cdf0e10cSrcweir } 3472*cdf0e10cSrcweir 3473*cdf0e10cSrcweir // -------------------------------------------------------------------- 3474*cdf0e10cSrcweir 3475*cdf0e10cSrcweir void SAL_CALL SlideshowImpl::stopSound( ) throw (RuntimeException) 3476*cdf0e10cSrcweir { 3477*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3478*cdf0e10cSrcweir 3479*cdf0e10cSrcweir try 3480*cdf0e10cSrcweir { 3481*cdf0e10cSrcweir if( mxPlayer.is() ) 3482*cdf0e10cSrcweir { 3483*cdf0e10cSrcweir mxPlayer->stop(); 3484*cdf0e10cSrcweir mxPlayer.clear(); 3485*cdf0e10cSrcweir } 3486*cdf0e10cSrcweir } 3487*cdf0e10cSrcweir catch( Exception& e ) 3488*cdf0e10cSrcweir { 3489*cdf0e10cSrcweir static_cast<void>(e); 3490*cdf0e10cSrcweir DBG_ERROR( 3491*cdf0e10cSrcweir (OString("sd::SlideshowImpl::stopSound(), " 3492*cdf0e10cSrcweir "exception caught: ") + 3493*cdf0e10cSrcweir rtl::OUStringToOString( 3494*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 3495*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 3496*cdf0e10cSrcweir } 3497*cdf0e10cSrcweir } 3498*cdf0e10cSrcweir 3499*cdf0e10cSrcweir // -------------------------------------------------------------------- 3500*cdf0e10cSrcweir // XIndexAccess 3501*cdf0e10cSrcweir // -------------------------------------------------------------------- 3502*cdf0e10cSrcweir 3503*cdf0e10cSrcweir ::sal_Int32 SAL_CALL SlideshowImpl::getCount( ) throw (::com::sun::star::uno::RuntimeException) 3504*cdf0e10cSrcweir { 3505*cdf0e10cSrcweir return getSlideCount(); 3506*cdf0e10cSrcweir } 3507*cdf0e10cSrcweir 3508*cdf0e10cSrcweir // -------------------------------------------------------------------- 3509*cdf0e10cSrcweir 3510*cdf0e10cSrcweir ::com::sun::star::uno::Any SAL_CALL SlideshowImpl::getByIndex( ::sal_Int32 Index ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) 3511*cdf0e10cSrcweir { 3512*cdf0e10cSrcweir return Any( getSlideByIndex( Index ) ); 3513*cdf0e10cSrcweir } 3514*cdf0e10cSrcweir 3515*cdf0e10cSrcweir // -------------------------------------------------------------------- 3516*cdf0e10cSrcweir 3517*cdf0e10cSrcweir ::com::sun::star::uno::Type SAL_CALL SlideshowImpl::getElementType( ) throw (::com::sun::star::uno::RuntimeException) 3518*cdf0e10cSrcweir { 3519*cdf0e10cSrcweir return XDrawPage::static_type(); 3520*cdf0e10cSrcweir } 3521*cdf0e10cSrcweir 3522*cdf0e10cSrcweir // -------------------------------------------------------------------- 3523*cdf0e10cSrcweir 3524*cdf0e10cSrcweir ::sal_Bool SAL_CALL SlideshowImpl::hasElements( ) throw (::com::sun::star::uno::RuntimeException) 3525*cdf0e10cSrcweir { 3526*cdf0e10cSrcweir return getSlideCount() != 0; 3527*cdf0e10cSrcweir } 3528*cdf0e10cSrcweir 3529*cdf0e10cSrcweir // -------------------------------------------------------------------- 3530*cdf0e10cSrcweir 3531*cdf0e10cSrcweir Reference< XSlideShow > SAL_CALL SlideshowImpl::getSlideShow() throw (RuntimeException) 3532*cdf0e10cSrcweir { 3533*cdf0e10cSrcweir return mxShow; 3534*cdf0e10cSrcweir } 3535*cdf0e10cSrcweir 3536*cdf0e10cSrcweir // -------------------------------------------------------------------- 3537*cdf0e10cSrcweir 3538*cdf0e10cSrcweir 3539*cdf0e10cSrcweir PresentationSettingsEx::PresentationSettingsEx( const PresentationSettingsEx& r ) 3540*cdf0e10cSrcweir : PresentationSettings( r ) 3541*cdf0e10cSrcweir , mbRehearseTimings(r.mbRehearseTimings) 3542*cdf0e10cSrcweir , mbPreview(r.mbPreview) 3543*cdf0e10cSrcweir , mpParentWindow( 0 ) 3544*cdf0e10cSrcweir { 3545*cdf0e10cSrcweir } 3546*cdf0e10cSrcweir 3547*cdf0e10cSrcweir PresentationSettingsEx::PresentationSettingsEx( PresentationSettings& r ) 3548*cdf0e10cSrcweir : PresentationSettings( r ) 3549*cdf0e10cSrcweir , mbRehearseTimings(sal_False) 3550*cdf0e10cSrcweir , mbPreview(sal_False) 3551*cdf0e10cSrcweir , mpParentWindow(0) 3552*cdf0e10cSrcweir { 3553*cdf0e10cSrcweir } 3554*cdf0e10cSrcweir 3555*cdf0e10cSrcweir void PresentationSettingsEx::SetArguments( const Sequence< PropertyValue >& rArguments ) throw (IllegalArgumentException) 3556*cdf0e10cSrcweir { 3557*cdf0e10cSrcweir sal_Int32 nArguments = rArguments.getLength(); 3558*cdf0e10cSrcweir const PropertyValue* pValue = rArguments.getConstArray(); 3559*cdf0e10cSrcweir 3560*cdf0e10cSrcweir while( nArguments-- ) 3561*cdf0e10cSrcweir { 3562*cdf0e10cSrcweir SetPropertyValue( pValue->Name, pValue->Value ); 3563*cdf0e10cSrcweir pValue++; 3564*cdf0e10cSrcweir } 3565*cdf0e10cSrcweir } 3566*cdf0e10cSrcweir 3567*cdf0e10cSrcweir void PresentationSettingsEx::SetPropertyValue( const OUString& rProperty, const Any& rValue ) throw (IllegalArgumentException) 3568*cdf0e10cSrcweir { 3569*cdf0e10cSrcweir if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("RehearseTimings") ) ) 3570*cdf0e10cSrcweir { 3571*cdf0e10cSrcweir if( rValue >>= mbRehearseTimings ) 3572*cdf0e10cSrcweir return; 3573*cdf0e10cSrcweir } 3574*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Preview") ) ) 3575*cdf0e10cSrcweir { 3576*cdf0e10cSrcweir if( rValue >>= mbPreview ) 3577*cdf0e10cSrcweir return; 3578*cdf0e10cSrcweir } 3579*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("AnimationNode") ) ) 3580*cdf0e10cSrcweir { 3581*cdf0e10cSrcweir if( rValue >>= mxAnimationNode ) 3582*cdf0e10cSrcweir return; 3583*cdf0e10cSrcweir } 3584*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("ParentWindow") ) ) 3585*cdf0e10cSrcweir { 3586*cdf0e10cSrcweir Reference< XWindow > xWindow; 3587*cdf0e10cSrcweir if( rValue >>= xWindow ) 3588*cdf0e10cSrcweir { 3589*cdf0e10cSrcweir mpParentWindow = xWindow.is() ? VCLUnoHelper::GetWindow( xWindow ) : 0; 3590*cdf0e10cSrcweir return; 3591*cdf0e10cSrcweir } 3592*cdf0e10cSrcweir } 3593*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("AllowAnimations") ) ) 3594*cdf0e10cSrcweir { 3595*cdf0e10cSrcweir if( rValue >>= mbAnimationAllowed ) 3596*cdf0e10cSrcweir return; 3597*cdf0e10cSrcweir } 3598*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("AllowAnimations") ) ) 3599*cdf0e10cSrcweir { 3600*cdf0e10cSrcweir if( rValue >>= mbAnimationAllowed ) 3601*cdf0e10cSrcweir return; 3602*cdf0e10cSrcweir } 3603*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("FirstPage") ) ) 3604*cdf0e10cSrcweir { 3605*cdf0e10cSrcweir OUString aPresPage; 3606*cdf0e10cSrcweir if( rValue >>= aPresPage ) 3607*cdf0e10cSrcweir { 3608*cdf0e10cSrcweir maPresPage = getUiNameFromPageApiNameImpl(aPresPage); 3609*cdf0e10cSrcweir mbCustomShow = sal_False; 3610*cdf0e10cSrcweir mbAll = sal_False; 3611*cdf0e10cSrcweir return; 3612*cdf0e10cSrcweir } 3613*cdf0e10cSrcweir else 3614*cdf0e10cSrcweir { 3615*cdf0e10cSrcweir if( rValue >>= mxStartPage ) 3616*cdf0e10cSrcweir return; 3617*cdf0e10cSrcweir } 3618*cdf0e10cSrcweir } 3619*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("IsAlwaysOnTop") ) ) 3620*cdf0e10cSrcweir { 3621*cdf0e10cSrcweir if( rValue >>= mbAlwaysOnTop ) 3622*cdf0e10cSrcweir return; 3623*cdf0e10cSrcweir } 3624*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("IsAutomatic") ) ) 3625*cdf0e10cSrcweir { 3626*cdf0e10cSrcweir if( rValue >>= mbManual ) 3627*cdf0e10cSrcweir return; 3628*cdf0e10cSrcweir } 3629*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("IsEndless") ) ) 3630*cdf0e10cSrcweir { 3631*cdf0e10cSrcweir if( rValue >>= mbEndless ) 3632*cdf0e10cSrcweir return; 3633*cdf0e10cSrcweir } 3634*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("IsFullScreen") ) ) 3635*cdf0e10cSrcweir { 3636*cdf0e10cSrcweir if( rValue >>= mbFullScreen ) 3637*cdf0e10cSrcweir return; 3638*cdf0e10cSrcweir } 3639*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("IsMouseVisible") ) ) 3640*cdf0e10cSrcweir { 3641*cdf0e10cSrcweir if( rValue >>= mbMouseVisible ) 3642*cdf0e10cSrcweir return; 3643*cdf0e10cSrcweir } 3644*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Pause") ) ) 3645*cdf0e10cSrcweir { 3646*cdf0e10cSrcweir sal_Int32 nPause = -1; 3647*cdf0e10cSrcweir if( (rValue >>= nPause) && (nPause >= 0) ) 3648*cdf0e10cSrcweir { 3649*cdf0e10cSrcweir mnPauseTimeout = nPause; 3650*cdf0e10cSrcweir return; 3651*cdf0e10cSrcweir } 3652*cdf0e10cSrcweir } 3653*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("StartWithNavigator") ) ) 3654*cdf0e10cSrcweir { 3655*cdf0e10cSrcweir if( rValue >>= mbStartWithNavigator ) 3656*cdf0e10cSrcweir return; 3657*cdf0e10cSrcweir } 3658*cdf0e10cSrcweir else if( rProperty.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("UsePen") ) ) 3659*cdf0e10cSrcweir { 3660*cdf0e10cSrcweir if( rValue >>= mbMouseAsPen ) 3661*cdf0e10cSrcweir return; 3662*cdf0e10cSrcweir } 3663*cdf0e10cSrcweir throw IllegalArgumentException(); 3664*cdf0e10cSrcweir } 3665*cdf0e10cSrcweir 3666*cdf0e10cSrcweir //////////////////////////////// 3667*cdf0e10cSrcweir 3668*cdf0e10cSrcweir // --------------------------------------------------------- 3669*cdf0e10cSrcweir // XAnimationListener 3670*cdf0e10cSrcweir // --------------------------------------------------------- 3671*cdf0e10cSrcweir 3672*cdf0e10cSrcweir SlideShowListenerProxy::SlideShowListenerProxy( const rtl::Reference< SlideshowImpl >& xController, const css::uno::Reference< css::presentation::XSlideShow >& xSlideShow ) 3673*cdf0e10cSrcweir : maListeners( m_aMutex ) 3674*cdf0e10cSrcweir , mxController( xController ) 3675*cdf0e10cSrcweir , mxSlideShow( xSlideShow ) 3676*cdf0e10cSrcweir { 3677*cdf0e10cSrcweir } 3678*cdf0e10cSrcweir 3679*cdf0e10cSrcweir // --------------------------------------------------------- 3680*cdf0e10cSrcweir 3681*cdf0e10cSrcweir SlideShowListenerProxy::~SlideShowListenerProxy() 3682*cdf0e10cSrcweir { 3683*cdf0e10cSrcweir } 3684*cdf0e10cSrcweir 3685*cdf0e10cSrcweir // --------------------------------------------------------- 3686*cdf0e10cSrcweir 3687*cdf0e10cSrcweir void SlideShowListenerProxy::addAsSlideShowListener() 3688*cdf0e10cSrcweir { 3689*cdf0e10cSrcweir if( mxSlideShow.is() ) 3690*cdf0e10cSrcweir { 3691*cdf0e10cSrcweir Reference< XSlideShowListener > xSlideShowListener( this ); 3692*cdf0e10cSrcweir mxSlideShow->addSlideShowListener( xSlideShowListener ); 3693*cdf0e10cSrcweir } 3694*cdf0e10cSrcweir } 3695*cdf0e10cSrcweir 3696*cdf0e10cSrcweir // --------------------------------------------------------- 3697*cdf0e10cSrcweir 3698*cdf0e10cSrcweir void SlideShowListenerProxy::removeAsSlideShowListener() 3699*cdf0e10cSrcweir { 3700*cdf0e10cSrcweir if( mxSlideShow.is() ) 3701*cdf0e10cSrcweir { 3702*cdf0e10cSrcweir Reference< XSlideShowListener > xSlideShowListener( this ); 3703*cdf0e10cSrcweir mxSlideShow->removeSlideShowListener( xSlideShowListener ); 3704*cdf0e10cSrcweir } 3705*cdf0e10cSrcweir } 3706*cdf0e10cSrcweir 3707*cdf0e10cSrcweir // --------------------------------------------------------- 3708*cdf0e10cSrcweir 3709*cdf0e10cSrcweir void SlideShowListenerProxy::addShapeEventListener( const css::uno::Reference< css::drawing::XShape >& xShape ) 3710*cdf0e10cSrcweir { 3711*cdf0e10cSrcweir if( mxSlideShow.is() ) 3712*cdf0e10cSrcweir { 3713*cdf0e10cSrcweir Reference< XShapeEventListener > xListener( this ); 3714*cdf0e10cSrcweir mxSlideShow->addShapeEventListener( xListener, xShape ); 3715*cdf0e10cSrcweir } 3716*cdf0e10cSrcweir } 3717*cdf0e10cSrcweir 3718*cdf0e10cSrcweir // --------------------------------------------------------- 3719*cdf0e10cSrcweir 3720*cdf0e10cSrcweir void SlideShowListenerProxy::removeShapeEventListener( const css::uno::Reference< css::drawing::XShape >& xShape ) 3721*cdf0e10cSrcweir { 3722*cdf0e10cSrcweir if( mxSlideShow.is() ) 3723*cdf0e10cSrcweir { 3724*cdf0e10cSrcweir Reference< XShapeEventListener > xListener( this ); 3725*cdf0e10cSrcweir mxSlideShow->removeShapeEventListener( xListener, xShape ); 3726*cdf0e10cSrcweir } 3727*cdf0e10cSrcweir } 3728*cdf0e10cSrcweir 3729*cdf0e10cSrcweir // --------------------------------------------------------- 3730*cdf0e10cSrcweir 3731*cdf0e10cSrcweir void SlideShowListenerProxy::addSlideShowListener( const css::uno::Reference< css::presentation::XSlideShowListener >& xListener ) 3732*cdf0e10cSrcweir { 3733*cdf0e10cSrcweir maListeners.addInterface(xListener); 3734*cdf0e10cSrcweir } 3735*cdf0e10cSrcweir 3736*cdf0e10cSrcweir // --------------------------------------------------------- 3737*cdf0e10cSrcweir 3738*cdf0e10cSrcweir void SlideShowListenerProxy::removeSlideShowListener( const css::uno::Reference< css::presentation::XSlideShowListener >& xListener ) 3739*cdf0e10cSrcweir { 3740*cdf0e10cSrcweir maListeners.removeInterface(xListener); 3741*cdf0e10cSrcweir } 3742*cdf0e10cSrcweir 3743*cdf0e10cSrcweir // --------------------------------------------------------- 3744*cdf0e10cSrcweir 3745*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::beginEvent( const Reference< XAnimationNode >& xNode ) throw (RuntimeException) 3746*cdf0e10cSrcweir { 3747*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3748*cdf0e10cSrcweir 3749*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3750*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::bind( &XAnimationListener::beginEvent, _1, boost::cref(xNode) )); 3751*cdf0e10cSrcweir } 3752*cdf0e10cSrcweir 3753*cdf0e10cSrcweir // --------------------------------------------------------- 3754*cdf0e10cSrcweir 3755*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::endEvent( const Reference< XAnimationNode >& xNode ) throw (RuntimeException) 3756*cdf0e10cSrcweir { 3757*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3758*cdf0e10cSrcweir 3759*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3760*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::bind( &XAnimationListener::endEvent, _1, boost::cref(xNode) )); 3761*cdf0e10cSrcweir } 3762*cdf0e10cSrcweir 3763*cdf0e10cSrcweir // --------------------------------------------------------- 3764*cdf0e10cSrcweir 3765*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::repeat( const Reference< XAnimationNode >& xNode, ::sal_Int32 nRepeat ) throw (RuntimeException) 3766*cdf0e10cSrcweir { 3767*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3768*cdf0e10cSrcweir 3769*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3770*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::bind( &XAnimationListener::repeat, _1, boost::cref(xNode), boost::cref(nRepeat) )); 3771*cdf0e10cSrcweir } 3772*cdf0e10cSrcweir 3773*cdf0e10cSrcweir // --------------------------------------------------------- 3774*cdf0e10cSrcweir // ::com::sun::star::presentation::XSlideShowListener: 3775*cdf0e10cSrcweir // --------------------------------------------------------- 3776*cdf0e10cSrcweir 3777*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::paused( ) throw (::com::sun::star::uno::RuntimeException) 3778*cdf0e10cSrcweir { 3779*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3780*cdf0e10cSrcweir 3781*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3782*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::mem_fn( &XSlideShowListener::paused ) ); 3783*cdf0e10cSrcweir } 3784*cdf0e10cSrcweir 3785*cdf0e10cSrcweir // --------------------------------------------------------- 3786*cdf0e10cSrcweir 3787*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::resumed( ) throw (::com::sun::star::uno::RuntimeException) 3788*cdf0e10cSrcweir { 3789*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3790*cdf0e10cSrcweir 3791*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3792*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::mem_fn( &XSlideShowListener::resumed ) ); 3793*cdf0e10cSrcweir } 3794*cdf0e10cSrcweir 3795*cdf0e10cSrcweir // --------------------------------------------------------- 3796*cdf0e10cSrcweir 3797*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::slideTransitionStarted( ) throw (RuntimeException) 3798*cdf0e10cSrcweir { 3799*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3800*cdf0e10cSrcweir 3801*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3802*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::mem_fn( &XSlideShowListener::slideTransitionStarted ) ); 3803*cdf0e10cSrcweir } 3804*cdf0e10cSrcweir 3805*cdf0e10cSrcweir // --------------------------------------------------------- 3806*cdf0e10cSrcweir 3807*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::slideTransitionEnded( ) throw (::com::sun::star::uno::RuntimeException) 3808*cdf0e10cSrcweir { 3809*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3810*cdf0e10cSrcweir 3811*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3812*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::mem_fn( &XSlideShowListener::slideTransitionEnded ) ); 3813*cdf0e10cSrcweir } 3814*cdf0e10cSrcweir 3815*cdf0e10cSrcweir // --------------------------------------------------------- 3816*cdf0e10cSrcweir 3817*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::slideAnimationsEnded( ) throw (::com::sun::star::uno::RuntimeException) 3818*cdf0e10cSrcweir { 3819*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3820*cdf0e10cSrcweir 3821*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3822*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::mem_fn( &XSlideShowListener::slideAnimationsEnded ) ); 3823*cdf0e10cSrcweir } 3824*cdf0e10cSrcweir 3825*cdf0e10cSrcweir // --------------------------------------------------------- 3826*cdf0e10cSrcweir 3827*cdf0e10cSrcweir void SlideShowListenerProxy::slideEnded(sal_Bool bReverse) throw (RuntimeException) 3828*cdf0e10cSrcweir { 3829*cdf0e10cSrcweir { 3830*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3831*cdf0e10cSrcweir 3832*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3833*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( 3834*cdf0e10cSrcweir boost::bind( &XSlideShowListener::slideEnded, _1, bReverse) ); 3835*cdf0e10cSrcweir } 3836*cdf0e10cSrcweir 3837*cdf0e10cSrcweir { 3838*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3839*cdf0e10cSrcweir if( mxController.is() ) 3840*cdf0e10cSrcweir mxController->slideEnded(bReverse); 3841*cdf0e10cSrcweir } 3842*cdf0e10cSrcweir } 3843*cdf0e10cSrcweir 3844*cdf0e10cSrcweir // --------------------------------------------------------- 3845*cdf0e10cSrcweir 3846*cdf0e10cSrcweir void SlideShowListenerProxy::hyperLinkClicked( rtl::OUString const& aHyperLink ) throw (RuntimeException) 3847*cdf0e10cSrcweir { 3848*cdf0e10cSrcweir { 3849*cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 3850*cdf0e10cSrcweir 3851*cdf0e10cSrcweir if( maListeners.getLength() >= 0 ) 3852*cdf0e10cSrcweir maListeners.forEach<XSlideShowListener>( boost::bind( &XSlideShowListener::hyperLinkClicked, _1, boost::cref(aHyperLink) )); 3853*cdf0e10cSrcweir } 3854*cdf0e10cSrcweir 3855*cdf0e10cSrcweir { 3856*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3857*cdf0e10cSrcweir if( mxController.is() ) 3858*cdf0e10cSrcweir mxController->hyperLinkClicked(aHyperLink); 3859*cdf0e10cSrcweir } 3860*cdf0e10cSrcweir } 3861*cdf0e10cSrcweir 3862*cdf0e10cSrcweir // --------------------------------------------------------- 3863*cdf0e10cSrcweir // XEventListener 3864*cdf0e10cSrcweir // --------------------------------------------------------- 3865*cdf0e10cSrcweir 3866*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::disposing( const ::com::sun::star::lang::EventObject& aDisposeEvent ) throw (RuntimeException) 3867*cdf0e10cSrcweir { 3868*cdf0e10cSrcweir maListeners.disposeAndClear( aDisposeEvent ); 3869*cdf0e10cSrcweir mxController.clear(); 3870*cdf0e10cSrcweir mxSlideShow.clear(); 3871*cdf0e10cSrcweir } 3872*cdf0e10cSrcweir 3873*cdf0e10cSrcweir // --------------------------------------------------------- 3874*cdf0e10cSrcweir // XShapeEventListener 3875*cdf0e10cSrcweir // --------------------------------------------------------- 3876*cdf0e10cSrcweir 3877*cdf0e10cSrcweir void SAL_CALL SlideShowListenerProxy::click( const Reference< XShape >& xShape, const ::com::sun::star::awt::MouseEvent& aOriginalEvent ) throw (RuntimeException) 3878*cdf0e10cSrcweir { 3879*cdf0e10cSrcweir ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3880*cdf0e10cSrcweir if( mxController.is() ) 3881*cdf0e10cSrcweir mxController->click(xShape, aOriginalEvent ); 3882*cdf0e10cSrcweir } 3883*cdf0e10cSrcweir 3884*cdf0e10cSrcweir } // namespace ::sd 3885