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