180b08615SSebastian Spaeth /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2837e2808SMichael Meeks /* 3837e2808SMichael Meeks * This file is part of the LibreOffice project. 40fefcd83SRüdiger Timm * 5837e2808SMichael Meeks * This Source Code Form is subject to the terms of the Mozilla Public 6837e2808SMichael Meeks * License, v. 2.0. If a copy of the MPL was not distributed with this 7837e2808SMichael Meeks * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8487dfc49SRüdiger Timm * 9837e2808SMichael Meeks * This file incorporates work covered by the following license notice: 10487dfc49SRüdiger Timm * 11837e2808SMichael Meeks * Licensed to the Apache Software Foundation (ASF) under one or more 12837e2808SMichael Meeks * contributor license agreements. See the NOTICE file distributed 13837e2808SMichael Meeks * with this work for additional information regarding copyright 14837e2808SMichael Meeks * ownership. The ASF licenses this file to you under the Apache 15837e2808SMichael Meeks * License, Version 2.0 (the "License"); you may not use this file 16837e2808SMichael Meeks * except in compliance with the License. You may obtain a copy of 17837e2808SMichael Meeks * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18837e2808SMichael Meeks */ 19089380a5SOliver Bolte 2027cd397bSStephan Bergmann #include <sal/config.h> 2127cd397bSStephan Bergmann 2227cd397bSStephan Bergmann #include <algorithm> 2327cd397bSStephan Bergmann 249ecac387STor Lillqvist #include <config_features.h> 259ecac387STor Lillqvist 26dd1c991bSMatúš Kukan #include <com/sun/star/frame/theAutoRecovery.hpp> 27754c6af4SGabor Kelemen #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> 280fefcd83SRüdiger Timm #include <com/sun/star/document/XEventsSupplier.hpp> 29ddb02dbaSOliver Bolte #include <com/sun/star/drawing/XMasterPageTarget.hpp> 300fefcd83SRüdiger Timm #include <com/sun/star/beans/PropertyValue.hpp> 310fefcd83SRüdiger Timm #include <com/sun/star/beans/XPropertySetInfo.hpp> 3220549ebeSOliver Bolte #include <com/sun/star/beans/XPropertySet.hpp> 330fefcd83SRüdiger Timm #include <com/sun/star/awt/SystemPointer.hpp> 340fcd1a73SNoel Grandin #include <com/sun/star/util/URLTransformer.hpp> 35cfb3429dSOliver Bolte #include <com/sun/star/util/XURLTransformer.hpp> 36cfb3429dSOliver Bolte #include <com/sun/star/frame/XDispatch.hpp> 3720549ebeSOliver Bolte #include <com/sun/star/frame/XLayoutManager.hpp> 3823ef230fSNoel Grandin #include <com/sun/star/presentation/SlideShow.hpp> 39c4e04d6fSGabor Kelemen #include <com/sun/star/media/XPlayer.hpp> 404709cd82SGabor Kelemen #include <svl/stritem.hxx> 410cc66aafSMathias Bauer #include <svl/urihelper.hxx> 4272f55906SGabor Kelemen #include <unotools/saveopt.hxx> 4372f55906SGabor Kelemen #include <basic/sbstar.hxx> 440fefcd83SRüdiger Timm 455cb2e310SThomas Arnhold #include <toolkit/helper/vclunohelper.hxx> 46183debd7SNoel Grandin #include <tools/diagnose_ex.h> 47808a70e2SKurt Zenker 48c767f824SCédric Bosdonnat #include <sfx2/infobar.hxx> 4972f55906SGabor Kelemen #include <sfx2/dispatch.hxx> 50c8428842SChristian Lippka #include <sfx2/docfile.hxx> 51c8428842SChristian Lippka #include <sfx2/app.hxx> 524304226dSGabor Kelemen #include <sfx2/viewfrm.hxx> 530fefcd83SRüdiger Timm #include <svx/unoapi.hxx> 540fefcd83SRüdiger Timm #include <svx/svdoole2.hxx> 550fefcd83SRüdiger Timm #include <svx/f3dchild.hxx> 560fefcd83SRüdiger Timm #include <svx/imapdlg.hxx> 570fefcd83SRüdiger Timm #include <svx/fontwork.hxx> 5835aa48d8SArmin Le Grand #include <svx/SvxColorChildWindow.hxx> 590fefcd83SRüdiger Timm #include <svx/bmpmask.hxx> 600fefcd83SRüdiger Timm #include <svx/srchdlg.hxx> 610fefcd83SRüdiger Timm #include <svx/hyperdlg.hxx> 6272f55906SGabor Kelemen #include <svx/svxids.hrc> 633784e4d5SStephan Bergmann #include <AnimationChildWindow.hxx> 643784e4d5SStephan Bergmann #include <notifydocumentevent.hxx> 653784e4d5SStephan Bergmann #include "slideshowimpl.hxx" 663784e4d5SStephan Bergmann #include "slideshowviewimpl.hxx" 6705e5afdaSVladimir Glazounov #include "PaneHider.hxx" 680fefcd83SRüdiger Timm 693784e4d5SStephan Bergmann #include <bitmaps.hlst> 70e872d77cSCaolán McNamara #include <strings.hrc> 71e872d77cSCaolán McNamara #include <sdresid.hxx> 726858d517SChris Sherlock #include <vcl/canvastools.hxx> 734a6dc219SGabor Kelemen #include <vcl/commandevent.hxx> 74fb698d5eSMaxim Monastirsky #include <vcl/commandinfoprovider.hxx> 75e872d77cSCaolán McNamara #include <vcl/weldutils.hxx> 764a6dc219SGabor Kelemen 77a18a1a45STobias Lippert #include <vcl/settings.hxx> 783e009203SMiklos Vajna #include <vcl/scheduler.hxx> 794a6dc219SGabor Kelemen #include <vcl/svapp.hxx> 804a6dc219SGabor Kelemen #include <vcl/help.hxx> 81febe0fd1SGabor Kelemen #include <comphelper/processfactory.hxx> 823784e4d5SStephan Bergmann #include <rtl/ref.hxx> 833784e4d5SStephan Bergmann #include <avmedia/mediawindow.hxx> 843784e4d5SStephan Bergmann #include <svtools/colrdlg.hxx> 8572f55906SGabor Kelemen #include <DrawDocShell.hxx> 8672f55906SGabor Kelemen #include <ViewShellBase.hxx> 8772f55906SGabor Kelemen #include <PresentationViewShell.hxx> 883784e4d5SStephan Bergmann #include <RemoteServer.hxx> 893784e4d5SStephan Bergmann #include <customshowlist.hxx> 903784e4d5SStephan Bergmann #include <unopage.hxx> 915d7a28fdSGabor Kelemen #include <sdpage.hxx> 9272f55906SGabor Kelemen #include <sdmod.hxx> 9372f55906SGabor Kelemen #include <app.hrc> 9472f55906SGabor Kelemen #include <cusshow.hxx> 9572f55906SGabor Kelemen #include <optsitem.hxx> 96b10a5e4cSNoel Grandin 97747a4f30SCaolán McNamara #define CM_SLIDES 21 98808a70e2SKurt Zenker 99808a70e2SKurt Zenker using ::com::sun::star::animations::XAnimationNode; 100808a70e2SKurt Zenker using ::com::sun::star::animations::XAnimationListener; 101808a70e2SKurt Zenker using ::com::sun::star::awt::XWindow; 1020fefcd83SRüdiger Timm using namespace ::com::sun::star; 103808a70e2SKurt Zenker using namespace ::com::sun::star::lang; 104808a70e2SKurt Zenker using namespace ::com::sun::star::uno; 105808a70e2SKurt Zenker using namespace ::com::sun::star::drawing; 106808a70e2SKurt Zenker using namespace ::com::sun::star::container; 107808a70e2SKurt Zenker using namespace ::com::sun::star::document; 1080fefcd83SRüdiger Timm using namespace ::com::sun::star::presentation; 109808a70e2SKurt Zenker using namespace ::com::sun::star::beans; 1100fefcd83SRüdiger Timm 1110fefcd83SRüdiger Timm namespace sd 1120fefcd83SRüdiger Timm { 113f4a37ca9SUrs Fässler /** Slots, which will be disabled in the slide show and are managed by Sfx. 114f4a37ca9SUrs Fässler Have to be sorted in the order of the SIDs */ 11572fcc08eSStephan Bergmann sal_uInt16 const pAllowed[] = 1160fefcd83SRüdiger Timm { 117f4a37ca9SUrs Fässler SID_OPENDOC , // 5501 ///< that internally jumps work 1180fefcd83SRüdiger Timm SID_JUMPTOMARK , // 5598 119c82c3e12SVladimir Glazounov SID_OPENHYPERLINK , // 6676 1202503a1e9SBryan Quigley SID_PRESENTATION_END // 27218 1210fefcd83SRüdiger Timm }; 1220fefcd83SRüdiger Timm 123089380a5SOliver Bolte class AnimationSlideController 1240fefcd83SRüdiger Timm { 1250fefcd83SRüdiger Timm public: 126089380a5SOliver Bolte enum Mode { ALL, FROM, CUSTOM, PREVIEW }; 1270fefcd83SRüdiger Timm 128089380a5SOliver Bolte public: 129b46492d0SStephan Bergmann AnimationSlideController( Reference< XIndexAccess > const & xSlides, Mode eMode ); 1300fefcd83SRüdiger Timm 131089380a5SOliver Bolte void setStartSlideNumber( sal_Int32 nSlideNumber ) { mnStartSlideNumber = nSlideNumber; } 132089380a5SOliver Bolte sal_Int32 getStartSlideIndex() const; 1330fefcd83SRüdiger Timm 134089380a5SOliver Bolte sal_Int32 getCurrentSlideNumber() const; 135089380a5SOliver Bolte sal_Int32 getCurrentSlideIndex() const; 1360fefcd83SRüdiger Timm 137089380a5SOliver Bolte sal_Int32 getSlideIndexCount() const { return maSlideNumbers.size(); } 138089380a5SOliver Bolte sal_Int32 getSlideNumberCount() const { return mnSlideCount; } 1390fefcd83SRüdiger Timm 140089380a5SOliver Bolte sal_Int32 getSlideNumber( sal_Int32 nSlideIndex ) const; 1410fefcd83SRüdiger Timm 142089380a5SOliver Bolte void insertSlideNumber( sal_Int32 nSlideNumber, bool bVisible = true ); 143089380a5SOliver Bolte void setPreviewNode( const Reference< XAnimationNode >& xPreviewNode ); 1440fefcd83SRüdiger Timm 145089380a5SOliver Bolte bool jumpToSlideIndex( sal_Int32 nNewSlideIndex ); 146089380a5SOliver Bolte bool jumpToSlideNumber( sal_Int32 nNewSlideIndex ); 1470fefcd83SRüdiger Timm 148089380a5SOliver Bolte bool nextSlide(); 149089380a5SOliver Bolte bool previousSlide(); 150089380a5SOliver Bolte 1517dd531f8Sthb void displayCurrentSlide( const Reference< XSlideShow >& xShow, 1527dd531f8Sthb const Reference< XDrawPagesSupplier>& xDrawPages, 15376c3d136SAndre Fischer const bool bSkipAllMainSequenceEffects ); 1540fefcd83SRüdiger Timm 155c9c9d428SOliver Bolte sal_Int32 getNextSlideIndex() const; 156c9c9d428SOliver Bolte sal_Int32 getPreviousSlideIndex() const; 157c9c9d428SOliver Bolte 158c9c9d428SOliver Bolte bool isVisibleSlideNumber( sal_Int32 nSlideNumber ) const; 159c9c9d428SOliver Bolte 160808a70e2SKurt Zenker Reference< XDrawPage > getSlideByNumber( sal_Int32 nSlideNumber ) const; 161808a70e2SKurt Zenker 162808a70e2SKurt Zenker sal_Int32 getNextSlideNumber() const; 163808a70e2SKurt Zenker 1646ee44161SIvo Hinkelmann bool hasSlides() const { return !maSlideNumbers.empty(); } 1656ee44161SIvo Hinkelmann 1660fefcd83SRüdiger Timm private: 167089380a5SOliver Bolte bool getSlideAPI( sal_Int32 nSlideNumber, Reference< XDrawPage >& xSlide, Reference< XAnimationNode >& xAnimNode ); 168089380a5SOliver Bolte sal_Int32 findSlideIndex( sal_Int32 nSlideNumber ) const; 169089380a5SOliver Bolte 170abf7b941SStephan Bergmann bool isValidIndex( sal_Int32 nIndex ) const { return (nIndex >= 0) && (nIndex < static_cast<sal_Int32>(maSlideNumbers.size())); } 171089380a5SOliver Bolte bool isValidSlideNumber( sal_Int32 nSlideNumber ) const { return (nSlideNumber >= 0) && (nSlideNumber < mnSlideCount); } 172089380a5SOliver Bolte 173089380a5SOliver Bolte private: 174638b6707SNoel Grandin Mode meMode; 175089380a5SOliver Bolte sal_Int32 mnStartSlideNumber; 176089380a5SOliver Bolte std::vector< sal_Int32 > maSlideNumbers; 177089380a5SOliver Bolte std::vector< bool > maSlideVisible; 178089380a5SOliver Bolte std::vector< bool > maSlideVisited; 179089380a5SOliver Bolte Reference< XAnimationNode > mxPreviewNode; 180089380a5SOliver Bolte sal_Int32 mnSlideCount; 181089380a5SOliver Bolte sal_Int32 mnCurrentSlideIndex; 182089380a5SOliver Bolte sal_Int32 mnHiddenSlideNumber; 183089380a5SOliver Bolte Reference< XIndexAccess > mxSlides; 1840fefcd83SRüdiger Timm }; 1850fefcd83SRüdiger Timm 186808a70e2SKurt Zenker Reference< XDrawPage > AnimationSlideController::getSlideByNumber( sal_Int32 nSlideNumber ) const 187808a70e2SKurt Zenker { 188808a70e2SKurt Zenker Reference< XDrawPage > xSlide; 189808a70e2SKurt Zenker if( mxSlides.is() && (nSlideNumber >= 0) && (nSlideNumber < mxSlides->getCount()) ) 190808a70e2SKurt Zenker mxSlides->getByIndex( nSlideNumber ) >>= xSlide; 191808a70e2SKurt Zenker return xSlide; 192808a70e2SKurt Zenker } 193089380a5SOliver Bolte 194c9c9d428SOliver Bolte bool AnimationSlideController::isVisibleSlideNumber( sal_Int32 nSlideNumber ) const 195c9c9d428SOliver Bolte { 196c9c9d428SOliver Bolte sal_Int32 nIndex = findSlideIndex( nSlideNumber ); 197c9c9d428SOliver Bolte 198c9c9d428SOliver Bolte if( nIndex != -1 ) 199c9c9d428SOliver Bolte return maSlideVisible[ nIndex ]; 200c9c9d428SOliver Bolte else 201c9c9d428SOliver Bolte return false; 202c9c9d428SOliver Bolte } 203c9c9d428SOliver Bolte 204089380a5SOliver Bolte void AnimationSlideController::setPreviewNode( const Reference< XAnimationNode >& xPreviewNode ) 2050fefcd83SRüdiger Timm { 206089380a5SOliver Bolte mxPreviewNode = xPreviewNode; 2070fefcd83SRüdiger Timm } 2080fefcd83SRüdiger Timm 209b46492d0SStephan Bergmann AnimationSlideController::AnimationSlideController( Reference< XIndexAccess > const & xSlides, Mode eMode ) 210b9330a05SKurt Zenker : meMode( eMode ) 211b9330a05SKurt Zenker , mnStartSlideNumber(-1) 212b9330a05SKurt Zenker , mnSlideCount( 0 ) 213b9330a05SKurt Zenker , mnCurrentSlideIndex(0) 214b9330a05SKurt Zenker , mnHiddenSlideNumber( -1 ) 215b9330a05SKurt Zenker , mxSlides( xSlides ) 2160fefcd83SRüdiger Timm { 217089380a5SOliver Bolte if( mxSlides.is() ) 218089380a5SOliver Bolte mnSlideCount = xSlides->getCount(); 219089380a5SOliver Bolte } 220089380a5SOliver Bolte 221089380a5SOliver Bolte sal_Int32 AnimationSlideController::getStartSlideIndex() const 222089380a5SOliver Bolte { 223089380a5SOliver Bolte if( mnStartSlideNumber >= 0 ) 22489e5c418SVladimir Glazounov { 2250fefcd83SRüdiger Timm sal_Int32 nIndex; 226089380a5SOliver Bolte const sal_Int32 nCount = maSlideNumbers.size(); 2270fefcd83SRüdiger Timm 2280fefcd83SRüdiger Timm for( nIndex = 0; nIndex < nCount; nIndex++ ) 2290fefcd83SRüdiger Timm { 230089380a5SOliver Bolte if( maSlideNumbers[nIndex] == mnStartSlideNumber ) 2310fefcd83SRüdiger Timm return nIndex; 2320fefcd83SRüdiger Timm } 23389e5c418SVladimir Glazounov } 2340fefcd83SRüdiger Timm 2350fefcd83SRüdiger Timm return 0; 2360fefcd83SRüdiger Timm } 2370fefcd83SRüdiger Timm 238089380a5SOliver Bolte sal_Int32 AnimationSlideController::getCurrentSlideNumber() const 2390fefcd83SRüdiger Timm { 240089380a5SOliver Bolte if( mnHiddenSlideNumber != -1 ) 241089380a5SOliver Bolte return mnHiddenSlideNumber; 242376e5b46SJens-Heiner Rechtien else if( !maSlideNumbers.empty() ) 243089380a5SOliver Bolte return maSlideNumbers[mnCurrentSlideIndex]; 244376e5b46SJens-Heiner Rechtien else 245376e5b46SJens-Heiner Rechtien return 0; 246089380a5SOliver Bolte } 247089380a5SOliver Bolte 248089380a5SOliver Bolte sal_Int32 AnimationSlideController::getCurrentSlideIndex() const 249089380a5SOliver Bolte { 250089380a5SOliver Bolte if( mnHiddenSlideNumber != -1 ) 251089380a5SOliver Bolte return -1; 252089380a5SOliver Bolte else 253089380a5SOliver Bolte return mnCurrentSlideIndex; 254089380a5SOliver Bolte } 255089380a5SOliver Bolte 256089380a5SOliver Bolte bool AnimationSlideController::jumpToSlideIndex( sal_Int32 nNewSlideIndex ) 257089380a5SOliver Bolte { 258089380a5SOliver Bolte if( isValidIndex( nNewSlideIndex ) ) 259089380a5SOliver Bolte { 260089380a5SOliver Bolte mnCurrentSlideIndex = nNewSlideIndex; 261089380a5SOliver Bolte mnHiddenSlideNumber = -1; 262089380a5SOliver Bolte maSlideVisited[mnCurrentSlideIndex] = true; 263089380a5SOliver Bolte return true; 264089380a5SOliver Bolte } 265089380a5SOliver Bolte else 266089380a5SOliver Bolte { 267089380a5SOliver Bolte return false; 268089380a5SOliver Bolte } 269089380a5SOliver Bolte } 270089380a5SOliver Bolte 271089380a5SOliver Bolte bool AnimationSlideController::jumpToSlideNumber( sal_Int32 nNewSlideNumber ) 272089380a5SOliver Bolte { 273089380a5SOliver Bolte sal_Int32 nIndex = findSlideIndex( nNewSlideNumber ); 274089380a5SOliver Bolte if( isValidIndex( nIndex ) ) 275089380a5SOliver Bolte { 276089380a5SOliver Bolte return jumpToSlideIndex( nIndex ); 277089380a5SOliver Bolte } 278089380a5SOliver Bolte else if( (nNewSlideNumber >= 0) && (nNewSlideNumber < mnSlideCount) ) 279089380a5SOliver Bolte { 280089380a5SOliver Bolte // jump to a hidden slide 281089380a5SOliver Bolte mnHiddenSlideNumber = nNewSlideNumber; 282089380a5SOliver Bolte return true; 283089380a5SOliver Bolte } 284089380a5SOliver Bolte else 285089380a5SOliver Bolte { 286089380a5SOliver Bolte return false; 287089380a5SOliver Bolte } 288089380a5SOliver Bolte } 289089380a5SOliver Bolte 290089380a5SOliver Bolte sal_Int32 AnimationSlideController::getSlideNumber( sal_Int32 nSlideIndex ) const 291089380a5SOliver Bolte { 292089380a5SOliver Bolte if( isValidIndex( nSlideIndex ) ) 293089380a5SOliver Bolte return maSlideNumbers[nSlideIndex]; 2940fefcd83SRüdiger Timm else 2950fefcd83SRüdiger Timm return -1; 2960fefcd83SRüdiger Timm } 2970fefcd83SRüdiger Timm 298089380a5SOliver Bolte void AnimationSlideController::insertSlideNumber( sal_Int32 nSlideNumber, bool bVisible /* = true */ ) 2990fefcd83SRüdiger Timm { 300089380a5SOliver Bolte DBG_ASSERT( isValidSlideNumber( nSlideNumber ), "sd::AnimationSlideController::insertSlideNumber(), illegal index" ); 301089380a5SOliver Bolte if( isValidSlideNumber( nSlideNumber ) ) 302089380a5SOliver Bolte { 303089380a5SOliver Bolte maSlideNumbers.push_back( nSlideNumber ); 304089380a5SOliver Bolte maSlideVisible.push_back( bVisible ); 305089380a5SOliver Bolte maSlideVisited.push_back( false ); 306089380a5SOliver Bolte } 3070fefcd83SRüdiger Timm } 3080fefcd83SRüdiger Timm 309089380a5SOliver Bolte bool AnimationSlideController::getSlideAPI( sal_Int32 nSlideNumber, Reference< XDrawPage >& xSlide, Reference< XAnimationNode >& xAnimNode ) 3100fefcd83SRüdiger Timm { 311089380a5SOliver Bolte if( isValidSlideNumber( nSlideNumber ) ) try 312089380a5SOliver Bolte { 3131d67ca08SNoel Grandin xSlide.set( mxSlides->getByIndex(nSlideNumber), UNO_QUERY_THROW ); 314089380a5SOliver Bolte 315089380a5SOliver Bolte if( meMode == PREVIEW ) 316089380a5SOliver Bolte { 317089380a5SOliver Bolte xAnimNode = mxPreviewNode; 318089380a5SOliver Bolte } 319089380a5SOliver Bolte else 320089380a5SOliver Bolte { 321089380a5SOliver Bolte Reference< animations::XAnimationNodeSupplier > xAnimNodeSupplier( xSlide, UNO_QUERY_THROW ); 322089380a5SOliver Bolte xAnimNode = xAnimNodeSupplier->getAnimationNode(); 3230fefcd83SRüdiger Timm } 3240fefcd83SRüdiger Timm 325089380a5SOliver Bolte return true; 326089380a5SOliver Bolte } 3278cc98837STakeshi Abe catch( Exception& ) 328089380a5SOliver Bolte { 329889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::AnimationSlideController::getSlideAPI()" ); 330089380a5SOliver Bolte } 331089380a5SOliver Bolte 332089380a5SOliver Bolte return false; 333089380a5SOliver Bolte } 334089380a5SOliver Bolte 335089380a5SOliver Bolte sal_Int32 AnimationSlideController::findSlideIndex( sal_Int32 nSlideNumber ) const 3360fefcd83SRüdiger Timm { 3370fefcd83SRüdiger Timm sal_Int32 nIndex; 338089380a5SOliver Bolte const sal_Int32 nCount = maSlideNumbers.size(); 3390fefcd83SRüdiger Timm 3400fefcd83SRüdiger Timm for( nIndex = 0; nIndex < nCount; nIndex++ ) 3410fefcd83SRüdiger Timm { 342089380a5SOliver Bolte if( maSlideNumbers[nIndex] == nSlideNumber ) 3430fefcd83SRüdiger Timm return nIndex; 3440fefcd83SRüdiger Timm } 3450fefcd83SRüdiger Timm 3460fefcd83SRüdiger Timm return -1; 3470fefcd83SRüdiger Timm } 3480fefcd83SRüdiger Timm 349089380a5SOliver Bolte sal_Int32 AnimationSlideController::getNextSlideIndex() const 3500fefcd83SRüdiger Timm { 351089380a5SOliver Bolte switch( meMode ) 3520fefcd83SRüdiger Timm { 353089380a5SOliver Bolte case ALL: 3540fefcd83SRüdiger Timm { 355089380a5SOliver Bolte sal_Int32 nNewSlideIndex = mnCurrentSlideIndex + 1; 356089380a5SOliver Bolte if( isValidIndex( nNewSlideIndex ) ) 357089380a5SOliver Bolte { 358089380a5SOliver Bolte // if the current slide is not excluded, make sure the 359089380a5SOliver Bolte // next slide is also not excluded. 360089380a5SOliver Bolte // if the current slide is excluded, we want to go 361089380a5SOliver Bolte // to the next slide, even if this is also excluded. 362089380a5SOliver Bolte if( maSlideVisible[mnCurrentSlideIndex] ) 363089380a5SOliver Bolte { 364089380a5SOliver Bolte while( isValidIndex( nNewSlideIndex ) ) 365089380a5SOliver Bolte { 366089380a5SOliver Bolte if( maSlideVisible[nNewSlideIndex] ) 367089380a5SOliver Bolte break; 3680fefcd83SRüdiger Timm 369089380a5SOliver Bolte nNewSlideIndex++; 3700fefcd83SRüdiger Timm } 3710fefcd83SRüdiger Timm } 3720fefcd83SRüdiger Timm } 373c9c9d428SOliver Bolte return isValidIndex( nNewSlideIndex ) ? nNewSlideIndex : -1; 3740fefcd83SRüdiger Timm } 3750fefcd83SRüdiger Timm 376089380a5SOliver Bolte case FROM: 377089380a5SOliver Bolte case CUSTOM: 378089380a5SOliver Bolte return mnHiddenSlideNumber == -1 ? mnCurrentSlideIndex + 1 : mnCurrentSlideIndex; 379089380a5SOliver Bolte 380089380a5SOliver Bolte default: 381089380a5SOliver Bolte case PREVIEW: 382089380a5SOliver Bolte return -1; 383089380a5SOliver Bolte 384089380a5SOliver Bolte } 385089380a5SOliver Bolte } 386089380a5SOliver Bolte 387089380a5SOliver Bolte sal_Int32 AnimationSlideController::getNextSlideNumber() const 388089380a5SOliver Bolte { 389089380a5SOliver Bolte sal_Int32 nNextSlideIndex = getNextSlideIndex(); 390089380a5SOliver Bolte if( isValidIndex( nNextSlideIndex ) ) 391089380a5SOliver Bolte { 392089380a5SOliver Bolte return maSlideNumbers[nNextSlideIndex]; 393089380a5SOliver Bolte } 394089380a5SOliver Bolte else 395089380a5SOliver Bolte { 396089380a5SOliver Bolte return -1; 397089380a5SOliver Bolte } 398089380a5SOliver Bolte } 399089380a5SOliver Bolte 400089380a5SOliver Bolte bool AnimationSlideController::nextSlide() 401089380a5SOliver Bolte { 402089380a5SOliver Bolte return jumpToSlideIndex( getNextSlideIndex() ); 403089380a5SOliver Bolte } 404089380a5SOliver Bolte 405c9c9d428SOliver Bolte sal_Int32 AnimationSlideController::getPreviousSlideIndex() const 406089380a5SOliver Bolte { 407089380a5SOliver Bolte sal_Int32 nNewSlideIndex = mnCurrentSlideIndex - 1; 408089380a5SOliver Bolte 409089380a5SOliver Bolte switch( meMode ) 410089380a5SOliver Bolte { 411089380a5SOliver Bolte case ALL: 412089380a5SOliver Bolte { 413089380a5SOliver Bolte // make sure the previous slide is visible 414089380a5SOliver Bolte // or was already visited 415089380a5SOliver Bolte while( isValidIndex( nNewSlideIndex ) ) 416089380a5SOliver Bolte { 417089380a5SOliver Bolte if( maSlideVisible[nNewSlideIndex] || maSlideVisited[nNewSlideIndex] ) 418089380a5SOliver Bolte break; 419089380a5SOliver Bolte 420089380a5SOliver Bolte nNewSlideIndex--; 421089380a5SOliver Bolte } 422089380a5SOliver Bolte 423089380a5SOliver Bolte break; 424089380a5SOliver Bolte } 425089380a5SOliver Bolte 426089380a5SOliver Bolte case PREVIEW: 427c9c9d428SOliver Bolte return -1; 428c9c9d428SOliver Bolte 429c9c9d428SOliver Bolte default: 430c9c9d428SOliver Bolte break; 431089380a5SOliver Bolte } 432089380a5SOliver Bolte 433c9c9d428SOliver Bolte return nNewSlideIndex; 434c9c9d428SOliver Bolte } 435c9c9d428SOliver Bolte 436c9c9d428SOliver Bolte bool AnimationSlideController::previousSlide() 437c9c9d428SOliver Bolte { 438c9c9d428SOliver Bolte return jumpToSlideIndex( getPreviousSlideIndex() ); 439089380a5SOliver Bolte } 440089380a5SOliver Bolte 4417dd531f8Sthb void AnimationSlideController::displayCurrentSlide( const Reference< XSlideShow >& xShow, 4427dd531f8Sthb const Reference< XDrawPagesSupplier>& xDrawPages, 44376c3d136SAndre Fischer const bool bSkipAllMainSequenceEffects ) 444089380a5SOliver Bolte { 445089380a5SOliver Bolte const sal_Int32 nCurrentSlideNumber = getCurrentSlideNumber(); 446089380a5SOliver Bolte 447b104e6e9SNoel Grandin if( !(xShow.is() && (nCurrentSlideNumber != -1 )) ) 448b104e6e9SNoel Grandin return; 449b104e6e9SNoel Grandin 450089380a5SOliver Bolte Reference< XDrawPage > xSlide; 451089380a5SOliver Bolte Reference< XAnimationNode > xAnimNode; 45276c3d136SAndre Fischer ::std::vector<PropertyValue> aProperties; 453089380a5SOliver Bolte 454089380a5SOliver Bolte const sal_Int32 nNextSlideNumber = getNextSlideNumber(); 455089380a5SOliver Bolte if( getSlideAPI( nNextSlideNumber, xSlide, xAnimNode ) ) 456089380a5SOliver Bolte { 457089380a5SOliver Bolte Sequence< Any > aValue(2); 458089380a5SOliver Bolte aValue[0] <<= xSlide; 459089380a5SOliver Bolte aValue[1] <<= xAnimNode; 460a185ea4eSNoel Grandin aProperties.emplace_back( "Prefetch" , 46176c3d136SAndre Fischer -1, 46276c3d136SAndre Fischer Any(aValue), 463a185ea4eSNoel Grandin PropertyState_DIRECT_VALUE); 46476c3d136SAndre Fischer } 46576c3d136SAndre Fischer if (bSkipAllMainSequenceEffects) 46676c3d136SAndre Fischer { 46776c3d136SAndre Fischer // Add one property that prevents the slide transition from being 46876c3d136SAndre Fischer // shown (to speed up the transition to the previous slide) and 46976c3d136SAndre Fischer // one to show all main sequence effects so that the user can 47076c3d136SAndre Fischer // continue to undo effects. 471a185ea4eSNoel Grandin aProperties.emplace_back( "SkipAllMainSequenceEffects", 47276c3d136SAndre Fischer -1, 4730003e99bSStephan Bergmann Any(true), 474a185ea4eSNoel Grandin PropertyState_DIRECT_VALUE); 475a185ea4eSNoel Grandin aProperties.emplace_back("SkipSlideTransition", 47676c3d136SAndre Fischer -1, 4770003e99bSStephan Bergmann Any(true), 478a185ea4eSNoel Grandin PropertyState_DIRECT_VALUE); 479089380a5SOliver Bolte } 480089380a5SOliver Bolte 481089380a5SOliver Bolte if( getSlideAPI( nCurrentSlideNumber, xSlide, xAnimNode ) ) 4822554efabSNoel Grandin xShow->displaySlide( xSlide, xDrawPages, xAnimNode, comphelper::containerToSequence(aProperties) ); 483089380a5SOliver Bolte } 4840fefcd83SRüdiger Timm 48533ecd0d5SStephan Bergmann constexpr OUStringLiteral gsOnClick( u"OnClick" ); 48633ecd0d5SStephan Bergmann constexpr OUStringLiteral gsBookmark( u"Bookmark" ); 48733ecd0d5SStephan Bergmann constexpr OUStringLiteral gsVerb( u"Verb" ); 488453879cfSNoel Grandin 489827c46e7SNoel Grandin SlideshowImpl::SlideshowImpl( const Reference< XPresentation2 >& xPresentation, ViewShell* pViewSh, ::sd::View* pView, SdDrawDocument* pDoc, vcl::Window* pParentWindow ) 490808a70e2SKurt Zenker : SlideshowImplBase( m_aMutex ) 491808a70e2SKurt Zenker , mxModel(pDoc->getUnoModel(),UNO_QUERY_THROW) 492808a70e2SKurt Zenker , mpView(pView) 493808a70e2SKurt Zenker , mpViewShell(pViewSh) 494808a70e2SKurt Zenker , mpDocSh(pDoc->GetDocSh()) 495808a70e2SKurt Zenker , mpDoc(pDoc) 496808a70e2SKurt Zenker , mpParentWindow(pParentWindow) 49792c697c0SStephan Bergmann , mpShowWindow(nullptr) 498808a70e2SKurt Zenker , mnRestoreSlide(0) 499808a70e2SKurt Zenker , maPresSize( -1, -1 ) 500808a70e2SKurt Zenker , meAnimationMode(ANIMATIONMODE_SHOW) 50192c697c0SStephan Bergmann , mpOldActiveWindow(nullptr) 502808a70e2SKurt Zenker , mnChildMask( 0 ) 503808a70e2SKurt Zenker , mbDisposed(false) 504cf0eb5f7SCaolán McNamara , mbAutoSaveWasOn(false) 505808a70e2SKurt Zenker , mbRehearseTimings(false) 506808a70e2SKurt Zenker , mbIsPaused(false) 507d9568be3SCaolán McNamara , mbWasPaused(false) 508808a70e2SKurt Zenker , mbInputFreeze(false) 509b45a12c3SNoel Grandin , mbActive(false) 510808a70e2SKurt Zenker , maPresSettings( pDoc->getPresentationSettings() ) 511ef238fc5SChristian Lippka ORACLE , mnUserPaintColor( 0x80ff0000L ) 51203a5e096SChristian Lippka , mbUsePen(false) 513ef238fc5SChristian Lippka ORACLE , mdUserPaintStrokeWidth ( 150.0 ) 51492c697c0SStephan Bergmann , mnEndShowEvent(nullptr) 51592c697c0SStephan Bergmann , mnContextMenuEvent(nullptr) 516808a70e2SKurt Zenker , mxPresentation( xPresentation ) 5170fefcd83SRüdiger Timm { 5180fefcd83SRüdiger Timm if( mpViewShell ) 5190fefcd83SRüdiger Timm mpOldActiveWindow = mpViewShell->GetActiveWindow(); 5200fefcd83SRüdiger Timm 521*5e8c0e25SLuboš Luňák maUpdateTimer.SetDebugName("SlideShowImpl maUpdateTimer"); 522bf110d40SJan-Marek Glogowski maUpdateTimer.SetInvokeHandler(LINK(this, SlideshowImpl, updateHdl)); 5233a906cedSMichael Meeks // Priority must not be too high or we'll starve input handling etc. 524fdc61261SJan-Marek Glogowski maUpdateTimer.SetPriority(TaskPriority::REPAINT); 52567aad3b7SRüdiger Timm 526*5e8c0e25SLuboš Luňák maDeactivateTimer.SetDebugName("SlideShowImpl maDeactivateTimer"); 527bf110d40SJan-Marek Glogowski maDeactivateTimer.SetInvokeHandler(LINK(this, SlideshowImpl, deactivateHdl)); 528808a70e2SKurt Zenker maDeactivateTimer.SetTimeout( 20 ); 529808a70e2SKurt Zenker 530*5e8c0e25SLuboš Luňák maInputFreezeTimer.SetDebugName("SlideShowImpl maInputFreezeTimer"); 531bf110d40SJan-Marek Glogowski maInputFreezeTimer.SetInvokeHandler( LINK( this, SlideshowImpl, ReadyForNextInputHdl ) ); 53267aad3b7SRüdiger Timm maInputFreezeTimer.SetTimeout( 20 ); 533cfb3429dSOliver Bolte 534cfb3429dSOliver Bolte SvtSaveOptions aOptions; 535cfb3429dSOliver Bolte 536cfb3429dSOliver Bolte // no autosave during show 537cfb3429dSOliver Bolte if( aOptions.IsAutoSave() ) 538cfb3429dSOliver Bolte mbAutoSaveWasOn = true; 53981f4197bSRüdiger Timm 54081f4197bSRüdiger Timm Application::AddEventListener( LINK( this, SlideshowImpl, EventListenerHdl ) ); 54103a5e096SChristian Lippka 54203a5e096SChristian Lippka mbUsePen = maPresSettings.mbMouseAsPen; 54303a5e096SChristian Lippka 544d58c604eSNoel Grandin SdOptions* pOptions = SD_MOD()->GetSdOptions(DocumentType::Impress); 54503a5e096SChristian Lippka if( pOptions ) 54603a5e096SChristian Lippka { 54703a5e096SChristian Lippka mnUserPaintColor = pOptions->GetPresentationPenColor(); 54803a5e096SChristian Lippka mdUserPaintStrokeWidth = pOptions->GetPresentationPenWidth(); 54903a5e096SChristian Lippka } 5500fefcd83SRüdiger Timm } 5510fefcd83SRüdiger Timm 5520fefcd83SRüdiger Timm SlideshowImpl::~SlideshowImpl() 5530fefcd83SRüdiger Timm { 55424b867c1SCaolán McNamara SdModule *pModule = SD_MOD(); 55524b867c1SCaolán McNamara //rhbz#806663 SlideshowImpl can outlive SdModule 55624b867c1SCaolán McNamara SdOptions* pOptions = pModule ? 557d58c604eSNoel Grandin pModule->GetSdOptions(DocumentType::Impress) : nullptr; 55803a5e096SChristian Lippka if( pOptions ) 55903a5e096SChristian Lippka { 56003a5e096SChristian Lippka pOptions->SetPresentationPenColor(mnUserPaintColor); 56103a5e096SChristian Lippka pOptions->SetPresentationPenWidth(mdUserPaintStrokeWidth); 56203a5e096SChristian Lippka } 56303a5e096SChristian Lippka 56481f4197bSRüdiger Timm Application::RemoveEventListener( LINK( this, SlideshowImpl, EventListenerHdl ) ); 56581f4197bSRüdiger Timm 566808a70e2SKurt Zenker maDeactivateTimer.Stop(); 567808a70e2SKurt Zenker 568808a70e2SKurt Zenker if( !mbDisposed ) 569808a70e2SKurt Zenker { 570f4aaa487SThomas Arnhold OSL_FAIL("SlideshowImpl::~SlideshowImpl(), component was not disposed!"); 571808a70e2SKurt Zenker disposing(); 572808a70e2SKurt Zenker } 573808a70e2SKurt Zenker } 574808a70e2SKurt Zenker 575808a70e2SKurt Zenker void SAL_CALL SlideshowImpl::disposing() 576808a70e2SKurt Zenker { 5778f81eb2dSAndrzej J.R. Hunt #ifdef ENABLE_SDREMOTE 5784d14068cSAndrzej J.R. Hunt RemoteServer::presentationStopped(); 5798f81eb2dSAndrzej J.R. Hunt #endif 580808a70e2SKurt Zenker if( mxShow.is() && mpDoc ) 581e292ef25SArmin Le Grand NotifyDocumentEvent( 582e292ef25SArmin Le Grand *mpDoc, 583e292ef25SArmin Le Grand "OnEndPresentation" ); 584808a70e2SKurt Zenker 585cfb3429dSOliver Bolte if( mbAutoSaveWasOn ) 586cfb3429dSOliver Bolte setAutoSaveState( true ); 587cfb3429dSOliver Bolte 588285b99a1SKurt Zenker if( mnEndShowEvent ) 589285b99a1SKurt Zenker Application::RemoveUserEvent( mnEndShowEvent ); 590a9bec6a7SRüdiger Timm if( mnContextMenuEvent ) 591a9bec6a7SRüdiger Timm Application::RemoveUserEvent( mnContextMenuEvent ); 592808a70e2SKurt Zenker 593808a70e2SKurt Zenker maInputFreezeTimer.Stop(); 594808a70e2SKurt Zenker 595f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 596808a70e2SKurt Zenker 597808a70e2SKurt Zenker if( !mxShow.is() ) 598808a70e2SKurt Zenker return; 599808a70e2SKurt Zenker 600808a70e2SKurt Zenker if( mxPresentation.is() ) 601808a70e2SKurt Zenker mxPresentation->end(); 602808a70e2SKurt Zenker 603808a70e2SKurt Zenker maUpdateTimer.Stop(); 604d60a926fSRüdiger Timm 605808a70e2SKurt Zenker removeShapeEvents(); 606285b99a1SKurt Zenker 607808a70e2SKurt Zenker if( mxListenerProxy.is() ) 608808a70e2SKurt Zenker mxListenerProxy->removeAsSlideShowListener(); 6090fefcd83SRüdiger Timm 610808a70e2SKurt Zenker try 611808a70e2SKurt Zenker { 612808a70e2SKurt Zenker if( mxView.is() ) 6130ae0b7ffSNoel mxShow->removeView( mxView ); 614808a70e2SKurt Zenker 615808a70e2SKurt Zenker Reference< XComponent > xComponent( mxShow, UNO_QUERY ); 616808a70e2SKurt Zenker if( xComponent.is() ) 617808a70e2SKurt Zenker xComponent->dispose(); 618808a70e2SKurt Zenker 619808a70e2SKurt Zenker if( mxView.is() ) 620808a70e2SKurt Zenker mxView->dispose(); 621808a70e2SKurt Zenker } 6228cc98837STakeshi Abe catch( Exception& ) 623808a70e2SKurt Zenker { 624889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::stop()" ); 625808a70e2SKurt Zenker } 626808a70e2SKurt Zenker 627808a70e2SKurt Zenker mxShow.clear(); 628f66eec46SStephan Bergmann mxView.clear(); 629808a70e2SKurt Zenker mxListenerProxy.clear(); 630808a70e2SKurt Zenker mpSlideController.reset(); 631808a70e2SKurt Zenker 632f4a37ca9SUrs Fässler // take DrawView from presentation window, but give the old window back 633808a70e2SKurt Zenker if( mpShowWindow && mpView ) 634808a70e2SKurt Zenker mpView->DeleteWindowFromPaintView( mpShowWindow ); 635808a70e2SKurt Zenker 636808a70e2SKurt Zenker if( mpView ) 637608953c4SStephan Bergmann mpView->SetAnimationPause( false ); 638808a70e2SKurt Zenker 639808a70e2SKurt Zenker if( mpViewShell ) 640808a70e2SKurt Zenker { 641808a70e2SKurt Zenker mpViewShell->SetActiveWindow(mpOldActiveWindow); 64265090036SCaolán McNamara if (mpShowWindow) 64392c697c0SStephan Bergmann mpShowWindow->SetViewShell( nullptr ); 644808a70e2SKurt Zenker } 645808a70e2SKurt Zenker 646808a70e2SKurt Zenker if( mpView ) 647808a70e2SKurt Zenker mpView->InvalidateAllWin(); 648808a70e2SKurt Zenker 649808a70e2SKurt Zenker if( maPresSettings.mbFullScreen ) 650808a70e2SKurt Zenker { 6519ecac387STor Lillqvist #if HAVE_FEATURE_SCRIPTING 652808a70e2SKurt Zenker // restore StarBASICErrorHdl 653808a70e2SKurt Zenker StarBASIC::SetGlobalErrorHdl(maStarBASICGlobalErrorHdl); 654ae451af8SNoel Grandin maStarBASICGlobalErrorHdl = Link<StarBASIC*,bool>(); 655b344c30aSTor Lillqvist #endif 656808a70e2SKurt Zenker } 657808a70e2SKurt Zenker else 658808a70e2SKurt Zenker { 659808a70e2SKurt Zenker if( mpShowWindow ) 660808a70e2SKurt Zenker mpShowWindow->Hide(); 661808a70e2SKurt Zenker } 662808a70e2SKurt Zenker 663808a70e2SKurt Zenker if( meAnimationMode == ANIMATIONMODE_SHOW ) 664808a70e2SKurt Zenker { 665808a70e2SKurt Zenker mpDocSh->SetSlotFilter(); 666808a70e2SKurt Zenker mpDocSh->ApplySlotFilter(); 667808a70e2SKurt Zenker 668808a70e2SKurt Zenker Help::EnableContextHelp(); 669808a70e2SKurt Zenker Help::EnableExtHelp(); 670808a70e2SKurt Zenker 671808a70e2SKurt Zenker showChildWindows(); 6722e8acde1SNoel Grandin mnChildMask = 0; 673808a70e2SKurt Zenker } 674808a70e2SKurt Zenker 675f4a37ca9SUrs Fässler // show current window again 67689d39bc1SOliver Specht if( mpViewShell && dynamic_cast< PresentationViewShell *>( mpViewShell ) == nullptr) 677808a70e2SKurt Zenker { 678808a70e2SKurt Zenker if( meAnimationMode == ANIMATIONMODE_SHOW ) 679808a70e2SKurt Zenker { 680808a70e2SKurt Zenker mpViewShell->GetViewShellBase().ShowUIControls (true); 681808a70e2SKurt Zenker mpPaneHider.reset(); 682808a70e2SKurt Zenker } 683808a70e2SKurt Zenker else if( meAnimationMode == ANIMATIONMODE_PREVIEW ) 684808a70e2SKurt Zenker { 6856c87b028SNoel Grandin mpViewShell->ShowUIControls(true); 686808a70e2SKurt Zenker } 687808a70e2SKurt Zenker } 688808a70e2SKurt Zenker 689808a70e2SKurt Zenker if( mpShowWindow ) 690808a70e2SKurt Zenker mpShowWindow->Hide(); 691c0a802b5SMichael Meeks mpShowWindow.disposeAndClear(); 692808a70e2SKurt Zenker 693808a70e2SKurt Zenker if ( mpViewShell ) 694808a70e2SKurt Zenker { 695808a70e2SKurt Zenker if( meAnimationMode == ANIMATIONMODE_SHOW ) 696808a70e2SKurt Zenker { 697808a70e2SKurt Zenker ::sd::Window* pActWin = mpViewShell->GetActiveWindow(); 698808a70e2SKurt Zenker 699808a70e2SKurt Zenker if (pActWin) 700808a70e2SKurt Zenker { 701808a70e2SKurt Zenker Size aVisSizePixel = pActWin->GetOutputSizePixel(); 702a5a57130SMiklos Vajna ::tools::Rectangle aVisAreaWin = pActWin->PixelToLogic( ::tools::Rectangle( Point(0,0), aVisSizePixel) ); 703808a70e2SKurt Zenker mpViewShell->VisAreaChanged(aVisAreaWin); 704eef3f4ceSCaolán McNamara if (mpView) 705808a70e2SKurt Zenker mpView->VisAreaChanged(pActWin); 706808a70e2SKurt Zenker pActWin->GrabFocus(); 707808a70e2SKurt Zenker } 708808a70e2SKurt Zenker } 709808a70e2SKurt Zenker 710808a70e2SKurt Zenker // restart the custom show dialog if he started us 711808a70e2SKurt Zenker if( mpViewShell->IsStartShowWithDialog() && getDispatcher() ) 712808a70e2SKurt Zenker { 713b45a12c3SNoel Grandin mpViewShell->SetStartShowWithDialog( false ); 7148044acf2SNoel Grandin getDispatcher()->Execute( SID_CUSTOMSHOW_DLG, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD ); 715808a70e2SKurt Zenker } 716808a70e2SKurt Zenker 717808a70e2SKurt Zenker mpViewShell->GetViewShellBase().UpdateBorder(true); 718808a70e2SKurt Zenker } 719808a70e2SKurt Zenker 72081f4197bSRüdiger Timm if( mpShowWindow ) 72181f4197bSRüdiger Timm { 722bce35b8eSJulien Nabet mpShowWindow.disposeAndClear(); 72381f4197bSRüdiger Timm } 72481f4197bSRüdiger Timm 725b45a12c3SNoel Grandin setActiveXToolbarsVisible( true ); 72620549ebeSOliver Bolte 727808a70e2SKurt Zenker mbDisposed = true; 7280fefcd83SRüdiger Timm } 7290fefcd83SRüdiger Timm 730e40dc5a0SKurt Zenker bool SlideshowImpl::startPreview( 7310fefcd83SRüdiger Timm const Reference< XDrawPage >& xDrawPage, 732089380a5SOliver Bolte const Reference< XAnimationNode >& xAnimationNode, 733827c46e7SNoel Grandin vcl::Window * pParent ) 7340fefcd83SRüdiger Timm { 735e40dc5a0SKurt Zenker bool bRet = false; 736e40dc5a0SKurt Zenker 7370fefcd83SRüdiger Timm try 7380fefcd83SRüdiger Timm { 739e40dc5a0SKurt Zenker const Reference<lang::XServiceInfo> xServiceInfo( xDrawPage, UNO_QUERY ); 740e40dc5a0SKurt Zenker if (xServiceInfo.is()) { 741e40dc5a0SKurt Zenker const Sequence<OUString> supportedServices( 742e40dc5a0SKurt Zenker xServiceInfo->getSupportedServiceNames() ); 743d458adeeSArkadiy Illarionov if (comphelper::findValue(supportedServices, "com.sun.star.drawing.MasterPage") != -1) { 744e9b90a77SThomas Arnhold OSL_FAIL("sd::SlideshowImpl::startPreview() " 745e40dc5a0SKurt Zenker "not allowed on master page!"); 746e40dc5a0SKurt Zenker return false; 747e40dc5a0SKurt Zenker } 748e40dc5a0SKurt Zenker } 749e40dc5a0SKurt Zenker 7500fefcd83SRüdiger Timm mxPreviewDrawPage = xDrawPage; 7510fefcd83SRüdiger Timm mxPreviewAnimationNode = xAnimationNode; 7520fefcd83SRüdiger Timm meAnimationMode = ANIMATIONMODE_PREVIEW; 7530fefcd83SRüdiger Timm 754b45a12c3SNoel Grandin maPresSettings.mbAll = false; 755b45a12c3SNoel Grandin maPresSettings.mbEndless = false; 756b45a12c3SNoel Grandin maPresSettings.mbCustomShow = false; 757b45a12c3SNoel Grandin maPresSettings.mbManual = false; 758b45a12c3SNoel Grandin maPresSettings.mbMouseVisible = false; 759b45a12c3SNoel Grandin maPresSettings.mbMouseAsPen = false; 760b45a12c3SNoel Grandin maPresSettings.mbLockedPages = false; 761b45a12c3SNoel Grandin maPresSettings.mbAlwaysOnTop = false; 762b45a12c3SNoel Grandin maPresSettings.mbFullScreen = false; 763b45a12c3SNoel Grandin maPresSettings.mbAnimationAllowed = true; 7640fefcd83SRüdiger Timm maPresSettings.mnPauseTimeout = 0; 765b45a12c3SNoel Grandin maPresSettings.mbShowPauseLogo = false; 7660fefcd83SRüdiger Timm 767089380a5SOliver Bolte Reference< XDrawPagesSupplier > xDrawPages( mpDoc->getUnoModel(), UNO_QUERY_THROW ); 768089380a5SOliver Bolte Reference< XIndexAccess > xSlides( xDrawPages->getDrawPages(), UNO_QUERY_THROW ); 769d712ebc2SNoel Grandin mpSlideController = std::make_shared<AnimationSlideController>( xSlides, AnimationSlideController::PREVIEW ); 7700fefcd83SRüdiger Timm 771445a02edSVladimir Glazounov sal_Int32 nSlideNumber = 0; 7720fefcd83SRüdiger Timm Reference< XPropertySet > xSet( mxPreviewDrawPage, UNO_QUERY_THROW ); 77396f9300aSOlivier Hallot xSet->getPropertyValue( "Number" ) >>= nSlideNumber; 774089380a5SOliver Bolte mpSlideController->insertSlideNumber( nSlideNumber-1 ); 775089380a5SOliver Bolte mpSlideController->setPreviewNode( xAnimationNode ); 7760fefcd83SRüdiger Timm 77792c697c0SStephan Bergmann mpShowWindow = VclPtr<ShowWindow>::Create( this, ((pParent == nullptr) && mpViewShell) ? mpParentWindow.get() : pParent ); 7780fefcd83SRüdiger Timm if( mpViewShell ) 7790fefcd83SRüdiger Timm { 7800fefcd83SRüdiger Timm mpViewShell->SetActiveWindow( mpShowWindow ); 7810fefcd83SRüdiger Timm mpShowWindow->SetViewShell (mpViewShell); 78267aad3b7SRüdiger Timm mpViewShell->ShowUIControls (false); 7830fefcd83SRüdiger Timm } 7840fefcd83SRüdiger Timm 7850fefcd83SRüdiger Timm if( mpView ) 786f41d396dSJens-Heiner Rechtien { 78792c697c0SStephan Bergmann mpView->AddWindowToPaintView( mpShowWindow, nullptr ); 788608953c4SStephan Bergmann mpView->SetAnimationPause( true ); 789f41d396dSJens-Heiner Rechtien } 7900fefcd83SRüdiger Timm 7910fefcd83SRüdiger Timm // call resize handler 792f8926799SVladimir Glazounov if( pParent ) 793f8926799SVladimir Glazounov { 794f8926799SVladimir Glazounov maPresSize = pParent->GetSizePixel(); 795f8926799SVladimir Glazounov } 796f8926799SVladimir Glazounov else if( mpViewShell ) 797f8926799SVladimir Glazounov { 798a5a57130SMiklos Vajna ::tools::Rectangle aContentRect (mpViewShell->GetViewShellBase().getClientRectangle()); 799e9cb5577SNoel Grandin if (AllSettings::GetLayoutRTL()) 800a18c96c4SKurt Zenker { 8010d9f3f76SNoel Grandin aContentRect.SetLeft( aContentRect.Right() ); 8024beed2baSNoel Grandin aContentRect.AdjustRight(aContentRect.Right() ); 803a18c96c4SKurt Zenker } 80467aad3b7SRüdiger Timm maPresSize = aContentRect.GetSize(); 80567aad3b7SRüdiger Timm mpShowWindow->SetPosPixel( aContentRect.TopLeft() ); 806f8926799SVladimir Glazounov } 807f8926799SVladimir Glazounov else 808f8926799SVladimir Glazounov { 809f4aaa487SThomas Arnhold OSL_FAIL("sd::SlideshowImpl::startPreview(), I need either a parent window or a viewshell!"); 810f8926799SVladimir Glazounov } 8110fefcd83SRüdiger Timm resize( maPresSize ); 8120fefcd83SRüdiger Timm 8130fefcd83SRüdiger Timm sal_Int32 nPropertyCount = 1; 8140fefcd83SRüdiger Timm if( mxPreviewAnimationNode.is() ) 8150fefcd83SRüdiger Timm nPropertyCount++; 8160fefcd83SRüdiger Timm 8170fefcd83SRüdiger Timm Sequence< beans::PropertyValue > aProperties(nPropertyCount); 81896f9300aSOlivier Hallot aProperties[0].Name = "AutomaticAdvancement"; 8197662e92cSNoel Grandin aProperties[0].Value <<= 1.0; // one second timeout 8200fefcd83SRüdiger Timm 8210fefcd83SRüdiger Timm if( mxPreviewAnimationNode.is() ) 8220fefcd83SRüdiger Timm { 82396f9300aSOlivier Hallot aProperties[1].Name = "NoSlideTransitions"; 824198c41c4SNoel Grandin aProperties[1].Value <<= true; 8250fefcd83SRüdiger Timm } 8260fefcd83SRüdiger Timm 827089380a5SOliver Bolte bRet = startShowImpl( aProperties ); 8280fefcd83SRüdiger Timm 8291c4025baSNoel Grandin if( mpShowWindow != nullptr && meAnimationMode == ANIMATIONMODE_PREVIEW ) 8300fefcd83SRüdiger Timm mpShowWindow->SetPreviewMode(); 8310fefcd83SRüdiger Timm 8320fefcd83SRüdiger Timm } 8338cc98837STakeshi Abe catch( Exception& ) 8340fefcd83SRüdiger Timm { 835889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::startPreview()" ); 836e40dc5a0SKurt Zenker bRet = false; 8370fefcd83SRüdiger Timm } 8380fefcd83SRüdiger Timm 839e40dc5a0SKurt Zenker return bRet; 840e40dc5a0SKurt Zenker } 841e40dc5a0SKurt Zenker 8429610bab0SNoel Grandin bool SlideshowImpl::startShow( PresentationSettingsEx const * pPresSettings ) 8430fefcd83SRüdiger Timm { 844b9fe4f26SNoel Grandin const rtl::Reference<SlideshowImpl> xKeepAlive(this); 845e40dc5a0SKurt Zenker 8460fefcd83SRüdiger Timm DBG_ASSERT( !mxShow.is(), "sd::SlideshowImpl::startShow(), called twice!" ); 8470fefcd83SRüdiger Timm if( mxShow.is() ) 848e40dc5a0SKurt Zenker return true; 8491c4025baSNoel Grandin DBG_ASSERT( mpParentWindow!=nullptr, "sd::SlideshowImpl::startShow() called without parent window" ); 8501c4025baSNoel Grandin if (mpParentWindow == nullptr) 851ce2b6494SRüdiger Timm return false; 8520fefcd83SRüdiger Timm 853b8608fddSSamuel Mehrbrodt // Autoplay (pps/ppsx) 854b8608fddSSamuel Mehrbrodt if (mpViewShell->GetDoc()->IsStartWithPresentation()){ 855b8608fddSSamuel Mehrbrodt mpViewShell->GetDoc()->SetExitAfterPresenting(true); 856b8608fddSSamuel Mehrbrodt } 857b8608fddSSamuel Mehrbrodt 858e40dc5a0SKurt Zenker bool bRet = false; 8590fefcd83SRüdiger Timm 8600fefcd83SRüdiger Timm try 8610fefcd83SRüdiger Timm { 8620fefcd83SRüdiger Timm if( pPresSettings ) 863594c82b6SRüdiger Timm { 8640fefcd83SRüdiger Timm maPresSettings = *pPresSettings; 865594c82b6SRüdiger Timm mbRehearseTimings = pPresSettings->mbRehearseTimings; 866594c82b6SRüdiger Timm } 8670fefcd83SRüdiger Timm 86815d88e25SNoel Grandin OUString aPresSlide( maPresSettings.maPresPage ); 869bce04e51SNoel Grandin SdPage* pStartPage = mpViewShell->GetActualPage(); 87012b78eddSRob Snelders bool bStartWithActualSlide = pStartPage; 8710fefcd83SRüdiger Timm 872f4a37ca9SUrs Fässler // times should be measured? 8730fefcd83SRüdiger Timm if( mbRehearseTimings ) 8740fefcd83SRüdiger Timm { 875b45a12c3SNoel Grandin maPresSettings.mbEndless = false; 876b45a12c3SNoel Grandin maPresSettings.mbManual = true; 877b45a12c3SNoel Grandin maPresSettings.mbMouseVisible = true; 878b45a12c3SNoel Grandin maPresSettings.mbMouseAsPen = false; 8790fefcd83SRüdiger Timm maPresSettings.mnPauseTimeout = 0; 880b45a12c3SNoel Grandin maPresSettings.mbShowPauseLogo = false; 8810fefcd83SRüdiger Timm } 8820fefcd83SRüdiger Timm 8830fefcd83SRüdiger Timm if( pStartPage ) 8840fefcd83SRüdiger Timm { 885e588aa4dSNoel Grandin if( pStartPage->GetPageKind() == PageKind::Notes ) 8860fefcd83SRüdiger Timm { 8870fefcd83SRüdiger Timm // we are in notes page mode, so get 8880fefcd83SRüdiger Timm // the corresponding draw page 8893d6bed44SCarsten Driesner const sal_uInt16 nPgNum = ( pStartPage->GetPageNum() - 2 ) >> 1; 890e588aa4dSNoel Grandin pStartPage = mpDoc->GetSdPage( nPgNum, PageKind::Standard ); 8910fefcd83SRüdiger Timm } 8920fefcd83SRüdiger Timm } 8930fefcd83SRüdiger Timm 894089380a5SOliver Bolte if( bStartWithActualSlide ) 89589e5c418SVladimir Glazounov { 89615d88e25SNoel Grandin if ( aPresSlide.isEmpty()) 897e8b924e4SKatarina Behrens { 898e8b924e4SKatarina Behrens // no preset slide yet, so pick current on one 89945e4a5efSKatarina Behrens aPresSlide = pStartPage->GetName(); 90045e4a5efSKatarina Behrens // if the starting slide is hidden, we can't set slide controller to ALL mode 90145e4a5efSKatarina Behrens maPresSettings.mbAll = !pStartPage->IsExcluded(); 902e8b924e4SKatarina Behrens } 90345e4a5efSKatarina Behrens 90489e5c418SVladimir Glazounov if( meAnimationMode != ANIMATIONMODE_SHOW ) 9050fefcd83SRüdiger Timm { 906e588aa4dSNoel Grandin if( pStartPage->GetPageKind() == PageKind::Standard ) 90789e5c418SVladimir Glazounov { 9080fefcd83SRüdiger Timm maPresSettings.mbAll = false; 9090fefcd83SRüdiger Timm } 91089e5c418SVladimir Glazounov } 91189e5c418SVladimir Glazounov } 9120fefcd83SRüdiger Timm 91345e4a5efSKatarina Behrens // build page list 914a1b0b68cSCaolán McNamara createSlideList( maPresSettings.mbAll, aPresSlide ); 915089380a5SOliver Bolte 916089380a5SOliver Bolte // remember Slide number from where the show was started 9170fefcd83SRüdiger Timm if( pStartPage ) 918089380a5SOliver Bolte mnRestoreSlide = ( pStartPage->GetPageNum() - 1 ) / 2; 9190fefcd83SRüdiger Timm 9206ee44161SIvo Hinkelmann if( mpSlideController->hasSlides() ) 9216ee44161SIvo Hinkelmann { 9220fefcd83SRüdiger Timm // hide child windows 9230fefcd83SRüdiger Timm hideChildWindows(); 9240fefcd83SRüdiger Timm 9257819d49fSNoel Grandin mpShowWindow = VclPtr<ShowWindow>::Create( this, mpParentWindow ); 926bbf92b62SOliver Bolte mpShowWindow->SetMouseAutoHide( !maPresSettings.mbMouseVisible ); 9270fefcd83SRüdiger Timm mpViewShell->SetActiveWindow( mpShowWindow ); 9280fefcd83SRüdiger Timm mpShowWindow->SetViewShell (mpViewShell); 9290fefcd83SRüdiger Timm mpViewShell->GetViewShellBase().ShowUIControls (false); 930808a70e2SKurt Zenker // Hide the side panes for in-place presentations. 931808a70e2SKurt Zenker if ( ! maPresSettings.mbFullScreen) 932808a70e2SKurt Zenker mpPaneHider.reset(new PaneHider(*mpViewShell,this)); 9330fefcd83SRüdiger Timm 934820a2995SPedro Giffuni // these Slots are forbidden in other views for this document 935d5a46662SKurt Zenker if( mpDocSh ) 936d5a46662SKurt Zenker { 937470752f5SNoel Grandin mpDocSh->SetSlotFilter( true, pAllowed ); 9380fefcd83SRüdiger Timm mpDocSh->ApplySlotFilter(); 939d5a46662SKurt Zenker } 9400fefcd83SRüdiger Timm 9410fefcd83SRüdiger Timm Help::DisableContextHelp(); 9420fefcd83SRüdiger Timm Help::DisableExtHelp(); 9430fefcd83SRüdiger Timm 9440fefcd83SRüdiger Timm if( maPresSettings.mbFullScreen ) 9450fefcd83SRüdiger Timm { 9469ecac387STor Lillqvist #if HAVE_FEATURE_SCRIPTING 9470fefcd83SRüdiger Timm // disable basic ide error handling 9480fefcd83SRüdiger Timm maStarBASICGlobalErrorHdl = StarBASIC::GetGlobalErrorHdl(); 949ae451af8SNoel Grandin StarBASIC::SetGlobalErrorHdl( Link<StarBASIC*,bool>() ); 950b344c30aSTor Lillqvist #endif 9510fefcd83SRüdiger Timm } 9520fefcd83SRüdiger Timm 9530fefcd83SRüdiger Timm // call resize handler 954ce2b6494SRüdiger Timm maPresSize = mpParentWindow->GetSizePixel(); 955aa121a21SCaolán McNamara if (!maPresSettings.mbFullScreen) 9560fefcd83SRüdiger Timm { 957a5a57130SMiklos Vajna const ::tools::Rectangle& aClientRect = mpViewShell->GetViewShellBase().getClientRectangle(); 95867aad3b7SRüdiger Timm maPresSize = aClientRect.GetSize(); 95967aad3b7SRüdiger Timm mpShowWindow->SetPosPixel( aClientRect.TopLeft() ); 960f8926799SVladimir Glazounov resize( maPresSize ); 9610fefcd83SRüdiger Timm } 9620fefcd83SRüdiger Timm 963f8926799SVladimir Glazounov // #i41824# 964f8926799SVladimir Glazounov // Note: In FullScreen Mode the OS (window manager) sends a resize to 965f8926799SVladimir Glazounov // the WorkWindow once it actually resized it to full size. The 966f8926799SVladimir Glazounov // WorkWindow propagates the resize to the DrawViewShell which calls 967f8926799SVladimir Glazounov // resize() at the SlideShow (this). Calling resize here results in a 968f8926799SVladimir Glazounov // temporary display of a black window in the window's default size 9690fefcd83SRüdiger Timm 9700fefcd83SRüdiger Timm if( mpView ) 971f41d396dSJens-Heiner Rechtien { 97292c697c0SStephan Bergmann mpView->AddWindowToPaintView( mpShowWindow, nullptr ); 973608953c4SStephan Bergmann mpView->SetAnimationPause( true ); 974f41d396dSJens-Heiner Rechtien } 9750fefcd83SRüdiger Timm 976d5a46662SKurt Zenker SfxBindings* pBindings = getBindings(); 977d5a46662SKurt Zenker if( pBindings ) 978d5a46662SKurt Zenker { 979d5a46662SKurt Zenker pBindings->Invalidate( SID_PRESENTATION ); 980d5a46662SKurt Zenker pBindings->Invalidate( SID_REHEARSE_TIMINGS ); 981d5a46662SKurt Zenker } 9820fefcd83SRüdiger Timm 983cc5518caSSteve Yin // Defer the sd::ShowWindow's GrabFocus to SlideShow::activate. so that the accessible event can be fired correctly. 984cc5518caSSteve Yin //mpShowWindow->GrabFocus(); 9850fefcd83SRüdiger Timm 986e40dc5a0SKurt Zenker std::vector<beans::PropertyValue> aProperties; 987e40dc5a0SKurt Zenker aProperties.reserve( 4 ); 9880fefcd83SRüdiger Timm 989a185ea4eSNoel Grandin aProperties.emplace_back( "AdvanceOnClick" , 990dd484af7SJan Holesovsky -1, Any( !maPresSettings.mbLockedPages ), 991a185ea4eSNoel Grandin beans::PropertyState_DIRECT_VALUE ); 9920fefcd83SRüdiger Timm 993a185ea4eSNoel Grandin aProperties.emplace_back( "ImageAnimationsAllowed" , 994261b1ad8SJan Holesovsky -1, Any( maPresSettings.mbAnimationAllowed ), 995a185ea4eSNoel Grandin beans::PropertyState_DIRECT_VALUE ); 99664048f0dSOliver Bolte 997b45a12c3SNoel Grandin const bool bZOrderEnabled( 99864048f0dSOliver Bolte SD_MOD()->GetSdOptions( mpDoc->GetDocumentType() )->IsSlideshowRespectZOrder() ); 999a185ea4eSNoel Grandin aProperties.emplace_back( "DisableAnimationZOrder" , 100044642cbcSStephan Bergmann -1, Any( !bZOrderEnabled ), 1001a185ea4eSNoel Grandin beans::PropertyState_DIRECT_VALUE ); 100264048f0dSOliver Bolte 1003a185ea4eSNoel Grandin aProperties.emplace_back( "ForceManualAdvance" , 1004261b1ad8SJan Holesovsky -1, Any( maPresSettings.mbManual ), 1005a185ea4eSNoel Grandin beans::PropertyState_DIRECT_VALUE ); 10060fefcd83SRüdiger Timm 100703a5e096SChristian Lippka if( mbUsePen ) 10080fefcd83SRüdiger Timm { 1009a185ea4eSNoel Grandin aProperties.emplace_back( "UserPaintColor" , 1010af5c661bSericb // User paint color is black by default. 1011ef238fc5SChristian Lippka ORACLE -1, Any( mnUserPaintColor ), 1012a185ea4eSNoel Grandin beans::PropertyState_DIRECT_VALUE ); 101303a5e096SChristian Lippka 1014a185ea4eSNoel Grandin aProperties.emplace_back( "UserPaintStrokeWidth" , 101503a5e096SChristian Lippka // User paint color is black by default. 101603a5e096SChristian Lippka -1, Any( mdUserPaintStrokeWidth ), 1017a185ea4eSNoel Grandin beans::PropertyState_DIRECT_VALUE ); 1018e40dc5a0SKurt Zenker } 1019e40dc5a0SKurt Zenker 1020e40dc5a0SKurt Zenker if (mbRehearseTimings) { 1021a185ea4eSNoel Grandin aProperties.emplace_back( "RehearseTimings" , 1022a185ea4eSNoel Grandin -1, Any(true), beans::PropertyState_DIRECT_VALUE ); 10230fefcd83SRüdiger Timm } 10240fefcd83SRüdiger Timm 1025089380a5SOliver Bolte bRet = startShowImpl( Sequence<beans::PropertyValue>( 1026c18e2ea2SStephan Bergmann aProperties.data(), aProperties.size() ) ); 102720549ebeSOliver Bolte 10280fefcd83SRüdiger Timm } 102920549ebeSOliver Bolte 1030b45a12c3SNoel Grandin setActiveXToolbarsVisible( false ); 10316ee44161SIvo Hinkelmann } 1032aa121a21SCaolán McNamara catch (const Exception&) 10330fefcd83SRüdiger Timm { 1034889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::startShow()" ); 1035e40dc5a0SKurt Zenker bRet = false; 10360fefcd83SRüdiger Timm } 10370fefcd83SRüdiger Timm 1038e40dc5a0SKurt Zenker return bRet; 10390fefcd83SRüdiger Timm } 10400fefcd83SRüdiger Timm 1041089380a5SOliver Bolte bool SlideshowImpl::startShowImpl( const Sequence< beans::PropertyValue >& aProperties ) 10420fefcd83SRüdiger Timm { 10430fefcd83SRüdiger Timm try 10440fefcd83SRüdiger Timm { 1045a361231bSNoel Grandin mxShow.set( createSlideShow(), UNO_SET_THROW ); 1046903a4206SCaolán McNamara 1047f66eec46SStephan Bergmann mxView = new SlideShowView( 10486cfb72a5SKurt Zenker *mpShowWindow, 10496cfb72a5SKurt Zenker mpDoc, 10506cfb72a5SKurt Zenker meAnimationMode, 10516cfb72a5SKurt Zenker this, 1052f66eec46SStephan Bergmann maPresSettings.mbFullScreen); 10530fefcd83SRüdiger Timm 1054e40dc5a0SKurt Zenker // try add wait symbol to properties: 1055e40dc5a0SKurt Zenker const Reference<rendering::XSpriteCanvas> xSpriteCanvas( 1056e40dc5a0SKurt Zenker mxView->getCanvas() ); 1057089380a5SOliver Bolte if (xSpriteCanvas.is()) 1058089380a5SOliver Bolte { 1059d6e8f22dSCaolán McNamara BitmapEx waitSymbolBitmap(BMP_WAIT_ICON); 1060e40dc5a0SKurt Zenker const Reference<rendering::XBitmap> xBitmap( 1061b32ead5dSNoel Grandin vcl::unotools::xBitmapFromBitmapEx( waitSymbolBitmap ) ); 1062089380a5SOliver Bolte if (xBitmap.is()) 1063089380a5SOliver Bolte { 1064089380a5SOliver Bolte mxShow->setProperty( 106596f9300aSOlivier Hallot beans::PropertyValue( "WaitSymbolBitmap" , 1066089380a5SOliver Bolte -1, 1067089380a5SOliver Bolte makeAny( xBitmap ), 1068089380a5SOliver Bolte beans::PropertyState_DIRECT_VALUE ) ); 1069e40dc5a0SKurt Zenker } 1070cca0b9aeSSiqi LIU 1071d6e8f22dSCaolán McNamara BitmapEx pointerSymbolBitmap(BMP_POINTER_ICON); 1072cca0b9aeSSiqi LIU const Reference<rendering::XBitmap> xPointerBitmap( 1073b32ead5dSNoel Grandin vcl::unotools::xBitmapFromBitmapEx( pointerSymbolBitmap ) ); 1074cca0b9aeSSiqi LIU if (xPointerBitmap.is()) 1075cca0b9aeSSiqi LIU { 1076cca0b9aeSSiqi LIU mxShow->setProperty( 1077cca0b9aeSSiqi LIU beans::PropertyValue( "PointerSymbolBitmap" , 1078cca0b9aeSSiqi LIU -1, 1079cca0b9aeSSiqi LIU makeAny( xPointerBitmap ), 1080cca0b9aeSSiqi LIU beans::PropertyState_DIRECT_VALUE ) ); 1081cca0b9aeSSiqi LIU } 1082e40dc5a0SKurt Zenker } 1083e40dc5a0SKurt Zenker 1084d458adeeSArkadiy Illarionov for( const auto& rProp : aProperties ) 1085d458adeeSArkadiy Illarionov mxShow->setProperty( rProp ); 1086089380a5SOliver Bolte 10870ae0b7ffSNoel mxShow->addView( mxView ); 10880aac6722SKurt Zenker 1089808a70e2SKurt Zenker mxListenerProxy.set( new SlideShowListenerProxy( this, mxShow ) ); 1090808a70e2SKurt Zenker mxListenerProxy->addAsSlideShowListener(); 1091808a70e2SKurt Zenker 1092e292ef25SArmin Le Grand NotifyDocumentEvent( 1093e292ef25SArmin Le Grand *mpDoc, 1094e292ef25SArmin Le Grand "OnStartPresentation"); 1095089380a5SOliver Bolte displaySlideIndex( mpSlideController->getStartSlideIndex() ); 1096e40dc5a0SKurt Zenker 1097e40dc5a0SKurt Zenker return true; 10980fefcd83SRüdiger Timm } 10998cc98837STakeshi Abe catch( Exception& ) 11000fefcd83SRüdiger Timm { 1101889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::startShowImpl()" ); 1102e40dc5a0SKurt Zenker return false; 11030fefcd83SRüdiger Timm } 11040fefcd83SRüdiger Timm } 11050fefcd83SRüdiger Timm 11060aac6722SKurt Zenker /** called only by the slideshow view when the first paint event occurs. 11070aac6722SKurt Zenker This actually starts the slideshow. */ 11080aac6722SKurt Zenker void SlideshowImpl::onFirstPaint() 11090aac6722SKurt Zenker { 111012d4919bSOliver Bolte if( mpShowWindow ) 111112d4919bSOliver Bolte { 111223a61a99SAndre Fischer /* 1113c98d3303SNoel Grandin mpShowWindow->SetBackground( Wallpaper( COL_BLACK ) ); 111412d4919bSOliver Bolte mpShowWindow->Erase(); 111512d4919bSOliver Bolte mpShowWindow->SetBackground(); 111623a61a99SAndre Fischer */ 111712d4919bSOliver Bolte } 111812d4919bSOliver Bolte 1119f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 1120abf7b941SStephan Bergmann maUpdateTimer.SetTimeout( sal_uLong(100) ); 11210aac6722SKurt Zenker maUpdateTimer.Start(); 11220aac6722SKurt Zenker } 11230aac6722SKurt Zenker 112487661a7aSNoel Grandin void SlideshowImpl::paint() 11250fefcd83SRüdiger Timm { 1126ddb02dbaSOliver Bolte if( mxView.is() ) try 11270fefcd83SRüdiger Timm { 11280fefcd83SRüdiger Timm awt::PaintEvent aEvt; 11290fefcd83SRüdiger Timm // aEvt.UpdateRect = TODO 11300fefcd83SRüdiger Timm mxView->paint( aEvt ); 11310fefcd83SRüdiger Timm } 11328cc98837STakeshi Abe catch( Exception& ) 1133ddb02dbaSOliver Bolte { 1134889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::paint()" ); 1135ddb02dbaSOliver Bolte } 11360fefcd83SRüdiger Timm } 11370fefcd83SRüdiger Timm 1138e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::addSlideShowListener( const Reference< XSlideShowListener >& xListener ) 11390fefcd83SRüdiger Timm { 1140808a70e2SKurt Zenker if( mxListenerProxy.is() ) 1141808a70e2SKurt Zenker mxListenerProxy->addSlideShowListener( xListener ); 1142808a70e2SKurt Zenker } 1143808a70e2SKurt Zenker 1144e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::removeSlideShowListener( const Reference< XSlideShowListener >& xListener ) 1145808a70e2SKurt Zenker { 1146808a70e2SKurt Zenker if( mxListenerProxy.is() ) 1147808a70e2SKurt Zenker mxListenerProxy->removeSlideShowListener( xListener ); 1148808a70e2SKurt Zenker } 1149808a70e2SKurt Zenker 115076c3d136SAndre Fischer void SlideshowImpl::slideEnded(const bool bReverse) 1151808a70e2SKurt Zenker { 115276c3d136SAndre Fischer if (bReverse) 115376c3d136SAndre Fischer gotoPreviousSlide(true); 115476c3d136SAndre Fischer else 1155089380a5SOliver Bolte gotoNextSlide(); 11560fefcd83SRüdiger Timm } 11570fefcd83SRüdiger Timm 1158903a4206SCaolán McNamara bool SlideshowImpl::swipe(const CommandSwipeData &rSwipeData) 1159903a4206SCaolán McNamara { 1160873141fbSCaolán McNamara if (mbUsePen || mnContextMenuEvent) 1161903a4206SCaolán McNamara return false; 1162903a4206SCaolán McNamara double nVelocityX = rSwipeData.getVelocityX(); 11631adc3c76SCaolán McNamara // tdf#108475 make it swipe only if some reasonable movement was involved 11641adc3c76SCaolán McNamara if (fabs(nVelocityX) < 50) 11651adc3c76SCaolán McNamara return false; 1166903a4206SCaolán McNamara if (nVelocityX > 0) 1167903a4206SCaolán McNamara { 1168903a4206SCaolán McNamara gotoPreviousSlide(); 1169903a4206SCaolán McNamara } 1170903a4206SCaolán McNamara else 1171903a4206SCaolán McNamara { 1172903a4206SCaolán McNamara gotoNextEffect(); 1173903a4206SCaolán McNamara } 1174903a4206SCaolán McNamara //a swipe is followed by a mouse up, tell the view to ignore that mouse up as we've reacted 1175903a4206SCaolán McNamara //to the swipe instead 1176903a4206SCaolán McNamara mxView->ignoreNextMouseReleased(); 1177903a4206SCaolán McNamara return true; 1178903a4206SCaolán McNamara } 1179903a4206SCaolán McNamara 1180873141fbSCaolán McNamara bool SlideshowImpl::longpress(const CommandLongPressData &rLongPressData) 1181873141fbSCaolán McNamara { 1182873141fbSCaolán McNamara if (mnContextMenuEvent) 1183873141fbSCaolán McNamara return false; 1184873141fbSCaolán McNamara 1185873141fbSCaolán McNamara maPopupMousePos = Point(rLongPressData.getX(), rLongPressData.getY()); 1186873141fbSCaolán McNamara mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 1187873141fbSCaolán McNamara 1188873141fbSCaolán McNamara return true; 1189873141fbSCaolán McNamara } 1190873141fbSCaolán McNamara 11910fefcd83SRüdiger Timm void SlideshowImpl::removeShapeEvents() 11920fefcd83SRüdiger Timm { 1193b104e6e9SNoel Grandin if( !(mxShow.is() && mxListenerProxy.is()) ) 1194b104e6e9SNoel Grandin return; 1195b104e6e9SNoel Grandin 1196b104e6e9SNoel Grandin try 11970fefcd83SRüdiger Timm { 11987c7ec84cSArkadiy Illarionov for( const auto& rEntry : maShapeEventMap ) 11990fefcd83SRüdiger Timm { 12007c7ec84cSArkadiy Illarionov mxListenerProxy->removeShapeEventListener( rEntry.first ); 12017c7ec84cSArkadiy Illarionov mxShow->setShapeCursor( rEntry.first, awt::SystemPointer::ARROW ); 12020fefcd83SRüdiger Timm } 12030fefcd83SRüdiger Timm 12040fefcd83SRüdiger Timm maShapeEventMap.clear(); 12050fefcd83SRüdiger Timm } 12068cc98837STakeshi Abe catch( Exception& ) 12070fefcd83SRüdiger Timm { 1208889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::removeShapeEvents()" ); 12090fefcd83SRüdiger Timm } 12100fefcd83SRüdiger Timm } 12110fefcd83SRüdiger Timm 1212089380a5SOliver Bolte void SlideshowImpl::registerShapeEvents(sal_Int32 nSlideNumber) 12130fefcd83SRüdiger Timm { 1214b104e6e9SNoel Grandin if( nSlideNumber < 0 ) 1215b104e6e9SNoel Grandin return; 1216b104e6e9SNoel Grandin 1217b104e6e9SNoel Grandin try 12180fefcd83SRüdiger Timm { 12190fefcd83SRüdiger Timm Reference< XDrawPagesSupplier > xDrawPages( mxModel, UNO_QUERY_THROW ); 12200fefcd83SRüdiger Timm Reference< XIndexAccess > xPages( xDrawPages->getDrawPages(), UNO_QUERY_THROW ); 12210fefcd83SRüdiger Timm 1222ddb02dbaSOliver Bolte Reference< XShapes > xDrawPage; 1223089380a5SOliver Bolte xPages->getByIndex(nSlideNumber) >>= xDrawPage; 12240fefcd83SRüdiger Timm 12250fefcd83SRüdiger Timm if( xDrawPage.is() ) 12260fefcd83SRüdiger Timm { 1227ddb02dbaSOliver Bolte Reference< XMasterPageTarget > xMasterPageTarget( xDrawPage, UNO_QUERY ); 1228ddb02dbaSOliver Bolte if( xMasterPageTarget.is() ) 1229ddb02dbaSOliver Bolte { 1230775c8a76SNoel Grandin Reference< XShapes > xMasterPage = xMasterPageTarget->getMasterPage(); 1231ddb02dbaSOliver Bolte if( xMasterPage.is() ) 1232ddb02dbaSOliver Bolte registerShapeEvents( xMasterPage ); 1233ddb02dbaSOliver Bolte } 1234ddb02dbaSOliver Bolte registerShapeEvents( xDrawPage ); 1235ddb02dbaSOliver Bolte } 1236ddb02dbaSOliver Bolte } 12378cc98837STakeshi Abe catch( Exception& ) 1238ddb02dbaSOliver Bolte { 1239889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::registerShapeEvents()" ); 1240ddb02dbaSOliver Bolte } 1241ddb02dbaSOliver Bolte } 1242ddb02dbaSOliver Bolte 1243dafae0feSNoel Grandin void SlideshowImpl::registerShapeEvents( Reference< XShapes > const & xShapes ) 1244ddb02dbaSOliver Bolte { 1245ddb02dbaSOliver Bolte try 1246ddb02dbaSOliver Bolte { 1247ddb02dbaSOliver Bolte const sal_Int32 nShapeCount = xShapes->getCount(); 12480fefcd83SRüdiger Timm sal_Int32 nShape; 12490fefcd83SRüdiger Timm for( nShape = 0; nShape < nShapeCount; nShape++ ) 12500fefcd83SRüdiger Timm { 12510fefcd83SRüdiger Timm Reference< XShape > xShape; 1252ddb02dbaSOliver Bolte xShapes->getByIndex( nShape ) >>= xShape; 1253ddb02dbaSOliver Bolte 1254d6bc02f8SSzabolcs Dezsi if( xShape.is() && xShape->getShapeType() == "com.sun.star.drawing.GroupShape" ) 1255ddb02dbaSOliver Bolte { 1256ddb02dbaSOliver Bolte Reference< XShapes > xSubShapes( xShape, UNO_QUERY ); 1257ddb02dbaSOliver Bolte if( xSubShapes.is() ) 1258ddb02dbaSOliver Bolte registerShapeEvents( xSubShapes ); 1259ddb02dbaSOliver Bolte } 12600fefcd83SRüdiger Timm 12610fefcd83SRüdiger Timm Reference< XPropertySet > xSet( xShape, UNO_QUERY ); 12620fefcd83SRüdiger Timm if( !xSet.is() ) 12630fefcd83SRüdiger Timm continue; 12640fefcd83SRüdiger Timm 12650fefcd83SRüdiger Timm Reference< XPropertySetInfo > xSetInfo( xSet->getPropertySetInfo() ); 1266453879cfSNoel Grandin if( !xSetInfo.is() || !xSetInfo->hasPropertyByName( gsOnClick ) ) 12670fefcd83SRüdiger Timm continue; 12680fefcd83SRüdiger Timm 1269d712ebc2SNoel Grandin WrappedShapeEventImplPtr pEvent = std::make_shared<WrappedShapeEventImpl>(); 1270453879cfSNoel Grandin xSet->getPropertyValue( gsOnClick ) >>= pEvent->meClickAction; 12710fefcd83SRüdiger Timm 12720fefcd83SRüdiger Timm switch( pEvent->meClickAction ) 12730fefcd83SRüdiger Timm { 12740fefcd83SRüdiger Timm case ClickAction_PREVPAGE: 12750fefcd83SRüdiger Timm case ClickAction_NEXTPAGE: 12760fefcd83SRüdiger Timm case ClickAction_FIRSTPAGE: 12770fefcd83SRüdiger Timm case ClickAction_LASTPAGE: 12780fefcd83SRüdiger Timm case ClickAction_STOPPRESENTATION: 12790fefcd83SRüdiger Timm break; 12800fefcd83SRüdiger Timm case ClickAction_BOOKMARK: 1281453879cfSNoel Grandin if( xSetInfo->hasPropertyByName( gsBookmark ) ) 1282453879cfSNoel Grandin xSet->getPropertyValue( gsBookmark ) >>= pEvent->maStrBookmark; 1283089380a5SOliver Bolte if( getSlideNumberForBookmark( pEvent->maStrBookmark ) == -1 ) 12840fefcd83SRüdiger Timm continue; 12850f9c7a4eSVladimir Glazounov break; 128650621863SOliver Bolte case ClickAction_DOCUMENT: 128750621863SOliver Bolte case ClickAction_SOUND: 128850621863SOliver Bolte case ClickAction_PROGRAM: 12890f9c7a4eSVladimir Glazounov case ClickAction_MACRO: 1290453879cfSNoel Grandin if( xSetInfo->hasPropertyByName( gsBookmark ) ) 1291453879cfSNoel Grandin xSet->getPropertyValue( gsBookmark ) >>= pEvent->maStrBookmark; 12920fefcd83SRüdiger Timm break; 12930fefcd83SRüdiger Timm case ClickAction_VERB: 1294453879cfSNoel Grandin if( xSetInfo->hasPropertyByName( gsVerb ) ) 1295453879cfSNoel Grandin xSet->getPropertyValue( gsVerb ) >>= pEvent->mnVerb; 12960fefcd83SRüdiger Timm break; 12970fefcd83SRüdiger Timm default: 12980fefcd83SRüdiger Timm continue; // skip all others 12990fefcd83SRüdiger Timm } 13000fefcd83SRüdiger Timm 13010fefcd83SRüdiger Timm maShapeEventMap[ xShape ] = pEvent; 13020fefcd83SRüdiger Timm 1303808a70e2SKurt Zenker if( mxListenerProxy.is() ) 1304808a70e2SKurt Zenker mxListenerProxy->addShapeEventListener( xShape ); 13050fefcd83SRüdiger Timm mxShow->setShapeCursor( xShape, awt::SystemPointer::REFHAND ); 13060fefcd83SRüdiger Timm } 13070fefcd83SRüdiger Timm } 13088cc98837STakeshi Abe catch( Exception& ) 13090fefcd83SRüdiger Timm { 1310889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::registerShapeEvents()" ); 13110fefcd83SRüdiger Timm } 13120fefcd83SRüdiger Timm } 13130fefcd83SRüdiger Timm 131476c3d136SAndre Fischer void SlideshowImpl::displayCurrentSlide (const bool bSkipAllMainSequenceEffects) 1315089380a5SOliver Bolte { 1316089380a5SOliver Bolte stopSound(); 1317089380a5SOliver Bolte removeShapeEvents(); 1318089380a5SOliver Bolte 1319fe6cce01SStephan Bergmann if( mpSlideController && mxShow.is() ) 1320089380a5SOliver Bolte { 13217dd531f8Sthb Reference< XDrawPagesSupplier > xDrawPages( mpDoc->getUnoModel(), 13227dd531f8Sthb UNO_QUERY_THROW ); 13237dd531f8Sthb mpSlideController->displayCurrentSlide( mxShow, xDrawPages, bSkipAllMainSequenceEffects ); 1324089380a5SOliver Bolte registerShapeEvents(mpSlideController->getCurrentSlideNumber()); 1325089380a5SOliver Bolte update(); 1326bbf92b62SOliver Bolte 1327089380a5SOliver Bolte } 13289f27e5b0SAndrea Gelmini // send out page change event and notify to update all acc info for current page 1329cc5518caSSteve Yin if (mpViewShell) 1330cc5518caSSteve Yin { 1331cc5518caSSteve Yin sal_Int32 currentPageIndex = getCurrentSlideIndex(); 1332cc5518caSSteve Yin mpViewShell->fireSwitchCurrentPage(currentPageIndex); 1333cc5518caSSteve Yin mpViewShell->NotifyAccUpdate(); 1334cc5518caSSteve Yin } 1335089380a5SOliver Bolte } 1336089380a5SOliver Bolte 13370fefcd83SRüdiger Timm void SlideshowImpl::endPresentation() 13380fefcd83SRüdiger Timm { 1339516ecd07SThorsten Behrens if( maPresSettings.mbMouseAsPen) 1340516ecd07SThorsten Behrens { 1341516ecd07SThorsten Behrens Reference< XMultiServiceFactory > xDocFactory(mpDoc->getUnoModel(), UNO_QUERY ); 1342516ecd07SThorsten Behrens if( xDocFactory.is() ) 1343516ecd07SThorsten Behrens mxShow->registerUserPaintPolygons(xDocFactory); 1344516ecd07SThorsten Behrens } 1345516ecd07SThorsten Behrens 1346285b99a1SKurt Zenker if( !mnEndShowEvent ) 1347285b99a1SKurt Zenker mnEndShowEvent = Application::PostUserEvent( LINK(this, SlideshowImpl, endPresentationHdl) ); 134812d4919bSOliver Bolte } 134912d4919bSOliver Bolte 1350106ea872SStephan Bergmann IMPL_LINK_NOARG(SlideshowImpl, endPresentationHdl, void*, void) 135112d4919bSOliver Bolte { 135292c697c0SStephan Bergmann mnEndShowEvent = nullptr; 1353285b99a1SKurt Zenker 1354808a70e2SKurt Zenker if( mxPresentation.is() ) 1355808a70e2SKurt Zenker mxPresentation->end(); 13560fefcd83SRüdiger Timm } 13570fefcd83SRüdiger Timm 1358e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::pause() 1359808a70e2SKurt Zenker { 1360f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 1361e40dc5a0SKurt Zenker 1362b104e6e9SNoel Grandin if( mbIsPaused ) 1363b104e6e9SNoel Grandin return; 1364b104e6e9SNoel Grandin 1365b104e6e9SNoel Grandin try 1366ddb02dbaSOliver Bolte { 1367608953c4SStephan Bergmann mbIsPaused = true; 13680fefcd83SRüdiger Timm if( mxShow.is() ) 13690fefcd83SRüdiger Timm { 13700003e99bSStephan Bergmann mxShow->pause(true); 13710fefcd83SRüdiger Timm 1372808a70e2SKurt Zenker if( mxListenerProxy.is() ) 1373808a70e2SKurt Zenker mxListenerProxy->paused(); 13740fefcd83SRüdiger Timm } 13750fefcd83SRüdiger Timm } 13768cc98837STakeshi Abe catch( Exception& ) 13770aac6722SKurt Zenker { 1378889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::pause()" ); 13790aac6722SKurt Zenker } 13800aac6722SKurt Zenker } 13810fefcd83SRüdiger Timm 1382e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::resume() 1383808a70e2SKurt Zenker { 1384f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 1385808a70e2SKurt Zenker 1386808a70e2SKurt Zenker if( mbIsPaused ) try 1387808a70e2SKurt Zenker { 1388f08965c6SVladimir Glazounov if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_BLANK ) 1389f08965c6SVladimir Glazounov { 1390f08965c6SVladimir Glazounov mpShowWindow->RestartShow(); 1391f08965c6SVladimir Glazounov } 1392f08965c6SVladimir Glazounov else 1393f08965c6SVladimir Glazounov { 139464d624b6SAndrea Gelmini mbIsPaused = false; 1395808a70e2SKurt Zenker if( mxShow.is() ) 1396808a70e2SKurt Zenker { 13970003e99bSStephan Bergmann mxShow->pause(false); 1398808a70e2SKurt Zenker update(); 1399808a70e2SKurt Zenker 1400808a70e2SKurt Zenker if( mxListenerProxy.is() ) 1401808a70e2SKurt Zenker mxListenerProxy->resumed(); 1402f08965c6SVladimir Glazounov } 1403808a70e2SKurt Zenker } 1404808a70e2SKurt Zenker } 14058cc98837STakeshi Abe catch( Exception& ) 1406808a70e2SKurt Zenker { 1407889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::resume()" ); 1408808a70e2SKurt Zenker } 14098f81eb2dSAndrzej J.R. Hunt #ifdef ENABLE_SDREMOTE 14104d14068cSAndrzej J.R. Hunt RemoteServer::presentationStarted( this ); 14118f81eb2dSAndrzej J.R. Hunt #endif 1412808a70e2SKurt Zenker } 1413808a70e2SKurt Zenker 1414e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::isPaused() 1415808a70e2SKurt Zenker { 1416f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 1417808a70e2SKurt Zenker return mbIsPaused; 1418808a70e2SKurt Zenker } 1419808a70e2SKurt Zenker 1420e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::blankScreen( sal_Int32 nColor ) 1421808a70e2SKurt Zenker { 1422f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 1423808a70e2SKurt Zenker 1424808a70e2SKurt Zenker if( mpShowWindow && mpSlideController ) 1425808a70e2SKurt Zenker { 142663a68064SNoel if( mpShowWindow->SetBlankMode( mpSlideController->getCurrentSlideIndex(), Color(ColorTransparency, nColor) ) ) 1427f08965c6SVladimir Glazounov { 1428808a70e2SKurt Zenker pause(); 1429808a70e2SKurt Zenker } 1430808a70e2SKurt Zenker } 1431f08965c6SVladimir Glazounov } 1432808a70e2SKurt Zenker 14330fefcd83SRüdiger Timm // XShapeEventListener 14340ce0c369SAlexander Wilms 143587661a7aSNoel Grandin void SlideshowImpl::click( const Reference< XShape >& xShape ) 14360fefcd83SRüdiger Timm { 1437f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 14382db95b18SKurt Zenker 14390fefcd83SRüdiger Timm WrappedShapeEventImplPtr pEvent = maShapeEventMap[xShape]; 1440fe6cce01SStephan Bergmann if( !pEvent ) 14410fefcd83SRüdiger Timm return; 14420fefcd83SRüdiger Timm 14430fefcd83SRüdiger Timm switch( pEvent->meClickAction ) 14440fefcd83SRüdiger Timm { 14450fefcd83SRüdiger Timm case ClickAction_PREVPAGE: gotoPreviousSlide(); break; 14460fefcd83SRüdiger Timm case ClickAction_NEXTPAGE: gotoNextSlide(); break; 14470fefcd83SRüdiger Timm case ClickAction_FIRSTPAGE: gotoFirstSlide(); break; 14480fefcd83SRüdiger Timm case ClickAction_LASTPAGE: gotoLastSlide(); break; 14490fefcd83SRüdiger Timm case ClickAction_STOPPRESENTATION: endPresentation(); break; 14500fefcd83SRüdiger Timm case ClickAction_BOOKMARK: 14510fefcd83SRüdiger Timm { 1452808a70e2SKurt Zenker gotoBookmark( pEvent->maStrBookmark ); 14530fefcd83SRüdiger Timm } 14540fefcd83SRüdiger Timm break; 145550621863SOliver Bolte case ClickAction_SOUND: 145650621863SOliver Bolte { 145764b3b366Sjan Iversen #if HAVE_FEATURE_AVMEDIA 145850621863SOliver Bolte try 145950621863SOliver Bolte { 1460a361231bSNoel Grandin mxPlayer.set(avmedia::MediaWindow::createPlayer(pEvent->maStrBookmark, ""/*TODO?*/), uno::UNO_SET_THROW ); 146150621863SOliver Bolte mxPlayer->start(); 146250621863SOliver Bolte } 14638cc98837STakeshi Abe catch( uno::Exception& ) 146450621863SOliver Bolte { 1465d6d80c4eSNoel TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::click()" ); 146650621863SOliver Bolte } 146764b3b366Sjan Iversen #endif 146850621863SOliver Bolte } 1469eee9843cSKurt Zenker break; 14700fefcd83SRüdiger Timm 14710fefcd83SRüdiger Timm case ClickAction_DOCUMENT: 14720fefcd83SRüdiger Timm { 14730f9c7a4eSVladimir Glazounov OUString aBookmark( pEvent->maStrBookmark ); 14740f9c7a4eSVladimir Glazounov 1475d366c9b2SNoel Grandin sal_Int32 nPos = aBookmark.indexOf( '#' ); 14760f9c7a4eSVladimir Glazounov if( nPos >= 0 ) 14770f9c7a4eSVladimir Glazounov { 14780f9c7a4eSVladimir Glazounov OUString aURL( aBookmark.copy( 0, nPos+1 ) ); 14790f9c7a4eSVladimir Glazounov OUString aName( aBookmark.copy( nPos+1 ) ); 14800f9c7a4eSVladimir Glazounov aURL += getUiNameFromPageApiNameImpl( aName ); 14810f9c7a4eSVladimir Glazounov aBookmark = aURL; 14820f9c7a4eSVladimir Glazounov } 14830f9c7a4eSVladimir Glazounov 14840f9c7a4eSVladimir Glazounov mpDocSh->OpenBookmark( aBookmark ); 14850fefcd83SRüdiger Timm } 14860fefcd83SRüdiger Timm break; 14870fefcd83SRüdiger Timm 14880fefcd83SRüdiger Timm case ClickAction_PROGRAM: 14890fefcd83SRüdiger Timm { 14902cd874cfSRüdiger Timm INetURLObject aURL( 14912cd874cfSRüdiger Timm ::URIHelper::SmartRel2Abs( 14922cd874cfSRüdiger Timm INetURLObject(mpDocSh->GetMedium()->GetBaseURL()), 14932cd874cfSRüdiger Timm pEvent->maStrBookmark, ::URIHelper::GetMaybeFileHdl(), true, 149480321514SNoel Grandin false, INetURLObject::EncodeMechanism::WasEncoded, 1495bfde4866SNoel Grandin INetURLObject::DecodeMechanism::Unambiguous ) ); 14960fefcd83SRüdiger Timm 149754e87df1SStephan Bergmann if( INetProtocol::File == aURL.GetProtocol() ) 14980fefcd83SRüdiger Timm { 1499bfde4866SNoel Grandin SfxStringItem aUrl( SID_FILE_NAME, aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); 1500608953c4SStephan Bergmann SfxBoolItem aBrowsing( SID_BROWSE, true ); 15016f3b6a5dSRüdiger Timm 15026f3b6a5dSRüdiger Timm SfxViewFrame* pViewFrm = SfxViewFrame::Current(); 15036f3b6a5dSRüdiger Timm if (pViewFrm) 150451d7f466SMichael Stahl { 150551d7f466SMichael Stahl pViewFrm->GetDispatcher()->ExecuteList( SID_OPENDOC, 15068044acf2SNoel Grandin SfxCallMode::ASYNCHRON | SfxCallMode::RECORD, 150751d7f466SMichael Stahl { &aUrl, &aBrowsing }); 150851d7f466SMichael Stahl } 15090fefcd83SRüdiger Timm } 15100fefcd83SRüdiger Timm } 15110fefcd83SRüdiger Timm break; 15120fefcd83SRüdiger Timm 15130fefcd83SRüdiger Timm case presentation::ClickAction_MACRO: 15140fefcd83SRüdiger Timm { 151515d88e25SNoel Grandin const OUString aMacro( pEvent->maStrBookmark ); 15160fefcd83SRüdiger Timm 15170fefcd83SRüdiger Timm if ( SfxApplication::IsXScriptURL( aMacro ) ) 15180fefcd83SRüdiger Timm { 15190fefcd83SRüdiger Timm Any aRet; 15200fefcd83SRüdiger Timm Sequence< sal_Int16 > aOutArgsIndex; 15210fefcd83SRüdiger Timm Sequence< Any > aOutArgs; 15220fefcd83SRüdiger Timm Sequence< Any >* pInArgs = new Sequence< Any >(0); 15230fefcd83SRüdiger Timm mpDocSh->CallXScript( aMacro, *pInArgs, aRet, aOutArgsIndex, aOutArgs); 15240fefcd83SRüdiger Timm } 15250fefcd83SRüdiger Timm else 15260fefcd83SRüdiger Timm { 15270fefcd83SRüdiger Timm // aMacro has the following syntax: 152876b3e61bSThomas Arnhold // "Macroname.Modulname.Libname.Documentname" or 152976b3e61bSThomas Arnhold // "Macroname.Modulname.Libname.Applicationname" 1530437e210eSMatteo Casalin sal_Int32 nIdx{ 0 }; 1531437e210eSMatteo Casalin const OUString aMacroName = aMacro.getToken(0, '.', nIdx); 1532437e210eSMatteo Casalin const OUString aModulName = aMacro.getToken(0, '.', nIdx); 15330fefcd83SRüdiger Timm 15340fefcd83SRüdiger Timm // todo: is the limitation still given that only 15350fefcd83SRüdiger Timm // Modulname+Macroname can be used here? 153615d88e25SNoel Grandin OUString aExecMacro = aModulName + "." + aMacroName; 15370fefcd83SRüdiger Timm mpDocSh->GetBasic()->Call(aExecMacro); 15380fefcd83SRüdiger Timm } 15390fefcd83SRüdiger Timm } 15400fefcd83SRüdiger Timm break; 15410fefcd83SRüdiger Timm 15420fefcd83SRüdiger Timm case ClickAction_VERB: 15430fefcd83SRüdiger Timm { 15440fefcd83SRüdiger Timm // todo, better do it async? 15450fefcd83SRüdiger Timm SdrObject* pObj = GetSdrObjectFromXShape( xShape ); 154689d39bc1SOliver Specht SdrOle2Obj* pOleObject = dynamic_cast< SdrOle2Obj* >(pObj); 15470fefcd83SRüdiger Timm if (pOleObject && mpViewShell ) 15480fefcd83SRüdiger Timm mpViewShell->ActivateObject(pOleObject, pEvent->mnVerb); 15490fefcd83SRüdiger Timm } 15500fefcd83SRüdiger Timm break; 1551c9c9d428SOliver Bolte default: 1552c9c9d428SOliver Bolte break; 15530fefcd83SRüdiger Timm } 15540fefcd83SRüdiger Timm } 15550fefcd83SRüdiger Timm 1556089380a5SOliver Bolte sal_Int32 SlideshowImpl::getSlideNumberForBookmark( const OUString& rStrBookmark ) 15570fefcd83SRüdiger Timm { 1558b45a12c3SNoel Grandin bool bIsMasterPage; 1559eee9843cSKurt Zenker OUString aBookmark = getUiNameFromPageApiNameImpl( rStrBookmark ); 15603d6bed44SCarsten Driesner sal_uInt16 nPgNum = mpDoc->GetPageByName( aBookmark, bIsMasterPage ); 15610fefcd83SRüdiger Timm 15620fefcd83SRüdiger Timm if( nPgNum == SDRPAGE_NOTFOUND ) 15630fefcd83SRüdiger Timm { 1564b4106d05SRobert Roth // Is the bookmark an object? 15650f9c7a4eSVladimir Glazounov SdrObject* pObj = mpDoc->GetObj( aBookmark ); 15660fefcd83SRüdiger Timm 15670fefcd83SRüdiger Timm if( pObj ) 15680fefcd83SRüdiger Timm { 15694b494222SArmin Le Grand nPgNum = pObj->getSdrPageFromSdrObject()->GetPageNum(); 15704b494222SArmin Le Grand bIsMasterPage = pObj->getSdrPageFromSdrObject()->IsMasterPage(); 15710fefcd83SRüdiger Timm } 15720fefcd83SRüdiger Timm } 15730fefcd83SRüdiger Timm 1574e588aa4dSNoel Grandin if( (nPgNum == SDRPAGE_NOTFOUND) || bIsMasterPage || static_cast<SdPage*>(mpDoc->GetPage(nPgNum))->GetPageKind() != PageKind::Standard ) 15750fefcd83SRüdiger Timm return -1; 15760fefcd83SRüdiger Timm 15770fefcd83SRüdiger Timm return ( nPgNum - 1) >> 1; 15780fefcd83SRüdiger Timm } 15790fefcd83SRüdiger Timm 1580e57ca028SStephan Bergmann void SlideshowImpl::hyperLinkClicked( OUString const& aHyperLink ) 15810fefcd83SRüdiger Timm { 1582089380a5SOliver Bolte OUString aBookmark( aHyperLink ); 15832db95b18SKurt Zenker 1584d366c9b2SNoel Grandin sal_Int32 nPos = aBookmark.indexOf( '#' ); 1585089380a5SOliver Bolte if( nPos >= 0 ) 1586089380a5SOliver Bolte { 1587089380a5SOliver Bolte OUString aURL( aBookmark.copy( 0, nPos+1 ) ); 1588089380a5SOliver Bolte OUString aName( aBookmark.copy( nPos+1 ) ); 1589089380a5SOliver Bolte aURL += getUiNameFromPageApiNameImpl( aName ); 1590089380a5SOliver Bolte aBookmark = aURL; 15910fefcd83SRüdiger Timm } 15920fefcd83SRüdiger Timm 1593089380a5SOliver Bolte mpDocSh->OpenBookmark( aBookmark ); 15940fefcd83SRüdiger Timm } 15950fefcd83SRüdiger Timm 1596089380a5SOliver Bolte void SlideshowImpl::displaySlideNumber( sal_Int32 nSlideNumber ) 15970fefcd83SRüdiger Timm { 1598fe6cce01SStephan Bergmann if( mpSlideController ) 15990fefcd83SRüdiger Timm { 1600089380a5SOliver Bolte if( mpSlideController->jumpToSlideNumber( nSlideNumber ) ) 1601089380a5SOliver Bolte { 1602089380a5SOliver Bolte displayCurrentSlide(); 1603089380a5SOliver Bolte } 16040fefcd83SRüdiger Timm } 16050fefcd83SRüdiger Timm } 16060fefcd83SRüdiger Timm 1607089380a5SOliver Bolte /** nSlideIndex == -1 displays current slide again */ 1608089380a5SOliver Bolte void SlideshowImpl::displaySlideIndex( sal_Int32 nSlideIndex ) 16090fefcd83SRüdiger Timm { 1610fe6cce01SStephan Bergmann if( mpSlideController ) 16110fefcd83SRüdiger Timm { 1612089380a5SOliver Bolte if( (nSlideIndex == -1) || mpSlideController->jumpToSlideIndex( nSlideIndex ) ) 16130fefcd83SRüdiger Timm { 1614089380a5SOliver Bolte displayCurrentSlide(); 16150fefcd83SRüdiger Timm } 16160fefcd83SRüdiger Timm } 16170fefcd83SRüdiger Timm } 16180fefcd83SRüdiger Timm 1619589e157cSNoel Grandin void SlideshowImpl::jumpToBookmark( const OUString& sBookmark ) 16200fefcd83SRüdiger Timm { 1621089380a5SOliver Bolte sal_Int32 nSlideNumber = getSlideNumberForBookmark( sBookmark ); 1622089380a5SOliver Bolte if( nSlideNumber != -1 ) 1623089380a5SOliver Bolte displaySlideNumber( nSlideNumber ); 16240fefcd83SRüdiger Timm } 16250fefcd83SRüdiger Timm 16261902f1e4SNoel Grandin sal_Int32 SlideshowImpl::getCurrentSlideNumber() const 16270fefcd83SRüdiger Timm { 1628fe6cce01SStephan Bergmann return mpSlideController ? mpSlideController->getCurrentSlideNumber() : -1; 16290fefcd83SRüdiger Timm } 16300fefcd83SRüdiger Timm 1631e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::isEndless() 16320fefcd83SRüdiger Timm { 1633f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 16340fefcd83SRüdiger Timm return maPresSettings.mbEndless; 16350fefcd83SRüdiger Timm } 16360fefcd83SRüdiger Timm 163706d68fb0SNoel Grandin void SlideshowImpl::update() 16380fefcd83SRüdiger Timm { 16392db95b18SKurt Zenker startUpdateTimer(); 16402db95b18SKurt Zenker } 16412db95b18SKurt Zenker 16422db95b18SKurt Zenker void SlideshowImpl::startUpdateTimer() 16432db95b18SKurt Zenker { 1644f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 16452db95b18SKurt Zenker maUpdateTimer.SetTimeout( 0 ); 16462db95b18SKurt Zenker maUpdateTimer.Start(); 16470fefcd83SRüdiger Timm } 16480fefcd83SRüdiger Timm 164967aad3b7SRüdiger Timm /** this timer is called 20ms after a new slide was displayed. 165067aad3b7SRüdiger Timm This is used to unfreeze user input that was disabled after 165167aad3b7SRüdiger Timm slide change to skip input that was buffered during slide 1652da40cac5SAndrea Gelmini transition preparation */ 1653106ea872SStephan Bergmann IMPL_LINK_NOARG(SlideshowImpl, ReadyForNextInputHdl, Timer *, void) 165467aad3b7SRüdiger Timm { 165567aad3b7SRüdiger Timm mbInputFreeze = false; 165667aad3b7SRüdiger Timm } 165767aad3b7SRüdiger Timm 16580fefcd83SRüdiger Timm /** if I catch someone someday who calls this method by hand 165964d624b6SAndrea Gelmini and not by using the timer, I will personally punish this 16600fefcd83SRüdiger Timm person seriously, even if this person is me. 16610fefcd83SRüdiger Timm */ 1662106ea872SStephan Bergmann IMPL_LINK_NOARG(SlideshowImpl, updateHdl, Timer *, void) 16630fefcd83SRüdiger Timm { 16648cafd082SStephan Bergmann updateSlideShow(); 1665881043d1SAndre Fischer } 1666881043d1SAndre Fischer 166706d68fb0SNoel Grandin void SlideshowImpl::updateSlideShow() 1668881043d1SAndre Fischer { 166984da4113SThorsten Behrens // prevent me from deletion when recursing (App::EnableYieldMode does) 1670b9fe4f26SNoel Grandin const rtl::Reference<SlideshowImpl> xKeepAlive(this); 16710fefcd83SRüdiger Timm 1672d60a926fSRüdiger Timm Reference< XSlideShow > xShow( mxShow ); 1673881043d1SAndre Fischer if ( ! xShow.is()) 167406d68fb0SNoel Grandin return; 1675881043d1SAndre Fischer 1676881043d1SAndre Fischer try 16770fefcd83SRüdiger Timm { 1678a0ac4cf4SRüdiger Timm double fUpdate = 0.0; 167912d4919bSOliver Bolte if( !xShow->update(fUpdate) ) 16802db95b18SKurt Zenker fUpdate = -1.0; 16812dfcda25SOliver Bolte 16822dfcda25SOliver Bolte if (mxShow.is() && (fUpdate >= 0.0)) 16832db95b18SKurt Zenker { 16843e009203SMiklos Vajna if (::basegfx::fTools::equalZero(fUpdate)) 16853e009203SMiklos Vajna { 16863e009203SMiklos Vajna // Make sure idle tasks don't starve when we don't have to wait. 1687c33dd70aSMiklos Vajna // Don't process any events generated after invoking the function. 1688c33dd70aSMiklos Vajna Application::Reschedule(/*bHandleAllCurrentEvents=*/true); 16893e009203SMiklos Vajna } 16903e009203SMiklos Vajna else 1691a0ac4cf4SRüdiger Timm { 16929ae35d4eSOliver Bolte // Avoid busy loop when the previous call to update() 1693881043d1SAndre Fischer // returns a small positive number but not 0 (which is 1694881043d1SAndre Fischer // handled above). Also, make sure that calls to update() 1695881043d1SAndre Fischer // have a minimum frequency. 1696881043d1SAndre Fischer // => Allow up to 60 frames per second. Call at least once 1697881043d1SAndre Fischer // every 4 seconds. 16985abc6695SNoel Grandin const static sal_Int32 nMaximumFrameCount (60); 16995abc6695SNoel Grandin const static double nMinimumTimeout (1.0 / nMaximumFrameCount); 17005abc6695SNoel Grandin const static double nMaximumTimeout (4.0); 170127cd397bSStephan Bergmann fUpdate = std::clamp(fUpdate, nMinimumTimeout, nMaximumTimeout); 1702881043d1SAndre Fischer 1703881043d1SAndre Fischer // Make sure that the maximum frame count has not been set 1704881043d1SAndre Fischer // too high (only then conversion to milliseconds and long 1705881043d1SAndre Fischer // integer may lead to zero value.) 170697eb00c7SChris Sherlock OSL_ASSERT(static_cast<sal_uLong>(fUpdate * 1000.0) > 0); 170712dcf5e6SMichael Meeks } 1708881043d1SAndre Fischer 170912dcf5e6SMichael Meeks // Use our high resolution timers for the asynchronous callback. 17103d6bed44SCarsten Driesner maUpdateTimer.SetTimeout(static_cast<sal_uLong>(fUpdate * 1000.0)); 17112db95b18SKurt Zenker maUpdateTimer.Start(); 17120fefcd83SRüdiger Timm } 17130fefcd83SRüdiger Timm } 17148cc98837STakeshi Abe catch( Exception& ) 17150fefcd83SRüdiger Timm { 1716889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::updateSlideShow()" ); 17170fefcd83SRüdiger Timm } 17180fefcd83SRüdiger Timm } 17190fefcd83SRüdiger Timm 17200fefcd83SRüdiger Timm bool SlideshowImpl::keyInput(const KeyEvent& rKEvt) 17210fefcd83SRüdiger Timm { 172267aad3b7SRüdiger Timm if( !mxShow.is() || mbInputFreeze ) 17230fefcd83SRüdiger Timm return false; 17240fefcd83SRüdiger Timm 17250fefcd83SRüdiger Timm bool bRet = true; 1726ddb02dbaSOliver Bolte 1727ddb02dbaSOliver Bolte try 1728ddb02dbaSOliver Bolte { 17290fefcd83SRüdiger Timm const int nKeyCode = rKEvt.GetKeyCode().GetCode(); 17300fefcd83SRüdiger Timm switch( nKeyCode ) 17310fefcd83SRüdiger Timm { 1732a9bec6a7SRüdiger Timm case awt::Key::CONTEXTMENU: 1733a9bec6a7SRüdiger Timm if( !mnContextMenuEvent ) 1734a9bec6a7SRüdiger Timm { 1735a9bec6a7SRüdiger Timm if( mpShowWindow ) 1736a9bec6a7SRüdiger Timm maPopupMousePos = mpShowWindow->GetPointerState().maPos; 1737a9bec6a7SRüdiger Timm mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 1738a9bec6a7SRüdiger Timm } 1739a9bec6a7SRüdiger Timm break; 1740a9bec6a7SRüdiger Timm 17410fefcd83SRüdiger Timm // cancel show 17420fefcd83SRüdiger Timm case KEY_ESCAPE: 17430fefcd83SRüdiger Timm case KEY_SUBTRACT: 1744db6084bdSRüdiger Timm // in case the user cancels the presentation, switch to current slide 1745db6084bdSRüdiger Timm // in edit mode 1746fe6cce01SStephan Bergmann if( mpSlideController && (ANIMATIONMODE_SHOW == meAnimationMode) ) 1747db6084bdSRüdiger Timm { 1748db6084bdSRüdiger Timm if( mpSlideController->getCurrentSlideNumber() != -1 ) 1749db6084bdSRüdiger Timm mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 1750db6084bdSRüdiger Timm } 17510fefcd83SRüdiger Timm endPresentation(); 17520fefcd83SRüdiger Timm break; 17530fefcd83SRüdiger Timm 17540fefcd83SRüdiger Timm // advance show 175592ed70feSVladimir Glazounov case KEY_PAGEDOWN: 175692ed70feSVladimir Glazounov if(rKEvt.GetKeyCode().IsMod2()) 175792ed70feSVladimir Glazounov { 175892ed70feSVladimir Glazounov gotoNextSlide(); 175992ed70feSVladimir Glazounov break; 176092ed70feSVladimir Glazounov } 1761ab9b67bbSStephan Bergmann [[fallthrough]]; 17620fefcd83SRüdiger Timm case KEY_SPACE: 176392ed70feSVladimir Glazounov case KEY_RIGHT: 176492ed70feSVladimir Glazounov case KEY_DOWN: 176592ed70feSVladimir Glazounov gotoNextEffect(); 17660fefcd83SRüdiger Timm break; 17670fefcd83SRüdiger Timm 17680fefcd83SRüdiger Timm case KEY_RETURN: 176950621863SOliver Bolte { 1770589e157cSNoel Grandin if( !maCharBuffer.isEmpty() ) 177150621863SOliver Bolte { 1772fe6cce01SStephan Bergmann if( mpSlideController ) 177350621863SOliver Bolte { 1774589e157cSNoel Grandin if( mpSlideController->jumpToSlideNumber( maCharBuffer.toInt32() - 1 ) ) 1775089380a5SOliver Bolte displayCurrentSlide(); 177650621863SOliver Bolte } 1777cb9e8bbdSStephan Bergmann maCharBuffer.clear(); 177850621863SOliver Bolte } 177950621863SOliver Bolte else 178050621863SOliver Bolte { 178192ed70feSVladimir Glazounov gotoNextEffect(); 17820fefcd83SRüdiger Timm } 178350621863SOliver Bolte } 17840fefcd83SRüdiger Timm break; 17850fefcd83SRüdiger Timm 17860fefcd83SRüdiger Timm // numeric: add to buffer 17870fefcd83SRüdiger Timm case KEY_0: 17880fefcd83SRüdiger Timm case KEY_1: 17890fefcd83SRüdiger Timm case KEY_2: 17900fefcd83SRüdiger Timm case KEY_3: 17910fefcd83SRüdiger Timm case KEY_4: 17920fefcd83SRüdiger Timm case KEY_5: 17930fefcd83SRüdiger Timm case KEY_6: 17940fefcd83SRüdiger Timm case KEY_7: 17950fefcd83SRüdiger Timm case KEY_8: 17960fefcd83SRüdiger Timm case KEY_9: 17978b4719c2SStephan Bergmann maCharBuffer += OUStringChar( rKEvt.GetCharCode() ); 17980fefcd83SRüdiger Timm break; 17990fefcd83SRüdiger Timm 18000fefcd83SRüdiger Timm case KEY_PAGEUP: 180176c3d136SAndre Fischer if(rKEvt.GetKeyCode().IsMod2()) 180276c3d136SAndre Fischer { 180376c3d136SAndre Fischer gotoPreviousSlide(); 180476c3d136SAndre Fischer break; 180576c3d136SAndre Fischer } 1806ab9b67bbSStephan Bergmann [[fallthrough]]; 18070fefcd83SRüdiger Timm case KEY_LEFT: 18080fefcd83SRüdiger Timm case KEY_UP: 180992ed70feSVladimir Glazounov case KEY_BACKSPACE: 181076c3d136SAndre Fischer gotoPreviousEffect(); 18110fefcd83SRüdiger Timm break; 18120fefcd83SRüdiger Timm 18135544c178SGabor Kelemen case KEY_P: 18145544c178SGabor Kelemen setUsePen( !mbUsePen ); 18155544c178SGabor Kelemen break; 18165544c178SGabor Kelemen 18175544c178SGabor Kelemen case KEY_E: 18185544c178SGabor Kelemen setEraseAllInk( true ); 18195544c178SGabor Kelemen updateSlideShow(); 18205544c178SGabor Kelemen break; 18215544c178SGabor Kelemen 18220fefcd83SRüdiger Timm case KEY_HOME: 18230fefcd83SRüdiger Timm gotoFirstSlide(); 18240fefcd83SRüdiger Timm break; 18250fefcd83SRüdiger Timm 18260fefcd83SRüdiger Timm case KEY_END: 18270fefcd83SRüdiger Timm gotoLastSlide(); 18280fefcd83SRüdiger Timm break; 18290fefcd83SRüdiger Timm 183092ed70feSVladimir Glazounov case KEY_B: 183192ed70feSVladimir Glazounov case KEY_W: 183292ed70feSVladimir Glazounov case KEY_POINT: 183392ed70feSVladimir Glazounov case KEY_COMMA: 18340fefcd83SRüdiger Timm { 1835808a70e2SKurt Zenker blankScreen( ((nKeyCode == KEY_W ) || (nKeyCode == KEY_COMMA)) ? 0x00ffffff : 0x00000000 ); 18360fefcd83SRüdiger Timm } 18370fefcd83SRüdiger Timm break; 18380fefcd83SRüdiger Timm 18390fefcd83SRüdiger Timm default: 18400fefcd83SRüdiger Timm bRet = false; 18410fefcd83SRüdiger Timm break; 18420fefcd83SRüdiger Timm } 1843ddb02dbaSOliver Bolte } 18448cc98837STakeshi Abe catch( Exception& ) 1845ddb02dbaSOliver Bolte { 1846ddb02dbaSOliver Bolte bRet = false; 1847889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::keyInput()" ); 1848ddb02dbaSOliver Bolte } 18490fefcd83SRüdiger Timm 18500fefcd83SRüdiger Timm return bRet; 18510fefcd83SRüdiger Timm } 18520fefcd83SRüdiger Timm 1853106ea872SStephan Bergmann IMPL_LINK( SlideshowImpl, EventListenerHdl, VclSimpleEvent&, rSimpleEvent, void ) 185481f4197bSRüdiger Timm { 185581f4197bSRüdiger Timm if( !mxShow.is() || mbInputFreeze ) 18561e67e94fSNoel Grandin return; 185781f4197bSRüdiger Timm 1858b104e6e9SNoel Grandin if( !((rSimpleEvent.GetId() == VclEventId::WindowCommand) && static_cast<VclWindowEvent*>(&rSimpleEvent)->GetData()) ) 1859b104e6e9SNoel Grandin return; 1860b104e6e9SNoel Grandin 18611e67e94fSNoel Grandin const CommandEvent& rEvent = *static_cast<const CommandEvent*>(static_cast<VclWindowEvent*>(&rSimpleEvent)->GetData()); 186281f4197bSRüdiger Timm 1863b104e6e9SNoel Grandin if( rEvent.GetCommand() != CommandEventId::Media ) 1864b104e6e9SNoel Grandin return; 1865b104e6e9SNoel Grandin 1866508c020cSCaolán McNamara CommandMediaData* pMediaData = rEvent.GetMediaData(); 1867508c020cSCaolán McNamara pMediaData->SetPassThroughToOS(false); 1868508c020cSCaolán McNamara switch (pMediaData->GetMediaId()) 186981f4197bSRüdiger Timm { 1870e103887cSTor Lillqvist #if defined( MACOSX ) 187132186f00SNoel Grandin case MediaCommand::Menu: 187269922d08SVladimir Glazounov if( !mnContextMenuEvent ) 187369922d08SVladimir Glazounov { 187469922d08SVladimir Glazounov if( mpShowWindow ) 187569922d08SVladimir Glazounov maPopupMousePos = mpShowWindow->GetPointerState().maPos; 187669922d08SVladimir Glazounov mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 187769922d08SVladimir Glazounov } 187869922d08SVladimir Glazounov break; 187932186f00SNoel Grandin case MediaCommand::VolumeDown: 188069922d08SVladimir Glazounov gotoPreviousSlide(); 188169922d08SVladimir Glazounov break; 188232186f00SNoel Grandin case MediaCommand::VolumeUp: 188369922d08SVladimir Glazounov gotoNextEffect(); 188469922d08SVladimir Glazounov break; 188569922d08SVladimir Glazounov #endif 188632186f00SNoel Grandin case MediaCommand::NextTrack: 188781f4197bSRüdiger Timm gotoNextEffect(); 188881f4197bSRüdiger Timm break; 188932186f00SNoel Grandin case MediaCommand::Pause: 189081f4197bSRüdiger Timm if( !mbIsPaused ) 189181f4197bSRüdiger Timm blankScreen(0); 189281f4197bSRüdiger Timm break; 189332186f00SNoel Grandin case MediaCommand::Play: 189481f4197bSRüdiger Timm if( mbIsPaused ) 189581f4197bSRüdiger Timm resume(); 189681f4197bSRüdiger Timm break; 189769922d08SVladimir Glazounov 189832186f00SNoel Grandin case MediaCommand::PlayPause: 189981f4197bSRüdiger Timm if( mbIsPaused ) 190081f4197bSRüdiger Timm resume(); 190181f4197bSRüdiger Timm else 190281f4197bSRüdiger Timm blankScreen(0); 190381f4197bSRüdiger Timm break; 190432186f00SNoel Grandin case MediaCommand::PreviousTrack: 190581f4197bSRüdiger Timm gotoPreviousSlide(); 190681f4197bSRüdiger Timm break; 190732186f00SNoel Grandin case MediaCommand::NextTrackHold: 190869922d08SVladimir Glazounov gotoLastSlide(); 190969922d08SVladimir Glazounov break; 191081f4197bSRüdiger Timm 191132186f00SNoel Grandin case MediaCommand::Rewind: 191281f4197bSRüdiger Timm gotoFirstSlide(); 191381f4197bSRüdiger Timm break; 191432186f00SNoel Grandin case MediaCommand::Stop: 191581f4197bSRüdiger Timm // in case the user cancels the presentation, switch to current slide 191681f4197bSRüdiger Timm // in edit mode 1917fe6cce01SStephan Bergmann if( mpSlideController && (ANIMATIONMODE_SHOW == meAnimationMode) ) 191881f4197bSRüdiger Timm { 191981f4197bSRüdiger Timm if( mpSlideController->getCurrentSlideNumber() != -1 ) 192081f4197bSRüdiger Timm mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 192181f4197bSRüdiger Timm } 192281f4197bSRüdiger Timm endPresentation(); 192381f4197bSRüdiger Timm break; 1924508c020cSCaolán McNamara default: 1925508c020cSCaolán McNamara pMediaData->SetPassThroughToOS(true); 1926508c020cSCaolán McNamara break; 192781f4197bSRüdiger Timm } 192881f4197bSRüdiger Timm } 192981f4197bSRüdiger Timm 19300fefcd83SRüdiger Timm void SlideshowImpl::mouseButtonUp(const MouseEvent& rMEvt) 19310fefcd83SRüdiger Timm { 1932a9bec6a7SRüdiger Timm if( rMEvt.IsRight() && !mnContextMenuEvent ) 1933c9c9d428SOliver Bolte { 1934c9c9d428SOliver Bolte maPopupMousePos = rMEvt.GetPosPixel(); 1935a9bec6a7SRüdiger Timm mnContextMenuEvent = Application::PostUserEvent( LINK( this, SlideshowImpl, ContextMenuHdl ) ); 19360fefcd83SRüdiger Timm } 1937c9c9d428SOliver Bolte } 1938c9c9d428SOliver Bolte 1939106ea872SStephan Bergmann IMPL_LINK_NOARG(SlideshowImpl, ContextMenuHdl, void*, void) 1940c9c9d428SOliver Bolte { 194192c697c0SStephan Bergmann mnContextMenuEvent = nullptr; 1942a9bec6a7SRüdiger Timm 1943ccb2a1f6SNoel Grandin if (mpSlideController == nullptr) 1944bd8b93fdSNoel Grandin return; 1945c9c9d428SOliver Bolte 1946c9c9d428SOliver Bolte mbWasPaused = mbIsPaused; 1947c9c9d428SOliver Bolte if( !mbWasPaused ) 1948808a70e2SKurt Zenker pause(); 1949c9c9d428SOliver Bolte 1950e872d77cSCaolán McNamara std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(nullptr, "modules/simpress/ui/slidecontextmenu.ui")); 1951e872d77cSCaolán McNamara std::unique_ptr<weld::Menu> xMenu(xBuilder->weld_menu("menu")); 1952e872d77cSCaolán McNamara OUString sNextImage(BMP_MENU_NEXT), sPrevImage(BMP_MENU_PREV); 1953e872d77cSCaolán McNamara xMenu->insert(0, "next", SdResId(RID_SVXSTR_MENU_NEXT), &sNextImage, nullptr, nullptr, TRISTATE_INDET); 1954e872d77cSCaolán McNamara xMenu->insert(1, "prev", SdResId(RID_SVXSTR_MENU_PREV), &sPrevImage, nullptr, nullptr, TRISTATE_INDET); 1955c9c9d428SOliver Bolte 1956af5c661bSericb // Adding button to display if in Pen mode 1957e872d77cSCaolán McNamara xMenu->set_active("pen", mbUsePen); 195844d83b68Sthb 1959d5a46662SKurt Zenker const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 1960e872d77cSCaolán McNamara xMenu->set_visible("next", mpSlideController->getNextSlideIndex() != -1); 1961e872d77cSCaolán McNamara xMenu->set_visible("prev", (mpSlideController->getPreviousSlideIndex() != -1 ) || (eMode == SHOWWINDOWMODE_END) || (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK)); 1962e872d77cSCaolán McNamara xMenu->set_visible("edit", mpViewShell->GetDoc()->IsStartWithPresentation()); 1963c9c9d428SOliver Bolte 1964e872d77cSCaolán McNamara std::unique_ptr<weld::Menu> xPageMenu(xBuilder->weld_menu("gotomenu")); 1965e872d77cSCaolán McNamara OUString sFirstImage(BMP_MENU_FIRST), sLastImage(BMP_MENU_LAST); 1966e872d77cSCaolán McNamara xPageMenu->insert(0, "first", SdResId(RID_SVXSTR_MENU_FIRST), &sFirstImage, nullptr, nullptr, TRISTATE_INDET); 1967e872d77cSCaolán McNamara xPageMenu->insert(1, "last", SdResId(RID_SVXSTR_MENU_LAST), &sLastImage, nullptr, nullptr, TRISTATE_INDET); 1968c9c9d428SOliver Bolte 1969c9c9d428SOliver Bolte // populate slide goto list 1970c9c9d428SOliver Bolte const sal_Int32 nPageNumberCount = mpSlideController->getSlideNumberCount(); 1971c9c9d428SOliver Bolte if( nPageNumberCount <= 1 ) 1972c9c9d428SOliver Bolte { 1973e872d77cSCaolán McNamara xMenu->set_visible("goto", false); 1974c9c9d428SOliver Bolte } 1975c9c9d428SOliver Bolte else 1976c9c9d428SOliver Bolte { 1977d5a46662SKurt Zenker sal_Int32 nCurrentSlideNumber = mpSlideController->getCurrentSlideNumber(); 1978d5a46662SKurt Zenker if( (eMode == SHOWWINDOWMODE_END) || (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 1979d5a46662SKurt Zenker nCurrentSlideNumber = -1; 1980c9c9d428SOliver Bolte 1981e872d77cSCaolán McNamara xPageMenu->set_visible("first", mpSlideController->getSlideNumber(0) != nCurrentSlideNumber); 1982e872d77cSCaolán McNamara xPageMenu->set_visible("last", mpSlideController->getSlideNumber(mpSlideController->getSlideIndexCount() - 1) != nCurrentSlideNumber); 1983c9c9d428SOliver Bolte 1984c9c9d428SOliver Bolte sal_Int32 nPageNumber; 1985c9c9d428SOliver Bolte 1986c9c9d428SOliver Bolte for( nPageNumber = 0; nPageNumber < nPageNumberCount; nPageNumber++ ) 1987c9c9d428SOliver Bolte { 1988c9c9d428SOliver Bolte if( mpSlideController->isVisibleSlideNumber( nPageNumber ) ) 1989c9c9d428SOliver Bolte { 1990abf7b941SStephan Bergmann SdPage* pPage = mpDoc->GetSdPage(static_cast<sal_uInt16>(nPageNumber), PageKind::Standard); 1991c9c9d428SOliver Bolte if (pPage) 1992c9c9d428SOliver Bolte { 1993e872d77cSCaolán McNamara OUString sId(OUString::number(CM_SLIDES + nPageNumber)); 1994e872d77cSCaolán McNamara xPageMenu->append_check(sId, pPage->GetName()); 1995c9c9d428SOliver Bolte if (nPageNumber == nCurrentSlideNumber) 1996e872d77cSCaolán McNamara xPageMenu->set_active(sId.toUtf8(), true); 1997c9c9d428SOliver Bolte } 1998c9c9d428SOliver Bolte } 1999c9c9d428SOliver Bolte } 2000c9c9d428SOliver Bolte } 2001e872d77cSCaolán McNamara 2002e872d77cSCaolán McNamara std::unique_ptr<weld::Menu> xBlankMenu(xBuilder->weld_menu("screenmenu")); 2003c9c9d428SOliver Bolte 2004c9c9d428SOliver Bolte if (mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_BLANK) 2005c9c9d428SOliver Bolte { 2006e872d77cSCaolán McNamara xBlankMenu->set_active((mpShowWindow->GetBlankColor() == COL_WHITE) ? "white" : "black", true); 2007c9c9d428SOliver Bolte } 2008c9c9d428SOliver Bolte 2009e872d77cSCaolán McNamara std::unique_ptr<weld::Menu> xWidthMenu(xBuilder->weld_menu("widthmenu")); 201044d83b68Sthb 201144d83b68Sthb // populate color width list 201244d83b68Sthb sal_Int32 nIterator; 201344d83b68Sthb double nWidth; 201444d83b68Sthb 201544d83b68Sthb nWidth = 4.0; 201644d83b68Sthb for( nIterator = 1; nIterator < 6; nIterator++) 201744d83b68Sthb { 201844d83b68Sthb switch(nIterator) 201944d83b68Sthb { 202044d83b68Sthb case 1: 202144d83b68Sthb nWidth = 4.0; 202244d83b68Sthb break; 202344d83b68Sthb case 2: 202444d83b68Sthb nWidth = 100.0; 202544d83b68Sthb break; 202644d83b68Sthb case 3: 202744d83b68Sthb nWidth = 150.0; 202844d83b68Sthb break; 202944d83b68Sthb case 4: 203044d83b68Sthb nWidth = 200.0; 203144d83b68Sthb break; 203244d83b68Sthb case 5: 203344d83b68Sthb nWidth = 400.0; 203444d83b68Sthb break; 203544d83b68Sthb default: 203644d83b68Sthb break; 203744d83b68Sthb } 203844d83b68Sthb 203944d83b68Sthb if (nWidth == mdUserPaintStrokeWidth) 2040e872d77cSCaolán McNamara xWidthMenu->set_active(OString::number(nWidth), true); 204144d83b68Sthb } 2042c9c9d428SOliver Bolte 2043e872d77cSCaolán McNamara ::tools::Rectangle aRect(maPopupMousePos, Size(1,1)); 2044e872d77cSCaolán McNamara weld::Window* pParent = weld::GetPopupParent(*mpShowWindow, aRect); 2045e872d77cSCaolán McNamara ContextMenuSelectHdl(xMenu->popup_at_rect(pParent, aRect)); 2046c9c9d428SOliver Bolte 2047a9bec6a7SRüdiger Timm if( mxView.is() ) 2048a9bec6a7SRüdiger Timm mxView->ignoreNextMouseReleased(); 2049a9bec6a7SRüdiger Timm 2050808a70e2SKurt Zenker if( !mbWasPaused ) 2051808a70e2SKurt Zenker resume(); 2052c9c9d428SOliver Bolte } 2053c9c9d428SOliver Bolte 2054e872d77cSCaolán McNamara void SlideshowImpl::ContextMenuSelectHdl(const OString& rMenuId) 2055c9c9d428SOliver Bolte { 2056e872d77cSCaolán McNamara if (rMenuId == "prev") 2057c9c9d428SOliver Bolte { 2058c9c9d428SOliver Bolte gotoPreviousSlide(); 2059d5a46662SKurt Zenker mbWasPaused = false; 2060747a4f30SCaolán McNamara } 2061e872d77cSCaolán McNamara else if(rMenuId == "next") 2062747a4f30SCaolán McNamara { 2063c9c9d428SOliver Bolte gotoNextSlide(); 2064d5a46662SKurt Zenker mbWasPaused = false; 2065747a4f30SCaolán McNamara } 2066e872d77cSCaolán McNamara else if (rMenuId == "first") 2067747a4f30SCaolán McNamara { 2068c9c9d428SOliver Bolte gotoFirstSlide(); 2069d5a46662SKurt Zenker mbWasPaused = false; 2070747a4f30SCaolán McNamara } 2071e872d77cSCaolán McNamara else if (rMenuId == "last") 2072747a4f30SCaolán McNamara { 2073c9c9d428SOliver Bolte gotoLastSlide(); 2074d5a46662SKurt Zenker mbWasPaused = false; 2075747a4f30SCaolán McNamara } 2076e872d77cSCaolán McNamara else if (rMenuId == "black" || rMenuId == "white") 2077c9c9d428SOliver Bolte { 2078e872d77cSCaolán McNamara const Color aBlankColor(rMenuId == "white" ? COL_WHITE : COL_BLACK); 2079c9c9d428SOliver Bolte if( mbWasPaused ) 2080c9c9d428SOliver Bolte { 2081c9c9d428SOliver Bolte if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_BLANK ) 2082c9c9d428SOliver Bolte { 2083c9c9d428SOliver Bolte if( mpShowWindow->GetBlankColor() == aBlankColor ) 2084c9c9d428SOliver Bolte { 2085c9c9d428SOliver Bolte mbWasPaused = false; 2086c9c9d428SOliver Bolte mpShowWindow->RestartShow(); 2087e872d77cSCaolán McNamara return; 2088c9c9d428SOliver Bolte } 2089c9c9d428SOliver Bolte } 2090c9c9d428SOliver Bolte mpShowWindow->RestartShow(); 2091c9c9d428SOliver Bolte } 2092c9c9d428SOliver Bolte if( mpShowWindow->SetBlankMode( mpSlideController->getCurrentSlideIndex(), aBlankColor ) ) 2093c9c9d428SOliver Bolte { 2094808a70e2SKurt Zenker pause(); 2095c9c9d428SOliver Bolte mbWasPaused = true; 2096c9c9d428SOliver Bolte } 2097c9c9d428SOliver Bolte } 2098e872d77cSCaolán McNamara else if (rMenuId == "color") 209954e4becdSthb { 210044d83b68Sthb //Open a color picker based on SvColorDialog 210163a68064SNoel ::Color aColor( ColorTransparency, mnUserPaintColor ); 2102b15244d5SCaolán McNamara SvColorDialog aColorDlg; 210344d83b68Sthb aColorDlg.SetColor( aColor ); 210444d83b68Sthb 2105b15244d5SCaolán McNamara if (aColorDlg.Execute(mpShowWindow->GetFrameWeld())) 210644d83b68Sthb { 210744d83b68Sthb aColor = aColorDlg.GetColor(); 21081a41c071SNoel Grandin setPenColor(sal_Int32(aColor)); 210944d83b68Sthb } 211044d83b68Sthb mbWasPaused = false; 211144d83b68Sthb } 2112e872d77cSCaolán McNamara else if (rMenuId == "4") 211344d83b68Sthb { 211444d83b68Sthb setPenWidth(4.0); 211544d83b68Sthb mbWasPaused = false; 211644d83b68Sthb } 2117e872d77cSCaolán McNamara else if (rMenuId == "100") 211844d83b68Sthb { 211944d83b68Sthb setPenWidth(100.0); 212044d83b68Sthb mbWasPaused = false; 212144d83b68Sthb } 2122e872d77cSCaolán McNamara else if (rMenuId == "150") 212344d83b68Sthb { 212444d83b68Sthb setPenWidth(150.0); 212544d83b68Sthb mbWasPaused = false; 212644d83b68Sthb } 2127e872d77cSCaolán McNamara else if (rMenuId == "200") 212844d83b68Sthb { 212944d83b68Sthb setPenWidth(200.0); 213044d83b68Sthb mbWasPaused = false; 213144d83b68Sthb } 2132e872d77cSCaolán McNamara else if (rMenuId == "400") 213344d83b68Sthb { 213444d83b68Sthb setPenWidth(400.0); 213544d83b68Sthb mbWasPaused = false; 213644d83b68Sthb } 2137e872d77cSCaolán McNamara else if (rMenuId == "erase") 213844d83b68Sthb { 213944d83b68Sthb setEraseAllInk(true); 214044d83b68Sthb mbWasPaused = false; 214144d83b68Sthb } 2142e872d77cSCaolán McNamara else if (rMenuId == "pen") 2143af5c661bSericb { 214403a5e096SChristian Lippka setUsePen(!mbUsePen); 2145af5c661bSericb mbWasPaused = false; 2146af5c661bSericb } 2147e872d77cSCaolán McNamara else if (rMenuId == "edit") 2148747a4f30SCaolán McNamara { 2149b8608fddSSamuel Mehrbrodt // When in autoplay mode (pps/ppsx), offer editing of the presentation 2150b8608fddSSamuel Mehrbrodt // Turn autostart off, else Impress will close when exiting the Presentation 2151b8608fddSSamuel Mehrbrodt mpViewShell->GetDoc()->SetExitAfterPresenting(false); 2152fe6cce01SStephan Bergmann if( mpSlideController && (ANIMATIONMODE_SHOW == meAnimationMode) ) 2153b8608fddSSamuel Mehrbrodt { 2154b8608fddSSamuel Mehrbrodt if( mpSlideController->getCurrentSlideNumber() != -1 ) 2155b8608fddSSamuel Mehrbrodt { 2156b8608fddSSamuel Mehrbrodt mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 2157b8608fddSSamuel Mehrbrodt } 2158b8608fddSSamuel Mehrbrodt } 2159b8608fddSSamuel Mehrbrodt endPresentation(); 2160747a4f30SCaolán McNamara } 2161e872d77cSCaolán McNamara else if (rMenuId == "end") 2162747a4f30SCaolán McNamara { 2163c9c9d428SOliver Bolte // in case the user cancels the presentation, switch to current slide 2164c9c9d428SOliver Bolte // in edit mode 2165fe6cce01SStephan Bergmann if( mpSlideController && (ANIMATIONMODE_SHOW == meAnimationMode) ) 2166c9c9d428SOliver Bolte { 2167c9c9d428SOliver Bolte if( mpSlideController->getCurrentSlideNumber() != -1 ) 2168d5a46662SKurt Zenker { 2169c9c9d428SOliver Bolte mnRestoreSlide = mpSlideController->getCurrentSlideNumber(); 2170c9c9d428SOliver Bolte } 2171d5a46662SKurt Zenker } 2172c9c9d428SOliver Bolte endPresentation(); 2173747a4f30SCaolán McNamara } 2174e872d77cSCaolán McNamara else if (!rMenuId.isEmpty()) 2175747a4f30SCaolán McNamara { 2176e872d77cSCaolán McNamara sal_Int32 nPageNumber = rMenuId.toInt32() - CM_SLIDES; 2177d5a46662SKurt Zenker const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 2178d5a46662SKurt Zenker if( (eMode == SHOWWINDOWMODE_END) || (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 2179d5a46662SKurt Zenker { 2180d5a46662SKurt Zenker mpShowWindow->RestartShow( nPageNumber ); 2181d5a46662SKurt Zenker } 2182d5a46662SKurt Zenker else if( nPageNumber != mpSlideController->getCurrentSlideNumber() ) 2183d5a46662SKurt Zenker { 2184c9c9d428SOliver Bolte displaySlideNumber( nPageNumber ); 2185d5a46662SKurt Zenker } 2186c9c9d428SOliver Bolte mbWasPaused = false; 2187c9c9d428SOliver Bolte } 2188c9c9d428SOliver Bolte } 2189c9c9d428SOliver Bolte 21906ca16a4cSNoel Grandin Reference< XSlideShow > SlideshowImpl::createSlideShow() 21910fefcd83SRüdiger Timm { 21920fefcd83SRüdiger Timm Reference< XSlideShow > xShow; 21930fefcd83SRüdiger Timm 21940fefcd83SRüdiger Timm try 21950fefcd83SRüdiger Timm { 219623ef230fSNoel Grandin Reference< uno::XComponentContext > xContext = 219723ef230fSNoel Grandin ::comphelper::getProcessComponentContext(); 21980fefcd83SRüdiger Timm 2199a361231bSNoel Grandin xShow.set( presentation::SlideShow::create(xContext), UNO_SET_THROW ); 22000fefcd83SRüdiger Timm } 22018cc98837STakeshi Abe catch( uno::Exception& ) 22020fefcd83SRüdiger Timm { 2203889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::createSlideShow()" ); 22040fefcd83SRüdiger Timm } 22050fefcd83SRüdiger Timm 22060fefcd83SRüdiger Timm return xShow; 22070fefcd83SRüdiger Timm } 22080fefcd83SRüdiger Timm 2209bb06f513SNoel void SlideshowImpl::createSlideList( bool bAll, std::u16string_view rPresSlide ) 22100fefcd83SRüdiger Timm { 2211e588aa4dSNoel Grandin const sal_uInt16 nSlideCount = mpDoc->GetSdPageCount( PageKind::Standard ); 22120fefcd83SRüdiger Timm 2213b104e6e9SNoel Grandin if( !nSlideCount ) 2214b104e6e9SNoel Grandin return; 2215b104e6e9SNoel Grandin 22160fefcd83SRüdiger Timm SdCustomShow* pCustomShow; 22170fefcd83SRüdiger Timm 2218a1b0b68cSCaolán McNamara if( mpDoc->GetCustomShowList() && maPresSettings.mbCustomShow ) 2219b10a5e4cSNoel Grandin pCustomShow = mpDoc->GetCustomShowList()->GetCurObject(); 22200fefcd83SRüdiger Timm else 222192c697c0SStephan Bergmann pCustomShow = nullptr; 22220fefcd83SRüdiger Timm 2223089380a5SOliver Bolte // create animation slide controller 2224089380a5SOliver Bolte AnimationSlideController::Mode eMode = 22252c1b7e8dSNoel Grandin ( pCustomShow && !pCustomShow->PagesVector().empty() ) ? AnimationSlideController::CUSTOM : 2226089380a5SOliver Bolte (bAll ? AnimationSlideController::ALL : AnimationSlideController::FROM); 2227089380a5SOliver Bolte 2228089380a5SOliver Bolte Reference< XDrawPagesSupplier > xDrawPages( mpDoc->getUnoModel(), UNO_QUERY_THROW ); 2229089380a5SOliver Bolte Reference< XIndexAccess > xSlides( xDrawPages->getDrawPages(), UNO_QUERY_THROW ); 2230d712ebc2SNoel Grandin mpSlideController = std::make_shared<AnimationSlideController>( xSlides, eMode ); 2231089380a5SOliver Bolte 2232089380a5SOliver Bolte if( eMode != AnimationSlideController::CUSTOM ) 22330fefcd83SRüdiger Timm { 223445e4a5efSKatarina Behrens sal_Int32 nFirstVisibleSlide = 0; 223545e4a5efSKatarina Behrens 2236f4a37ca9SUrs Fässler // normal presentation 2237bb06f513SNoel if( !rPresSlide.empty() ) 22380fefcd83SRüdiger Timm { 2239089380a5SOliver Bolte sal_Int32 nSlide; 2240b45a12c3SNoel Grandin bool bTakeNextAvailable = false; 22410fefcd83SRüdiger Timm 2242e8b924e4SKatarina Behrens for( nSlide = 0, nFirstVisibleSlide = -1; 224345e4a5efSKatarina Behrens ( nSlide < nSlideCount ) && ( -1 == nFirstVisibleSlide ); nSlide++ ) 22440fefcd83SRüdiger Timm { 2245abf7b941SStephan Bergmann SdPage* pTestSlide = mpDoc->GetSdPage( static_cast<sal_uInt16>(nSlide), PageKind::Standard ); 22460fefcd83SRüdiger Timm 2247089380a5SOliver Bolte if( pTestSlide->GetName() == rPresSlide ) 22480fefcd83SRüdiger Timm { 2249089380a5SOliver Bolte if( pTestSlide->IsExcluded() ) 2250b45a12c3SNoel Grandin bTakeNextAvailable = true; 22510fefcd83SRüdiger Timm else 225245e4a5efSKatarina Behrens nFirstVisibleSlide = nSlide; 22530fefcd83SRüdiger Timm } 2254089380a5SOliver Bolte else if( bTakeNextAvailable && !pTestSlide->IsExcluded() ) 225545e4a5efSKatarina Behrens nFirstVisibleSlide = nSlide; 22560fefcd83SRüdiger Timm } 22570fefcd83SRüdiger Timm 225845e4a5efSKatarina Behrens if( -1 == nFirstVisibleSlide ) 225945e4a5efSKatarina Behrens nFirstVisibleSlide = 0; 22600fefcd83SRüdiger Timm } 22610fefcd83SRüdiger Timm 2262089380a5SOliver Bolte for( sal_Int32 i = 0; i < nSlideCount; i++ ) 2263089380a5SOliver Bolte { 2264abf7b941SStephan Bergmann bool bVisible = ! mpDoc->GetSdPage( static_cast<sal_uInt16>(i), PageKind::Standard )->IsExcluded(); 2265089380a5SOliver Bolte if( bVisible || (eMode == AnimationSlideController::ALL) ) 2266089380a5SOliver Bolte mpSlideController->insertSlideNumber( i, bVisible ); 2267089380a5SOliver Bolte } 22680fefcd83SRüdiger Timm 226945e4a5efSKatarina Behrens mpSlideController->setStartSlideNumber( nFirstVisibleSlide ); 22700fefcd83SRüdiger Timm } 22710fefcd83SRüdiger Timm else 22720fefcd83SRüdiger Timm { 2273bb06f513SNoel if( meAnimationMode != ANIMATIONMODE_SHOW && !rPresSlide.empty() ) 22740fefcd83SRüdiger Timm { 2275089380a5SOliver Bolte sal_Int32 nSlide; 2276089380a5SOliver Bolte for( nSlide = 0; nSlide < nSlideCount; nSlide++ ) 2277abf7b941SStephan Bergmann if( rPresSlide == mpDoc->GetSdPage( static_cast<sal_uInt16>(nSlide), PageKind::Standard )->GetName() ) 22780fefcd83SRüdiger Timm break; 22790fefcd83SRüdiger Timm 2280089380a5SOliver Bolte if( nSlide < nSlideCount ) 2281abf7b941SStephan Bergmann mpSlideController->insertSlideNumber( static_cast<sal_uInt16>(nSlide) ); 22820fefcd83SRüdiger Timm } 22830fefcd83SRüdiger Timm 22847c7ec84cSArkadiy Illarionov for( const auto& rpPage : pCustomShow->PagesVector() ) 22850fefcd83SRüdiger Timm { 22867c7ec84cSArkadiy Illarionov const sal_uInt16 nSdSlide = ( rpPage->GetPageNum() - 1 ) / 2; 22870fefcd83SRüdiger Timm 22882e5508a1SNoel Grandin if( ! mpDoc->GetSdPage( nSdSlide, PageKind::Standard )->IsExcluded()) 2289089380a5SOliver Bolte mpSlideController->insertSlideNumber( nSdSlide ); 22900fefcd83SRüdiger Timm } 22910fefcd83SRüdiger Timm } 22920fefcd83SRüdiger Timm } 22930fefcd83SRüdiger Timm 22943d6bed44SCarsten Driesner typedef sal_uInt16 (*FncGetChildWindowId)(); 22950fefcd83SRüdiger Timm 229672fcc08eSStephan Bergmann const FncGetChildWindowId aShowChildren[] = 22970fefcd83SRüdiger Timm { 22980fefcd83SRüdiger Timm &AnimationChildWindow::GetChildWindowId, 22990fefcd83SRüdiger Timm &Svx3DChildWindow::GetChildWindowId, 23000fefcd83SRüdiger Timm &SvxFontWorkChildWindow::GetChildWindowId, 23010fefcd83SRüdiger Timm &SvxColorChildWindow::GetChildWindowId, 23020fefcd83SRüdiger Timm &SvxSearchDialogWrapper::GetChildWindowId, 23030fefcd83SRüdiger Timm &SvxBmpMaskChildWindow::GetChildWindowId, 23040fefcd83SRüdiger Timm &SvxIMapDlgChildWindow::GetChildWindowId, 23050fefcd83SRüdiger Timm &SvxHlinkDlgWrapper::GetChildWindowId, 2306c767f824SCédric Bosdonnat &SfxInfoBarContainerChild::GetChildWindowId 23070fefcd83SRüdiger Timm }; 23080fefcd83SRüdiger Timm 23090fefcd83SRüdiger Timm void SlideshowImpl::hideChildWindows() 23100fefcd83SRüdiger Timm { 23112e8acde1SNoel Grandin mnChildMask = 0; 23120fefcd83SRüdiger Timm 2313b104e6e9SNoel Grandin if( ANIMATIONMODE_SHOW != meAnimationMode ) 2314b104e6e9SNoel Grandin return; 2315b104e6e9SNoel Grandin 23160fefcd83SRüdiger Timm SfxViewFrame* pViewFrame = getViewFrame(); 23170fefcd83SRüdiger Timm 2318b104e6e9SNoel Grandin if( !pViewFrame ) 2319b104e6e9SNoel Grandin return; 2320b104e6e9SNoel Grandin 23211aa4df61SNoel Grandin for( sal_uLong i = 0; i < SAL_N_ELEMENTS( aShowChildren ); i++ ) 23220fefcd83SRüdiger Timm { 2323dcfd4bebSMichael T. Whiteley const sal_uInt16 nId = ( *aShowChildren[ i ] )(); 23240fefcd83SRüdiger Timm 23250fefcd83SRüdiger Timm if( pViewFrame->GetChildWindow( nId ) ) 23260fefcd83SRüdiger Timm { 23279278df2cSNoel Grandin pViewFrame->SetChildWindow( nId, false ); 2328941f2c86SNoel mnChildMask |= ::tools::ULong(1) << i; 23290fefcd83SRüdiger Timm } 23300fefcd83SRüdiger Timm } 23310fefcd83SRüdiger Timm } 23320fefcd83SRüdiger Timm 23330fefcd83SRüdiger Timm void SlideshowImpl::showChildWindows() 23340fefcd83SRüdiger Timm { 233589e5c418SVladimir Glazounov if( ANIMATIONMODE_SHOW == meAnimationMode ) 23360fefcd83SRüdiger Timm { 23370fefcd83SRüdiger Timm SfxViewFrame* pViewFrame = getViewFrame(); 2338d5a46662SKurt Zenker if( pViewFrame ) 2339d5a46662SKurt Zenker { 23401aa4df61SNoel Grandin for( sal_uLong i = 0; i < SAL_N_ELEMENTS(aShowChildren); i++ ) 23410fefcd83SRüdiger Timm { 2342941f2c86SNoel if( mnChildMask & ( ::tools::ULong(1) << i ) ) 23439278df2cSNoel Grandin pViewFrame->SetChildWindow( ( *aShowChildren[ i ] )(), true ); 23440fefcd83SRüdiger Timm } 23450fefcd83SRüdiger Timm } 23460fefcd83SRüdiger Timm } 2347d5a46662SKurt Zenker } 23480fefcd83SRüdiger Timm 23490fefcd83SRüdiger Timm SfxViewFrame* SlideshowImpl::getViewFrame() const 23500fefcd83SRüdiger Timm { 235192c697c0SStephan Bergmann return mpViewShell ? mpViewShell->GetViewFrame() : nullptr; 2352d5a46662SKurt Zenker } 2353d5a46662SKurt Zenker 2354d5a46662SKurt Zenker SfxDispatcher* SlideshowImpl::getDispatcher() const 2355d5a46662SKurt Zenker { 235692c697c0SStephan Bergmann return (mpViewShell && mpViewShell->GetViewFrame()) ? mpViewShell->GetViewFrame()->GetDispatcher() : nullptr; 2357d5a46662SKurt Zenker } 2358d5a46662SKurt Zenker 2359d5a46662SKurt Zenker SfxBindings* SlideshowImpl::getBindings() const 2360d5a46662SKurt Zenker { 236192c697c0SStephan Bergmann return (mpViewShell && mpViewShell->GetViewFrame()) ? &mpViewShell->GetViewFrame()->GetBindings() : nullptr; 23620fefcd83SRüdiger Timm } 23630fefcd83SRüdiger Timm 23640fefcd83SRüdiger Timm void SlideshowImpl::resize( const Size& rSize ) 23650fefcd83SRüdiger Timm { 23660fefcd83SRüdiger Timm maPresSize = rSize; 23670fefcd83SRüdiger Timm 2368916cbd94SJulien Nabet if(mpShowWindow) 23690fefcd83SRüdiger Timm { 23700fefcd83SRüdiger Timm mpShowWindow->SetSizePixel( maPresSize ); 23710fefcd83SRüdiger Timm mpShowWindow->Show(); 23720fefcd83SRüdiger Timm } 23730fefcd83SRüdiger Timm 2374ddb02dbaSOliver Bolte if( mxView.is() ) try 23750fefcd83SRüdiger Timm { 23760fefcd83SRüdiger Timm awt::WindowEvent aEvt; 23770fefcd83SRüdiger Timm mxView->windowResized(aEvt); 23780fefcd83SRüdiger Timm } 23798cc98837STakeshi Abe catch( Exception& ) 2380ddb02dbaSOliver Bolte { 2381889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::resize()" ); 2382ddb02dbaSOliver Bolte } 23830fefcd83SRüdiger Timm } 23840fefcd83SRüdiger Timm 2385b45a12c3SNoel Grandin void SlideshowImpl::setActiveXToolbarsVisible( bool bVisible ) 238620549ebeSOliver Bolte { 238720549ebeSOliver Bolte // in case of ActiveX control the toolbars should not be visible if slide show runs in window mode 238820549ebeSOliver Bolte // actually it runs always in window mode in case of ActiveX control 2389b104e6e9SNoel Grandin if ( !(!maPresSettings.mbFullScreen && mpDocSh && mpDocSh->GetMedium()) ) 2390b104e6e9SNoel Grandin return; 2391b104e6e9SNoel Grandin 2392adeefc62SJan Holesovsky const SfxBoolItem* pItem = SfxItemSet::GetItem<SfxBoolItem>(mpDocSh->GetMedium()->GetItemSet(), SID_VIEWONLY, false); 2393b104e6e9SNoel Grandin if ( !(pItem && pItem->GetValue()) ) 2394b104e6e9SNoel Grandin return; 2395b104e6e9SNoel Grandin 239620549ebeSOliver Bolte // this is a plugin/activex mode, no toolbars should be visible during slide show 239720549ebeSOliver Bolte // after the end of slide show they should be visible again 239820549ebeSOliver Bolte SfxViewFrame* pViewFrame = getViewFrame(); 2399b104e6e9SNoel Grandin if( !pViewFrame ) 2400b104e6e9SNoel Grandin return; 2401b104e6e9SNoel Grandin 240220549ebeSOliver Bolte try 240320549ebeSOliver Bolte { 240420549ebeSOliver Bolte Reference< frame::XLayoutManager > xLayoutManager; 24052b3de550SNoel Grandin Reference< beans::XPropertySet > xFrameProps( pViewFrame->GetFrame().GetFrameInterface(), UNO_QUERY_THROW ); 240696f9300aSOlivier Hallot if ( ( xFrameProps->getPropertyValue( "LayoutManager" ) 240720549ebeSOliver Bolte >>= xLayoutManager ) 240820549ebeSOliver Bolte && xLayoutManager.is() ) 240920549ebeSOliver Bolte { 241020549ebeSOliver Bolte xLayoutManager->setVisible( bVisible ); 241120549ebeSOliver Bolte } 241220549ebeSOliver Bolte } 241320549ebeSOliver Bolte catch( uno::Exception& ) 241420549ebeSOliver Bolte {} 241520549ebeSOliver Bolte } 241620549ebeSOliver Bolte 2417e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::activate() 24180fefcd83SRüdiger Timm { 2419f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2420808a70e2SKurt Zenker 2421808a70e2SKurt Zenker maDeactivateTimer.Stop(); 2422808a70e2SKurt Zenker 2423e67657d5SNoel Grandin if( mbActive || !mxShow.is() ) 2424b104e6e9SNoel Grandin return; 2425b104e6e9SNoel Grandin 2426b45a12c3SNoel Grandin mbActive = true; 24270fefcd83SRüdiger Timm 24280fefcd83SRüdiger Timm if( ANIMATIONMODE_SHOW == meAnimationMode ) 24290fefcd83SRüdiger Timm { 2430cfb3429dSOliver Bolte if( mbAutoSaveWasOn ) 2431cfb3429dSOliver Bolte setAutoSaveState( false ); 24320fefcd83SRüdiger Timm 24330fefcd83SRüdiger Timm if( mpShowWindow ) 24340fefcd83SRüdiger Timm { 2435d5a46662SKurt Zenker SfxViewFrame* pViewFrame = getViewFrame(); 243692c697c0SStephan Bergmann SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : nullptr; 24370fefcd83SRüdiger Timm 243889e5c418SVladimir Glazounov hideChildWindows(); 24390fefcd83SRüdiger Timm 2440d5a46662SKurt Zenker if( pDispatcher ) 2441d5a46662SKurt Zenker { 244237427486SAndrea Gelmini // filter all forbidden slots 2443470752f5SNoel Grandin pDispatcher->SetSlotFilter( SfxSlotFilterState::ENABLED, pAllowed ); 2444d5a46662SKurt Zenker } 24450fefcd83SRüdiger Timm 2446d5a46662SKurt Zenker if( getBindings() ) 2447c2324940SNoel Grandin getBindings()->InvalidateAll(true); 2448d5a46662SKurt Zenker 24490fefcd83SRüdiger Timm mpShowWindow->GrabFocus(); 24500fefcd83SRüdiger Timm } 24510fefcd83SRüdiger Timm } 24520fefcd83SRüdiger Timm 2453808a70e2SKurt Zenker resume(); 2454808a70e2SKurt Zenker } 24550fefcd83SRüdiger Timm 2456e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::deactivate() 24570fefcd83SRüdiger Timm { 2458f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 24590fefcd83SRüdiger Timm 2460808a70e2SKurt Zenker if( mbActive && mxShow.is() ) 2461808a70e2SKurt Zenker { 2462808a70e2SKurt Zenker maDeactivateTimer.Start(); 2463808a70e2SKurt Zenker } 2464808a70e2SKurt Zenker } 2465808a70e2SKurt Zenker 2466106ea872SStephan Bergmann IMPL_LINK_NOARG(SlideshowImpl, deactivateHdl, Timer *, void) 2467808a70e2SKurt Zenker { 2468b104e6e9SNoel Grandin if( !(mbActive && mxShow.is()) ) 2469b104e6e9SNoel Grandin return; 2470b104e6e9SNoel Grandin 2471b45a12c3SNoel Grandin mbActive = false; 2472808a70e2SKurt Zenker 2473808a70e2SKurt Zenker pause(); 24740fefcd83SRüdiger Timm 24750fefcd83SRüdiger Timm if( ANIMATIONMODE_SHOW == meAnimationMode ) 24760fefcd83SRüdiger Timm { 2477cfb3429dSOliver Bolte if( mbAutoSaveWasOn ) 2478cfb3429dSOliver Bolte setAutoSaveState( true ); 24790fefcd83SRüdiger Timm 24800fefcd83SRüdiger Timm if( mpShowWindow ) 24810fefcd83SRüdiger Timm { 248289e5c418SVladimir Glazounov showChildWindows(); 24830fefcd83SRüdiger Timm } 24840fefcd83SRüdiger Timm } 24850fefcd83SRüdiger Timm } 2486808a70e2SKurt Zenker 2487e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::isActive() 2488808a70e2SKurt Zenker { 2489f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2490808a70e2SKurt Zenker return mbActive; 2491808a70e2SKurt Zenker } 24920fefcd83SRüdiger Timm 2493cfb3429dSOliver Bolte void SlideshowImpl::setAutoSaveState( bool bOn) 2494cfb3429dSOliver Bolte { 2495cfb3429dSOliver Bolte try 2496cfb3429dSOliver Bolte { 24970fcd1a73SNoel Grandin uno::Reference<uno::XComponentContext> xContext( ::comphelper::getProcessComponentContext() ); 2498cfb3429dSOliver Bolte 24990fcd1a73SNoel Grandin uno::Reference< util::XURLTransformer > xParser(util::URLTransformer::create(xContext)); 2500cfb3429dSOliver Bolte util::URL aURL; 250196f9300aSOlivier Hallot aURL.Complete = "vnd.sun.star.autorecovery:/setAutoSaveState"; 2502cfb3429dSOliver Bolte xParser->parseStrict(aURL); 2503cfb3429dSOliver Bolte 2504cfb3429dSOliver Bolte Sequence< beans::PropertyValue > aArgs(1); 250596f9300aSOlivier Hallot aArgs[0].Name = "AutoSaveState"; 2506b36e8678SStephan Bergmann aArgs[0].Value <<= bOn; 2507cfb3429dSOliver Bolte 2508dd1c991bSMatúš Kukan uno::Reference< frame::XDispatch > xAutoSave = frame::theAutoRecovery::get(xContext); 2509cfb3429dSOliver Bolte xAutoSave->dispatch(aURL, aArgs); 2510cfb3429dSOliver Bolte } 2511cfb3429dSOliver Bolte catch( Exception& ) 2512cfb3429dSOliver Bolte { 2513d6d80c4eSNoel TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::setAutoSaveState()"); 2514cfb3429dSOliver Bolte } 2515cfb3429dSOliver Bolte } 2516cfb3429dSOliver Bolte 2517e57ca028SStephan Bergmann Reference< XDrawPage > SAL_CALL SlideshowImpl::getCurrentSlide() 25182db95b18SKurt Zenker { 2519f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2520808a70e2SKurt Zenker 2521808a70e2SKurt Zenker Reference< XDrawPage > xSlide; 2522fe6cce01SStephan Bergmann if( mxShow.is() && mpSlideController ) 2523808a70e2SKurt Zenker { 2524808a70e2SKurt Zenker sal_Int32 nSlide = getCurrentSlideNumber(); 2525808a70e2SKurt Zenker if( (nSlide >= 0) && (nSlide < mpSlideController->getSlideNumberCount() ) ) 2526808a70e2SKurt Zenker xSlide = mpSlideController->getSlideByNumber( nSlide ); 25272db95b18SKurt Zenker } 25282db95b18SKurt Zenker 2529808a70e2SKurt Zenker return xSlide; 2530808a70e2SKurt Zenker } 2531808a70e2SKurt Zenker 2532e57ca028SStephan Bergmann sal_Int32 SAL_CALL SlideshowImpl::getNextSlideIndex() 25332db95b18SKurt Zenker { 2534f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2535808a70e2SKurt Zenker 2536808a70e2SKurt Zenker if( mxShow.is() ) 2537808a70e2SKurt Zenker { 2538808a70e2SKurt Zenker return mpSlideController->getNextSlideIndex(); 2539808a70e2SKurt Zenker } 2540808a70e2SKurt Zenker else 2541808a70e2SKurt Zenker { 2542808a70e2SKurt Zenker return -1; 2543808a70e2SKurt Zenker } 2544808a70e2SKurt Zenker } 2545808a70e2SKurt Zenker 2546e57ca028SStephan Bergmann sal_Int32 SAL_CALL SlideshowImpl::getCurrentSlideIndex() 2547808a70e2SKurt Zenker { 2548fe6cce01SStephan Bergmann return mpSlideController ? mpSlideController->getCurrentSlideIndex() : -1; 2549808a70e2SKurt Zenker } 2550808a70e2SKurt Zenker 2551a2795356SNoel Grandin // css::presentation::XSlideShowController: 25520ce0c369SAlexander Wilms 2553e57ca028SStephan Bergmann ::sal_Int32 SAL_CALL SlideshowImpl::getSlideCount() 2554808a70e2SKurt Zenker { 2555fe6cce01SStephan Bergmann return mpSlideController ? mpSlideController->getSlideIndexCount() : 0; 2556808a70e2SKurt Zenker } 2557808a70e2SKurt Zenker 2558e57ca028SStephan Bergmann Reference< XDrawPage > SAL_CALL SlideshowImpl::getSlideByIndex(::sal_Int32 Index) 2559808a70e2SKurt Zenker { 2560ccb2a1f6SNoel Grandin if ((mpSlideController == nullptr) || (Index < 0) 2561ccb2a1f6SNoel Grandin || (Index >= mpSlideController->getSlideIndexCount())) 2562808a70e2SKurt Zenker throw IndexOutOfBoundsException(); 2563808a70e2SKurt Zenker 2564808a70e2SKurt Zenker return mpSlideController->getSlideByNumber( mpSlideController->getSlideNumber( Index ) ); 2565808a70e2SKurt Zenker } 2566808a70e2SKurt Zenker 2567e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::getAlwaysOnTop() 2568808a70e2SKurt Zenker { 2569f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2570808a70e2SKurt Zenker return maPresSettings.mbAlwaysOnTop; 2571808a70e2SKurt Zenker } 2572808a70e2SKurt Zenker 2573e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::setAlwaysOnTop( sal_Bool bAlways ) 2574808a70e2SKurt Zenker { 2575f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2576e19cd844SStephan Bergmann if( maPresSettings.mbAlwaysOnTop != bool(bAlways) ) 2577808a70e2SKurt Zenker { 2578808a70e2SKurt Zenker maPresSettings.mbAlwaysOnTop = bAlways; 2579808a70e2SKurt Zenker // todo, can this be changed while running? 2580808a70e2SKurt Zenker } 2581808a70e2SKurt Zenker } 2582808a70e2SKurt Zenker 2583e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::isFullScreen() 2584808a70e2SKurt Zenker { 2585f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2586808a70e2SKurt Zenker return maPresSettings.mbFullScreen; 2587808a70e2SKurt Zenker } 2588808a70e2SKurt Zenker 2589e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::getMouseVisible() 2590808a70e2SKurt Zenker { 2591f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2592808a70e2SKurt Zenker return maPresSettings.mbMouseVisible; 2593808a70e2SKurt Zenker } 2594808a70e2SKurt Zenker 2595e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::setMouseVisible( sal_Bool bVisible ) 2596808a70e2SKurt Zenker { 2597f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2598e19cd844SStephan Bergmann if( maPresSettings.mbMouseVisible != bool(bVisible) ) 2599808a70e2SKurt Zenker { 2600808a70e2SKurt Zenker maPresSettings.mbMouseVisible = bVisible; 2601808a70e2SKurt Zenker if( mpShowWindow ) 2602808a70e2SKurt Zenker mpShowWindow->SetMouseAutoHide( !maPresSettings.mbMouseVisible ); 2603808a70e2SKurt Zenker } 2604808a70e2SKurt Zenker } 2605808a70e2SKurt Zenker 2606e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::getUsePen() 2607808a70e2SKurt Zenker { 2608f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 260903a5e096SChristian Lippka return mbUsePen; 2610808a70e2SKurt Zenker } 2611808a70e2SKurt Zenker 2612e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::setUsePen( sal_Bool bMouseAsPen ) 2613808a70e2SKurt Zenker { 2614f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 261503a5e096SChristian Lippka mbUsePen = bMouseAsPen; 2616b104e6e9SNoel Grandin if( !mxShow.is() ) 2617b104e6e9SNoel Grandin return; 2618b104e6e9SNoel Grandin 2619b104e6e9SNoel Grandin try 2620808a70e2SKurt Zenker { 2621af5c661bSericb // For Pencolor; 2622808a70e2SKurt Zenker Any aValue; 262303a5e096SChristian Lippka if( mbUsePen ) 2624808a70e2SKurt Zenker aValue <<= mnUserPaintColor; 2625808a70e2SKurt Zenker beans::PropertyValue aPenProp; 262696f9300aSOlivier Hallot aPenProp.Name = "UserPaintColor"; 2627808a70e2SKurt Zenker aPenProp.Value = aValue; 2628808a70e2SKurt Zenker mxShow->setProperty( aPenProp ); 262944d83b68Sthb 263003a5e096SChristian Lippka //for StrokeWidth : 263103a5e096SChristian Lippka if( mbUsePen ) 263203a5e096SChristian Lippka { 263344d83b68Sthb beans::PropertyValue aPenPropWidth; 263496f9300aSOlivier Hallot aPenPropWidth.Name = "UserPaintStrokeWidth"; 263503a5e096SChristian Lippka aPenPropWidth.Value <<= mdUserPaintStrokeWidth; 263644d83b68Sthb mxShow->setProperty( aPenPropWidth ); 263744d83b68Sthb 2638af5c661bSericb // for Pen Mode 2639af5c661bSericb beans::PropertyValue aPenPropSwitchPenMode; 264096f9300aSOlivier Hallot aPenPropSwitchPenMode.Name = "SwitchPenMode"; 26410003e99bSStephan Bergmann aPenPropSwitchPenMode.Value <<= true; 2642af5c661bSericb mxShow->setProperty( aPenPropSwitchPenMode ); 264303a5e096SChristian Lippka } 2644808a70e2SKurt Zenker } 26458cc98837STakeshi Abe catch( Exception& ) 2646808a70e2SKurt Zenker { 2647889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::setUsePen()" ); 2648808a70e2SKurt Zenker } 2649808a70e2SKurt Zenker } 2650808a70e2SKurt Zenker 2651e57ca028SStephan Bergmann double SAL_CALL SlideshowImpl::getPenWidth() 265244d83b68Sthb { 2653f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 265444d83b68Sthb return mdUserPaintStrokeWidth; 265544d83b68Sthb } 265644d83b68Sthb 2657e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::setPenWidth( double dStrokeWidth ) 265844d83b68Sthb { 2659f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 266044d83b68Sthb mdUserPaintStrokeWidth = dStrokeWidth; 266103a5e096SChristian Lippka setUsePen( true ); // enable pen mode, update color and width 266244d83b68Sthb } 2663ef238fc5SChristian Lippka ORACLE 2664e57ca028SStephan Bergmann sal_Int32 SAL_CALL SlideshowImpl::getPenColor() 2665808a70e2SKurt Zenker { 2666f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2667808a70e2SKurt Zenker return mnUserPaintColor; 2668808a70e2SKurt Zenker } 2669808a70e2SKurt Zenker 2670e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::setPenColor( sal_Int32 nColor ) 2671808a70e2SKurt Zenker { 2672f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2673808a70e2SKurt Zenker mnUserPaintColor = nColor; 267403a5e096SChristian Lippka setUsePen( true ); // enable pen mode, update color 2675808a70e2SKurt Zenker } 2676808a70e2SKurt Zenker 26775544c178SGabor Kelemen void SAL_CALL SlideshowImpl::setEraseAllInk(sal_Bool bEraseAllInk) 267844d83b68Sthb { 2679b104e6e9SNoel Grandin if( !bEraseAllInk ) 2680b104e6e9SNoel Grandin return; 2681b104e6e9SNoel Grandin 2682f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2683b104e6e9SNoel Grandin if( !mxShow.is() ) 2684b104e6e9SNoel Grandin return; 2685b104e6e9SNoel Grandin 2686b104e6e9SNoel Grandin try 268703a5e096SChristian Lippka { 268803a5e096SChristian Lippka beans::PropertyValue aPenPropEraseAllInk; 268996f9300aSOlivier Hallot aPenPropEraseAllInk.Name = "EraseAllInk"; 269003a5e096SChristian Lippka aPenPropEraseAllInk.Value <<= bEraseAllInk; 269103a5e096SChristian Lippka mxShow->setProperty( aPenPropEraseAllInk ); 269244d83b68Sthb } 26938cc98837STakeshi Abe catch( Exception& ) 269403a5e096SChristian Lippka { 2695889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd.slideshow", "sd::SlideshowImpl::setEraseAllInk()" ); 269603a5e096SChristian Lippka } 269703a5e096SChristian Lippka } 269803a5e096SChristian Lippka 2699808a70e2SKurt Zenker // XSlideShowController Methods 2700e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::isRunning( ) 2701808a70e2SKurt Zenker { 2702f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2703808a70e2SKurt Zenker return mxShow.is(); 2704808a70e2SKurt Zenker } 2705808a70e2SKurt Zenker 2706e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoNextEffect( ) 2707808a70e2SKurt Zenker { 2708f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2709808a70e2SKurt Zenker 2710fe6cce01SStephan Bergmann if( !(mxShow.is() && mpSlideController && mpShowWindow) ) 2711b104e6e9SNoel Grandin return; 2712b104e6e9SNoel Grandin 2713808a70e2SKurt Zenker if( mbIsPaused ) 2714808a70e2SKurt Zenker resume(); 2715808a70e2SKurt Zenker 2716808a70e2SKurt Zenker const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 2717808a70e2SKurt Zenker if( eMode == SHOWWINDOWMODE_END ) 2718808a70e2SKurt Zenker { 2719808a70e2SKurt Zenker endPresentation(); 2720808a70e2SKurt Zenker } 2721808a70e2SKurt Zenker else if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 2722808a70e2SKurt Zenker { 2723808a70e2SKurt Zenker mpShowWindow->RestartShow(); 2724808a70e2SKurt Zenker } 2725808a70e2SKurt Zenker else 2726808a70e2SKurt Zenker { 2727808a70e2SKurt Zenker mxShow->nextEffect(); 2728808a70e2SKurt Zenker update(); 2729808a70e2SKurt Zenker } 2730808a70e2SKurt Zenker } 2731808a70e2SKurt Zenker 2732e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoPreviousEffect( ) 273376c3d136SAndre Fischer { 2734f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 273576c3d136SAndre Fischer 2736fe6cce01SStephan Bergmann if( !(mxShow.is() && mpSlideController && mpShowWindow) ) 2737b104e6e9SNoel Grandin return; 2738b104e6e9SNoel Grandin 273976c3d136SAndre Fischer if( mbIsPaused ) 274076c3d136SAndre Fischer resume(); 274176c3d136SAndre Fischer 274276c3d136SAndre Fischer const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 274376c3d136SAndre Fischer if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 274476c3d136SAndre Fischer { 274576c3d136SAndre Fischer mpShowWindow->RestartShow(); 274676c3d136SAndre Fischer } 274776c3d136SAndre Fischer else 274876c3d136SAndre Fischer { 274976c3d136SAndre Fischer mxShow->previousEffect(); 275076c3d136SAndre Fischer update(); 275176c3d136SAndre Fischer } 275276c3d136SAndre Fischer } 275376c3d136SAndre Fischer 2754e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoFirstSlide( ) 2755808a70e2SKurt Zenker { 2756f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2757808a70e2SKurt Zenker 2758fe6cce01SStephan Bergmann if( !(mpShowWindow && mpSlideController) ) 2759b104e6e9SNoel Grandin return; 2760b104e6e9SNoel Grandin 2761808a70e2SKurt Zenker if( mbIsPaused ) 2762808a70e2SKurt Zenker resume(); 2763808a70e2SKurt Zenker 2764808a70e2SKurt Zenker if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_END ) 2765808a70e2SKurt Zenker { 2766808a70e2SKurt Zenker if( mpSlideController->getSlideIndexCount() ) 2767808a70e2SKurt Zenker mpShowWindow->RestartShow( 0); 2768808a70e2SKurt Zenker } 2769808a70e2SKurt Zenker else 2770808a70e2SKurt Zenker { 2771808a70e2SKurt Zenker displaySlideIndex( 0 ); 2772808a70e2SKurt Zenker } 2773808a70e2SKurt Zenker } 2774808a70e2SKurt Zenker 2775e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoNextSlide( ) 2776808a70e2SKurt Zenker { 2777f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2778808a70e2SKurt Zenker 2779808a70e2SKurt Zenker if( mbIsPaused ) 2780808a70e2SKurt Zenker resume(); 2781808a70e2SKurt Zenker 2782808a70e2SKurt Zenker const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 2783808a70e2SKurt Zenker if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 2784808a70e2SKurt Zenker { 2785808a70e2SKurt Zenker mpShowWindow->RestartShow(); 2786808a70e2SKurt Zenker } 2787808a70e2SKurt Zenker else 2788808a70e2SKurt Zenker { 2789808a70e2SKurt Zenker // if this is a show, ignore user inputs and 2790d35d893cSJulien Nabet // start 20ms timer to reenable inputs to filter 2791808a70e2SKurt Zenker // buffered inputs during slide transition 2792808a70e2SKurt Zenker if( meAnimationMode == ANIMATIONMODE_SHOW ) 2793808a70e2SKurt Zenker { 2794808a70e2SKurt Zenker mbInputFreeze = true; 2795808a70e2SKurt Zenker maInputFreezeTimer.Start(); 2796808a70e2SKurt Zenker } 2797808a70e2SKurt Zenker 2798fe6cce01SStephan Bergmann if( mpSlideController ) 2799808a70e2SKurt Zenker { 2800808a70e2SKurt Zenker if( mpSlideController->nextSlide() ) 2801808a70e2SKurt Zenker { 2802808a70e2SKurt Zenker displayCurrentSlide(); 2803808a70e2SKurt Zenker } 2804808a70e2SKurt Zenker else 2805808a70e2SKurt Zenker { 2806808a70e2SKurt Zenker stopSound(); 2807808a70e2SKurt Zenker 2808808a70e2SKurt Zenker if( meAnimationMode == ANIMATIONMODE_PREVIEW ) 2809808a70e2SKurt Zenker { 2810808a70e2SKurt Zenker endPresentation(); 2811808a70e2SKurt Zenker } 2812808a70e2SKurt Zenker else if( maPresSettings.mbEndless ) 2813808a70e2SKurt Zenker { 2814808a70e2SKurt Zenker if( maPresSettings.mnPauseTimeout ) 2815808a70e2SKurt Zenker { 2816808a70e2SKurt Zenker if( mpShowWindow ) 2817c8428842SChristian Lippka { 28184d362d23SAriel Constenla-Haile if ( maPresSettings.mbShowPauseLogo ) 28194d362d23SAriel Constenla-Haile { 2820918f8ed9SCaolán McNamara Graphic aGraphic(SfxApplication::GetApplicationLogo(360)); 2821f946e905SNoel Grandin mpShowWindow->SetPauseMode( maPresSettings.mnPauseTimeout, &aGraphic ); 2822c8428842SChristian Lippka } 28234d362d23SAriel Constenla-Haile else 2824f946e905SNoel Grandin mpShowWindow->SetPauseMode( maPresSettings.mnPauseTimeout ); 28254d362d23SAriel Constenla-Haile } 2826808a70e2SKurt Zenker } 2827808a70e2SKurt Zenker else 2828808a70e2SKurt Zenker { 2829808a70e2SKurt Zenker displaySlideIndex( 0 ); 2830808a70e2SKurt Zenker } 2831808a70e2SKurt Zenker } 2832808a70e2SKurt Zenker else 2833808a70e2SKurt Zenker { 2834808a70e2SKurt Zenker if( mpShowWindow ) 2835808a70e2SKurt Zenker { 2836808a70e2SKurt Zenker mpShowWindow->SetEndMode(); 28376fdcfcc1SKatarina Machalkova if( !mpViewShell->GetDoc()->IsStartWithPresentation() ) 2838808a70e2SKurt Zenker pause(); 2839808a70e2SKurt Zenker } 2840808a70e2SKurt Zenker } 2841808a70e2SKurt Zenker } 2842808a70e2SKurt Zenker } 2843808a70e2SKurt Zenker } 2844808a70e2SKurt Zenker } 2845808a70e2SKurt Zenker 2846e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoPreviousSlide( ) 2847808a70e2SKurt Zenker { 284876c3d136SAndre Fischer gotoPreviousSlide(false); 284976c3d136SAndre Fischer } 285076c3d136SAndre Fischer 285176c3d136SAndre Fischer void SlideshowImpl::gotoPreviousSlide (const bool bSkipAllMainSequenceEffects) 285276c3d136SAndre Fischer { 2853f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2854808a70e2SKurt Zenker 2855fe6cce01SStephan Bergmann if( !(mxShow.is() && mpSlideController) ) 2856b104e6e9SNoel Grandin return; 2857b104e6e9SNoel Grandin 2858b104e6e9SNoel Grandin try 2859808a70e2SKurt Zenker { 2860808a70e2SKurt Zenker if( mbIsPaused ) 2861808a70e2SKurt Zenker resume(); 2862808a70e2SKurt Zenker 2863808a70e2SKurt Zenker const ShowWindowMode eMode = mpShowWindow->GetShowWindowMode(); 2864808a70e2SKurt Zenker if( eMode == SHOWWINDOWMODE_END ) 2865808a70e2SKurt Zenker { 2866f804c72aSRob Snelders mpShowWindow->RestartShow( mpSlideController->getCurrentSlideIndex() ); 2867808a70e2SKurt Zenker } 2868808a70e2SKurt Zenker else if( (eMode == SHOWWINDOWMODE_PAUSE) || (eMode == SHOWWINDOWMODE_BLANK) ) 2869808a70e2SKurt Zenker { 2870808a70e2SKurt Zenker mpShowWindow->RestartShow(); 2871808a70e2SKurt Zenker } 2872808a70e2SKurt Zenker else 2873808a70e2SKurt Zenker { 2874808a70e2SKurt Zenker if( mpSlideController->previousSlide()) 287576c3d136SAndre Fischer displayCurrentSlide(bSkipAllMainSequenceEffects); 287676c3d136SAndre Fischer else if (bSkipAllMainSequenceEffects) 287776c3d136SAndre Fischer { 287876c3d136SAndre Fischer // We could not go to the previous slide (probably because 287976c3d136SAndre Fischer // the current slide is already the first one). We still 288076c3d136SAndre Fischer // have to call displayCurrentSlide because the calling 288176c3d136SAndre Fischer // slideshow can not determine whether there is a previous 288276c3d136SAndre Fischer // slide or not and has already prepared for a slide change. 288376c3d136SAndre Fischer // This slide change has to be completed now, even when 288476c3d136SAndre Fischer // changing to the same slide. 288576c3d136SAndre Fischer // Note that in this special case we do NOT pass 288676c3d136SAndre Fischer // bSkipAllMainSequenceEffects because we display the same 288776c3d136SAndre Fischer // slide as before and do not want to show all its effects. 288818793ae6SNoel Grandin displayCurrentSlide(); 288976c3d136SAndre Fischer } 2890808a70e2SKurt Zenker } 2891808a70e2SKurt Zenker } 28928cc98837STakeshi Abe catch( Exception& ) 2893808a70e2SKurt Zenker { 2894889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::gotoPreviousSlide()" ); 2895808a70e2SKurt Zenker } 2896808a70e2SKurt Zenker } 2897808a70e2SKurt Zenker 2898e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoLastSlide() 2899808a70e2SKurt Zenker { 2900f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2901808a70e2SKurt Zenker 2902fe6cce01SStephan Bergmann if( !mpSlideController ) 2903b104e6e9SNoel Grandin return; 2904b104e6e9SNoel Grandin 2905808a70e2SKurt Zenker if( mbIsPaused ) 2906808a70e2SKurt Zenker resume(); 2907808a70e2SKurt Zenker 2908808a70e2SKurt Zenker const sal_Int32 nLastSlideIndex = mpSlideController->getSlideIndexCount() - 1; 2909808a70e2SKurt Zenker if( nLastSlideIndex >= 0 ) 2910808a70e2SKurt Zenker { 2911808a70e2SKurt Zenker if( mpShowWindow->GetShowWindowMode() == SHOWWINDOWMODE_END ) 2912808a70e2SKurt Zenker { 2913808a70e2SKurt Zenker mpShowWindow->RestartShow( nLastSlideIndex ); 2914808a70e2SKurt Zenker } 2915808a70e2SKurt Zenker else 2916808a70e2SKurt Zenker { 2917808a70e2SKurt Zenker displaySlideIndex( nLastSlideIndex ); 2918808a70e2SKurt Zenker } 2919808a70e2SKurt Zenker } 2920808a70e2SKurt Zenker } 2921808a70e2SKurt Zenker 2922e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoBookmark( const OUString& rBookmark ) 2923808a70e2SKurt Zenker { 2924f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2925808a70e2SKurt Zenker 2926808a70e2SKurt Zenker if( mbIsPaused ) 2927808a70e2SKurt Zenker resume(); 2928808a70e2SKurt Zenker 2929808a70e2SKurt Zenker sal_Int32 nSlideNumber = getSlideNumberForBookmark( rBookmark ); 2930808a70e2SKurt Zenker if( nSlideNumber != -1 ) 2931808a70e2SKurt Zenker displaySlideNumber( nSlideNumber ); 2932808a70e2SKurt Zenker } 2933808a70e2SKurt Zenker 2934808a70e2SKurt Zenker void SAL_CALL SlideshowImpl::gotoSlide( const Reference< XDrawPage >& xSlide ) 2935808a70e2SKurt Zenker { 2936f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2937808a70e2SKurt Zenker 2938fe6cce01SStephan Bergmann if( !(mpSlideController && xSlide.is()) ) 2939b104e6e9SNoel Grandin return; 2940b104e6e9SNoel Grandin 2941808a70e2SKurt Zenker if( mbIsPaused ) 2942808a70e2SKurt Zenker resume(); 2943808a70e2SKurt Zenker 2944808a70e2SKurt Zenker const sal_Int32 nSlideCount = mpSlideController->getSlideNumberCount(); 2945808a70e2SKurt Zenker for( sal_Int32 nSlide = 0; nSlide < nSlideCount; nSlide++ ) 2946808a70e2SKurt Zenker { 2947808a70e2SKurt Zenker if( mpSlideController->getSlideByNumber( nSlide ) == xSlide ) 2948808a70e2SKurt Zenker { 2949808a70e2SKurt Zenker displaySlideNumber( nSlide ); 2950808a70e2SKurt Zenker } 2951808a70e2SKurt Zenker } 2952808a70e2SKurt Zenker } 2953808a70e2SKurt Zenker 2954e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::gotoSlideIndex( sal_Int32 nIndex ) 2955808a70e2SKurt Zenker { 2956f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2957808a70e2SKurt Zenker 2958808a70e2SKurt Zenker if( mbIsPaused ) 2959808a70e2SKurt Zenker resume(); 2960808a70e2SKurt Zenker 2961808a70e2SKurt Zenker displaySlideIndex( nIndex ); 2962808a70e2SKurt Zenker } 2963808a70e2SKurt Zenker 2964e57ca028SStephan Bergmann void SAL_CALL SlideshowImpl::stopSound( ) 2965808a70e2SKurt Zenker { 2966f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 2967808a70e2SKurt Zenker 2968808a70e2SKurt Zenker try 2969808a70e2SKurt Zenker { 2970808a70e2SKurt Zenker if( mxPlayer.is() ) 2971808a70e2SKurt Zenker { 2972808a70e2SKurt Zenker mxPlayer->stop(); 2973808a70e2SKurt Zenker mxPlayer.clear(); 2974808a70e2SKurt Zenker } 2975808a70e2SKurt Zenker } 29768cc98837STakeshi Abe catch( Exception& ) 2977808a70e2SKurt Zenker { 2978889dc7bfSNoel Grandin TOOLS_WARN_EXCEPTION( "sd", "sd::SlideshowImpl::stopSound()" ); 2979808a70e2SKurt Zenker } 2980808a70e2SKurt Zenker } 2981808a70e2SKurt Zenker 2982808a70e2SKurt Zenker // XIndexAccess 29830ce0c369SAlexander Wilms 2984e57ca028SStephan Bergmann ::sal_Int32 SAL_CALL SlideshowImpl::getCount( ) 2985808a70e2SKurt Zenker { 2986808a70e2SKurt Zenker return getSlideCount(); 2987808a70e2SKurt Zenker } 2988808a70e2SKurt Zenker 2989e57ca028SStephan Bergmann css::uno::Any SAL_CALL SlideshowImpl::getByIndex( ::sal_Int32 Index ) 2990808a70e2SKurt Zenker { 2991808a70e2SKurt Zenker return Any( getSlideByIndex( Index ) ); 2992808a70e2SKurt Zenker } 2993808a70e2SKurt Zenker 2994e57ca028SStephan Bergmann css::uno::Type SAL_CALL SlideshowImpl::getElementType( ) 2995808a70e2SKurt Zenker { 299683e191e2SStephan Bergmann return cppu::UnoType<XDrawPage>::get(); 2997808a70e2SKurt Zenker } 2998808a70e2SKurt Zenker 2999e57ca028SStephan Bergmann sal_Bool SAL_CALL SlideshowImpl::hasElements( ) 3000808a70e2SKurt Zenker { 3001808a70e2SKurt Zenker return getSlideCount() != 0; 3002808a70e2SKurt Zenker } 3003808a70e2SKurt Zenker 3004e57ca028SStephan Bergmann Reference< XSlideShow > SAL_CALL SlideshowImpl::getSlideShow() 3005808a70e2SKurt Zenker { 3006808a70e2SKurt Zenker return mxShow; 3007808a70e2SKurt Zenker } 3008808a70e2SKurt Zenker 300958dd8501SChristian Lippka PresentationSettingsEx::PresentationSettingsEx( const PresentationSettingsEx& r ) 3010808a70e2SKurt Zenker : PresentationSettings( r ) 3011808a70e2SKurt Zenker , mbRehearseTimings(r.mbRehearseTimings) 3012808a70e2SKurt Zenker , mbPreview(r.mbPreview) 301392c697c0SStephan Bergmann , mpParentWindow( nullptr ) 3014808a70e2SKurt Zenker { 3015808a70e2SKurt Zenker } 3016808a70e2SKurt Zenker 3017dafae0feSNoel Grandin PresentationSettingsEx::PresentationSettingsEx( PresentationSettings const & r ) 3018808a70e2SKurt Zenker : PresentationSettings( r ) 3019b45a12c3SNoel Grandin , mbRehearseTimings(false) 3020b45a12c3SNoel Grandin , mbPreview(false) 302192c697c0SStephan Bergmann , mpParentWindow(nullptr) 3022808a70e2SKurt Zenker { 3023808a70e2SKurt Zenker } 3024808a70e2SKurt Zenker 3025e57ca028SStephan Bergmann void PresentationSettingsEx::SetArguments( const Sequence< PropertyValue >& rArguments ) 3026808a70e2SKurt Zenker { 3027d458adeeSArkadiy Illarionov for( const PropertyValue& rValue : rArguments ) 3028808a70e2SKurt Zenker { 3029d458adeeSArkadiy Illarionov SetPropertyValue( rValue.Name, rValue.Value ); 3030808a70e2SKurt Zenker } 3031808a70e2SKurt Zenker } 3032808a70e2SKurt Zenker 30338332d6d8SNoel void PresentationSettingsEx::SetPropertyValue( std::u16string_view rProperty, const Any& rValue ) 3034808a70e2SKurt Zenker { 30358332d6d8SNoel if ( rProperty == u"RehearseTimings" ) 3036808a70e2SKurt Zenker { 3037808a70e2SKurt Zenker if( rValue >>= mbRehearseTimings ) 3038808a70e2SKurt Zenker return; 3039808a70e2SKurt Zenker } 30408332d6d8SNoel else if ( rProperty == u"Preview" ) 3041808a70e2SKurt Zenker { 3042808a70e2SKurt Zenker if( rValue >>= mbPreview ) 3043808a70e2SKurt Zenker return; 3044808a70e2SKurt Zenker } 30458332d6d8SNoel else if ( rProperty == u"AnimationNode" ) 3046808a70e2SKurt Zenker { 3047808a70e2SKurt Zenker if( rValue >>= mxAnimationNode ) 3048808a70e2SKurt Zenker return; 3049808a70e2SKurt Zenker } 30508332d6d8SNoel else if ( rProperty == u"ParentWindow" ) 3051808a70e2SKurt Zenker { 3052808a70e2SKurt Zenker Reference< XWindow > xWindow; 3053808a70e2SKurt Zenker if( rValue >>= xWindow ) 3054808a70e2SKurt Zenker { 3055ad194534SMichael Meeks mpParentWindow = xWindow.is() ? VCLUnoHelper::GetWindow( xWindow ) 30561aa31294SNoel Grandin : nullptr; 3057808a70e2SKurt Zenker return; 3058808a70e2SKurt Zenker } 3059808a70e2SKurt Zenker } 30608332d6d8SNoel else if ( rProperty == u"AllowAnimations" ) 3061808a70e2SKurt Zenker { 3062808a70e2SKurt Zenker if( rValue >>= mbAnimationAllowed ) 3063808a70e2SKurt Zenker return; 3064808a70e2SKurt Zenker } 30658332d6d8SNoel else if ( rProperty == u"FirstPage" ) 3066808a70e2SKurt Zenker { 3067808a70e2SKurt Zenker OUString aPresPage; 3068808a70e2SKurt Zenker if( rValue >>= aPresPage ) 3069808a70e2SKurt Zenker { 3070808a70e2SKurt Zenker maPresPage = getUiNameFromPageApiNameImpl(aPresPage); 3071b45a12c3SNoel Grandin mbCustomShow = false; 3072b45a12c3SNoel Grandin mbAll = false; 3073808a70e2SKurt Zenker return; 3074808a70e2SKurt Zenker } 3075808a70e2SKurt Zenker else 3076808a70e2SKurt Zenker { 3077808a70e2SKurt Zenker if( rValue >>= mxStartPage ) 3078808a70e2SKurt Zenker return; 3079808a70e2SKurt Zenker } 3080808a70e2SKurt Zenker } 30818332d6d8SNoel else if ( rProperty == u"IsAlwaysOnTop" ) 3082808a70e2SKurt Zenker { 3083808a70e2SKurt Zenker if( rValue >>= mbAlwaysOnTop ) 3084808a70e2SKurt Zenker return; 3085808a70e2SKurt Zenker } 30868332d6d8SNoel else if ( rProperty == u"IsAutomatic" ) 3087808a70e2SKurt Zenker { 3088808a70e2SKurt Zenker if( rValue >>= mbManual ) 3089808a70e2SKurt Zenker return; 3090808a70e2SKurt Zenker } 30918332d6d8SNoel else if ( rProperty == u"IsEndless" ) 3092808a70e2SKurt Zenker { 3093808a70e2SKurt Zenker if( rValue >>= mbEndless ) 3094808a70e2SKurt Zenker return; 3095808a70e2SKurt Zenker } 30968332d6d8SNoel else if ( rProperty == u"IsFullScreen" ) 3097808a70e2SKurt Zenker { 3098808a70e2SKurt Zenker if( rValue >>= mbFullScreen ) 3099808a70e2SKurt Zenker return; 3100808a70e2SKurt Zenker } 31018332d6d8SNoel else if ( rProperty == u"IsMouseVisible" ) 3102808a70e2SKurt Zenker { 3103808a70e2SKurt Zenker if( rValue >>= mbMouseVisible ) 3104808a70e2SKurt Zenker return; 3105808a70e2SKurt Zenker } 31068332d6d8SNoel else if ( rProperty == u"Pause" ) 3107808a70e2SKurt Zenker { 3108808a70e2SKurt Zenker sal_Int32 nPause = -1; 3109808a70e2SKurt Zenker if( (rValue >>= nPause) && (nPause >= 0) ) 3110808a70e2SKurt Zenker { 3111808a70e2SKurt Zenker mnPauseTimeout = nPause; 3112808a70e2SKurt Zenker return; 3113808a70e2SKurt Zenker } 3114808a70e2SKurt Zenker } 31158332d6d8SNoel else if ( rProperty == u"UsePen" ) 3116808a70e2SKurt Zenker { 3117808a70e2SKurt Zenker if( rValue >>= mbMouseAsPen ) 3118808a70e2SKurt Zenker return; 3119808a70e2SKurt Zenker } 3120808a70e2SKurt Zenker throw IllegalArgumentException(); 3121808a70e2SKurt Zenker } 3122808a70e2SKurt Zenker 3123808a70e2SKurt Zenker // XAnimationListener 31240ce0c369SAlexander Wilms 3125808a70e2SKurt Zenker SlideShowListenerProxy::SlideShowListenerProxy( const rtl::Reference< SlideshowImpl >& xController, const css::uno::Reference< css::presentation::XSlideShow >& xSlideShow ) 3126808a70e2SKurt Zenker : maListeners( m_aMutex ) 3127808a70e2SKurt Zenker , mxController( xController ) 3128808a70e2SKurt Zenker , mxSlideShow( xSlideShow ) 3129808a70e2SKurt Zenker { 3130808a70e2SKurt Zenker } 3131808a70e2SKurt Zenker 3132808a70e2SKurt Zenker SlideShowListenerProxy::~SlideShowListenerProxy() 3133808a70e2SKurt Zenker { 3134808a70e2SKurt Zenker } 3135808a70e2SKurt Zenker 3136808a70e2SKurt Zenker void SlideShowListenerProxy::addAsSlideShowListener() 3137808a70e2SKurt Zenker { 3138808a70e2SKurt Zenker if( mxSlideShow.is() ) 3139808a70e2SKurt Zenker { 3140808a70e2SKurt Zenker Reference< XSlideShowListener > xSlideShowListener( this ); 3141808a70e2SKurt Zenker mxSlideShow->addSlideShowListener( xSlideShowListener ); 3142808a70e2SKurt Zenker } 3143808a70e2SKurt Zenker } 3144808a70e2SKurt Zenker 3145808a70e2SKurt Zenker void SlideShowListenerProxy::removeAsSlideShowListener() 3146808a70e2SKurt Zenker { 3147808a70e2SKurt Zenker if( mxSlideShow.is() ) 3148808a70e2SKurt Zenker { 3149808a70e2SKurt Zenker Reference< XSlideShowListener > xSlideShowListener( this ); 3150808a70e2SKurt Zenker mxSlideShow->removeSlideShowListener( xSlideShowListener ); 3151808a70e2SKurt Zenker } 3152808a70e2SKurt Zenker } 3153808a70e2SKurt Zenker 3154808a70e2SKurt Zenker void SlideShowListenerProxy::addShapeEventListener( const css::uno::Reference< css::drawing::XShape >& xShape ) 3155808a70e2SKurt Zenker { 3156808a70e2SKurt Zenker if( mxSlideShow.is() ) 3157808a70e2SKurt Zenker { 3158808a70e2SKurt Zenker Reference< XShapeEventListener > xListener( this ); 3159808a70e2SKurt Zenker mxSlideShow->addShapeEventListener( xListener, xShape ); 3160808a70e2SKurt Zenker } 3161808a70e2SKurt Zenker } 3162808a70e2SKurt Zenker 3163808a70e2SKurt Zenker void SlideShowListenerProxy::removeShapeEventListener( const css::uno::Reference< css::drawing::XShape >& xShape ) 3164808a70e2SKurt Zenker { 3165808a70e2SKurt Zenker if( mxSlideShow.is() ) 3166808a70e2SKurt Zenker { 3167808a70e2SKurt Zenker Reference< XShapeEventListener > xListener( this ); 3168808a70e2SKurt Zenker mxSlideShow->removeShapeEventListener( xListener, xShape ); 3169808a70e2SKurt Zenker } 3170808a70e2SKurt Zenker } 3171808a70e2SKurt Zenker 3172808a70e2SKurt Zenker void SlideShowListenerProxy::addSlideShowListener( const css::uno::Reference< css::presentation::XSlideShowListener >& xListener ) 3173808a70e2SKurt Zenker { 3174808a70e2SKurt Zenker maListeners.addInterface(xListener); 3175808a70e2SKurt Zenker } 3176808a70e2SKurt Zenker 3177808a70e2SKurt Zenker void SlideShowListenerProxy::removeSlideShowListener( const css::uno::Reference< css::presentation::XSlideShowListener >& xListener ) 3178808a70e2SKurt Zenker { 3179808a70e2SKurt Zenker maListeners.removeInterface(xListener); 3180808a70e2SKurt Zenker } 3181808a70e2SKurt Zenker 3182e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::beginEvent( const Reference< XAnimationNode >& xNode ) 3183808a70e2SKurt Zenker { 3184808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3185808a70e2SKurt Zenker 3186808a70e2SKurt Zenker if( maListeners.getLength() >= 0 ) 3187521c5602SMichael Stahl { 3188521c5602SMichael Stahl maListeners.forEach<XSlideShowListener>( 3189521c5602SMichael Stahl [&] (Reference<XAnimationListener> const& xListener) { 3190521c5602SMichael Stahl return xListener->beginEvent(xNode); 3191521c5602SMichael Stahl } ); 3192521c5602SMichael Stahl } 3193808a70e2SKurt Zenker } 3194808a70e2SKurt Zenker 3195e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::endEvent( const Reference< XAnimationNode >& xNode ) 3196808a70e2SKurt Zenker { 3197808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3198808a70e2SKurt Zenker 3199808a70e2SKurt Zenker if( maListeners.getLength() >= 0 ) 3200521c5602SMichael Stahl { 3201521c5602SMichael Stahl maListeners.forEach<XSlideShowListener>( 3202521c5602SMichael Stahl [&] (Reference<XAnimationListener> const& xListener) { 3203521c5602SMichael Stahl return xListener->endEvent(xNode); 3204521c5602SMichael Stahl } ); 3205521c5602SMichael Stahl } 3206808a70e2SKurt Zenker } 3207808a70e2SKurt Zenker 3208e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::repeat( const Reference< XAnimationNode >& xNode, ::sal_Int32 nRepeat ) 3209808a70e2SKurt Zenker { 3210808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3211808a70e2SKurt Zenker 3212808a70e2SKurt Zenker if( maListeners.getLength() >= 0 ) 3213521c5602SMichael Stahl { 3214521c5602SMichael Stahl maListeners.forEach<XSlideShowListener>( 3215521c5602SMichael Stahl [&] (Reference<XAnimationListener> const& xListener) { 3216521c5602SMichael Stahl return xListener->repeat(xNode, nRepeat); 3217521c5602SMichael Stahl } ); 3218521c5602SMichael Stahl } 3219808a70e2SKurt Zenker } 3220808a70e2SKurt Zenker 3221a2795356SNoel Grandin // css::presentation::XSlideShowListener: 32220ce0c369SAlexander Wilms 3223e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::paused( ) 3224808a70e2SKurt Zenker { 3225808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3226808a70e2SKurt Zenker 3227148da261SMichael Stahl maListeners.forEach<XSlideShowListener>( 3228148da261SMichael Stahl [](uno::Reference<presentation::XSlideShowListener> const& xListener) 3229148da261SMichael Stahl { 3230148da261SMichael Stahl xListener->paused(); 3231148da261SMichael Stahl }); 3232808a70e2SKurt Zenker } 3233808a70e2SKurt Zenker 3234e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::resumed( ) 3235808a70e2SKurt Zenker { 3236808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3237808a70e2SKurt Zenker 3238148da261SMichael Stahl maListeners.forEach<XSlideShowListener>( 3239148da261SMichael Stahl [](uno::Reference<presentation::XSlideShowListener> const& xListener) 3240148da261SMichael Stahl { 3241148da261SMichael Stahl xListener->resumed(); 3242148da261SMichael Stahl }); 3243808a70e2SKurt Zenker } 3244808a70e2SKurt Zenker 3245e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::slideTransitionStarted( ) 3246808a70e2SKurt Zenker { 3247808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3248808a70e2SKurt Zenker 3249148da261SMichael Stahl maListeners.forEach<XSlideShowListener>( 3250148da261SMichael Stahl [](uno::Reference<presentation::XSlideShowListener> const& xListener) 3251148da261SMichael Stahl { 3252148da261SMichael Stahl xListener->slideTransitionStarted(); 3253148da261SMichael Stahl }); 3254808a70e2SKurt Zenker } 3255808a70e2SKurt Zenker 3256e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::slideTransitionEnded( ) 3257808a70e2SKurt Zenker { 3258808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3259808a70e2SKurt Zenker 3260148da261SMichael Stahl maListeners.forEach<XSlideShowListener>( 3261148da261SMichael Stahl [](uno::Reference<presentation::XSlideShowListener> const& xListener) 3262148da261SMichael Stahl { 3263148da261SMichael Stahl xListener->slideTransitionEnded (); 3264148da261SMichael Stahl }); 3265808a70e2SKurt Zenker } 3266808a70e2SKurt Zenker 3267e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::slideAnimationsEnded( ) 3268808a70e2SKurt Zenker { 3269808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3270808a70e2SKurt Zenker 3271148da261SMichael Stahl maListeners.forEach<XSlideShowListener>( 3272148da261SMichael Stahl [](uno::Reference<presentation::XSlideShowListener> const& xListener) 3273148da261SMichael Stahl { 3274148da261SMichael Stahl xListener->slideAnimationsEnded (); 3275148da261SMichael Stahl }); 3276808a70e2SKurt Zenker } 3277808a70e2SKurt Zenker 3278e57ca028SStephan Bergmann void SlideShowListenerProxy::slideEnded(sal_Bool bReverse) 3279808a70e2SKurt Zenker { 3280808a70e2SKurt Zenker { 3281808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3282808a70e2SKurt Zenker 3283808a70e2SKurt Zenker if( maListeners.getLength() >= 0 ) 3284521c5602SMichael Stahl { 328576c3d136SAndre Fischer maListeners.forEach<XSlideShowListener>( 3286521c5602SMichael Stahl [&] (Reference<XSlideShowListener> const& xListener) { 3287521c5602SMichael Stahl return xListener->slideEnded(bReverse); 3288521c5602SMichael Stahl } ); 3289521c5602SMichael Stahl } 3290808a70e2SKurt Zenker } 3291808a70e2SKurt Zenker 3292808a70e2SKurt Zenker { 3293f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 3294808a70e2SKurt Zenker if( mxController.is() ) 329576c3d136SAndre Fischer mxController->slideEnded(bReverse); 3296808a70e2SKurt Zenker } 3297808a70e2SKurt Zenker } 3298808a70e2SKurt Zenker 3299e57ca028SStephan Bergmann void SlideShowListenerProxy::hyperLinkClicked( OUString const& aHyperLink ) 3300808a70e2SKurt Zenker { 3301808a70e2SKurt Zenker { 3302808a70e2SKurt Zenker ::osl::MutexGuard aGuard( m_aMutex ); 3303808a70e2SKurt Zenker 3304808a70e2SKurt Zenker if( maListeners.getLength() >= 0 ) 3305521c5602SMichael Stahl { 3306521c5602SMichael Stahl maListeners.forEach<XSlideShowListener>( 3307521c5602SMichael Stahl [&] (Reference<XSlideShowListener> const& xListener) { 3308521c5602SMichael Stahl return xListener->hyperLinkClicked(aHyperLink); 3309521c5602SMichael Stahl } ); 3310521c5602SMichael Stahl } 3311808a70e2SKurt Zenker } 3312808a70e2SKurt Zenker 3313808a70e2SKurt Zenker { 3314f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 3315808a70e2SKurt Zenker if( mxController.is() ) 3316808a70e2SKurt Zenker mxController->hyperLinkClicked(aHyperLink); 3317808a70e2SKurt Zenker } 3318808a70e2SKurt Zenker } 3319808a70e2SKurt Zenker 3320808a70e2SKurt Zenker // XEventListener 33210ce0c369SAlexander Wilms 3322e57ca028SStephan Bergmann void SAL_CALL SlideShowListenerProxy::disposing( const css::lang::EventObject& aDisposeEvent ) 3323808a70e2SKurt Zenker { 3324808a70e2SKurt Zenker maListeners.disposeAndClear( aDisposeEvent ); 3325808a70e2SKurt Zenker mxController.clear(); 3326808a70e2SKurt Zenker mxSlideShow.clear(); 3327808a70e2SKurt Zenker } 3328808a70e2SKurt Zenker 3329808a70e2SKurt Zenker // XShapeEventListener 33300ce0c369SAlexander Wilms 333187661a7aSNoel Grandin void SAL_CALL SlideShowListenerProxy::click( const Reference< XShape >& xShape, const css::awt::MouseEvent& /*aOriginalEvent*/ ) 3332808a70e2SKurt Zenker { 3333f883da35SNorbert Thiebaud SolarMutexGuard aSolarGuard; 3334808a70e2SKurt Zenker if( mxController.is() ) 333587661a7aSNoel Grandin mxController->click(xShape ); 33362db95b18SKurt Zenker } 33372db95b18SKurt Zenker 33380fefcd83SRüdiger Timm } // namespace ::sd 333980b08615SSebastian Spaeth 334080b08615SSebastian Spaeth /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 3341
